In Ordnung, ich werde es kurz ansprechen: Im Allgemeinen gilt für ein gegebenes Typensystem Folgendes:T
Wenn alle gut Typ Begriffe im Kalkül - Normalisieren sind, dann T ist konsistent , wenn sie als Logik betrachtet.TT
Der Beweis erfolgt im Allgemeinen unter der Annahme, dass Sie einen Term vom Typ F a l s e haben , indem Sie die Subjektreduktion verwenden, um eine normale Form zu erhalten, und dann durch Induktion über die Struktur eines solchen Terms fortfahren, um einen Widerspruch zu erhalten.absurdFalse
Es ist natürlich zu fragen, ob das Gegenteil zutrifft, dh
Für jede Art System , wenn T ist logisch konsistent , dann jeder gut getippt Begriff in T ist Normalisieren.TTT
Das Problem dabei ist, dass es keinen wirklich allgemeinsten Begriff von "Typensystem" gibt und noch weniger Übereinstimmung über die Bedeutung der logischen Konsistenz für solche Systeme besteht. Wir können dies jedoch empirisch überprüfen
Für die meisten bekannten Typsysteme, die eine logische Interpretation haben, gilt in der Tat das Gegenteil.
Wie ist dies mit der Vollständigkeit von Turing verbunden? Nun, zum einen zeigt Andrejs Argument , dass eine der folgenden Aussagen zutreffen muss , wenn die Typprüfung entscheidend ist :
- Die Menge aller gut getippten Programme stimmt nicht vollständig.
- Es gibt ein nicht abschließendes, gut typisiertes Programm.
Dies deutet darauf hin, dass:
Typsysteme, die eine logische Interpretation haben und konsistent und rekursiv aufzählbar sind, sind es nicht Turing abgeschlossen.
Um einen tatsächlichen Satz anstelle eines Vorschlags zu geben, müssen Typensysteme und logische Interpretationen mathematisch präzise formuliert werden.
Nun kommen zwei Bemerkungen in den Sinn:
Es gibt ein unentscheidbares Typsystem, das Schnittpunkttypsystem, das eine logische Interpretation hat und jedes normalisierende Term darstellen kann. Wie Sie bemerken, ist dies nicht ganz das Gleiche wie "Turing Complete", da der Typ einer Gesamtfunktion möglicherweise aktualisiert (genauer definiert) werden muss, bevor er auf das gewünschte Argument angewendet wird. Der Kalkül ist ein "Curry-Stil" -Kalkül und ist gleich STLC +
Γ ⊢ Mλ
und
ΓΓM:τ∩σ
Γ⊢M:τΓ⊢M:σΓ⊢M:τ∩σ
Es ist klar, dass die "Interpretation"∩=∧ istΓ⊢M:τ∩σΓ⊢M:τΓ⊢M:τ∩σΓ⊢M:σ
∩=∧ zu einer konsistenten logischen Interpretation führt.
Es gibt eine Klasse von Typsystemen, die Pure Type Systems , in denen eine solche Frage präzisiert werden könnte. In diesem Rahmen ist die logische Interpretation jedoch weniger klar. Man könnte versucht sein zu sagen: "Ein PTS ist konsistent, wenn es einen unbewohnten Typ hat". Dies funktioniert jedoch nicht, da Typen möglicherweise in verschiedenen "Universen" leben, in denen einige konsistent sind und andere nicht.
Coquand und Herbelin definieren einen Begriff von logischen reinen Typensystemen , in denen die Frage sinnvoll ist und zeigen
Jedes inkonsistente, nicht abhängige LPTS hat einen Schleifen-Kombinator (und auch Turing Complete).
Welches beantwortet die Frage in eine Richtung (inkonsistent TC) in diesem Fall. Soweit ich weiß, ist die Frage nach dem allgemeinen LPTS noch offen und ziemlich schwierig.⇒
Bearbeiten: Die Umkehrung des Coquand-Herbelin-Ergebnisses ist nicht so einfach, wie ich dachte! Folgendes habe ich mir bisher ausgedacht.
Ein logisches reines Typensystem ist ein PTS mit (mindestens) den Sortierungen und T y p e , (mindestens) dem Axiom P r o p : T y p e und (mindestens) der Regel ( P r o p , P r o p , P r o p ) , mit der weiteren Voraussetzung, dass es keine Art von P r o p gibt .PropTypeProp:Type(Prop,Prop,Prop)Prop
Jetzt gehe ich von einer bestimmten Aussage zur Vollständigkeit der Prüfung aus: Repariere ein LPTS L and let Γ be the context
Γ=nat:Prop, 0:nat, S:nat→nat
L is Turing Complete iff for every total computable function f:N→N there is a term tf such that
Γ⊢tf:nat→nat
and for every
n∈N
tf (Sn 0)→∗βSf(n) 0
Now Andrej's diagonalization argument shows that there are non-terminating t of type nat.
Now it seems like we are half-way there! Given a non terminating term Γ⊢loop:nat, we want to replace occurrences of nat by some generic type A and get rid of 0 and S in Γ, and we will have our inconsistency (A is inhabited in the context A:Prop)!
Unfortunately this is where I get stuck, since it is easy to replace S by the identity, but the 0 is much harder to get rid of. Ideally we would like to use some Kleene recursion theorem, but I haven't figured this out yet.