Für einen Korrektheitsnachweis suche ich nach einem brauchbaren Begriff der Programmäquivalenz für Barendregts reine Typsysteme (PTS); Fehlt das, für genügend spezifische Typsysteme. Mein Ziel ist es einfach, den Begriff zu verwenden und ihn nicht um seiner selbst willen zu untersuchen.
Dieser Begriff sollte " extensional " sein - insbesondere um zu beweisen, dass , sollte es ausreichen, um zu beweisen, dass t 1 ist für alle Werte v des entsprechenden Typs.
Denotationsäquivalenz
Die Denotationsäquivalenz erfüllt leicht alle richtigen Deckspelzen, aber eine Denotationssemantik für willkürliches PTS scheint ziemlich herausfordernd zu sein - es würde für System F bereits schwierig erscheinen.
Kontext- / Beobachtungsäquivalenz
Die offensichtliche Alternative sind dann verschiedene Formen der kontextuellen Äquivalenz (zwei Begriffe sind äquivalent, wenn kein Grundkontext sie unterscheiden kann), aber ihre Definition ist nicht sofort verwendbar; Die verschiedenen Deckspelzen sind nicht trivial zu beweisen. Wurden sie für PTS nachgewiesen? Wäre die Theorie alternativ eine "offensichtliche Erweiterung", oder gibt es Grund zu der Annahme, dass die Theorie signifikant anders wäre?
EDIT: Ich habe nicht gesagt, was oben schwer ist.
Einfacher Teil: die Definition
Die Definition der Äquivalenz ist nicht allzu schwierig, und die Definition erscheint in vielen Veröffentlichungen (zumindest ausgehend von Plotkin 1975 über PCF, wenn nicht früher - die Quelle könnte Morris 'Doktorarbeit von 1968 sein). Uns , wenn für alle Böden Kontexte C , C [ t 1 ] ≃ C [ t 2 ] - das heißt, C [ t 1 ] und C [ t 2 ] gibt das gleiche Ergebnis. Sie haben hier einige Möglichkeiten mit vielen Alternativen: Wenn Sie beispielsweise in einer stark normalisierenden Sprache einen Grundtyp von Naturmenschen haben, können Sie sagen, dass Grundkontexte diejenigen sind, die Naturtöne zurückgeben, und dann bedeutet , dass a und b auf die gleiche Zahl auswerten. Bei Nichtterminierung reicht es für vernünftige Sprachen aus, "X-Terminierungen" als Beobachtung zu verwenden, denn wenn zwei Programme bei der Beobachtung der Terminierung gleichwertig sind, sind sie auch bei der Beobachtung des Ergebnisses gleichwertig.
Schwieriger Teil: die Beweise
Diese Artikel erklären jedoch oft nicht, wie schwierig es ist, diese Definition tatsächlich zu verwenden. Alle folgenden Referenzen zeigen, wie man mit diesem Problem umgeht, aber die benötigte Theorie ist schwieriger als man denkt. Wie beweisen wir, dass ? Führen wir tatsächlich Fallanalysen und Einführungen in Kontexte durch? Das willst du nicht.
Wie Martin Berger betont, möchten Sie stattdessen entweder eine Bisimulation (wie von Pitts durchgeführt) oder eine logische Äquivalenzbeziehung (die Harper einfach "logische Äquivalenz" nennt) verwenden.
Wie beweisen Sie schließlich die oben definierte Extensionalität?
Harper löst diese Fragen auf 10 Seiten für System T durch beträchtliche Klugheit und logische Beziehungen. Pitts braucht mehr. Einige Sprachen sind noch komplexer.
Wie man damit umgeht
Ich bin tatsächlich versucht, meine Beweise von einer vermuteten Äquivalenztheorie für PTS abhängig zu machen, aber die tatsächlichen Theorien erfordern nicht triviale Argumente, daher bin ich mir nicht sicher, wie wahrscheinlich eine solche Vermutung sein würde.
Mir sind (wenn auch nicht im Detail) folgende Arbeiten bekannt:
- Andrew Pitts (zum Beispiel in ATTAPL für ein erweitertes System F und in einigen Veröffentlichungen, wie beispielsweise der 58-seitigen "Operational-Based Theories of Program Equivalence").
- Praktische Grundlagen von Programmiersprachen (Kapitel 47-48), die von Pitts inspiriert sind (aber behaupten, einfachere Beweise zu haben).
- Eine logische Untersuchung der Programmäquivalenz . Ich kann kein englisches Abstract finden, aber es scheint viel Aufwand für Nebenwirkungen (Referenzen) aufzuwenden, was eine orthogonale Komplikation zu sein scheint.