Warum werden rekursive Typen als Grundelemente für Beweise in abhängigen Typsystemen benötigt?


10

Ich bin relativ neu in der Typentheorie und der abhängigen Programmierung. Ich habe die Konstruktionsrechnung (CoC) und andere reine Typsysteme untersucht. Ich bin besonders daran interessiert, es als beweiserhaltende Zwischendarstellung für ein Compilersystem zu verwenden.

Ich verstehe , dass (Mit-) rekursive Typen darstellbarer sind , rechnerisch , mit als einzigen Typkonstruktor. Ich habe jedoch gelesen, dass sie nicht verwendet werden können, um Beweise durch Induktion zu erstellen (verzeihen Sie mir, ich kann jetzt nicht finden, wo!), ZB dass ich diese in einfachem CoC nicht beweisen konnte (obwohl kann als eingegeben werden ).Π01NatΠ(N:).Π(S:NN).Π(Z:N).N

Ich gehe davon aus, dass sie deshalb den Kalkül der induktiven Konstruktionen (CIC) erstellt haben. Ist das richtig? Aber wieso? Ich konnte kein Material finden, das erklärt, warum solche Beweise nicht dargestellt werden können, ohne (co-) induktive Typen als Grundelemente zu verwenden. Wenn dies nicht der Fall ist, warum sollten Sie sie dann als Grundelemente in CIC hinzufügen?

Antworten:


7

Ich bin kein Experte, aber ich werde das, was ich bisher verstanden habe, anhand eines Beispiels teilen.

Betrachten wir den booleschen Typ in CoC unter Verwendung seiner Standardcodierung: Wir erwarten könnte der Lage sein , zu beweisen Ja, diese schnell aus folgt Das abhängige Eliminierungs- / Induktionsprinzip haben wir zB in CiC

B=Πτ:τττtt=λτ:,x:τ,y:τ. xff=λτ:,x:τ,y:τ. y
Πb:Bb=ttb=ff()
Bind:ΠP:BP(tt)P(ff)Πb:BP(b)

Wir können jedoch nicht wirklich erwarten, dass (*) in allen CoC-Modellen gilt! Intuitiv sollte ein Wert in ungefähr eine Funktionsfamilie , die jedem Typ einen Wert bei der Interpretation von zuweist . Dies zwingt jedoch nicht dazu, eins zwischen den Werten von . Wir könnten zB (informell) B{fτ}τττττfτtt,ff

fN(n)(m)=n+m

Um sicherzugehen, dass die Werte von die einzig möglichen Werte sind, müssen wir uns auf parametrische Modelle beschränken. In der Tat (glaube ich) kann die Eigenschaft aus dem freien Satz bewiesen werden , der dem Polytyp .tt,ff()B

Soweit ich weiß, schließt CoC Ad-hoc-Modelle jedoch nicht aus, bei denen die Parametrizität nicht gilt. In einigen von diesen ist einfach falsch. Aufgrund der Solidität schließen wir in Gegenwart eines Gegenmodells, dass in CoC nicht bewohnt ist. Folglich gibt es in CoC auch keinen Begriff.()()Bind


Ich bin mir nicht sicher, ob ich folge. Geben Sie beispielsweise einen Ausdruck als , es gibt viele Möglichkeiten, Konstruktoren für Nat zu erstellen, aber letztendlich würden sie nicht alle aus beiden oder ? (λ(Nat:).(...))(Π(N:).Π(S:NN).Π(Z:N).N)SZ
Paulotorrens

@paulotorrens Innerhalb der Logik, ja, ich glaube, dass dies die einzigen Optionen sind. In einem CoC-Modell (einem Ad-hoc-Modell) kann es jedoch Werte für die nicht durch definiert werden können . Sie sich einen natürlichen Wert so dass für alle Typen außer wobei stattdessen . Der Wert verhält sich bei den meisten Typen als "Null" und bei Booleschen Werten als "Eins". Wir können nicht schreiben in CoC, um diesen Wert zu definieren , aber in einem Ad-hoc-Modell kann dieser Wert dennoch vorhanden sein.NatS,Znn(T)(ST)(ZT)=ZTTT=Bn(B)(S)(Z)=S(Z)nλT:.if T=B then n
Chi

@paulotorrens Vielleicht können Sie das Problem leichter verstehen, wenn Sie an denken . Dieser Typ wird nur von (polymorpher) Identität bewohnt, und in parametrischen Modellen ist dies tatsächlich der einzig mögliche Wert für Begriffe dieses Typs. In einem Ad-hoc-Modell können wir jedoch einen Wert für alle Typen außer für wobei . v ( T ) ( x ) = x T T = N v ( N ) ( x ) = x + 1ΠT:TTv(T)(x)=xTT=Nv(N)(x)=x+1
Chi
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.