Working Hypothesis Desarrollo Formal de Programas Desarrollar software: estrategias Camilo Rueda 1 1 Universidad Javeriana-Cali PUJ 2010 Working Hypothesis Sistemas de software: especificación Contexto Propiedades de los datos del programa Variables Guardan los resultados del programa Invariante Especifica solamente los tipos de las variables Working Hypothesis Especificación: los eventos Inicialización Valores iniciales de variables de salida Eventos finales Especifican la poscondición del programa Working Hypothesis Refinamiento Imaginar un proceso Imaginar que se detiene ese proceso en un punto Definir variables para especificar el punto de detención Establecer lo que se cumple del programa en el punto de detención (invariante) inicializar variables de modo que cumplan el invariante Deducir del invariante las condiciones de terminacin escribir los eventos Working Hypothesis Estrategias de prueba Probadores de Rodin son muy poderosos Ensayar siempre primero algunos de ellos, en el orden: P0, M0 ,Npp/R, Npp/R with Lasso, P1 Si lo anterior no funciona, Asegurarse primero de que el objetivo se puede probar Working Hypothesis Estrategias de prueba (2) Hay estrategias que funcionan muchas veces: ah dc instanciar particularizar agregar hipótesis prueba por casos objetivo es un existencial hipótesis es un cuantificador universal Working Hypothesis Estrategias de prueba: ejemplo Objetivo: maxsuma ≥ fsuma(j) ∀j. j ∈ 1 .. i ⇒ maxsuma ≥ fsuma(j) sumactual + s(i + 1) ≤ maxsuma Hipótesis: i 6= n j ∈ 1 .. i + 1 Note que si se supiera que j ∈ 1 .. i entonces estarı́a ya probado! Working Hypothesis Estrategias de prueba: ejemplo Objetivo: maxsuma ≥ fsuma(j) ∀j. j ∈ 1 .. i ⇒ maxsuma ≥ fsuma(j) sumactual + s(i + 1) ≤ maxsuma Hipótesis: i 6= n j ∈ 1 .. i + 1 Note que si se supiera que j ∈ 1 .. i entonces estarı́a ya probado! Casos: i ∈ 1 .. i → a) b) i∈ 6 1 .. i Working Hypothesis Estrategias de prueba: ejemplo, cont. Objetivo: maxsuma ≥ fsuma(j) Casos: a) i ∈ 1 .. i b) i∈ 6 1 .. i Escribir en Rodin j ∈ 1 .. i, y oprimir el botón dc. Prueba del caso a): particularizar con j la hipótesis ∀j. j ∈ 1 .. i ⇒ maxsuma ≥ fsuma(j) q.e.d Working Hypothesis Estrategias de prueba: ejemplo, cont. Objetivo: maxsuma ≥ fsuma(j) Prueba del caso b): Casos: a) i ∈ 1 .. i b) i∈ 6 1 .. i agregar la hipótesis j = i + 1 probarla con P0 Rodin reescribe el objetivo: maxsuma ≥ fsuma(i + 1) Working Hypothesis Estrategias de prueba: ejemplo, cont. Objetivo: maxsuma ≥ fsuma(i + 1) ∀j. j ∈ 1 .. i ⇒ maxsuma ≥ fsuma(j) Hipótesis: sumactual + s(i + 1) ≤ maxsuma i 6= n Se puede probar? Working Hypothesis Estrategias de prueba: ejemplo, cont. Objetivo: maxsuma ≥ fsuma(i + 1) ∀j. j ∈ 1 .. i ⇒ maxsuma ≥ fsuma(j) Hipótesis: sumactual + s(i + 1) ≤ maxsuma i 6= n Se puede probar? No, porque no hay hipótesis que definan fsuma(i + 1) Hay que agregarlas (con el lazo) Working Hypothesis Ejemplo, prueba del caso b) Objetivo: maxsuma ≥ fsuma(i + 1) ∀j. j ∈ 1 .. i ⇒ maxsuma ≥ fsuma(j) Hipótesis: sumactual + s(i + 1) ≤ maxsuma i 6= n Nuevas Hipótesis: ∀k . k ∈ 1 .. (n − 1) ⇒ fsuma(k + 1) = fsuma(k ) + s(k + 1) fsuma(i) + s(i + 1) ≤ maxsuma Se puede probar? Working Hypothesis Ejemplo, prueba del caso b) Objetivo: maxsuma ≥ fsuma(i + 1) ∀j. j ∈ 1 .. i ⇒ maxsuma ≥ fsuma(j) Hipótesis: sumactual + s(i + 1) ≤ maxsuma i 6= n Nuevas Hipótesis: ∀k . k ∈ 1 .. (n − 1) ⇒ fsuma(k + 1) = fsuma(k ) + s(k + 1) fsuma(i) + s(i + 1) ≤ maxsuma Se puede probar? Si, siempre y cuando i ∈ 1 .. (n − 1) y esto es cierto!