Esta es una pregunta interesante. Obviamente, uno no puede esperar tener un programa que decida para cada si cumple o no, ya que esto decidiría el problema de detención. Como ya se mencionó, hay varias formas de interpretar las pruebas computacionalmente: extensiones de Curry-Howard, realizabilidad, dialéctica, etc. Pero todos interpretarían computacionalmente el teorema que usted mencionó más o menos de la siguiente manera.∀ k T ( e , k )e∀kT(e,k)
Para simplificar, considere el teorema clásico equivalente
(1)∃i∀j(¬T(e,j)→¬T(e,i))
Esto es (constructivamente) equivalente al mencionado porque dado podemos decidir si cumple o no simplemente comprobando el valor de . Si mantiene, entonces y, por lo tanto, . Si, por otro lado, no se cumple, entonces (1) tenemos que implica .∀ k T ( e , k ) ¬ T ( e , i ) ¬ T ( e , i ) ∃ i ¬ T ( e , i ) ¬ ∀ i T ( e , i ) ¬ T ( e , i ) ∀ j ( ¬ T ( e , j ) → ⊥ )i∀kT(e,k)¬T(e,i)¬T(e,i)∃i¬T(e,i)¬∀iT(e,i)¬T(e,i)∀j(¬T(e,j)→⊥)∀jT(e,j)
Ahora, una vez más, no podemos calcular en (1) para cada dada porque resolveríamos nuevamente el problema de detención. Lo que todas las interpretaciones mencionadas anteriormente harían es mirar el teorema equivalenteeie
(2)∀f∃i′(¬T(e,f(i′))→¬T(e,i′))
La función se llama función Herbrand. Intenta calcular un contraejemplo para cada testigo potencial dado . Está claro que (1) y (2) son equivalentes. De izquierda a derecha esto es constructivo, simplemente tome en (2), donde es el testigo supuesto de (1). De derecha a izquierda uno tiene que razonar clásicamente. Suponga que (1) no era cierto. Luego,j i i ′ = i ifjii′=ii
(3)∀i∃j¬(¬T(e,j)→¬T(e,i))
Sea una función testigo de esto, es decirf′
(4)∀i¬(¬T(e,f′(i))→¬T(e,i))
Ahora, tome en (2) y tenemos , para algunos . Pero tomando en (4) obtenemos la negación de eso, contradicción. Por lo tanto (2) implica (1).f=f′(¬T(e,f′(i′))→¬T(e,i′))i′i=i′
Entonces, tenemos que (1) y (2) son clásicamente equivalentes. Pero lo interesante es que (2) tiene ahora un testigo constructivo muy simple. Simplemente tome si no se cumple, porque entonces la conclusión de (2) es verdadera; o bien tome si cumple, porque entonces no se cumple y la premisa de (2) es falsa, lo que lo vuelve a hacer verdadero.i′=f(0)T(e,f(0))i′=0T(e,f(0))¬T(e,f(0))
Por lo tanto, la forma de interpretar computacionalmente un teorema clásico como (1) es mirar una formulación equivalente (clásica) que se pueda demostrar de manera constructiva, en nuestro caso (2).
Las diferentes interpretaciones mencionadas anteriormente solo divergen en la forma en que aparece la función . En el caso de la realizabilidad y la interpretación dialéctica, esto es explícitamente dado por la interpretación, cuando se combina con alguna forma de traducción negativa (como la de Goedel-Gentzen). En el caso de las extensiones de Curry-Howard con los operadores de call-cc y de continuación la función surge del hecho de que el programa se le permite "saber" como un valor determinado (en nuestro caso se utilizará), por lo que es la continuación del programa alrededor del punto donde se calcula .ffifi
Otro punto importante es que desea que el pasaje de (1) a (2) sea "modular", es decir, si (1) se usa para probar (1 '), entonces su interpretación (2) debe usarse de manera similar para probar la interpretación de (1 '), diga (2'). Todas las interpretaciones mencionadas anteriormente lo hacen, incluida la traducción negativa de Goedel-Gentzen.