Nachdem ich Haskell und andere nicht so reine FP-Sprachen gelernt hatte, entschloss ich mich, über Kategorietheorie zu lesen. Nachdem ich ein gutes Verständnis der Kategorietheorie erlangt hatte, begann ich darüber nachzudenken, wie die Konzepte der Kategorietheorie zum Entwerfen von Programmen verwendet werden können, aber egal, wie sehr ich es versucht habe, scheint dies nicht der richtige Weg zu sein.
Nachdem ich viele erfolglose Versuche unternommen hatte, Kategorietheorie mit dem Entwerfen von Programmen in Verbindung zu bringen, kam ich zu dem Schluss, dass:
- Die Kategorietheorie ist hilfreich beim Entwerfen einer Programmiersprache .
- Die Kategorietheorie verwenden Sie nicht, wenn Entwerfen von Programmen nicht verwendet (selbst wenn eine Sprache verwendet wird, die auf Kategorienprinzipien basiert). Zum Beispiel: Wenn Sie in Haskell programmieren, verwenden Sie Typen, Typenkonstruktoren, Funktionen, Funktionen höherer Ordnung usw., um Ihr Programm zu entwerfen, nicht kategorietheoretische Konzepte.
Zusammenfassend haben wir unter Schichtsystem (Reihenfolge ist niedrig zu hoch):
Kategorietheorie -> Programmiersprache -> Programm
Auf einer bestimmten Ebene verwenden Sie die Konzepte der unmittelbar darunter liegenden Ebene .
Ist dieses Verständnis richtig? Wenn nicht und du glaubst das in wir Entwerfen von Programmen Konzepte der Kategorietheorie direkt verwenden können, verweisen Sie auf einige Artikel oder Blog-Beiträge, in denen dies demonstriert wird.
HINWEIS: Mit dem Entwerfen von Programmen ist das Entwerfen von Programmen gemeint, die auf verschiedenen Konzepten basieren, wie Parallelität, Parallelität, Reaktivität, Nachrichtenübermittlung usw.
Antworten:
Nun, das hängt natürlich davon ab, welche Art von Programm Sie entwerfen möchten.
Wenn Sie ein Buchhaltungsprogramm für den Schokoladenladen Ihrer Tante entwerfen, kann ich kaum bezweifeln, dass die Kategorietheorie von großem Nutzen sein wird.
Aber es gibt natürlich Situationen, in denen die Kategorietheorie beim Entwerfen von Programmen enorm nützlich ist (womit ich auch Datenstrukturen, Bibliotheken usw. meine). Solche Situationen treten meistens auf, wenn die beteiligten Programme mathematischer Natur sind.
Wenn Sie Programme schreiben möchten, die mit exakten reellen Zahlen und anderen in der mathematischen Analyse vorkommenden Strukturen rechnen, müssen Sie zunächst die Frage beantworten, was es bedeutet, ein kompliziertes mathematisches Objekt (wie eine differenzierbare Funktion, eine Mannigfaltigkeit usw.) korrekt zu implementieren. ). Hier hilft es sehr, Kategorietheorie und -logik zu kennen, da sie Ihnen eine systematische Möglichkeit bieten, Definitionen mathematischer Strukturen in Spezifikationen und Implementierungen entsprechender Datenstrukturen zu übersetzen. Das Schlagwort, nach dem Sie suchen sollten, ist Realisierbarkeitstheorie . Dies ist jedoch nur ein Beispiel.
Der beste Weg, um herauszufinden, wie nützlich Kategorietheorie ist, besteht darin, sich Programme anzusehen, die von Leuten geschrieben wurden, die sich mit Kategorietheorie (und Mathematik im Allgemeinen) auskennen. Ein offensichtliches Beispiel dafür ist Martín Escardó und seine unmöglichen Funktionen, zum Beispiel:
Sie können sich beschweren, dass dies nicht nur Kategorietheorie, sondern auch Logik und Topologie ist. Solche Beschwerden wären stark irreführend. Die beste Kategorietheorie wird immer mit anderen Dingen vermischt.
Abschließend rate ich davon ab, auf der Grundlage einer selbst zugewiesenen Lektüre großartige Schlussfolgerungen über die Natur der Dinge zu ziehen.
quelle
Früher benutzten die Leute CT, um Datentypen zu beschreiben.
Ich bin mir nicht ganz sicher, ob irgendjemand mehr darauf achtet. Ich würde denken, dass dies und die Links dort es detaillierter erklären würden.
quelle