Bei der Überprüfung von Compilern geht es häufig darum, den Compiler als vollständig abstrakt zu beweisen: dass er (kontextbezogene) Äquivalenzen bewahrt und widerspiegelt.
Anstatt vollständige Abstraktionsnachweise zu liefern, wurden einige neuere (kategorienbasierte) Compiler-Verifikationsarbeiten von Hasegawa [ 1 , 2 ] und Egger et. al. [ 3 ] die vollständige Vollständigkeit verschiedener CPS-Übersetzungen nachweisen.
Frage: Was ist der Unterschied zwischen vollständiger und vollständiger Abstraktion?
Vollständigkeit erscheint mir nur als Äquivalenzreflexion für eine Übersetzung, und Fülle scheint eine Folge der Wahrung der Äquivalenz zu sein.
Anmerkung : Sowohl Curien [ 7 ] als auch Abramsky [ 8 ] untersuchen die Beziehung zwischen Definierbarkeit, vollständiger Abstraktion und teilweise vollständiger Vollständigkeit. Ich vermute, dass diese Ressourcen die Antwort auf meine Frage haben, aber nach einem Oberflächenlesevorgang muss ich dies noch bestätigen.
Hintergrund : Abramsky und Jagadeesan [ 4 ] haben den Begriff "vollständige Vollständigkeit" geprägt , um die Korrektheit eines spielsemantischen Modells der multiplikativen linearen Logik zu charakterisieren.
Blute [ 5 ] enthält die folgende Definition:
Sei eine freie Kategorie. Wir sagen , dass ein grundsätzliches Modell ist für vollständig abgeschlossen oder dass wir volle Vollständigkeit von in Bezug auf , wenn in Bezug auf einige Auslegung der Generatoren, der einzigartige freie Funktors ist voll.
Soweit ich das beurteilen kann, ist Hasegawa in [ 6 ] der erste, der die vollständige Beschreibung einer Programmübersetzung anstelle eines kategorialen semantischen Modells anpasst. In diesem Fall die Girard-Übersetzung von einfach getipptem Lambda-Kalkül zu linearem Lambda-Kalkül. Später definiert er in [ 1 ] die vollständige Vollständigkeit der CPS-Übersetzung als:
Wenn ist im linearen Lambda-Kalkül ableitbar, dann existiert im rechnerischen Lambda-Kalkül, so dass gilt im linearen Lambda-Kalkül.
(wobei ein Basistyp im linearen Lambda-Kalkül (Zielsprache) ist, nicht jedoch im rechnerischen Lambda-Kalkül (Ausgangssprache).)
Für mich scheint Hasegawas Definition eine Fülle zu sein und sollte wirklich mit Vollständigkeit kombiniert werden, um vollständige Vollständigkeit zu erreichen.
Egger et. al. [ 3 ] definiere die vollständige Vollständigkeit einer CPS-Übersetzung als eine Kombination von (1) Vollständigkeit und (2) Vollständigkeit:
(1): Wenn und Θ v | - ⊢ M v = & bgr; & eegr; N v : ! τ v dann Θ ⊢ M = λ c N : τ
(2): Wenn existiert dann ein Term Θ ⊢ M : τ, so dass Θ v | - ⊢ M v = & bgr; & eegr; t : ! τ v
(wobei Moggis rechnerische Gleichungstheorie ist)
[1] " Linear verwendete Effekte: Monaden- und CPS-Transformationen in lineare Lambda-Rechnung ", Hasegawa 2002
[2] " Semantik der linearen Weitergabe in Call-by-Name ", Hasegawa 2004
[3] " Linear verwendbare CPS-Übersetzungen in der Enriched Effect Calculus ", Egger et. al. 2012
[4] " Spiele und volle Vollständigkeit für multiplikative lineare Logik ", Abramsky und Jagadeesan 1992
[5] " Kategorietheorie für lineare Logiker ", Blute 2003
[6] " Girard Translation and Logical Predicates ", Hasegawa 2000
[7] " Definierbarkeit und vollständige Abstraktion ", Curien 2007
[8] " Axiome für Definierbarkeit und Vollständigkeit ", Abramsky 1999
quelle
Zusammenfassung: Vollständigkeit bedeutet, dass die Interpretationsfunktion nicht nur vollständig, sondern auch für Programme surjektiv ist. Für die vollständige Abstraktion ist keine Surjektivität erforderlich.
quelle