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”.