Hay un par de cuestiones planteadas en la pregunta, acerca de algunos de los conceptos de la computabilidad y número de Gödel. Me voy a centrar mi respuesta en la primera parte de la pregunta, y voy a dar una respuesta específica. Así que aquí es lo que voy a intentar responder:
¿Qué hace un computable realización de ACC precisamente significan y cómo convertir una prueba que implican ACC en un equipo de trabajo del programa?
Respuesta Corta
Dos partes:
Una computable realización de ACC significaría que es posible "mira dentro" existencial prueba y extraer el testigo y, a continuación, utilizar este testigo en posteriores construcciones por ejemplo la construcción de una función. Esto podría romper el paradigma de la prueba de la irrelevancia.
Sólo es posible convertir una prueba que implican ACC a un equipo de trabajo del programa si la ACC tiene algunos computable realización. Es decir, para dicha conversión no debe ser algo concreto (no de caja negra) programa cuyo tipo corresponde (por el Curry-Howard correspondencia) a ACC. En este caso, cualquier prueba que implican ACC convierte automáticamente a un programa de ordenador, mientras que el resto de sus elementos no son cuadros negros. Basta con sustituir cada aplicación de la ACC con una aplicación de su realización.
Respuesta Larga
Voy a responder a la pregunta como moderadamente experimentado Coq usuario. Coq es una prueba auxiliar que se basa en el Cálculo de (Co)Inductivo Construcciones. La clave característica subyacente de Coq es el Curry Howard Isomorfismo: una correspondencia entre los mundos de pruebas y programas. En particular, tenemos las siguientes:
- Cada Proposición es un tipo.
- Cada prueba es un programa. Esto podría ser llamado también la realización de un tipo.
Ahora, la ACC, como se indica en la pregunta, es la siguiente:
$$ \forall n\in \mathbb{N} . \exists x \in X . \varphi [n, x] \implies \exists f: \mathbb{N} \longrightarrow X . \forall n \in \mathbb{N} . \varphi [n, f(n)]$$
Por el Curry-Howard correspondencia, Coq no distingue entre el tipo de función y la implicación lógica. También no hay ninguna diferencia entre el $\forall$ y el dependiente de la función del producto tipo de $\Pi x \in X. T(x)$ donde $T$ es algún tipo dependiente. Esta es una generalización de la función común de tipo $A \rightarrow B$, donde el tipo de retorno $B$ es constante con respecto al argumento de tipo $A$. No voy a ampliar los cuantificadores existencial, ya que sería demasiado complicado, pero estos dos son en realidad los tipos demasiado. Así que la instrucción anterior en Coq sería:
$$ (\Pi n\in \mathbb{N} . \exists x \in X . \varphi [n, x]) \longrightarrow (\exists f: \mathbb{N} \longrightarrow X . \Pi n \in \mathbb{N} . \varphi [n, f(n)])$$
Es decir, el axioma es un tipo de función. OK, pero ¿qué es exactamente el rango y el dominio de esta función? El dominio es un tipo de función y el rango es un tipo existencial.
El rango es el tipo de función $(\Pi n\in \mathbb{N} . \exists x \in X . \varphi [n, x])$. Deje $g$ ser un elemento de este tipo. Dado un número natural, $g$ devuelve un testimonio para la existencial. Este testimonio contiene un $x$ y una realización (o elemento, o prueba) de $\varphi [n, x]$. Recuerden $\varphi [n, x]$ es una Proposición, que es tratada como un tipo.
El dominio de los axiomas de la función es el tipo existencial $(\exists f: \mathbb{N} \longrightarrow X . \Pi n \in \mathbb{N} . \varphi [n, f(n)])$. Un elemento de este tipo es un testigo. El testimonio contiene una función de $f: \mathbb{N} \longrightarrow X$ y una realización (prueba, elemento) del tipo $\Pi n \in \mathbb{N} . \varphi [n, f(n)])$. El último es en sí mismo un tipo de función (estoy empezando a marearse), teniendo un número natural $n$ y dando de nuevo un elemento de $\varphi [n, f(n)])$. En este punto, usted podría tomar una amplitud y maravillarse con la potencia expresiva de los tipos de dependientes.
OK, volviendo a la pregunta anterior.
¿Qué hace un computable realización de ACC precisamente significan y cómo convertir una prueba que implican ACC en un equipo de trabajo del programa?
En realidad tiene dos partes:
- ¿Qué hace un computable realización de ACC precisamente significa?
- ¿Cómo se puede convertir en una prueba que implican ACC en un equipo de trabajo del programa?
Para responder a $(1)$ se desenrolla las nociones de "computable" y "realización" (sí, he deliberadamente cambiado a reino unido, la ortografía, que gobernó con nosotros para ~700 años). En primer lugar, la realización de un tipo que es un elemento de ese tipo. En segundo lugar, esta realización es computable si puede ser construido, frente a sólo el que se muestra a existir. Así, un "computable realización" es una construcción de un elemento del tipo especificado por el ACC. En otras palabras, es la construcción de una función que toma la función en el dominio y devuelve un existencial en el rango. Puede una realización de la ACC ser construido? La respuesta es: yo he mentido anteriormente. O, al menos, he ocultado la verdad. Coq hace distinguir entre los tipos y las proposiciones; estos últimos son tratados como los tipos, pero son cajas negras no pueden ser utilizados para la construcción de tipos. En particular, las proposiciones "vivir" en un "universo" llamado Prop y tipos viven en una que se llama... bueno... Tipo. Estrictamente, el ACC no puede ser construido en Coq. Sin embargo, si se relaja la restricción y aplastar todo a un tipo de mundo, la construcción es posible. De hecho, he definido en Coq mí mismo:
Definición ACC (X : Tipo de) (P : nat -> X -> Tipo) (f :
(forall n : nat, {x:X & (P n x)})) (n : nat) : X :=
partido de f n (existT x P) => x final.
Teorema de ACC_full (X : Tipo de) (P : nat -> X -> Tipo) (f :
(forall n : nat, {x:X & (P n x)})) : {f : nat -> X & (forall n : nat, P n (f n))}.
existe (ACC X P f). intros. desarrollan ACC. recuerde (f n).
destruct s. de la asunción. Qed.
Por favor, copia y pasado a la Coq IDE, ya que representa terriblemente aquí. Así que lo que una computable realización de ACC significa es que podemos mirar en el interior de la original existencial producido por la función en el lado izquierdo para la construcción de la RHS plazo. Normalmente, esto no está permitido, porque el existencial es una Proposición , mientras que el lado derecho es un Tipo de. Sin embargo, si se relaja la declaración un poco y definir las cosas en términos de la Sig tipo, como lo he hecho, funciona. El Sig tipo es el tipo existencial, sino en el Tipo de mundo en lugar de en la Proposición mundo.
Ahora es fácil responder a la segunda pregunta, a saber: ¿Cómo se puede convertir en una prueba que implican ACC en un equipo de trabajo del programa? Si el ACC que uso es la versión estricta, con el existencial de la Proposición en el lado izquierdo, entonces usted no puede convertir este tipo de prueba en un programa, porque su ACC sólo será una "caja negra". Pero si usted relajarse esta al Tipo de versión de la ACC, obtendrá automáticamente un programa: basta con aplicar mi Coq programa anterior para que cualquier programa de la LHS tipo y va a dar a usted un programa de la RHS tipo. Intuitivamente, lo que el programa ACC hace es "grietas" el existencial, "mira dentro" y usa lo que encuentra para definir una función - esta es la función de $f$ mencionado en el axioma. El teorema de ACC_full luego aumenta a esta función con la prueba de que la función es correcta, es decir, que la proposición $\varphi$ es respetado. Esto se logra abriendo la primera función y la aplicación de la hipótesis, utilizando el hecho de que la primera función utiliza la función de la LHS, que automáticamente se respeta $\varphi$. En otras palabras, ACC_full corresponde a la plena axioma de la computables elección, aunque restringido al Tipo de mundo solo, mientras ACC simplemente define la función $f$ a ser utilizado en el axioma. Tenga en cuenta que estoy usando P en el lugar de $\varphi$ en mi Coq código.
Me doy cuenta de que al final de mi respuesta que es un poco desordenado porque he cambiado mi opinión sobre algunas cosas en el camino, pero creo que está en buena forma. Por favor, comentar con cualquier pregunta que usted tenga aunque, como estoy seguro de que algo de esto puede no ser del todo claro.