Ein vollständiges Verständnis dessen, was J
tatsächlich gesagt wurde und warum, ist erst vor relativ kurzer Zeit gekommen. Dieser Blog-Beitrag diskutiert es. Während das Denken in Bezug auf Homotopie und kontinuierliche Funktionen viel Intuition bietet und sich mit einem sehr reichen Bereich der Mathematik verbindet, werde ich versuchen, die folgende Diskussion auf der logischen Ebene zu halten.
Angenommen, Sie haben Gleichheitstypen direkt axiomatisiert (dies sind gruppenförmige Operationen und Gesetze):
Wir haben eine Substitution, die funktoriell ist.
Γ⊢x:AΓ⊢reflx:x=AxΓ,x:A,y:A⊢p:x=AyΓ,x:A,y:A⊢p−1:y=AxΓ,x:A,y:A⊢p:x=AyΓ,y:A,z:A⊢q:y=AzΓ,x:A,y:A,z:A⊢p⋅q:x=Az
(p−1)−1≡pp⋅p−1≡refl(p⋅q)−1≡q−1⋅p−1refl⋅p≡p≡p⋅refl(p⋅q)⋅r≡p⋅(q⋅r)
Γ,z:A⊢F(z):UΓ,x:A,y:A⊢p:x=AyΓ,x:A,y:A⊢subst(F,p):F(x)→F(y)
subst(F,refl)=idsubst(F,p⋅q)=subst(F,q)∘subst(F,p)subst(λx.c=Ax,p)(q)=q⋅p
Schließlich hätten wir Kongruenzregeln für alles und sagen, dass alles diese Gleichheit respektiert. Hier ist eine der wichtigsten Kongruenzen.
Γ,x:A,y:A⊢p:x=AyΓ,z:A⊢B(z):UΓ,x:A,y:A,b:B(x)⊢liftB(b,p):⟨x,b⟩=Σx:A.B(x)⟨y,subst(B,p)(b)⟩
Betrachten wir nun einen speziellen Substitutionsfall.
Γ⊢c:AΓ,t:Σx:A.c=Ax⊢C(t):UΓ⊢b:C(⟨c,reflc⟩)Γ,y:A,p:c=Ay⊢subst(C,liftλz.c=z(reflc,p))(b):C(⟨y,p⟩)
Das ist J
. Wir können Currying verwenden, um die schönere Form zu erhalten:
Γ⊢c:AΓ,y:A,p:c=Ay⊢C(y,p):UΓ⊢b:C(c,reflc)Γ,y:A,p:c=Ay⊢JA,c(C,b,y,p):C(y,p)
Wenn wir damit beginnen J
, können wir natürlich alle anderen von mir definierten Strukturen neu definieren.
Wenn wir nun und dann . Wenn wir also , gibt es keine Möglichkeit, von über ein vorgewähltes im Allgemeinen dorthin zu gelangen, es sei denn, . (Aus der Homotopie-Perspektive sagt dass wir das Dreieck mit den Kanten , und füllen können .) Um es stumpfer zu machen, setzen Sie (und ) und wir erhaltenp:x=Ayq:y=Ay′liftλz.x=z(p,q):⟨y,p⟩=⟨y′,p⋅q⟩⟨y′,p′⟩⟨y,p⟩qp⋅q=p′p⋅q=p′pqp′p=reflxy=xq=p′Dies ist die erforderliche Gleichheit, die im Allgemeinen nicht zutrifft (weil ein Wert vom Typ eine beliebige Äquivalenz darstellen kann und nichts besagt, dass zwei Äquivalenzen gleich sein müssen, oder äquivalent, weil wir wissen, dass Gruppoide nicht sein können trivial). Damit soll gezeigt werden, dass Dinge auf mehr als eine Weise gleich sein können, dh ein Wert von ist im Allgemeinen nicht so gut wie ein anderer.x=Ay′y=y′
Es ist zu verstehen, J
dass der Typ induktiv definiert ist und wenig über den Typ für festes und . Eine Möglichkeit, dies zu sehen und warum es so ist, besteht darin, zu untersuchen, wie die Kongruenz bei Gleichheitstypen mit übereinstimmenden Endpunkten aussieht. Wir haben die folgende Regel (ignoriert den Beweisbegriff, er kann mit oder ):
Mit wir die Möglichkeit, dies zu tunΣy:A.x=Ayx=AyxyJ
substJ
Γ,x:A⊢p:x=AxΓ,x:A,q:x=Ax⊢_:q=x=Axp⋅q⋅p−1
liftλz.x=zliftλz.x=z(p,p−1⋅p′):⟨y,p⟩=⟨y′,p′⟩ sodass jeder Punkt gleichwertig war zu jedem anderen Punkt (wenn auch nicht unbedingt trivial). Wenn beide Endpunkte übereinstimmen, haben wir nicht die Flexibilität, die Gleichungen auszuwählen, um zuerst die Eingabegleichheit aufzuheben und dann eine beliebige Gleichheit durchzuführen.
Während J
die nicht triviale gruppenförmige Struktur von Gleichheitstypen sorgfältig respektiert wird, gibt es in typischen Sprachen mit abhängiger Typisierung keine Möglichkeit, ein nicht triviales Element eines Gleichheitstyps tatsächlich zu definieren. An diesem Punkt stoßen Sie auf eine Weggabelung. Eine Möglichkeit besteht darin, Axiom K hinzuzufügen, das besagt, dass das Groupoid tatsächlich trivial ist, was viele Beweise viel einfacher macht. Die andere Möglichkeit besteht darin, Axiome hinzuzufügen, mit denen Sie die nicht triviale Gruppenstruktur artikulieren können. Das dramatischste Beispiel hierfür ist das Univalenzaxiom, das zur Homotopietypentheorie führt .