Was sind die Unterschiede zwischen logischen Beziehungen und Simulationen?


29

Ich bin Anfänger und arbeite an Methoden zum Nachweis der Programmäquivalenz. Ich habe einige Artikel über das Definieren logischer Beziehungen oder Simulationen gelesen, um zu beweisen, dass zwei Programme gleichwertig sind. Aber ich bin ziemlich verwirrt über diese beiden Techniken.

Ich weiß nur, dass logische Beziehungen induktiv definiert werden, während Simulationen auf Coinduktion basieren. Warum sind sie so definiert? Was sind ihre Vor- und Nachteile? Welches sollte ich in verschiedenen Situationen wählen?


1
Möglicherweise möchten Sie Links zu diesen Artikeln bereitstellen, die Sie gelesen haben. Dies würde klarer machen, welche konkreten Beispiele Sie verwirren.
Marc Hamann

1
Für logische Beziehungen habe ich Hur und Dreyers kürzlich erschienene Arbeit "Eine logische Kripke-Beziehung zwischen ML und Baugruppe" (POPL'11) gelesen. Ich habe auch die klassischen Kapitel in Pierces Buch "Advanced Topics in Types and Programming Languages" gelesen. Ich finde, logische Beziehungen werden induktiv über die Typstruktur der Sprache definiert, aber was ist, wenn die Sprache keine Typstruktur hat (wie z. B. C)? (Es scheint eine andere Frage, denke ich.)
Hongjin Liang

1
Für Simulationen habe ich die Originalarbeit "Algebraische Gesetze für Nichtdeterminismus und Nebenläufigkeit" von Hennessy und Milner gelesen. Koutavas und Wands "Kleine Bisimulationen zum Nachdenken über Imperativprogramme höherer Ordnung" (POPL'06) sind für mich unverständlich und ich bin mir nicht sicher, warum sie ihre Methode "Bisimulation" nannten.
Hongjin Liang

3
Es wäre besser, wenn Sie die Informationen, die Sie in den Kommentaren angegeben haben, in den Beitrag aufnehmen. Sie können Ihre Frage bearbeiten, indem Sie auf den Link Bearbeiten unter der Frage klicken.
Kaveh

1
@HongjinLiang: Wenn Sie keine Typstruktur haben (oder wenn Sie rekursive Typen haben), können Sie schrittweise indizierte logische Beziehungen verwenden - bei logischen Beziehungen verwenden Sie Induktion für Typen, bei schrittweiser Indizierung führen Sie Induktion für Beobachtungsschritte durch. Hinweise finden Sie in Amal Ahmeds Forschungsbericht: ccs.neu.edu/home/amal/ahmed-research.pdf . (Ein weiterer Überblick über die Forschung zu logischen Beziehungen ist der Vortrag von Derek Dreyer und sein Forschungsstatement: mpi-sws.org/~dreyer/research.pdf ).
Blaisorblade

Antworten:


20

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örenMMMMX 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 sindXRF(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 .


Ich habe mich gefragt, ob es wahr ist zu sagen, dass die oben erwähnte Beziehung die sogenannte Beziehungsliftung von R ist, wenn F gegeben istF(R)Rfunctor F , die die Maschine beschreibt.
Dave Clarke

@ DaveClarke Ja, es ist die gleiche Idee. Im Reynolds-Definitionsstil ist jeder Typkonstruktor mit einer Beziehungsaktion ausgestattet , die jeder Beziehung R : X X ' eine entsprechende Beziehung F ( R ) : F ( X ) F ( X ' ) zuordnet, die einige erfüllt Axiome. In einigen anderen Gemeinschaften möchten sie F ( R ) von anderen Prinzipien ableiten , von denen sie sie Beziehungsliftings nennen . Das F (FR:XXF(R):F(X)F(X)F(R) Sie erzeugen durch diesen Vorgang eine Beziehungshandlung im Reynolds-Sinne. F(R)
Uday Reddy

14

Einer der Hauptunterschiede besteht darin, dass logische Beziehungen als eine Technik verwendet werden, um zu zeigen, dass eine Klasse von Programmen (z. B. die Eingabe in einen Compiler) einer anderen Klasse von Programmen (z. B. die Ausgabe des Compilers) entspricht, während Simulationsbeziehungen verwendet werden um die Entsprechung zwischen zwei Programmen anzuzeigen.

Die Ähnlichkeit zwischen den beiden Begriffen besteht darin, dass beide eine Beziehung definieren, die zur Darstellung der Korrespondenz zwischen zwei verschiedenen Entitäten verwendet wird. In gewissem Sinne kann man sich eine logische Relation als eine Simulationsrelation vorstellen, die induktiv über die Syntax von Typen definiert wird. Es gibt jedoch verschiedene Arten von Simulationsbeziehungen.

Logische Beziehungen können verwendet werden, um die Entsprechung zwischen einer Sprache wie ML und ihrer Übersetzung in Assemblersprache wie in dem von Ihnen gelesenen Artikel darzustellen. Eine logische Beziehung wird induktiv auf der Typstruktur definiert. Eine logische Beziehung bietet eine kompositorische Möglichkeit, um beispielsweise anzuzeigen, dass eine Übersetzung korrekt ist, indem gezeigt wird, dass die Übersetzung für jeden Typkonstruktor korrekt ist. Bei Funktionstypen würde die Korrektheitsbedingung so etwas wie bedeuten, dass die Übersetzung dieser Funktion eine gut übersetzte Eingabe in eine gut übersetzte Ausgabe umwandelt.

Logische Beziehungen sind eine vielseitige Technik für Sprachen, die auf dem Lambda-Kalkül basieren. Weitere Anwendungen logischer Beziehungen sind (von hier aus ): Charakterisieren der Lambda-Definierbarkeit, Beziehen denotationaler semantischer Definitionen, Charakterisieren des parametrischen Polymorphismus, Modellieren der abstrakten Interpretation, Überprüfen der Datendarstellung, Definieren der vollständig abstrakten Semantik und Modellieren des lokalen Zustands in Sprachen höherer Ordnung.

Simulationsbeziehungen werden im Allgemeinen verwendet, um die Gleichwertigkeit von zwei Programmen zu zeigen. Typischerweise erzeugen solche Programme eine Art Beobachtung, beispielsweise das Senden von Nachrichten auf Kanälen. Ein Programm P simuliert ein anderes Q, wenn P alles kann, was Q kann, wenn auch vielleicht mehr.

Grob gesagt, besteht Bisimulation aus zwei Simulationsbeziehungen. Sie zeigen, dass Programm P und Programm Q simulieren und dass Programm Q Programm P simulieren kann und Sie eine Bisimulation haben, obwohl im Allgemeinen zusätzliche Bedingungen vorliegen. Der Wikipedia-Eintrag zur Bisimulation ist ein guter (genauerer) Ausgangspunkt. Es gibt Tausende Varianten der Idee, aber es handelt sich um eine Grundidee, die in etwa der gleichen Form wie die Informatik, die Modallogik und die Modelltheorie neu erfunden wurde. Sangiorgis Artikel gibt eine wunderbare Geschichte der Idee.

Ein Beitrag, der eine Beziehung zwischen den beiden Begriffen herstellt, ist ein Hinweis zu logischen Beziehungen zwischen Semantik und Syntax von Andy Pitts, der logische Beziehungen verwendet, letztendlich einen syntaktisch definierten semantischen Begriff, um eine bestimmte Eigenschaft über die anwendbare Bisimulation zu beweisen , die ein rein syntaktischer Begriff ist.


Vielen Dank für Ihre ausführliche Erklärung! Ich werde Ihre Referenzen lesen und versuchen, tiefe Zusammenhänge / Unterschiede zwischen den beiden herauszufinden.
Hongjin Liang

Sind Sie sicher über die Aussage "Sie zeigen, dass Programm P und Programm Q simulieren und dass Programm Q Programm P simulieren kann und Sie eine Bisimulation haben."? Sei A = (a. (B + c)) + (a.b + ac) und B = a.b + ac, wenn nach meinem Dafürhalten A B ähnlich ist, B A ähnlich ist, aber A und B sind nicht bisimilar.
András Salamon

@ András: Du hast recht. Meine Aussage ist nicht präzise genug. Der Unterschied wird durch den Satz "Einige zusätzliche Bedingungen können vorliegen" abstrahiert.
Dave Clarke

Hennessy und Milner haben in ihrer ursprünglichen Arbeit drei Arten von Äquivalenzbeziehungen für die Bisimulation definiert und einige Beispiele angegeben, um ihre Unterschiede zu veranschaulichen. Ihre ursprüngliche Aussage ist tatsächlich die mittlere in ihrer Arbeit, die schwächer als Bisimulation und stärker als Spurenäquivalenz ist. Ich bin nicht sicher, welche Äquivalenz besser ist. Vielleicht hängt es von der praktischen Anwendung ab.
Hongjin Liang

Die Simulation wird auch als Beweismethode verwendet, um die Datenverfeinerung zwischen zwei Datentypen herzustellen. Jeder einzelne dieser Simulationsnachweise bezieht sich auf ganze Klassen von Programmen. Siehe zB [1] für Details. Dies legt nahe, dass die Unterscheidung zwischen den beiden Konzepten noch unschärfer ist. [1]: CAR Hoare, He J und JW Sanders. Vorgabe bei der Datenveredelung. Information Processing Letters , 25: 71-76, 1987.
Kai

8

Die beiden Arten von Beziehungen scheinen in unterschiedlichen Kontexten verwendet zu werden. Logische Simulationen für typisierte Sprachen und Simulationsbeziehungen im Umgang mit Prozesskalkülen oder modalen Logiken, die über Übergangssysteme interpretiert werden. Dave Clarke hat viele intuitive Erklärungen geliefert, daher möchte ich nur ein paar Hinweise hinzufügen, die hilfreich sein können.

Es wurde daran gearbeitet, beide Begriffe durch abstrakte Interpretation zu charakterisieren. Es ist vielleicht nicht das, was Sie wollen, aber zumindest werden beide Begriffe im selben mathematischen Rahmen behandelt.

Samson Abramsky verwendete logische Beziehungen, um die Zuverlässigkeit und die Beendigung der Strenge für die Lazy Lambda-Rechnung ( Abstrakte Interpretation, Logische Beziehungen und Kan-Erweiterungen ) zu beweisen . Er zeigte auch, dass die logischen Beziehungen Abstraktionsfunktionen im Sinne einer abstrakten Interpretation definieren. In jüngerer Zeit haben Backhouse und Backhouse gezeigt, wie Galois-Verbindungen für Typen höherer Ordnung aus Galois-Verbindungen für Basistypen konstruiert werden und dass diese Konstruktionen unter Verwendung logischer Beziehungen äquivalent beschrieben werden können ( Logical Relations und Galois Connections ) . Im spezifischen Kontext typisierter funktionaler Sprachen sind die beiden Begriffe also gleichwertig.

Simulationsbeziehungen charakterisieren die Eigenschaftserhaltung zwischen Kripke-Strukturen für verschiedene modale und zeitliche Logiken. Anstelle von Typen haben wir Modalitäten in einer Logik. Simulationsbeziehungen definieren auch Galois-Verbindungen und damit Abstraktionen. Man kann sich fragen, ob diese Abstraktionen besondere Eigenschaften haben. Die Antwort ist, dass Standardabstraktionen fundiert und auf Simulationsbeziehungen basierende Abstraktionen vollständig sind. Der Begriff der Vollständigkeit bezieht sich auf Galois-Verbindungen, die möglicherweise nicht mit der intuitiven Interpretation übereinstimmen. Diese Arbeit wurde von David Schmidt ( Strukturerhaltende binäre Beziehungen für die Programmabstraktion ) sowie Francesco Ranzato und Francesco Tapparo ( Verallgemeinerte starke Bewahrung durch abstrakte Interpretation ) entwickelt.


Ihre Antwort ist sehr hilfreich, um die Begriffe mit abstrakter Interpretation zu verbinden. Vielen Dank!
Hongjin Liang

Eine aufrichtige Frage: Ich bin kein Experte, aber definiert Reynolds (1983, "Typen, Abstraktion und parametrischer Polymorphismus") bereits logische Beziehungen, die Galois-Verbindungen sind (Abschnitt 6)? Die einzigen Unterschiede, die ich bemerke: Er sagt nicht den Begriff "Galois-Verbindung", sondern nur das Äquivalent "Adjoint-Funktoren zwischen Teilbestellungen, die als Kategorien betrachtet werden" und beschränkt sich auf Domänen. OTOH, Backhouse und Backhouse zitieren Reynolds, diskutieren diese Behauptung jedoch nicht auf die eine oder andere Weise.
Blaisorblade

6

Ich würde sagen, dass die beiden Konzepte etwas vage sind. In beiden geht es um binäre Beziehungen von Rechenmechanismen, die irgendwie einen Begriff von Gleichheit verkörpern. Logische Beziehungen werden durch Induktion der Typstruktur definiert, während Simulationen definiert werden können, wie Sie möchten, aber der Begriff spielt auf die Koinduktion an.

π


Ihre Referenz ist wirklich nett! Ich habe noch nie logische Beziehungen für gleichzeitige Programme gehört. Vielen Dank! Ich denke, die Schwierigkeit, eine logische Beziehung zu definieren, besteht darin, die Typstruktur zu finden. Mit der gleichen Typstruktur kann eine logische Beziehung zwischen verschiedenen Programmiersprachen definiert werden. Andererseits erfordert eine Simulation die Modellierung von Programmen durch ein Zustandsübergangssystem, was möglicherweise schwierig ist, wenn die Programme für verschiedene Zustandsmodelle geschrieben werden.
Hongjin Liang

Hallo! Ja, die Suche nach einer geeigneten Typstruktur ist möglicherweise nicht immer einfach. Sie können Simulationen mit verschiedenen Übergangssystemen für die beiden zu vergleichenden Kalküle definieren. Man könnte argumentieren, dass die Definition der schwachen Simulation genau das tut. Alles, was Sie wirklich brauchen, um Simulationen zu definieren, ist eine Relation zum Vergleichen von Übergangsbezeichnungen.
Martin Berger
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.