Professional Documents
Culture Documents
x : 0<x < 45 : x < y+2 >
- Cuantificador existencial , -x : P(x),
<
-x : x eT : P(x) >
o
<
-x : R(x) : P(x) >
Esto significa que para alguna variable x correspondiente al rango especificado, se satisface el
predicado P
- Cuantificador Sumatoria
. (
i : R( i) : e[i] )
Con esta expresin se indica la suma de los elementos e(i) para valores de i que satisfacen el rango
R( i) .
Cuando el rango de la variable i es vaco, la sumatoria es 0, el elemento neutro de la suma.
- Cuantificador Producto
( i : R( i) : e[i] )
Con esta expresin se indica el producto de las valores e(i) para valores de i que satisfacen el rango
R( i)
Cuando el rango de la variable i es vaco, el producto es el valor 1, el elemento neutro del producto.
- Cuantificador Mximo
Este cuantificador se utiliza para expresar el mximo sobre una serie de valores
(max i : R( i): e(i)).
El cuantificador evala e(i) para cada valor de i en el rango R(i) y devuelve el mximo de estas
evaluaciones. Para que siempre pueda devolver un valor, el rango de este cuantificador no puede
ser vaco.
Ejemplos: Dada la siguiente declaracin entero v [N], donde v es un arreglo de componente enteras
y N>1, formalizar las siguientes aserciones
x aparece como componente de v.
Podemos utilizar el cuantificador existencial, para decir que existe una posicin del vector donde
aparece el valor x:
( -i : 0 i N-1 : v[i] ==x),
v se anula en algn punto.
( -i : 0 i < N : v[i] == 0).
- v tiene valores positivos en todas sus componentes.
( i : 0 i N-1 : v[i] > 0).
x aparece una sola vez como componente de v.
Utilizando el cuantificador existencial y el universal podemos escribir
( -i : 0 i < N : v[i] == x) . ( j : 0 j N-1 .j = i : v[j]
!=
x)).
Unidad N 4 Verificacin Formal de Algoritmos
Algoritmos y Resolucin de Problemas
7
x es la suma de las variables de v.
x= (
i : 0 i < N : v[i]).
x es el mximo de las componentes de v.
Esta asercin se puede expresar utilizando los operadores universal y existencial:
( -i : 0 i N-1 : x == v[i]) . ( j : 0 j N-1 : v[j] x).
Tambin se puede utilizar el cuantificador max, de la siguiente forma general:
x = (max i : 0 i N-1 : v[i]). Siendo el rango 0 i N-1 no vaco
m es el menor ndice de v que contiene el valor x.
m = (min i : 0 i N-1 . v[i] == x : i ).
El valor de cada componente de v es el doble de su ndice.
Podemos expresarlo, con un cuantificador universal, de la siguiente manera:
( i : 0 i N-1 : v[i] == 2 * i).
w es la imagen especular de v.
La imagen especular significa que w es la imagen reflejada en un espejo .Por tanto los elementos
sealados mediante las flechas deben ser iguales.
0 N-1 0 N-1
Se debe comparar la primera componente de w (w [0]) con la ltima de v (v [N-1]) , la segunda de w
(w [1]) con la penltima de v [N-2])
En general la posicin i debe compararse con la posicin N - i - 1.
Utilizamos un cuantificador universal, la especificacin es:
(
El resultado de la sustitucin simultnea es:
( )
x-y, z
x, y
3*x+y = 3*(x-y) +z
La sustitucin consecutiva resulta:
( )
( )
3*x+y
z
x y
x
y
=
( )
z
y
3* (x-y) +y =3*(x-z) +z
Ejemplo 13: Probar que ( == 3( ==
2
))
,
,
( == 3( ==
2
)
2 ,
x, y
((x == 3) (y == m ))
y x
.
=
( )
2
x
(x = =3) (y == m )
x
y
y
.
a - ( == 3( ==
2
))
,
,
El resultado de la sustitucin simultnea es: y == 3 x = =m
2
.
Para que este predicado sea cierto hace falta que y tenga valor 3; m puede tomar cualquier valor
pero x debe ser su cuadrado.
Sustitucin
Simultanea
Sustitucin
Consecutiva
3*(x-y) +z = 3*(x-z) +z
Unidad N 4 Verificacin Formal de Algoritmos
Algoritmos y Resolucin de Problemas
14
b- ( == 3( ==
2
)
En este caso tenemos dos sustituciones secuenciales. Primero se lleva a cabo la ms interna:
( )
2
x
(x == 3 y == m )
x
y
y
.
( )
2
(y == 3 ) (y == m )
x
y
. (x == 3 ) ( x == m
2
)
El hecho de que este predicado sea cierto es independiente del valor de y pero x debe valer 3 y por
tanto m debe valer 3.
4.5.1.2. Sentencia compuesta: Concatenacin de cdigo
La concatenacin significa que las partes del programa se ejecutan secuencialmente de tal forma
que el estado final de la primera parte de un cdigo se convierte en el estado inicial de la segunda
parte del programa.
Regla de la concatenacin
Sean C1y C2 dos partes de un cdigo y sea C1; C2 su concatenacin. Si {P} C1{R} y {R}C2{Q}
son ternas de Hoare correctas entonces se puede afirmar que:
{P} C1 {R}
{R} C2 {Q}
{ P} C1; C2 {Q}
Esto significa que para demostrar que la terna { P} C1; C2 {Q} es correcta, se debe encontrar el
predicado intermedio { R } que es postcondicin de C1 y precondicin de C2
Ejemplo 14: Demostrar que el siguiente cdigo es correcto
{ } c=a+b; c=c/2 {c==(a+b)/2}
Para esta demostracin se deben realizar 2 pasos: { } c=a+b; { P } c=c/2 {c=(a+b)/2}
a- En primer lugar se tiene que encontrar la precondicin de c=c/2 a la que llamaremos {P},
sabiendo que se cumple la poscondicin {c==(a+b)/2}
{ P} c=c/2 {c==(a+b)/2}
P=
(c=
a+b
2
)
c
c
2
c/2=(a+b)/2
Por tanto { P}= {c==(a+b)}
b- { P} = { c==a+b } es la poscondicin de c=a+b, ahora es necesario encontrar la precondicin P, tal
que:
{P} c=a+b {c=a+b}
Entonces {P}={c
==a+b, c==a+b } (c=a+b)
c
a+b
(a+b)=(a+b)}
{Pmd }= { }
1
dado que la igualdad es vlida para cualquier estado.
Entonces: { } c=a+b {c/2==(a+b)/2} como queramos probar.
Ejemplo 15 Demostrar que el siguiente cdigo es correcto:
{ } s=1; s=s+r; s=s+r*r {s==1+r+r2}
1 2 3
1
Representa la asercin vaca que se puede entender como verdadero para todos los estados.
Unidad N 4 Verificacin Formal de Algoritmos
Algoritmos y Resolucin de Problemas
15
En este caso se deben realizar 3 pasos para encontrar { P} y { P} tal que
{ } s=1; { P} s=s+r; { P}s=s+r*r {s==1+r+r
2
}
1 2 3
Comenzamos encontrando la precondicin de la ltima parte del cdigo, la parte 3:
3
{P} s =s + r*r {s =1 + r + r
2
}
{P} = ( =1 + +
2
)
+
+ = 1 + +
2
+
2
= 1 + +
2
= 1 +
{ P} = {s ==1 + r}
Por tanto { s ==1 + r } s =s + r*r {s ==1 + r + r
2
}
2
La precondicin encontrada { P}= {s==1+r } es la postcondicin de la segunda parte del cdigo , se
debe por lo tanto encontrar la precondicin: { P}
{P} s=s+r {s==1+r}
{P} = ( =1 + +
2
)
+
+ = 1 + s =1 {P} = {s==1}
{P} = { s=1}
{ s ==1 } s =s+r { s ==1+r }
1
La precondicin encontrada {s==1} es la postcondicin de la primer parte de la sentencia
compuesta, entonces la precondicin ser:
{P} s =1 { s ==1}
{P} = ( = 1)
1
1 = 1 { }
{ } s:=1 { s= =1}
Queda demostrado que { } s =1; s =s + r; s =s + r*r {s = =1 + r + r
2
} es correcto
Ejemplo 16 Demostrar que el siguiente cdigo, que permite el intercambio de valores es correcto:
{a==A,b==B} h=a; a=b; b=h {a==B,b==A}
1 2 3
Considerando las tres acciones que constituyen la sentencia compuesta dada, es necesario
encontrar { P} y { P}
{a==A, b==B} h=a; { P} a=b; { P} b=h {a==B,b==A}
1 2 3
Encontremos en primer lugar la precondicin de la tercer sentencia { P} b=h {a==B,b==A}
{P} = ( = , = )
{ == , == }
Entonces { a ==B , h ==A } b=h {a ==B, b ==A }
Encontremos ahora la precondicin de la parte 2, es decir { P}
{P} a=b { a=B, h=A}
{P} = ( = , = )
{ == , == }
{b==B , h==A } a=b { a==B ,h==A}
Unidad N 4 Verificacin Formal de Algoritmos
Algoritmos y Resolucin de Problemas
16
Finalmente encontramos la precondicin de la parte 1
{P} h =a {b ==B, h ==A}
{P} = ( = , = )
{ == , == }
{a ==A, b ==B} h =a {b==B, h==A}
Se demuestra entonces que {a==A, b==B} h =a; a =b; b =h {a ==B, b ==A} es correcto
Ejemplo 17 Podras decir que realiza el siguiente algoritmo?
Sean x e y variables enteras
entera x, y
x= x-y
y= x+y
x= y-x
Para conocer el efecto de este segmento de algoritmo usamos la postcondicin general: x=A .
y=B para indicar los valores de las variables x e y despus de la ejecucin de la accin.
Encontremos la precondicin ms dbil:
pmd(x= x-y ; y= x+y; x= y-x , x=A . y=B )
( )
( )
x=A y=B
x y
x y
y x
x
y
x
| |
|
\ .
( )
( )
y-x=A y=B
x y
x y
y
x
+
( ) x+y-x=A x+y=B
x y
x
( ) y=A x+y=B
x y
x
(a a) (a b)
Como a a es verdadero, {pmd} = {a b}
Como a >b ( a b)
Entonces queda demostrado {a > b} m =a {(m a) (m b)}
b. Ahora se debe demostrar
{P B} C2 {Q}, es decir {{ } (a>b)} pmd (m=b, (ma) (m b)}
{pmd} = ( )
{ b a, b b }
Como b b es verdadero {b a} { (a > b)} debe ser verdadero
Entonces queda demostrado {b a} m =b {(m a) (m b)}
Ejemplo 19 Sean x e y variable enteras, encontrar el predicado ms dbil que satisfaga la sigui ente
especificacin:
{P} si (x >0) entonces y =x sino y = -x finsi {y =4}
Se debe encontrar pmd (si (x >0) entonces y =x , y =4)
Y pmd ( si (x < 0) entonces y = -x , y =4)
Es decir se debe probar (x >0) pmd ( y=x , y=4) (x
<
0) pmd ( y= -x , y=4)
B
P
P B P B
C2
C1
P
Q
Unidad N 4 Verificacin Formal de Algoritmos
Algoritmos y Resolucin de Problemas
18
(x >0) . pmd ( = 4)
(x >0 . x=4)
Entonces si x >0 inicialmente x debe ser igual a 4.
(x < 0) . pmd
( = 4)
(x < 0 . -x =4) (x < 0 . x = -4)
Entonces si x <0 , inicialmente debe ser igual a 4.
Como se observa para que y valga 4 despus de la ejecucin de esta instruccin, x debera valer 4
o -4 antes de su ejecucin. Es decir que la instruccin hace que y tome le valor absoluto de x.
Ejemplo 20: Calcular la precondicin ms dbil del siguiente fragmento de programa:
Si ( y == 0 )
entonces x = 0
sino x = y 1
finsi
{ x ==y }
(y =0) pmd ( x=0 , x=y) (y != 0) pmd ( x= y-1 , x=y)
((y =0) (0=y) ) ((y 0) falso)
verdadero ( (y=0) verdadero)
( ( y=0) verdadero) entonces pmd= { y==0 }
Esto significa que la precondicin para que el fragmento del programa sea vlido es { y==0 }
4.6 Bibliografa
- Backhouse Roland.( 2008.) Algorithim Problem Solving.
- Backhouse Roland (2003.) Program Construction: Calculating Implementations from
specifications. The University of Nottingham. UK. Wiley
- Blanco, Javier,Smith.S y Barsotti.D .(2008) Clculo de Programas Facultad de Matemtica,
Astronoma y Fsica. Universidad Nacional de Crdoba.
- Mart Oliet Narciso, Segura Daz C y Verdejo Lpez Jos (2006). Especificacin, derivacin y
anlisis de algoritmos. Pearson Prentice Hall.
- Mart Oliet Narciso, Narciso y otros. Lgica matemtica para informticos. Edit. Pearson
Prentice Hall. Idioma: Espaol
Documentos de Internet
- Verificacin de programas http://www.exa.unicen.edu.ar/catedras/ccomp2/Verificacion.pdf
- Verificacin de Programas imperativos http://ccia.ei.uvigo.es/docencia/VF/tema6.pdf
- Verificacin Formal de Algoritmos. http://www.infor.uva.es/~jvalvarez/docencia/tema8.pdf
- La verificacin formal http://trevinca.ei.uvigo.es/~alma/docencia/mfes/TEMA3.pdf
- Especificacin de algoritmos Rafael del Vado Vrseda Dpto. de Sistemas Informticos y
ComputacinUniversidad Complutense de Madrid
http://www.fdi.ucm.es/profesor/rmartine/EDI/Especificacion.pdf
v
v