Vous êtes sur la page 1sur 9

ndice

Contexto
Biografa de Hoare..................................................pag. 3
Lgica de Hoare
Definicin.................................................................pag. 4
Correccin: parcial y total........................................pag. 5
Reglas generales....................................................pag. 6
Bibliografa..............................................................pag. 8

Pgina
1

Biografa de Hoare
Antes de comenzar a hablar de la lgica de Hoare, primero debemos saber quin fue l.
Charles Antony Richard Hoare, tambin conocido como "Tony" Hoare, naci el 11 de enero
de 1934 en la ciudad de Colombo. Tony recibi la educacin secundaria en la Escuela
Dragn en Oxford y la Escuela del Rey en Canterbury. Su educacin universitaria tambin
estaba en Oxford. Su carrera involucr el estudio del latn y el griego, as como la filosofa. l
decidi estudiar filosofa moderna, que proporciona un camino para entender la lgica.
En su graduacin en 1956, Tony fue llamado a la Royal Navy. Al trmino del servicio
obligatorio dos aos de servicio militar, regres a Oxford para estudiar Estadstica y comenz
la programacin de computadoras en Mercurio Autocode.
Cuando Hoare se mud de la industria a la academia en 1968, Hoare hizo dos pasos
adicionales audaces, primero descarta los diagramas de flujo y desarroll un sistema de
lgica para razonar acerca de los programas que utilizan las especificaciones de
comportamiento comunicado que han llegado a conocerse como triples de Hoare o ternas de
Hoare. En segundo lugar, argument que su sistema "axiomtica" podra ser visto como una
forma abstracta de la grabacin de la semntica de los lenguajes de programacin.
El primero de estos pasos tiene el profundo efecto de la apertura de una forma de desarrollar
programas demostrables en lugar de tratar su verificacin como una preocupacin post
hoc. Hoare publicado una serie de acontecimientos de esta idea, y la bsqueda de la
"semntica Hoare" ha tenido un efecto profundo en la comprensin de los lenguajes de
programacin y la tarea de razonamiento acerca de los programas.
Tony Hoare se convirti en profesor en la Universidad de Oxford en 1977 e hizo otro paso
audaz intelectual: en un artculo de 1978 en las Communications of the ACM (y
posteriormente en su libro Communicating Sequential Processes) propuso un
lenguaje (CPS), donde la interaccin entre los programas se limit a pre-comunicaciones
previstas. CSP ha inspirado una gran cantidad de nuevas investigaciones, incluidas las
herramientas que han alentado su uso en aplicaciones industriales.

Tony se retir de la Universidad de Oxford en 1999, pero no de la investigacin activa. Se


uni Laboratorio de Investigacin de Microsoft en Cambridge (Reino Unido) y prosigue
activamente varias ideas de investigacin. Su libro " Unifying Theories" ha atrado a un
pblico similar entre los investigadores como sus contribuciones anteriores. Con su
Pgina
2

propuesta de proseguir la investigacin " Grand Challenges", que dirige conjuntamente la


iniciativa internacional sobre "Verified Software".

Pgina
3

Lgica de Hoare
Desarrollada por Hoare en 1969, la lgica de Hoare es una lgica que permite probar la
verdad o falsedad de propiedades de programas imperativos sin concurrencia o paralelismo.
La caracterstica central de la lgica de Hoare son las ternas de Hoare, basado en el
diagrama de flujo anotado:

Este describe como la ejecucin de una pieza de cdigo cambia el estado del programa. Es
de la forma:
{P}
{Q}
{P} C {Q}

Donde P y Q son afirmaciones y C es un comando, que puede ser desde una sentencia o
conjunto de sentencias hasta un programa entero. P se llama precondicin y es cualquier
asercin que solo implica al estado inicial, Q se llama postcondicion y es una asercin que
solo implica al estado final, siendo una asercin una sentencia lgica que hacen referencia a
un estado de sistema. Cuando se cumple la precondicin, la ejecucin del comando
establece la postcondicion.
La Lgica de Hoare ofrece axiomas y reglas de inferencia para todas las construcciones de
un sencillo lenguaje de programacin imperativo. Existen reglas para la concurrencia, los
procedimientos, los saltos y los punteros.
La lgica de Hoare utiliza dos lenguajes formales:
-Un lenguaje de programacin imperativo (LP) para C
-Un lenguaje de formula (LF) para {P} y {Q}. En LF se usan los tipos (enteros, reales,
booleanos, etc.), funciones(suma de enteros, suma de reales, etc.) y predicados(<, >, etc.)
usados en el LP, incluidos los que son definidos por el mismo usuario.
En caso de que la terna de Hoare tenga la forma {P}C{P} siendo {P} una asercin que es a la
vez precondicin y postcondicion, esta pasara a denominarse invariante.

Correccin: parcial y total

Pgina
4

La correccin sirve para, tal como dice su nombre, ver si la terna es vlida o no, para esto
te dice que si tienes una precondicin {P}, una postcondicion {Q} y un comando o parte
de cdigo C, entonces {P}C{Q} ser correcto si en todo caso inicial que satisface a {P} el
comando da como resultado un estado final que satisface a {Q}.
La correccin tiene dos tipos, que debemos distinguir para no cometer errores ms
adelante:

Correccin parcial.-

{P}C{Q} es parcialmente correcto si el estado inicial satisface


{P} y el estado final de C satisface {Q}. Este tipo de correcion es comnmente la primera
en probarse y solo hay dos posibles modos de terminacin anormal:
-Bucle infinito.
-Error de ejecucin.

Correccin total.-

Se da cuando un cdigo adems de ser correcto parcialmente,


tambin termina el proceso; en el caso de cdigos sin bucles, la correccin parcial de
estos tambin implica la correccin total. Es importante tener en cuenta estos tipos de
correccin ya que las ternas no se aplican solo a cdigos enteros, sino tambin a partes
pequeas de cdigo o comandos, por lo que el estado final de una terna puede no acabar
el proceso del cdigo.

Pgina
5

Reglas generales
1) Fortalecimiento y debilitamiento de aserciones.Siendo A y B dos aserciones, se dice que A es ms fuerte que B si AB y tambin
se puede decir que B es ms dbil que A
si una asercin es fortalecida disminuye el nmero de estados que la pueden
satisfacer, y si AB entonces todos os estados que satisfacen A tambin
satisfacen B pero no en viceversa.
Ej.: i>1 es ms fuerte que i>0, porque siempre que i>1 se cumpla, implicara que
i>0. Por lo tanto i>1 i>0

1.1) Fortalecimiento de las precondiciones.Si {P}C{Q} es correcto y P1P se puede afirmar que {P1}C{Q} es correcto:
P P

{ P } C {Q }
{ P } C {Q }

1.2) Debilitamiento de las postcondicion.Una vez que {P}C{Q} y QQ1 hayan sido establecidos, se puede concluir que
{P}C{Q1}:
{ P } C {Q }
Q Q
{ P } C {Q }

1.3) Regla de la conjuncin.Esta regla permite reforzar la precondicin y postcondicion a la vez, siendo C
una parte de un cdigo:

{ P } C { Q }
{ P } C { Q }
{ P P } C {Q Q }

1.4) Regla de la disyuncin.Esta regla permite debilitar la precondicin y postcondicion a la vez, siendo C
una parte de un cdigo:
Pgina
6

{ P } C { Q }
{ P } C { Q }
{ P P } C {Q Q }

2) Reglas para la correccin.2.1) Asignacin.En este caso el comando C tiene la forma V = E.


si el estado inicial es s, entonces el estado s1 despus de la asignacin ser
igual a s, sustituyendo V por el resultado de evaluar E:

{ P } V =E {Q }

2.2) Composicin o concatenacin.Sean C1 y C2 dos partes de un cdigo y C1;C2 su concatenacin, se puede


afirmar que:

{ P} C { R}
{ R } C {Q }
{ P } C ; C {Q }

2.3) Instruccin if.Tiene dos bloques C1 y C2 tienen la misma postcondicion Q, mientras la


formula P y B y, respectivamente, con su negacin B, son precondiciones,
entonces se bifurca y sale::

{ P B } C {Q }
{ P B } C {Q }
{ P } if B thenC thenC { Q }

2.4) While parcial.Se trata de la regla que permite calcular las pre y post condiciones de un
bucle While satisfaciendo la propiedad de correccin parcial:

{ P B } C {P }
{ P } while B do C { P B }

Pgina
7

Pgina
8

Bibliografa
http://gpd.sip.ucm.es/charlas/20130423RicardoHoare/mainFDIAbril13.pdf

http://www.infor.uva.es/~jvalvarez/docencia/tema8.pdf

http://www.cs.cmu.edu/~aldrich/courses/413/slides/24-hoare.pdf

Pgina
9