Está en la página 1de 12

Universidad Nacional Mayor de San Marcos

Facultad de Ingeniería de Sistemas e Informática

Carrera de Ingeniería de Sistemas

VERIFICACIÓN FORMAL DE HOARE

Dávila Ortega, Diego Jesús 15200015


Muñua Carrasco, Gerson 14200145
Navarro Auccasi, Leonel 14200146
Perez Llacsa, Pablo Cesar 14200169
Yacolca Rengifo, Bratt 14200161

Profesor
ESPINOZA DOMINGUEZ, ROBERT

Lima – Perú
Septiembre del 2017
[INFORME] VERIFICACIÓN FORMAL DE HAORE

INDICE

INTRODUCCIÓN................................................................................................................... 3
LÓGICA DE HOARE ..............................................................................................................4
APLICACIÓN..........................................................................................................................9
Operacional ........................................................................................................................9
Denotacional ......................................................................................................................9
Axiomática ..........................................................................................................................9
ASIGNACIÓN .................................................................................................................9
CICLOS ...........................................................................................................................9
DEMOSTRACIÓN DE CORRECCIÓN ........................................................................ 10
PRECONDICIÓN MÁS DÉBIL ..................................................................................... 10
VERIFICACIÓN DE PROGRAMAS .............................................................................. 10
CONCLUSIONES .................................................................................................................. 11
BIBLIOGRAFIA......................................................................................................................12

Universidad Nacional Mayor de San Marcos 2


[INFORME] VERIFICACIÓN FORMAL DE HAORE

INTRODUCCIÓN
La verificación formal de programas consiste en un conjunto de
técnicas de comprobación formales que permiten demostrar si un
programa funciona correctamente; más específicamente, sobre todo en
ingeniería y en la computación, es conocida con ese nombre.

La verificación formal, dentro de esas ciencias, es un método de


validación estática (se valida a través del propio código del programa, a
partir de una abstracción o de una representación simbólica) en el que,
partiendo de un conjunto axiomático, reglas de inferencia y algún
lenguaje lógico (como la lógica de primer orden), se puede encontrar
una demostración o prueba de corrección de un programa, algoritmo,
etc., aunque también se puede encontrar su refutación.

Uno de los precursores de la verificación fue Edsger Dijkstra que


publicó el libro "A Discipline of Programming", en el cual, presentó su
método de desarrollo sistemático de programas junto con sus pruebas
de corrección, todos ellos basados en la verificación formal.

En otras palabras sirve para comprobar y demostrar que


realmente un programa realiza las acciones para las que ha sido
diseñado. En algunas situaciones esto es de vital importancia, como es
el caso de los sistemas de frenado de coches y el pilotaje de aviones por
mandos electrónicos. Este propósito lógico especial se obtiene
introduciendo un lenguaje que contiene comandos básicos con el que
se construyen los programas, el lenguaje determinista IMP, y una
formulación con la que poder expresar el comportamiento de los
programas.

Universidad Nacional Mayor de San Marcos 3


[INFORME] VERIFICACIÓN FORMAL DE HAORE

LÓGICA DE HOARE
Hoare introdujo la siguiente notación para describir formalmente el
comportamiento esperado de un programa.

La verificación formal de programas consiste en un conjunto de técnicas de


comprobación formales que permiten demostrar si un programa funciona
correctamente.

Conceptos preliminares:

o Un programa es una secuencia de sentencias que transforman el


estado inicial en un estado final.
o El estado inicial es el estado anterior a la ejecución de un código.
o El estado final es el estado posterior a la ejecución de dicho código.
o El estado del sistema viene determinado por los valores de las
variables en cada momento

Nomenclatura

En la mayoría de los códigos el estado final depende del estado inicial. Por tanto
Precondición y Post-condición no son independientes entre sí. Hay dos posibles
nomenclaturas que permitan reflejar dicha dependencia:

 Representación del subíndice: mediante subíndices se indica si las


variables representan valores iniciales o finales. {aω=bα} ∧ {bω=aα}
donde ‘ω’ representa el estado final y ‘α’ el estado inicial.
 Representación de las variables ocultas: Las variables ocultas son
variables que aparecen o no en el código y que se introducen para
almacenar los valores iniciales de ciertas posiciones de memoria. Su
definición debe aparecer en la precondición.
{a=A, b=B} h:=a; a:=b; b:=h {a=B, b=A}

Entonces:

•Programa que funciona correctamente: cumple con unas especificaciones


dadas.

Universidad Nacional Mayor de San Marcos 4


[INFORME] VERIFICACIÓN FORMAL DE HAORE

•Técnicas de comprobación: La verificación consiste en un proceso de


inferencia. Por tanto cada tipo de sentencia ejecutable posee una regla de
inferencia.

•Representación formal: Ternas de Hoare

Un algoritmo se puede especificar de manera formal mediante cinco elementos:

{P} C {Q}
Donde:

.P: es una condición que se denomina precondición


.Q: es una condición que se denomina postcondición
.C: es un programa imperativo cuyo lenguaje se ha descrito anteriormente.

Precondiciones y post-condiciones:
 Las precondiciones indican las condiciones que deben satisfacer
los datos de entrada para que el programa pueda cumplir su tarea.
 Las post-condiciones indican las condiciones de salida que son
aceptables como soluciones correctas del problema en cuestión.

Ejemplo: Programa que calcula la raíz cuadrada

 Pre-condición: Que el argumento de la función no sea negativo.


 Post-condición: La raíz cuadrada de ese argumento.

Definición 1.
Un algoritmo C es correcto si y solamente si para toda posible entrada X se tiene
que P(X) ⇒Q(X, C(X)), Nótese que hay tres elementos principales en la
definición de correctitud o validez de un algoritmo: el algoritmo en sí mismo y las
condiciones impuestas a la entrada y salida del mismo.

Universidad Nacional Mayor de San Marcos 5


[INFORME] VERIFICACIÓN FORMAL DE HAORE

Las ternas de Hoare se utilizan para describir de manera formal si un algoritmo


es válido o no.

Definición 2.
Una terna {P} C {Q} es llamada terna de Hoare si

 P es un predicado describiendo una condición impuesta a la


entrada (precondición),
 Q es un predicado describiendo una condición impuesta a la salida
(post-condición),y
 C es un algoritmo.

Definición 3.
Una terna de Hoare {P} C {Q} se dice valida si C es correcto

La expresión {P} C {Q} corresponde a la corrección parcial del programa ya que


si el programa para, ha de cumplirse la postcondición Q; si no para, no hay nada
que comprobar ni refutar.

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.

Universidad Nacional Mayor de San Marcos 6


[INFORME] VERIFICACIÓN FORMAL DE HAORE

Algunos ejemplos
A continuación se muestran algunos ejemplos de ternas verdaderas y falsas, con
respecto a la corrección parcial o total.

 {P}C{T}
Es verdadera para cualquier precondición P y cualquier programa C, ya que la
post-condición {T} es, por definición, siempre verdadera.

 {T}C{T}
Esta terna es verdadera trivialmente, es un caso particular del ejemplo anterior
tomando P=T
.
 [T]C[T]
Esta terna es verdadera siempre que la computación de C termine a partir de
cualquier estado inicial.

 {X=1} X:=X+1 {X=2}


.Esta terna es verdadera, ya que si se toma el estado inicial {X=1} que cumple
la precondición y se ejecuta el programa, se obtiene el estado final {X=2}, como
indica la postcondición.

 {X=x,Y=y} X:=Y; Y:=X {X=y,Y=x}


.
Paso 0. {X=x,Y=y}
Paso 1. {X=y,Y=y}
Paso 2. {X=y,Y=y}
Esta terna es falsa (a menos que x=y), pues las variables X e Y no intercambian
sus valores, como se muestra en la computación anterior.

 {X=x,Y=y} R:=X; X:=Y; Y:=R {X=y,Y=x}


.
Paso 0. {X=x,Y=y,R:=r}
Paso 1. {X=x,Y=y,R:=x}

Universidad Nacional Mayor de San Marcos 7


[INFORME] VERIFICACIÓN FORMAL DE HAORE

Paso 2. {X=y,Y=y,R:=x}
Paso 3. {X=y,Y=x,R:=x}
Esta terna de Hoare es verdadera, las variables X e Y intercambian sus valores.

 {X=1} WHILE X != 0 DO X:=X {1=2}


Esta terna es verdadera a pesar de que la postcondición es contradictoria, pues
se trata de corrección parcial y el programa sobre {X=1} no para.

 [X=1] WHILE X != 0 DO X:=X [1=2]


Esta terna de Hoare falsa, porque el programa sobre {X=1} no para y ahora
estamos considerando corrección total en lugar de parcial.

 {T} WHILE X !=0 DO X:=X {F}


Esta terna de Hoare es falsa, porque el programa termina para el estado inicial
{X=0} que satisface trivialmente la precondición y la postcondición es, por
definición, siempre falsa.

Universidad Nacional Mayor de San Marcos 8


[INFORME] VERIFICACIÓN FORMAL DE HAORE

APLICACIÓN

Operacional
Simular la ejecución del programa en una máquina virtual.

Denotacional
Convertir el programa en una función matemática y analizar la función resultante.

Axiomática
Visualizar el programa como el resultado de la aplicación de un conjunto de axiomas y
reglas de inferencia.

ASIGNACIÓN
I Otro ejemplo:
{??}
x := 2 * abs(x) + 1
{Q2 : x ≥ 5}
I Tenemos que ...
wp(x := 2 * abs(x) + 1,Q2) ≡ def(2|x|+ 1) ∧ Q2x E
≡ true ∧ 2|x|+ 1 ≥ 5
≡ |x|≥ 2
≡ x ≥ 2 ∨ x ≤−2

CICLOS
Supongamos que tenemos el ciclo while B do S.

Definición: Definimos Hk(Q) como el predicado que define el conjunto de estados a


partir de los cuales la ejecución del ciclo termina en exactamente k iteraciones: H0(Q) ≡
¬B ∧ Q, Hk+1(Q) ≡ B ∧ wp(S,Hk(Q)) para k ≥ 0.

Axioma 5. wp(while B do S,Q) ≡ (∃k) k ≥ 0 ∧ Hk(Q).

El teorema del invariante se demuestra a partir de este axioma, proponiendo un


invariante y una función variante para el ciclo.

Universidad Nacional Mayor de San Marcos 9


[INFORME] VERIFICACIÓN FORMAL DE HAORE

DEMOSTRACIÓN DE CORRECCIÓN
Definición: Decimos que {P} S {Q} si P ⇒ wp(S,Q).

Por ejemplo, la siguiente tripla de Hoare es válida...


{P: x ≥ 10}
S: x:= x+3
{Q: x 6= 4}

... puesto que wp (S,Q) ≡ x 6= 1 y P ⇒ x 6= 1.

PRECONDICIÓN MÁS DÉBIL


Definición: La precondición más débil de un programa S respecto de una
postcondición Q es el predicado P más débil posible tal que {P}S{Q}.
Notación. wp(S,Q).
Ejemplo:
{wp(x:= x+1,Q)}
x := x + 1
{Q: x ≥ 7}

Tenemos que wp(x:= x+1,Q) ≡ x ≥ 6.

VERIFICACIÓN DE PROGRAMAS
Tenemos ahora un sistema formal para demostrar la corrección de un programa respecto
de su especificación:

1. Dados el programa y su especificaci´on: {P} S {Q}, ...


2. ... calculamos wp(S,Q), ...
3. ... y tratamos de demostrar que P ⇒ wp(S,Q).

Esto abre la posibilidad de tener verificadores automáticos de programas.

Universidad Nacional Mayor de San Marcos 10


[INFORME] VERIFICACIÓN FORMAL DE HAORE

CONCLUSIONES
En síntesis 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.

La principal característica de esta lógica es la terna o triplete “{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. Y como hemos visto este método de precondición (Q)
- pos condición(R) es la base del diseño de software por contrato.

Universidad Nacional Mayor de San Marcos 11


[INFORME] VERIFICACIÓN FORMAL DE HAORE

BIBLIOGRAFIA

 Edsger Dijkstra, Wim H. J. Feijen, A Method of Programming, Addison-Wesley, 1988

 Gila Hanna, Más que demostración formal, 1989

 Especificación, Verificación y Derivación Formal de Programas, Javier Álvez,

Xabier Arregi, Jose Gaintzarán, Paqui Lucio y Montse Maritxalar

Universidad Nacional Mayor de San Marcos 12

También podría gustarte