Verschiedene Leute sind daran interessiert, so etwas zu beweisen. Neel Krishnaswami erwähnte diesen speziellen Satz hier . Ich habe auch gesehen, wie Frank Pfenning einige coole Beispiele für geordnete Logiken gegeben hat. Wenn Sie beispielsweise , muss e in einem geordneten Typsystem die Listen x und y anhängen .A,x:[A],y:[A]⊢e:[A]exy
Die kurze Antwort lautet: Ja, wir können Ihr erstes Beispiel beweisen. Im Zusammenhang mit Lambda-Kalkülen wird in diesem Artikel ein auf logischen Beziehungen basierender Ansatz beschrieben . Sie würden Ihren Satz in zwei Schritten beweisen:
- Definieren Sie eine relationale Interpretation von Typen und verwenden Sie sie, um einen konventionellen freien Satz zu beweisen, der die Linearität vollständig ignoriert, dh im Wesentlichen die gleiche Argumentation verwendet, die Sie beispielsweise in „Theorems for Free!“ Sehen. In Anbetracht , der übliche freie Satz besagt, dass f eine Liste zurückgibt, die nur Elemente enthält, die in der Liste vorhanden waren, die sie erhalten hat. Aus einer Liste verschiedener freier linearer Variablen x 1 … x n schließen wir, dass f [ x 1 , . . . ,⊢f:∀A.[A]⊸[A]fx1…xn ergibt eine Liste [ y 1 , . . . , y m ] wobei { y 1 , … , y m } ⊆ { x 1 , . . . , x n } .f[x1,...,xn][y1,...,ym]{y1,…,ym}⊆{x1,...,xn}
- Beachten Sie, dass freie lineare Variablen bei der Auswertung erhalten bleiben müssen. Dadurch können wir die Linearität nutzen. Wenn keine Permutation von [ x 1 , . . . , x n ] , dann würde dies bedeuten, dass einige x i während der Auswertung verloren gingen oder dupliziert wurden, was nicht passieren kann.[y1,…,ym][x1,...,xn]xi
Diese Art von Theoremen wird jedoch interessanter, wenn wir eine Sprache mit Effekten betrachten und unsere Fähigkeit, sie für solche Sprachen zu beweisen, leider begrenzt ist. Betrachten wir zum Beispiel die Isomorphismus aus System F. In einer Call-by-Value-Einstellung bricht dieser Isomorphismus, wenn wir die Nichtbeendigung hinzufügen. Wir sollten einen ähnlichen Isomorphismus erholen können, aber mit linearen Typen: & tgr; & sim; ∀ A . ( & Tgr; → A ) ⊸ A . Leider haben wir keine operativen logischen Beziehungen, die dies beweisen können.τ≅∀A.(τ→A)→Aτ≅∀A.(τ→A)⊸A
Es gibt jedoch auch syntaktische Methoden, die sowohl diesen Isomorphismus als auch Ihren Satz beweisen können. Dies scheint ein besonders nützlicher Ansatz in einer linearen Umgebung zu sein und ist viel weniger belastend als die Erstellung einer logischen Beziehung zum Beweis einfacher Theoreme.
Edit: Da Sie gefragt, hier ist ein Beispiel für einen syntaktischen Nachweis eines freien Satz für den Typen in einer Umgebung mit einem Begriff ⊥ , der sich für immer wiederholt und in jedem Kontext bei jedem Typ gut typisiert ist. Die Idee ist, eine Reihe von kanonischen Begriffen eines Typs zu finden und diese zu verwenden, um die möglichen Rückgabewerte für eine Funktion zu bestimmen. Wir beginnen mit einem Soliditätssatz für gut typisierte Begriffe.∀A.(A⊗A)⊸A⊥
Δ;Γ⊢e:τ
- e≈vΔ;Γ⊢v:τ
- e≈nΓΔ;Γ⊢n:τ
- e≈⊥
≈Δx
⊢f:∀A.(A⊗A)⊸Af≈λx.eA;x:(A⊗A)⊢e:A
- eA;x:(A⊗A)⊢(v1,v2):Av1v2AA
- ex
- efλx.⊥
e≈ let(x1,x2)=x in e′A;x1:A,x2:A⊢e′:Af≈λx.let (x1,x2)=x in e′e′Ae′≈xi
∀A.(A⊗A)⊸Aλx.⊥≈λx.let (x1,x2)=x in ⊥
Sie haben um eine Referenz für diese Art von Beweis gebeten, aber ich bin mir nicht sicher, ob es eine gute ist. Diese Art von Argumentation ist in bestimmten Kreisen bekannt und reicht vielleicht bis nach Gentzen zurück. Mir wurde gesagt, dass es an eine gezielte Proof-Suche nach sequentiellem Kalkül erinnert, aber ich weiß nicht genau, was die Verbindung ist.
Trotzdem sind mir keine modernen veröffentlichten Arbeiten bekannt, die diese relativ einfache Methode gut erklären. Zugegeben, die Anwendbarkeit auf einfachere Sprachen ist etwas eingeschränkt. Andererseits denke ich, dass es von "Theorems for Free!" et al. und infolgedessen denken sogar viele hochrangige Forscher sofort an logische Beziehungen, wenn sie den Ausdruck „freier Satz“ hören, ohne zu wissen, dass Techniken wie diese ein einfacherer alternativer Ansatz für solche Beweise sein können (insbesondere im Zusammenhang mit linearen Typsystemen).
Af∀A.(∀B.B⊸(B,B))⊸[A]⊸[A]∀B.B⊸(B,B) existiert, da es seine Eingabe duplizieren müsste.