[Anmerkung: Diese Absätze sind jetzt veraltet.] Der Titel Ihrer Frage enthält eine ungerechtfertigte Annahme, nämlich dass Programmiersprachen "auf Grundlagen der Mathematik basieren". Dies ist im Allgemeinen nicht der Fall, obwohl die beiden Bereiche wichtige Beziehungen haben. Eine genauere Aussage wäre, dass (einige) Programmiersprachen mit grundlegenden Techniken entworfen wurden. Eine bessere Frage wäre : Wie hängen Programmiersprachen und Grundlagen der Mathematik zusammen?
Die allgemeinste Verbindung ist in dem Slogan Proofs-as-Programme enthalten , der auf verschiedene Arten zum Funktionieren gebracht werden kann. Die Curry-Howard-Korrespondenz ist die offensichtlichste. Damit verbinden wir gleichzeitig Typentheorie, Logik und Programmierung. Es sollte jedoch betont werden, dass die Curry-Howard-Korrespondenz bei allgemeiner Rekursion (da jeder Typ bewohnt wird), die von jeder allgemeinen Programmiersprache unterstützt wird, nicht sehr gut funktioniert.
Eine subtilere Möglichkeit, den Slogan Proofs-as-Programs zum Laufen zu bringen, ist die Realisierbarkeit . Auch hier beziehen wir Beweise und Programme, aber jetzt geht die Richtung von Beweisen zu Programmen: Jeder Beweis gibt ein Programm, aber nicht jedes Programm ist notwendigerweise ein Beweis.
Das wichtigste Beispiel einer Programmiersprache auf einem Fundament basiert Agda , die einfach ist eine Implementierung von abhängiger Typ Theorie. Agda ist jedoch keine Allzweck-Programmiersprache, da sie keine allgemeine Rekursion unterstützt. Jede Funktion in Agda ist total, und es gibt berechenbare Funktionen, die in Agda nicht implementiert werden können. In der Praxis werden Programmierer dies nicht bemerken, aber sie werden bemerken, dass Agda keine undefinierten Werte zulässt, zum Beispiel Endlosschleifen.
Coq ist keine Programmiersprache, sondern ein Proof-Assistent. Es verfügt jedoch auch über Extraktionsfunktionen, mit denen Programme aus Proofs erstellt werden können. Proof-Assistenten und Programmiersprachen sollten nicht miteinander verwechselt werden.
Wir sollten diesen Prolog und andere nicht vergessen logische Programmiersprachen von der Idee inspirieren lassen, dass Rechnen eine Beweissuche ist . Damit sind sie natürlich eng mit der Logik verbunden.
Haskell ist eine universelle Programmiersprache, die auf der Domänentheorie basiert . Das heißt, ihre Semantik ist domänentheoretisch, weil sie Teilfunktionen und Rekursionen berücksichtigen muss. Die Haskell-Community hat eine Reihe von Techniken entwickelt, die von der Kategorietheorie inspiriert sind, darunter auch Monaden sind. sind am bekanntesten, sollten aber nicht mit Monaden verwechselt werden . Im Allgemeinen werden fortgeschrittene Programmierfunktionen in der Regel mit einer Kombination aus Domänentheorie und Kategorietheorie behandelt, aber das ist etwas, mit dem der Haskell-Programmierer auf der Straße nicht vertraut ist. Die sogenannte "syntaktische Kategorie" von Haskell-Typen ist eine Sichtweise eines Laien, wie Haskell und Kategorietheorie einander entsprechen.
Mengenlehre (klassisch oder konstruktiv) scheint in geringerem Maße Ideen in der Programmiersprache anzuregen. Natürlich hat die konstruktive Mengenlehre ihre Verbindung zur Programmierung durch konstruktive Logik. Eine wichtige Anwendung der intuitionistischen Mengenlehre auf Programmiersprachen gab Alex Simpson, der sie verwendete, um die Theorie der synthetischen Domänen funktionieren zu lassen. Aber das ist ziemlich fortgeschrittenes Zeug, vielleicht sehen Sie diese Folien . Jean-Louis Krivine hat eine sehr interessante Marke der Realisierbarkeit für die klassische Mengenlehre entwickelt. Dies scheint ein guter Weg zu sein, um klassische Mengenlehre und Programmierung in Beziehung zu setzen.
Zusammenfassend verwendet die Theorie der Programmiersprachen grundlegende Techniken. Dies ist nicht überraschend, da wir die Berechnung als ein grundlegendes Konzept betrachten. Es ist jedoch zu naiv zu sagen, dass Programmiersprachen auf einer bestimmten Grundlage "basieren". Tatsächlich ist die Trichotomie der Grundlagen "Mengenlehre - Typentheorie - Kategorietheorie" wieder nur eine nützliche Beobachtung auf hoher Ebene, die auf verschiedene Arten mathematisch präzise gemacht werden kann, aber es gibt nichts Notwendiges daran. Es ist ein historischer Unfall.