Ich habe eine Antwort auf diese Frage, die möglicherweise neu ist. Tatsächlich denke ich die letzten 6 Monate immer noch darüber nach und es wurde noch nicht in Zeitungen darüber geschrieben.
Die allgemeine These lautet, dass Prinzipien des relationalen Denkens wie "logische Beziehungen", "Simulationen" und sogar "Invarianten" Manifestationen der Datenabstraktion oder des Versteckens von Informationen sind. Wo sich Informationen verstecken, tauchen diese Prinzipien auf.
Die ersten, die es entdeckten, waren Automatentheoretiker. Automaten haben versteckten Zustand. Sie benötigen relationale Überlegungen, um über deren Gleichwertigkeit zu sprechen. Automaten-Theoretiker kämpften eine Weile mit Homomorphismen, gaben auf und kamen auf den Begriff "relationale Abdeckung", eine Form von Simulationsbeziehungen.
Milner nahm die Idee in einem wenig bekannten, aber sehr grundlegenden Papier „genannt Ein algebraischer Begriff der Simulation zwischen den Programmen “ im Jahr 1971 Hoare es kannte und benutzte es mit „in der kommenden up Nachweis der Korrektheit von Datendarstellungen “ im Jahr 1972 (aber verwendet Abstraktionsfunktionen statt Beziehungen, weil er sie für "einfacher" hielt). Später widerrief er die Behauptung der Einfachheit und verwendete wieder Relationen in " Verfeinerung der Daten ". Reynolds verwendete relationale Argumentation in " Craft of Programming"", Kapitel 5 (1981). Er dachte, Beziehungen seien natürlicher und allgemeiner als Abstraktionsfunktionen. Wenn Sie zurückgehen und dieses Kapitel lesen, finden Sie relationale Parametrizitätsideen, die darauf warten, entdeckt zu werden. Sicher, zwei Jahre später. Reynolds veröffentlichte "Types, Abstraction and parametric polymorphism" (1983).
Es sieht so aus, als hätten all diese Ideen nichts mit Typen zu tun, aber sie tun es wirklich. Zustandsbehaftete Sprachen und Modelle verfügen über eine integrierte Datenabstraktion. Sie müssen keinen "abstrakten Datentyp" definieren, um Informationen auszublenden. Sie deklarieren einfach eine lokale Variable und verbergen sie. Wir können es in den ersten Wochen den Erstsemestern in Java-Klassen beibringen. Kein Schweiß.
Funktionale Sprachen und Modelle hingegen müssen ihre Informationen über Typen verbergen . In Funktionsmodellen ist keine Datenabstraktion integriert. Wir müssen es explizit hinzufügen , auf, mit oder ∃ . Wenn Sie also eine zustandsbehaftete Sprache in eine funktionale Sprache übersetzen, werden Sie feststellen, dass der gesamte lokale Zustand in Typvariablen übersetzt wird. Für eine explizite Beschreibung, wie dies funktioniert, siehe meine Arbeit " Objekte und Klassen in Algol-ähnlichen Sprachen ", aber die Ideen stammen wirklich von Reynolds 1981 ("Die Essenz von Algol"). Wir verstehen diese klassischen Ideen jetzt besser.∀∃
Nehmen Sie zwei Maschinen und M ' , die Sie als gleichwertig beweisen möchten. Milner 1971 sagt, definieren Sie eine Beziehung zwischen den Zuständen von M und M ' und zeigen Sie, dass die beiden Maschinen die Beziehung beibehalten. Reynolds 'Parametrizität besagt, dass die Zustände der Maschinen zu den Typen X gehörenMM′MM′X und . Definieren Sie eine Beziehung R zwischen ihnen. Wenn die Maschinen vom Typ F ( X ) und F ( X ′ ) sind , parametrisiert durch die Typen ihrer Zustände, dann prüfen Sie, ob die beiden Maschinen durch die Beziehung F verbunden sindX′RF(X)F(X′) . F(R)
Also, Simulationen und relationale Parametrizität sind im Wesentlichen die gleiche Idee . Es ist nicht nur eine oberflächliche Ähnlichkeit. Ersteres ist für zustandsbehaftete Sprachen gedacht, in denen eine integrierte Datenabstraktion vorhanden ist. Letzteres gilt für zustandslose Sprachen, bei denen die Datenabstraktion über Typvariablen erfolgt.
Was ist dann mit logischen Beziehungen? An der Oberfläche scheinen logische Beziehungen eine allgemeinere Idee zu sein. Während in der Parametrizität die Beziehung zwischen Typvariablen innerhalb desselben Modells beschrieben wird, scheinen logische Beziehungen Typen über verschiedene Modelle hinweg zu verknüpfen. (Dave Clarke hat eine brillante Darstellung davon geschrieben.) Aber ich habe das Gefühl (und es muss noch gezeigt werden), dass dies ein Beispiel für eine Form höherer Parametrizität ist, die noch nicht formuliert wurde. Seien Sie gespannt auf weitere Fortschritte in diesem Bereich.
[Anmerkung hinzugefügt] Der Zusammenhang zwischen logischen Beziehungen und Simulationen wird in unserem kürzlich erschienenen Artikel Logische Beziehungen und Parametrik: Ein Reynolds-Programm für Kategorietheorie und Programmiersprachen erörtert .