La lógica de Hoare

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 15 de junio de 2021; las comprobaciones requieren 2 ediciones .

La lógica de Hoare ( eng. Lógica de  Hoare , también lógica de Floyd-Hoare , o reglas de Hoare ) es un sistema formal con un conjunto de reglas lógicas diseñadas para probar la corrección programas de computadora Fue propuesto en 1969 por el informático y lógico matemático inglés Hoare , desarrollado posteriormente por el propio Hoare y otros investigadores. [1] La idea original fue propuesta por Floyd , quien publicó un sistema similar [2 ] aplicado a diagramas de flujo . 

Trillizos Hoare

La característica principal de la lógica de Hoare es el triple de Hoare .  El triple describe cómo la ejecución de una pieza de código cambia el estado del cálculo. El triple de Hoare tiene la siguiente forma:

donde P y Q son afirmaciones y C es  un comando . _  _ P se llama condición previa ( antecedente ) y Q  se llama condición posterior ( consecuente ). Si la condición previa es verdadera, el comando hace que la condición posterior sea verdadera. Los enunciados son fórmulas de la lógica de predicados .

La lógica de Hoare tiene axiomas y reglas de inferencia para todas las construcciones de un lenguaje de programación imperativo simple . Además de estas construcciones descritas en el trabajo original de Hoare, Hoare y otros desarrollaron reglas para otras construcciones: ejecución concurrente , llamada a procedimiento , salto y puntero .

La idea principal de Hoare es dar a cada construcción de un lenguaje imperativo una condición previa y una condición posterior , escritas como una fórmula lógica. Por lo tanto, aparece un triple en el nombre  : precondición , construcción del lenguaje, poscondición .

Un programa que funcione bien se puede escribir de muchas maneras y, en muchos casos, será eficiente. Esta ambigüedad complica la programación. Para hacer esto, introduce un estilo. Pero esto no es suficiente. Para muchos programas (por ejemplo, aquellos conectados indirectamente con la vida humana), también es necesario probar su corrección. Resultó que la prueba de corrección hace que el programa sea más caro en un orden de magnitud (alrededor de 10 veces).

Corrección parcial y total

En la lógica estándar de Hoare, solo se puede probar la corrección parcial, ya que la terminación del programa debe probarse por separado. Además, la regla de no usar partes de programa redundantes no puede expresarse en la lógica de Hoare. La comprensión "intuitiva" del triple de Hoare se puede expresar de la siguiente manera: si P ocurre antes de que se complete C , entonces ocurre Q o C nunca terminará. De hecho, si C no termina, no hay después, por lo que Q puede ser cualquier enunciado. Además, podemos elegir que Q sea falso para mostrar que C nunca terminará.

La corrección completa también se puede probar usando una versión extendida de la regla para la declaración Mientras .

Reglas

El axioma del operador vacío

La regla para una declaración vacía establece que la declaración de salto ( sentencia vacía ) no cambia el estado del programa, por lo que una declaración que era verdadera antes de saltar sigue siendo verdadera después de que se ejecuta.

El axioma del operador de asignación

El axioma del operador de asignación establece que después de una asignación, el valor de cualquier predicado con respecto al lado derecho de la asignación no cambia con el reemplazo del lado derecho por el lado izquierdo:

Aquí se entiende la expresión P en la que todas las apariciones de la variable libre x se sustituyen por la expresión E .

El significado del axioma de la asignación es que la verdad es equivalente después de que se ha realizado la asignación. Así, si era cierto antes de la cesión, según el axioma de la cesión será cierto después de la cesión. Por el contrario, si era igual a "falso" antes de la declaración de asignación, debería ser igual a "falso" después.

Ejemplos de triples válidos:

El axioma de asignación en la formulación de Hoare no se aplica cuando más de un identificador se refiere al mismo valor. Por ejemplo,

es falso si x e y se refieren a la misma variable, ya que ninguna condición previa puede asegurar que y sea 3 después de que a x se le haya asignado 2.

Regla de composición

La regla de composición de Hoare se aplica a la ejecución secuencial de los programas S y T , donde S se ejecuta antes que T , que se escribe S;T .

Por ejemplo, considere dos instancias del axioma de asignación:

y

De acuerdo con la regla de composición, obtenemos:

Regla del operador condicional

Regla de inferencia

Regla de declaración de bucle

Aquí P es un ciclo invariante .

Regla de declaración de ciclo con total corrección

En esta regla, además de preservar la invariancia del bucle, la terminación del bucle se prueba mediante un término llamado variable del bucle (aquí t ), cuyo valor se reduce estrictamente de acuerdo con la relación bien fundada " < " con cada iteración. En este caso, la condición B debe implicar que t no es el elemento mínimo de su dominio, de lo contrario la premisa de esta regla será falsa. Debido a que la relación " < " está completamente bien fundamentada, cada paso del ciclo se define mediante miembros decrecientes de un conjunto ordenado linealmente finito .

La notación de esta regla usa corchetes, no llaves, para indicar la corrección completa de la regla. (Esta es una forma de denotar corrección completa).

Ejemplos

Ejemplo 1
— basado en el axioma de asignación.
Como , en base a la regla de inferencia, obtenemos:
Ejemplo 2
— basado en el axioma de asignación.
Si x y N son enteros, entonces , y basándonos en la regla de inferencia, obtenemos:

Véase también

Enlaces

  1. COCHE Hoare . " Una base axiomática para la programación de computadoras . Archivado el 17 de julio de 2011 en Wayback Machine ". Comunicaciones de la ACM , 12(10):576-580,583 octubre 1969. doi : 10.1145/363235.363259
  2. RW Floyd . « Asignación de palabras a los programas. Archivado desde el original el 9 de diciembre de 2008.  (enlace descendente desde 13-05-2013 [3444 días] - historia ) »  (enlace descargado) Actas de los simposios de la American Mathematical Society sobre matemáticas aplicadas. vol. 19, págs. 19-31. 1967.

Literatura