Uma compreensão completa do que J
realmente estava dizendo e por que chegou apenas recentemente. Esta postagem do blog discute isso. Enquanto pensar em termos de homotopia e funções contínuas fornece muita intuição e se conecta a uma área muito rica da matemática, tentarei manter a discussão abaixo no nível lógico.
Digamos que você axiomatizou tipos de igualdade diretamente (são operações e leis grupóides ):
Temos uma substituição que é funcional.
Γ⊢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
Finalmente, teríamos regras de congruência para tudo, dizendo que tudo respeita essa igualdade. Aqui está uma das congruências mais importantes.
Γ,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)⟩
Agora vamos considerar um caso especial de substituição.
Γ⊢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⟩)
Isto é J
. Podemos usar currying para obter a melhor aparência:
Γ⊢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)
Obviamente, se começarmos J
, podemos rederivar toda a outra estrutura que defini.
Agora, se tivermos e então . Portanto, se tivermos , não há como por meio de um pré-selecionado em geral, a menos que . (Da perspectiva da homotopia, diz que podemos preencher o triângulo com as arestas , e .) Para torná-lo mais embotado, defina (e ) e obtemosp: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′sendo a igualdade requerida que não é verdadeira em geral (porque um valor do tipo pode representar uma equivalência arbitrária e não há nada dizendo que duas equivalências devem ser iguais, ou, equivalentemente, porque sabemos que os grupóides podem ser não- trivial). O objetivo disso é demonstrar que as coisas podem ser iguais de mais de uma maneira, ou seja, um valor de não é tão bom quanto outro em geral.x=Ay′y=y′
Uma coisa importante a entender é que J
diz que o tipo é definido indutivamente e fala pouco sobre o tipo para e fixos . Uma maneira de ver isso, e por que é assim, é ver como é a congruência de tipos de igualdade com pontos de extremidade correspondentes. Temos a seguinte regra (ignorando o termo de prova, é expressável com ou ):
Com , temos a opção de fazerΣ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′⟩ para que todos os pontos sejam equivalentes para qualquer outro ponto (embora não necessariamente trivialmente). Com os dois pontos de extremidade correspondentes, não temos a flexibilidade de escolher as igualidades para primeiro cancelar a igualdade de entrada e, em seguida, executar uma igualdade arbitrária.
Embora J
respeite cuidadosamente a estrutura grupóide não trivial dos tipos de igualdade, em linguagens tipicamente dependentes de tipagem dependente, não há como realmente definir um elemento não trivial de um tipo de igualdade. Nesse ponto, você encontra uma bifurcação na estrada. Uma rota é adicionar o Axiom K, que diz que o grupóide é realmente trivial, o que torna muitas provas muito mais simples. A outra rota é adicionar axiomas que permitem articular a estrutura grupóide não trivial. O exemplo mais dramático disso é o axioma da univalência, que leva à teoria do tipo de homotopia .