Prueba en segunda instancia

máquina de turing

Una parte del primer capítulo del libro El espíritu y los usos de las ciencias matemáticas habla de la belleza de las matemáticas. El autor cita una conferencia de Hasse e introduce la noción de prueba de la ratonera. Me parece que el autor hace una exposición lúcida de lo que se habla, pero lamentablemente sin un ejemplo de una prueba de este tipo.

Los criterios de belleza en el segundo nivel, según Hasse, son la finalidad y la elegancia. La finalidad significa que en cada punto de una prueba debemos saber a qué atenernos y tener el objetivo a la vista. Lo contrario es la llamada prueba de la ratonera, en la que se nos empuja hacia adelante conclusión por conclusión hasta que de repente se cierra la puerta. Nos sentimos emboscados, extraordinariamente estúpidos, e irritados por el ingenio esotérico del autor, pero cuando intentamos roer los barrotes de las conclusiones lógicas, nos vemos obligados a admitir que la prueba es sólida y sin defectos.

Esa noción (o más bien su traducción al alemán Mausefallenbeweis) sólo la encuentro en el contexto del filósofo alemán Schopenhauer, que la acuña en el contexto de la prueba de Euclides del teorema de Pitágoras: Lógicamente, obliga al lector a creer el resultado sin mucha perspicacia (a diferencia de alguna otra prueba que utiliza sólo una imagen y uno lo entiende inmediatamente).

documento sobre el problema de entscheidungs de turing

Turing siguió esta prueba con otras dos. La segunda y la tercera se basan en la primera. Todas se basan en su desarrollo de “máquinas de computación” similares a las máquinas de escribir que obedecen a un conjunto de reglas sencillas y en su posterior desarrollo de una “máquina de computación universal”.

En su demostración de que el Entscheidungsproblem no puede tener solución, Turing partió de dos demostraciones que conducirían a su demostración final. Su primer teorema es más relevante para el problema de detención, el segundo es más relevante para el teorema de Rice.

Primera prueba: que no existe ninguna “máquina de computación” que pueda decidir si una “máquina de computación” arbitraria (representada por un número entero 1, 2, 3, . . .) está “libre de círculos” (es decir, sigue imprimiendo su número en binario ad infinitum): “…no tenemos ningún proceso general para hacer esto en un número finito de pasos” (p. 132, ibíd.). La prueba de Turing, aunque parece utilizar el “proceso diagonal”, muestra de hecho que su máquina (llamada H) no puede calcular su propio número, y mucho menos el número diagonal completo (argumento diagonal de Cantor): “La falacia del argumento reside en la suposición de que B [el número diagonal] es computable” (Undecidable, p. 132). La prueba no requiere mucha matemática.

la base química de la morfogénesis

Hemos visto que el elaborador de Lean proporciona una útil automatización, completando la información que es tediosa de introducir a mano. En esta sección exploraremos un dispositivo técnico simple pero poderoso conocido como inferencia de clase de tipo, que proporciona otro mecanismo para que el elaborador suministre la información que falta.

La noción de clase de tipo se originó en el lenguaje de programación Haskell. En ese contexto, se utiliza a menudo para asociar operaciones, como una operación canónica de suma o multiplicación, a un tipo de datos. Muchos de los usos originales se mantienen, pero, como veremos, el ámbito de la demostración interactiva de teoremas plantea aún más posibilidades para su uso.

Cualquier familia de tipos puede marcarse como una clase de tipos. A continuación, podemos declarar que determinados elementos de una clase de tipos son instancias. Éstos proporcionan pistas al elaborador: cada vez que éste busque un elemento de una clase de tipos, puede consultar una tabla de instancias declaradas para encontrar un elemento adecuado.

Empecemos con un ejemplo sencillo. Muchos teoremas se mantienen bajo el supuesto adicional de que un tipo está habitado, es decir, que tiene al menos un elemento. Por ejemplo, si α es un tipo, ∃ x : α, x = x es cierto sólo si α está habitado. Del mismo modo, a menudo sucede que nos gustaría que una definición devolviera un elemento por defecto en un “caso de esquina”. Por ejemplo, nos gustaría que la expresión head l fuera de tipo α cuando l es de tipo lista α; pero entonces nos encontramos con el problema de que head l tiene que devolver un elemento “arbitrario” de α en el caso de que l sea la lista vacía, nil.

automatización de pruebas coq

Tengo un teorema en el que demuestro que existe un objeto que satisface alguna propiedad. He demostrado este teorema construyendo el objeto. Luego, en otra prueba, me gustaría hacer referencia al objeto definido en el primer teorema en el enunciado del segundo teorema. Sé que el objeto debería ser accesible si cierro mi demostración con Defined en lugar de Qed, pero no sé cómo acceder a él. Por ejemplo:

donde la prueba de T2 utiliza este mismo objeto. Puedes encontrar que ciertas tácticas (concretamente, exactas, doblemente si esto es algo que vive en Prop) te ayudarán aquí ya que te permiten manipular objetos de prueba crudos más fácilmente.