Desarrollo Formal de Programas Clase 11-12

Anuncio
Working Hypothesis
Desarrollo Formal de Programas
Clase 11-12
Camilo Rueda 1
1 Universidad
Javeriana-Cali
PUJ 2007
Working Hypothesis
Oz
Modelar programas
Sistema abstracto: Considerar un sistema que recibe datos y
devuelve inmediatamente el resultado.
Parte estática:
Especificar el tipo de las variables de entrada
Especificar las propiedades de las variables de entrada
Especificar el tipo de las variables de salida
Parte dinámica:
Uno o más eventos que definen la especificación de las
propiedades del resultado
Working Hypothesis
Oz
Ejemplo: Buscar un elemento en una secuencia
Variables de entrada:
s: la secuencia
x: el elemento que se busca
Especificar el tipo de las variables de entrada:
s ∈ 1..n → N
x ∈N
Especificar las propiedades de las variables de entrada:
n ∈ N1 : la secuencia no es vacı́a.
x ∈ ran(s): el elemento que se busca está en la secuencia
Especificar el tipo de las variables de salida
r ∈ 1..n: el ı́ndice en el que se encuentra x
Working Hypothesis
Oz
Buscar un elemento en una secuencia (2)
Propiedades de la variable de salida
s(r ) = x
Evento
Final=
any
j
where j ∈ 1..n ∧ s(j) = x
then r := j end
Working Hypothesis
Oz
Refinamiento
Imaginar el proceso que conduce a la respuesta
Identificar nuevas variables para describir ese proceso.
Definir las propiedades de las nuevas variables
Lo anterior constituye el invariante de encadenamiento
s
1
n
j
El elemento no se ha encontrado hasta ahora:
j ∈ 1..n ∧ x 6∈ ran(s ↑ (j − 1))
Working Hypothesis
Oz
Refinamiento(2)
INV: j ∈ 1..n ∧ x 6∈ ran(s ↑ (j − 1))
Encontrar una inicialización que satisface el invariante
Inic=
begin
j := 1 end
Deducir del invariante cuándo termina el proceso.
s(j) = x
Refinar el evento final de acuerdo a esto
Final=
when s(j) = x then
r := j end
Working Hypothesis
Oz
Refinamiento(3)
INV: j ∈ 1..n ∧ x 6∈ ran(s ↑ (j − 1))
Escribir un evento para el (los) complementos de la guarda
Avance=
when s(j) 6= x then
j := j + 1 end
Escribir un variante de los eventos nuevos (no finales)
VARIANTE: n − j
Las obligaciones de prueba son las mismas que para todo
sistema
Working Hypothesis
Oz
Programa completo
INV: j ∈ 1..n ∧ x 6∈ ran(s ↑ (j − 1))
Inic=
begin
Final=
when s(j) = x
then r := j end
j := 1 end
Avance=
when s(j) 6= x
then j := j + 1 end
VARIANTE: n − j
Working Hypothesis
Oz
En lenguaje de programación
begin
j := 1;
while s(j) 6= x
do j := j + 1
invariant j ∈ 1..n ∧ x 6∈ ran(s ↑ (j − 1))
variant n − j
end ;
r := j
end
Oz
Working Hypothesis
Ejercicio en clase
Dadas dos secuencias no vacı́as s y t
Decir si t está contenida en s
s
3
5
1
2
t
3
8
6
9
3
8
6
9
5
7
.....
Debe devolver como respuesta “si” o “no”.
Descargar