Esta é uma pergunta interessante. Obviamente, não se pode esperar para ter um programa que decide para cada se ∀ k T ( e , k ) possui ou não, pois isso iria decidir a suspensão problema. Como já mencionado, existem várias maneiras de interpretar provas computacionalmente: extensões de Curry-Howard, capacidade de realização, dialética e assim por diante. Mas todos interpretariam computacionalmente o teorema que você mencionou mais ou menos da seguinte maneira.e∀ K t( e , k )
Para simplificar, considere o teorema clássico equivalente
(1) ∃ i ∀ j ( ¬ T( e , j ) → ¬ T(e,i))
Este é (construtivamente), equivalente ao mencionado porque dada podemos decidir se ∀ k T ( e , k ) possui ou não, basta verificar o valor do ¬ T ( e , i ) . Se ¬ T ( e , i ) mantém então ∃ i ¬ T ( e , i ) e, portanto, ¬ ∀ i T ( e , i ) . Se por outro ladoi∀kT(e,k)¬T(e,i)¬T( E , i )∃ i ¬ T( E , i )¬ ∀ i T( E , i ) não se sustenta então por (1) temos ∀ j ( ¬ T ( e , j ) → ⊥ ) que implica ∀ j T ( e , j ) .¬ T( E , i )∀ j ( ¬ T( e , j ) → ⊥ )∀ j t( e , j )
Agora, novamente, não podemos computar em (1) para cada e dado, porque resolveríamos novamente o Problema da Parada. O que todas as interpretações mencionadas acima fariam é olhar para o teorema equivalenteEue
(2) ∀f∃i′(¬T(e,f(i′))→¬T(e,i′))
A função é chamada de função Herbrand. Ele tenta calcular um contra-exemplo j para cada testemunha em potencial i . É claro que (1) e (2) são equivalentes. Da esquerda para a direita, isso é construtivo, basta considerar i ′ = i em (2), onde i é a testemunha assumida de (1). Da direita para a esquerda, é preciso raciocinar classicamente. Suponha que (1) não fosse verdade. Então,fjii′=ii
(3) ∀i∃j¬(¬T(e,j)→¬T(e,i))
Seja uma função testemunhando isso, ief′
(4) ∀i¬(¬T(e,f′(i))→¬T(e,i))
Agora, pegue em (2) e temos ( ¬ T ( e , f ′ ( i ' ) ) → ¬ T ( e , i ' ) ) , para alguns i ' . Mas, tomando i = i ' em (4), obtemos a negação disso, contradição. Portanto (2) implica (1).f=f′(¬T(e,f′(i′))→¬T(e,i′))i′i=i′
Portanto, temos que (1) e (2) são classicamente equivalentes. Mas o interessante é que (2) agora tem uma testemunha construtiva muito simples. Simplesmente tome se T ( e , f ( 0 ) ) não se mantiver, porque a conclusão de (2) é verdadeira; ou então tome i ′ = 0 se T ( e , f ( 0 ) ) se mantém, porque então ¬ T ( e , f ( 0 )i′=f(0)T(e,f(0))i′=0T(e,f(0)) não se mantém e a premissa de (2) é falsa, tornando-a novamente verdadeira.¬T(e,f(0))
Portanto, a maneira de interpretar computacionalmente um teorema clássico como (1) é olhar para uma formulação (classicamente) equivalente que pode ser comprovada construtivamente, no nosso caso (2).
As diferentes interpretações mencionadas acima divergem apenas na maneira como a função exibida. No caso da realização e da interpretação dialética, isso é explicitamente dado pela interpretação, quando combinada com alguma forma de tradução negativa (como a de Goedel-Gentzen). No caso de extensões Curry-Howard com operadores call-cc e continuation, a função f decorre do fato de o programa poder "saber" como um determinado valor (no nosso caso i ) será usado, então f é a continuação do programa em torno do ponto em que i é computado.ffifi
Outro ponto importante é que você deseja que a passagem de (1) para (2) seja "modular", ou seja, se (1) for usado para provar (1 '), sua interpretação (2) deverá ser usada de maneira semelhante para provar a interpretação de (1 '), digamos (2'). Todas as interpretações mencionadas acima fazer isso, incluindo a tradução Gödel-Gentzen negativo.