In einer früheren Antwort auf der Website Theoretical Computer Science (Theoretische Informatik) habe ich gesagt, dass die Kategorietheorie die "Grundlage" für die Typentheorie ist. Hier möchte ich etwas Stärkeres sagen. Kategorietheorie ist Typentheorie . Umgekehrt ist Typentheorie Kategorietheorie . Lassen Sie mich auf diese Punkte eingehen.
Kategorietheorie ist Typentheorie
f: A → BABf
ABf
Die Typentheorie ist die Kategorietheorie
Mit "Typentheorie" meine ich jede Art von typisierter formaler Sprache, die auf starren Regeln der Termbildung basiert, die sicherstellen, dass alle Typen überprüft werden. Es stellt sich heraus, dass wir, wenn wir in einer solchen Sprache arbeiten, in einer kategorietheoretischen Struktur arbeiten. Selbst wenn wir Mengen-theoretische Notationen verwenden und Mengen-theoretisch denken, schreiben wir doch Dinge, die kategorisch Sinn machen. Das ist eine erstaunliche Tatsache .
In der Vergangenheit war Dana Scott möglicherweise die erste, die dies erkannte. Er arbeitete an der Erstellung semantischer Modelle von Programmiersprachen, die auf typisierter (und nicht typisierter) Lambda-Rechnung basierten. Die traditionellen satztheoretischen Modelle waren für diesen Zweck unzureichend, da Programmiersprachen eine uneingeschränkte Rekursion beinhalten, die theoretische Mängel beseitigt. Scott erfand eine Reihe semantischer Modelle, die Programmierphänomene erfassten, und stellte fest, dass die typisierte Lambda-Rechnung genau eine Klasse von Kategorien darstellte, die als kartesische geschlossene Kategorien bezeichnet wurde . Es gibt viele geschlossene kartesische Kategorien, die nicht "satztheoretisch" sind. Die typisierte Lambda-Rechnung gilt jedoch für alle gleichermaßen. Scott schrieb einen schönen Aufsatz mit dem Titel " Relating Theories of Lambda Calculus""Erklären, was los ist, von denen Teile im Internet verfügbar zu sein scheinen. Der ursprüngliche Artikel wurde in einem Band mit dem Titel" To HB Curry: Essays on Combinatory Logic, Lambda Calculus und Formalism ", Academic Press, 1980, veröffentlicht. Berry and Curien gelangte wahrscheinlich unabhängig zu derselben Erkenntnis: Sie definierten eine Categorical Abstract Machine (CAM), um diese Ideen bei der Implementierung von funktionalen Sprachen zu verwenden, und die Sprache, die sie implementierten, hieß "CAML", das zugrunde liegende Framework von Microsofts F # .
×→Listgenau, um das Konzept der polymorphen Funktionen zu formalisieren. Sie nannten sie "natürliche Transformationen", "natürlich", weil sie die einzigen sind, die Sie mit Typvariablen typrichtig schreiben können. Man könnte also sagen, dass die Kategorietheorie genau erfunden wurde, um polymorphe Programmiersprachen zu formalisieren, noch bevor Programmiersprachen entstanden sind!
Ein mengentheoretischer Traditionalist kennt die Funktionen und natürlichen Transformationen, die unter der Oberfläche ablaufen, wenn er mengentheoretische Notationen verwendet, nicht. Aber solange er das Typensystem treu benutzt, macht er wirklich kategoriale Konstruktionen, ohne sich dessen bewusst zu sein.
Die Kategorietheorie ist die fundamentale mathematische Theorie von Typen und Funktionen. Somit können alle Programmierer, insbesondere funktionale Programmierer, von etwas Kategorietheorie profitieren. Leider scheint es keine Lehrbücher zur Kategorietheorie zu geben, die sich speziell an Programmierer richten. Die Bücher "Kategorietheorie für Informatik" richten sich in der Regel an theoretische Informatikstudenten / -forscher. Das Buch von Benjamin Pierce, Grundlagen der Kategorietheorie für Informatiker, ist vielleicht das am besten lesbare.
Es gibt jedoch viele Ressourcen im Web, die sich an Programmierer richten. Die Haskellwiki-Seite kann ein guter Ausgangspunkt sein. An der Midlands Graduate School halten wir (unter anderem) Vorlesungen über Kategorietheorie. Graham Huttons Kurs war als "Anfängerkurs" und meiner als "Fortgeschrittenenkurs" festgelegt. Beide behandeln jedoch im Wesentlichen den gleichen Inhalt und gehen in unterschiedliche Tiefen. Die University of Chalmers hat eine schöne Ressourcenseite mit Büchern und Vorlesungsskripten aus der ganzen Welt. Die begeisterte Blog-Seite von "sigfpe" bietet auch aus Sicht eines Programmierers eine Menge guter Intuitionen.
Die grundlegenden Themen, die Sie lernen möchten, sind:
- Definition von Kategorien und einige Beispiele für Kategorien
- Funktoren und Beispiele von ihnen
- natürliche Transformationen und Beispiele dafür
- Definitionen von Produkten, Nebenprodukten und Exponenten (Funktionsräumen), Anfangs- und Endobjekten.
- Zusätze
- Monaden, Algebren und Kleisli Kategorien
Meine eigenen Vorlesungsunterlagen in der Midlands Graduate School behandeln alle diese Themen mit Ausnahme der letzten (Monaden). Es gibt heutzutage viele andere Ressourcen für Monaden. Das ist also kein großer Verlust.
Je mehr Mathematik Sie kennen, desto einfacher ist es, Kategorietheorie zu lernen. Da es sich bei der Kategorietheorie um eine allgemeine Theorie mathematischer Strukturen handelt, ist es hilfreich, einige Beispiele zu kennen, um zu verstehen, was die Definitionen bedeuten. (Als ich Kategorietheorie lernte, musste ich meine eigenen Beispiele mit meinen Kenntnissen der Programmiersprachensemantik erfinden, da die Standardlehrbücher nur mathematische Beispiele enthielten, von denen ich nichts wusste.) Dann kam das brillante Buch von Lambek und Scott nannte " Einführung in die kategoriale Logik"Welche Kategorietheorie zu Typensystemen in Beziehung gesetzt wurde (was sie" Logik "nennen). Es ist jetzt möglich, Kategorietheorie zu verstehen, indem man sie nur zu Typensystemen in Beziehung setzt, auch ohne viele Beispiele zu kennen. Viele der oben erwähnten Ressourcen verwenden dies Ansatz zur Erklärung der Kategorietheorie.