Supongamos que tengo un sencillo programa que implementa un algoritmo (dicen búsqueda en profundidad), escrito en un simple imperativo lenguaje de programación con el estándar para los bucles, las repeticiones, las sentencias condicionales y así sucesivamente. Se toma en un bien de entrada especificado y tiene una salida especificada.
Supongamos que quiero verificar que siempre produce la salida correcta para cada entrada. Puedo tratar el programa como un objeto matemático sujeto a ciertas reglas del lenguaje de programación. Escribo formal de una prueba matemática, suponiendo que el habitual de los axiomas de ZFC y la lógica de primer orden, para demostrar que esto es cierto.
Cómo iba yo a saber que mi programa definitivamente las obras (es decir, para todas las variables de entrada, de salida correctamente) debido a esta prueba? Hago saber que en el sistema de axiomas ZFC, mi programa de obras, ya que se define al trabajo (que es deducible formalmente). Sin embargo, parece que la corrección de mi programa no requiere que el pleno de la maquinaria de ZFC; su única axiomas son las reglas del lenguaje de programación. Comúnmente se utiliza la prueba de técnicas como la inducción matemática se fundamenta en los axiomas de ZFC, pero no sabemos todavía que estos sostener debido solamente a las reglas del lenguaje de programación.
Es posible que mi programa no funciona, sino que está demostrado que funciona en ZFC? Si ese es el caso, ¿por qué todos los algoritmos probados en el marco habitual de ZFC (suponiendo que todos los axiomas de la teoría de conjuntos y la lógica de primer orden)?
EDITAR: Puede la verificación formal de programas (con 100% de seguridad de acuerdo a las especificaciones del lenguaje de programación) se realiza en ZFC? Estoy asumiendo que se puede hacer en virtud del axioma débil de los sistemas (por ejemplo, la lógica de Hoare)?