Você está na página 1de 5

INTRODUCCIÓN

En la parte de análisis de algoritmo nos nace dudas muy grande y a la vez muy
importantes, tales como. ¿Cómo saber si mi algoritmo está hecho para hacer lo
que yo realmente quiero? ¿Cómo saber si mi algoritmo aceptara todas las
entradas que yo le dé y me dará un salida correcta?
Para estas dudas procedemos a usar métodos diversos, el primer método que a
todos se les ocurre prácticamente de manera nata es el de introducir una
cantidad de datos finitos y así espera que nos dé una cantidad finita de
resultados correctos, en la práctica este método es correcto, pero no nos da un
cien por ciento o un porcentaje alto de efectividad en otras palabras puede que
haya datos de entrada que hagan colapsar nuestro algoritmo.
Por eso como dije previamente hay una variedad de métodos y nos centraremos
en una que el “Terna de Hoare” la cual nos ayudara llegar, mediante inferencias
lógicas, a una conclusión segura y así poder saber los valores que admite
nuestro algoritmo.
Espero que con esta monografía les ayuda a entender más sobre este método
con sus pasos y pautas a seguir, así poder profundizar más sobre el grandioso
tema de análisis de algoritmos.
LÓGICA DE HOARE
Desarrollada por C.A.R. Hoare (1969), es una lógica que permite probar
la verdad o falsedad de propiedades de programas imperativos (especialmente
corrección y terminación) sin concurrencia o paralelismo. Sir Charles Antony
Richard Hoare (Colombo, Sri Lanka, 11 de enero de 1934), también conocido
familiarmente como Tony Hoare, es un científico Británico en computación,
conocido sobre todo por la invención, en 1960 de Quicksort, que es el algoritmo
de ordenamiento más ampliamente utilizado en el mundo, y probablemente el
algoritmo de cualquier tipo más utilizado. También se le conoce por el desarrollo
de la Lógica de Hoare, y por el lenguaje formal CSP (tercer trabajo más citado
en computación de acuerdo con las estadísticas de Citeseer), utilizado para
especificar interacciones entre procesos concurrentes que sirve de base para la
definición del lenguaje de programación Occam.
Definición
La lógica de Hoare es un sistema formal desarrollado por C.A.R. Hoare y
posteriormente refinado por otros investigadores que proporciona a una serie de
reglas de inferencia para razonar sobre la corrección de programas imperativos
con el rigor de la lógica matemática.
Iniciada en 1969 para programas secuenciales y extendido por varios
investigadores a programas concurrentes, es el más aceptado y el que más
influencia ha tenido en la metodología de la programación. Esta técnica plantea
un sistema de axiomas y reglas de inferencia que sirve para demostrar la
corrección parcial de programas trabajando directamente con el texto de los
mismos. Cada clase de programas se define usando una semántica operacional
y se propone un sistema deductivo que permite la verificación de diversas
propiedades. La Lógica de Hoare ha dado origen a diversos lenguajes de
especificación, entre los que destaca CSP (Communicating Secuencial Process),
un lenguaje orientado a procesos que desarrolló Hoare, el cual se usa hasta el
momento para la especificación de sistemas concurrentes. CSP ha servido de
base para otros lenguajes de especificación formal orientados a procesos como
LOTOS (un lenguaje de la ISO para especificar sistemas concurrentes). Por otro
lado la Lógica de Hoare se puede utilizar para especificación y verificación de
programas secuenciales, distribuidos o concurrentes..
La lógica de Hoare es una extensión de la lógica de predicados de primer
orden para razonar sobre la corrección de programas imperativos construidos
sobre una signatura (S). Esta extensión se obtiene introduciendo un lenguaje de
comandos con el que se construyen los programas y una relación especial para
expresar el comportamiento de un programa, así como un conjunto de reglas de
cálculo para la manipulación de las expresiones de comportamiento.
Basada en la idea de diagrama de flujo anotado:

S es una “frase” de código en un programa de alto nivel, con una única


entrada y una única salida normal.
◦ Instrucción.
◦ Bloque de instrucciones consecutivas.
◦ Un programa o subprograma.

Cada frase S denota una relación 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 instrucción 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, fórmulas de la Lógica de Primer Orden (Lógica de
Predicados).
◦ P ≡ Pre condición (se refiere al estado previo a S)
◦ Q ≡ Pos condición (se refiere al estado posterior a S)
Notación: {P}S{Q}
Esta lógica fue publicada por Hoare en 1969 donde mencionó las contribuciones
de Robert Floyd, que había publicado un sistema similar para los diagramas de
flujo.
Característica:
La principal característica de esta lógica es la terna “{Q} S {R}”, donde Q y R son
predicados lógicos que deben cumplirse para que el programa S funcione. Es
decir, que si el programa S comienza en un estado válido en Q, entonces el
programa termina y lo hace en un estado válido para R.
Este método de pre condición (Q) post condición(R) es la base del diseño de
software por contrato.
Postcondiciones:
Es una condición o predicado lógico que siempre debe cumplirse justamente
después de la ejecución de una sección de código o de una operación
(especificación formal). Las postcondiciones se prueban a veces mediante
aserciones incluidas en el código. A menudo, las postcondiciones se incluyen
simplemente en la documentación de la correspondiente sección de código.

Por ejemplo: el resultado de un factorial es siempre un entero mayor o igual que


1. De este modo un programa que calcula el factorial de un número dado tendría
como postcondiciones que el resultado debe ser un entero y que éste debe ser
mayor o igual que 1.

Concepto de corrección:
Si {P}C{Q} es un código con la precondición {P} y la postcondición {Q}, entonces
{P}C{Q} es correcto si cada estado inicial posible que satisfaga {P} da como
resultado un estado finalque satisface {Q}.
Dentro de este concepto debemos distinguir entre corrección total y parcial.
– Corrección parcial: se dice que {P}C{Q} es parcialmente correcto si el estado
final de C, cuando termina el programa (aunque no se le exige esta premisa),
satisface {Q} siempre que el estado inicial satisface {P}.
– Corrección total: Se da cuando un código además de ser correcto parcialmente
termina.
Los códigos sin bucles siempre terminan por lo que la corrección parcial implica
la corrección total. Esta distinción es esencial sólo en el caso de códigos que
incluyan bucles o recursiones.
Conclusión:
De esta forma el conocimiento de la lógica de Hoare es importante no sólo por
las aplicaciones que se derivan directamente de ella, sino también para
comprender y posteriormente aplicar diversos formalismos que de ella se derivan

Bibliografía:
http://www.infor.uva.es/~jvalvarez/docencia/tema8.pdf
http://www.lcc.uma.es/~jmmb/ttaadd/ttaadd2-2.pdf
http://lsi.ugr.es/~mcapel/docencia/doctorado/seguro/mf7.pdf
http://www.dc.uba.ar/materias/int-com/2012/cuat1/Descargas/C6
http://www.buenastareas.com/
https://es.wikipedia.org/wiki/Postcondici%C3%B3n
https://es.wikipedia.org/wiki/L%C3%B3gica_de_Hoare