¿Cómo funcionan las 'tácticas' en asistentes de prueba?
Sospecho que esta respuesta será un poco divagada.
Primero, no es suficiente preguntar "cómo funcionan las tácticas en asistentes de prueba" porque funcionan de manera diferente en asistentes de prueba diferentes. Hoy se usan dos clases principales de asistentes: las derivadas del LCF original, como Isabelle, HOL y HOL light, y asistentes de pruebas basados en la teoría de tipos como Coq y Matita. En estas dos clases diferentes de asistente de pruebas, las tácticas funcionan de diferentes maneras, una reflexión de que lo que está sucediendo debajo del capó, por ejemplo, en Isabelle, es bastante diferente a lo que sucede debajo del capó, por ejemplo, en Matita.
Pregúntese: ¿qué sucede cuando intentamos probar una proposición P en Matita? Introducimos una X metavariable con tipo P. Luego jugamos un juego, por así decirlo, donde refinamos X, agregando más y más estructura al término incompleto, hasta que obtengamos un término lambda completo (es decir, que no contenga más metavariables). Una vez que estamos en posesión de un término lambda completo, escribimos verificar con respecto a P, asegurándonos de que habita el tipo requerido. Luego vemos que en Coq y Matita, una táctica es simplemente una función de términos de prueba incompletos a términos de prueba incompletos, que con suerte agrega un poco de estructura al término después de la aplicación (esta observación ha motivado bastante trabajo reciente de, por ejemplo, Jojgov , Pientka y otros).
Por ejemplo, la "introducción" de la táctica de Matita introduce una abstracción lambda sobre el término existente, "casos" introduce una expresión de coincidencia en el término y "aplicar" introduce una aplicación de un término al otro. Estas tácticas básicas se pueden unir, utilizando funciones de orden superior, para crear otras más complejas. Sin embargo, la idea básica es siempre la misma: una táctica siempre tiene como objetivo agregar un poco de estructura a un término de prueba incompleto.
Tenga en cuenta que los implementadores tienen como objetivo devolver un término que vuelva a escribir después de cada aplicación táctica. Estrictamente hablando, no es necesario que lo hagan, ya que todo lo que importa para los asistentes de pruebas basados en la teoría de tipos es que, cuando el usuario llega a Qed la prueba, estamos en posesión de un término de prueba que habita la proposición P. Cómo llegado a este término de prueba es en gran medida irrelevante. Sin embargo, tanto Coq como Matita tienen como objetivo devolver al usuario un término de prueba (posiblemente incompleto) que comprueba después de cada aplicación de táctica. Sin embargo, este invariante puede (y a menudo falla), especialmente en lo que respecta a las dos comprobaciones sintácticas que los asistentes de pruebas basados en CIC deben implementar.
En particular, podemos llevar a cabo lo que parece ser una prueba válida, aplicando una serie de tácticas hasta que no queden objetivos abiertos. Luego llegamos a Qed la supuesta prueba, solo para descubrir que el verificador de terminación de Matita, o su estricto verificador de positividad, se queja, ya que el término de prueba generado por las tácticas ha invalidado una de estas verificaciones sintácticas (es decir, una posición metavariable en argumento para una llamada recursiva se instancia con un término que no es sintácticamente más pequeño que el argumento original). Esto es un reflejo de que la teoría del tipo CIC no es, en cierto sentido, "lo suficientemente fuerte" y no refleja los requisitos sintácticos de positividad o tamaño en sus tipos (una observación que motiva los tipos de tamaño de Abel y algunos trabajos recientes sobre tipos de positividad )
Por otro lado, los asistentes de prueba de estilo LCF son bastante diferentes. Aquí, el núcleo consiste en un módulo (generalmente implementado en una variante de ML), que contiene un tipo abstracto "thm", y funciones que implementan las reglas de inferencia de la lógica del asistente de pruebas, asignando "thm" a "thm", y así adelante. Confiamos en la disciplina de mecanografía de ML para garantizar que la única forma de construir un valor de tipo "thm" es a través de estas reglas de inferencia (tácticas básicas). El núcleo de Isabelle está aquí .
Las pruebas consisten entonces en una serie de aplicaciones de estas tácticas básicas (o tácticas más complejas y más grandes, que nuevamente se hacen al unir tácticas más simples usando funciones de orden superior --- en Isabelle, las funciones de orden superior, llamadas tácticas, pueden ser visto aquí ). A diferencia de los asistentes de prueba basados en la teoría de tipos, no es necesario en un asistente de estilo LCF mantener un término de prueba explícito testigo por ahí. La exactitud de la prueba está garantizada por la construcción y nuestra confianza en la disciplina de mecanografía de ML (muchos asistentes, por ejemplo, Isabelle, sin embargo, generan términos de prueba para sus pruebas).