É uma ilusão que as regras de computação "definam" ou "construam" os objetos sobre os quais falam. Você observou corretamente que a equação para não a "define", mas falhou em observar que o mesmo também acontece em outros casos. Vamos considerar o princípio de indução para o tipo de unidade 1 , que parece particularmente obviamente "determinado". De acordo com o ponto 1.5 do livro Hott temos
i n d 1 : Π C : 1 → T y p e C ( ⋆ ) → Π x : 1 Pind=A1
com a equação
i n d 1 ( C , c , ⋆ ) = c .
Será que este "definir" ou "construção" i n d 1 no sentido de que ele não deixa dúvida quanto ao que i n d 1 "faz"? Por exemplo, defina C ( x ) = N e a = 42 e considere o que poderíamos dizer sobre
i n d 1 ( C , 42 ,
ind1:∏C:1→TypeC(⋆)→∏x:1P(x)
ind1(C,c,⋆)=c.
ind1ind1C(x)=Na=42
para uma dada expressão
e do tipo
1 . Seu primeiro pensamento pode ser que podemos reduzir isso para
42 porque "
⋆ é o único elemento de
1 ". Mas, para ser bem preciso, a equação para
i n d 1 é aplicável somente se mostrarmos
e ≡ ⋆ , que é impossível quando
e é uma variável, por exemplo. Podemos tentar mexer fora deste e dizer que estamos interessados apenas em computação com termos fechados, por isso
e deve ser fechado.
ind1(C,42,e)
e142⋆1ind1e≡⋆ee
Não é verdade que todo termo fechado do tipo 1 é julgadamente igual a ⋆ ? Isso depende de detalhes desagradáveis e provas complicadas de normalização, na verdade. No caso do HoTT, a resposta é "não" porque e pode conter instâncias do Axioma da Univalência, e não está claro o que fazer com isso (este é o problema em aberto no HoTT).e1⋆e
Nós podemos contornar o problema com univalance considerando uma versão da teoria tipo que não têm boas propriedades de modo que cada termo fechado do tipo é judgmentally igual a ⋆ . Nesse caso, é justo dizer que nós não sabe como calcular com i n d 1 , mas:1⋆ind1
O mesmo vale para o tipo de identidade, porque todo termo fechado de um tipo de identidade será julgadoramente igual a alguns e, portanto, a equação para i n d = A nos dirá como calcular.refl(a)ind=A
Só porque sabemos calcular com termos fechados de um tipo, isso não significa que realmente definimos algo, porque existe mais em um tipo do que em termos fechados , como tentei explicar uma vez.
Por exemplo, a teoria do tipo Martin-Löf (sem os tipos de identidade) pode ser interpretada teoricamente no domínio de forma que contenha dois elementos ⊥ e ⊤ , em que ⊤ corresponda a ⋆ e ⊥ à não terminação. Infelizmente, como não há como escrever uma expressão não-terminante na teoria dos tipos, ⊥ não pode ser nomeado. Consequentemente, a equação para i n d 1 que não nos dizer como calcular em ⊥ (as duas escolhas óbvias sendo "ansiosamente" e "preguiçosa").1⊥⊤⊤⋆⊥⊥ind1⊥
Em termos de engenharia de software, eu diria que temos uma confusão entre especificação e implementação . Os axiomas HoTT para os tipos de identidade são uma especificação . A equação não está nos dizendo como calcular ou como construir i n d = C , mas sim que no entanto eu nind=C(C,c,x,x,refl(x))≡c(x)ind=C é "implementado", exigimos que ele satisfaça a equação. É uma questão separada se tal i n d = C pode ser obtido de uma maneira construtiva.ind=Cind=C
Por fim, estou um pouco cansado de como você usa a palavra "construtivo". Parece que você acha que "construtivo" é o mesmo que "definido". Sob essa interpretação, o oráculo Halting é construtivo, porque seu comportamento é definido pelo requisito que lhe impomos (a saber, que ele produz 1 ou 0 de acordo com a parada da máquina). É perfeitamente possível descrever objetos que existem apenas em um ambiente não construtivo. Por outro lado, é perfeitamente possível falar construtivamente sobre propriedades e outras coisas que não podem realmente ser computadas. Aqui está um: a relação definida por
H ( n , d )H⊆N×{0,1}
é construtiva, isto é, não há nada de errado com esta definição de um ponto de vista construtivo. Acontece que, construtivamente, não se pode mostrar que H é uma relação total, e seu mapa característico χ H : N × { 0 , 1 } → P r o p não é fator por b o o l
H(n,d)⟺(d=1⇒n-th machine halts)∧(d=0⇒n-th machine diverges)
HχH:N×{0,1}→Propbool, portanto, não podemos "calcular" seus valores.
Adendo: O título da sua pergunta é "A indução de caminho é construtiva?" Depois de esclarecer a diferença entre "construtivo" e "definido", podemos responder à pergunta. Sim, a indução de caminho é conhecida por ser construtiva em certos casos:
Se restringirmos a teoria de tipos sem Univalência, para que possamos mostrar forte normalização, a indução de caminho e tudo o mais é construtivo, porque existem algoritmos que executam o procedimento de normalização.
Existem modelos de realizabilidade da teoria dos tipos, que explicam como todo termo fechado na teoria dos tipos corresponde a uma máquina de Turing. No entanto, esses modelos satisfazem o Axiom K de Streicher, que descarta a univalência.
Há uma tradução da teoria dos tipos (novamente sem univalência) na teoria dos conjuntos construtivos CZF. Mais uma vez, isso valida o axioma K. de Streicher.
Existe um modelo grupóide dentro dos modelos de realização que nos permite interpretar a teoria dos tipos sem o K. de Streicher. Este é um trabalho preliminar de Steve Awodey e de mim.
Nós realmente precisamos resolver o status construtivo da Univalência.