Professional Documents
Culture Documents
LOGICA DE HOARE
Es una lgica de predicados de primer orden que permite probar la verdad o
falsedad de propiedades de programas imperativos para razonar sobre la
correccin de programas imperativos construidos sobre una signatura (S, ). Esta
extensin se obtiene introduciendo un lenguaje de comandos con el que se construyen
los programas y una relacin especial para expresar el comportamiento de un
programa, asi como un conjunto de reglas de clculo para la manipulacin de las
expresiones de comportamiento.
Basada en la idea de diagrama de flujo anotado.
S es una frase de cdigo en un programa de alto nivel, con una nica entrada y una
nica salida normal.
Instruccin.
Bloque de instrucciones consecutivas.
Un programa o subprograma.
Cada frase S denota una relacin entre dos estados en un espacio de estados definido
por el producto cartesiano de los valores de las variables del programa. Es decir, al
ejecutar una instruccin o secuencia de instrucciones S, se modifica el valor de una o
varias variables, transitando de un estado a otro.
P y Q son anotaciones, frmulas de la Lgica de Primer Orden (Lgica de
Predicados).
P Precondicin (se refiere al estado previo a S)
Q Postcondicin (se refiere al estado posterior a S)
Notacin: {P}S{Q}
1.2.- ASERCION
Una asercin es cualquier sentencia referente a un estado del programa,
y se
Denota como {A} .
Si P es una parte de un cdigo, entonces:
Una precondicin de P, es cualquier asercin {A} que solo implica el estado
inicial.
Una postcondicin de P, es cualquier asercin {B} que solo implica el estado
final.
Si P tiene como precondicin a {A} y postcondicin a {B}, escribimos la terna:
{A} P {B}, llamada la terna de Hoare.
Ejemplo 1
Ejemplo 2
Ejemplo 3
A : { b 0 }
P : FUN DIVIDE (a,b : entero) DEV (q,r:entero)
B : { a =b*q + r }
Una implementacin de divide puede ser :
P : q = 0 ; r = a ,pues satisface la postcondicion B
Sin embargo eso no es lo que se pretende implementar
Reforzamos la precondicion
A : {a 0 , b 0 }
P : FUN DIVIDE (a,b : entero) DEV (q,r:entero)
B : { a = b*q + r r 0 r < b}
Solo existen dos enteros a, b que satisfacen {B}
CONCEPTO DE CORRECCIN
Si {P} C {Q} es un cdigo con la precondicin {P} y la postcondicin {Q},
entonces {P} C {Q} es correcto si cada estado inicial posible que satisfaga {P} da
como resultado un estado final que satisface {Q}.
Dentro de este concepto debemos distinguir entre correccin total y parcial.
CORRECION PARCIAL
Sentencias de correccin parcial En un programa real, aparecen declaraciones
de tipo y declaraciones de variables as como implementaciones de funciones
(pueden ser implementaciones incorporadas al sistema o hechas por el usuario)
que determinan la signatura del programa, adems el segundo argumento de un
comando de asignacin puede ser cualquier expresin del correspondiente tipo s
construida con constantes y funciones implementadas, y el primer argumento de
un comando de seleccin o de iteracin puede ser cualquier expresin del tipo
BOOL. En nuestros programas, aunque no vamos a considerar declaraciones de
tipo ni de variables, supondremos que existe una declaracin de signatura donde
aparecen los tipos y las constantes y funciones necesarias con propiedades
conocidas, as como una asignacin de tipo a cada variable de programa. Para
expresar el comportamiento de un programa normalmente se recurre a una
signatura (S, ) ms amplia que la que se deriva del propio programa,
incorporando tipos y funciones auxiliares que no aparecen en el programa (pero
que deben estar debidamente especificados), y a una familia de variables V ,
tambin ms amplia que la familia de variables de programa incorporando
variables nuevas o variables lgicas que tampoco aparecen en el programa, y se
introduce una relacin especial {} {}: F(V ) P RG F(V ) con la que se
expresan formulas o sentencias de correccin parcial. Al primer argumento se le
llama precondicin y al tercero postcondicin; estos argumentos estn sujetos a
una restriccin sobre las variables de programa: dichas variables slo deben
tener apariciones libres o, dicho de otro modo, las variables de programa no
deben aparecer cuantificadas. 2.2. LOGICA DE HOARE. 2-19 La validez de
estas frmulas se define del siguiente modo: {P} {Q} es vlida en una
ciclo WHILE tB DO END con invariante I, buscando una funcin f para la que
se pueda demostrar lo siguiente
1. I tB f 0,
2. {I tB f = A} {f < A}.
CALCULO DE HOARE
El clculo Hoare consiste en declaraciones en el programa de pruebas de su valor
semntico. En el programa de correccin se utiliza para la lgica de predicados de
primer orden. En este caso, las variables individuales corresponden a las variables del
programa y los smbolos funcionales incluyen todas las operaciones que se producen
en las expresiones. La prueba de significacin se realiza incluyendo una declaracin
antes de la orden a probar, llamada pre-condicin, y otro despus de la ejecucin del
comando, llamado post-condicin, de la siguiente manera:
{P} C {Q}
Donde P es la condicin previa, C es el comando de prueba, y Q es la post-condicin.
Por lo tanto, podemos decir que el significado de C est estrechamente vinculado con el
par <P, Q>, que se llama C. Sobre la especificacin de correccin C, es cierto cuando
los valores de entrada pasan por P y generan un cierto para P, C y corre y los valores de
salida pasa por Q y devolver un valor verdadero para P.
El objetivo de este mtodo es la obtencin de reglas de prueba y axiomas que nos
proporcionan el resultado de este comando, por lo axiomas que asocian y pruebas a
ciertas partes de los programas, que a su vez pueden ser diferentes, pero si tienen la
misma evidencia y axiomas asociados son equivalentes. Entonces, dado un cdigo C
que implementa B y una optimizacin del algoritmo C, dicho por C ', que implementa el
mismo algoritmo con algunas modificaciones, sin embargo, con las mismas funciones, y
teniendo en cuenta las afirmaciones iniciales P y extremo Q, por lo que es cierto que:
{P} C {Q} = {P} C {Q}.
REGLAS DEL CALCULO HOARE
Comando SKIP
No hace nada, y no tiene ningn efecto sobre el programa, est representado por el
teorema:
________________
{ P } skip { P }
Debido a que Skype no hace nada, su condicin previa debe ser el mismo que la
postcondicin en el caso P.
Comando de Asignacin
Comando If-then-else
Este comando tiene dos caminos para ser probado para una afirmacin, entonces es
necesario que los dos caminos sean ciertos, para cada uno de sus valores. Por lo tanto,
tomando como ejemplo C 'y el cdigo C y B un valor que define que se ejecutar,
tenemos la regla:
{ P ^ B } C { Q } { P ^ B } C { Q }
{ P } if B then C else C fi { Q }.
En este caso, B es una expresin booleana en los estados y en el cdigo de verificacin
de cdigo.
Comando if-then
Similar a la If-then-else, solo que en lugar de else usamos skip, por lo que contina
como est, sin hacer nada. Utilizando los mismos ejemplos de if-then-else tenemos la
regla:
{ P ^ B } C { Q } P ^ B Q (5)
{ P } if B then C fi { Q }.
Comando while
Siguiendo los ejemplos anteriores, tenemos la regla:
_______{ P ^ B } C { P }_______
{ P } while B do C od { P ^ B }
Donde P se llama bucle invariante, que para n iteraciones, while siempre debe ser
vlida.
Definicin de Fuerza
Podemos debilitar la pre-condicin y post-condicin de acuerdo con la necesidad y la
posibilidad de la prueba. Ejemplos:
{ P } C { Q } Q R
{P}C{R}
CONCLUSIONES
Tenemos que tomar en cuenta que los mtodos formales estn presentes en
bastantes campos y no solo los referidos a la ingeniera y la informtica, los
mtodos formales tienen un amplio recorrido y su utilidad y eficiencia en
desarrollo crticos estn demostradas. Sus herramientas proporcionan el soporte
BIBLIOGRAFIA