análisis de especificaciones z. análisis la idea es verificar propiedades a partir de la...
TRANSCRIPT
Análisis de especificaciones Z
Análisis
• La idea es verificar propiedades a partir de la especificación o descubrir que propiedades que se creían válidas en realidad no lo son.
• Existen ciertas verificaciones estándar y otras que dependen de cada especificación o del lenguaje utilizado o del interés del desarrollador.
• También, algunos teoremas pueden usarse como documentación de ciertas propiedades del modelo que de otra forma quedarían implícitas.
El teorema de inicialización
• Si la especificación es consistente el estado inicial debe satisfacer el invariante de estado:
Ö SystemState × InitSystem
Ö Editor × Init Ö left, right: TEXT | #(leftÊright) ã maxsize × left =
right = ÏÐ Ö left, right: TEXT × #(leftÊright) ã maxsize Ù left =
right = ÏÐ#(ÏÐ Ê ÏÐ) ã maxsize
0 ã maxsize
En Z/EVES
theorem EditorInit
Editor Init
proof of EditorInit
prove by reduce maxsize 0 true
Este comando aplica una combinación usual de otros comandos de prueba (prenex, rearrange, equality substitution y reduce), hasta que la prueba finaliza (true) o no hay más progreso.
No puede probarse pues maxsize fue definido en una definición axiomática como un natural y Z/EVES sabe muy poco de los naturales como para deducir automáticamente esta desigualdad; Z/EVES sabe mucho de los enteros.
proof of EditorInitinvoke Editor left seq CHAR
right seq CHAR # left right maxsize left = right right =
rewrite Editor[left := right := ] 0 maxsize
invoke seq CHAR seq CHAR # maxsize 0 maxsize
reduce 0 maxsize true
use maxsize$declaration maxsize 0 maxsize
invoke maxsize n: n 0 0 maxsize
reduce true
Una prueba más detallada de EditorInit
theorem grule maxsizeBound //regla de suposición
0 maxsize
proof of maxsizeBound
use maxsize$declaration if maxsize then 0 maxsize else true
invoke if maxsize n: n 0then 0 maxsizeelse true
reduce true
theorem EditorInitEditor Init
proof of EditorInitprove by reduce true
Otra prueba de EditorInit
invoke name
• Si name es el nombre de un esquema o el nombre de un término introducido en una definición, todas las apariciones del nombre en el gol actual son reemplazadas por su definición.
• Si no se especifica ningún nombre todos los nombres de definiciones y esquemas son invocados.
• invoke predicate name
rewrite
• Al re-escribir, Z/EVES simplifica y aplica reglas de re-escritura siempre que sea posible.
• Una regla de re-escritura es un teorema de la forma Condición Patrón = Reemplazo.
• El toolkit de Z está lleno de reglas de re-escritura:
theorem disabled rule capSubsetLeft[X]
S [X] T S T = S
theorem rule eqTuple2
(x,y) = (x',y') x = x' y = y’
Enteros, igualdad, lógica proposicional,
tautologías
apply theorem-name
• Las reglas de re-escritura pueden aplicarse mediante el comando apply o seleccionando una expresión, pulsando el botón derecho del mouse y examinando la opción “Apply to expresion”.
• Las reglas habilitadas son aplicadas automática-mente por el asistente de pruebas.
reduce
• Al reducir, Z/EVES simplifica y re-escribe, y si una subfórmula es un esquema o el nombre de una abreviatura, la subfórmula será reemplazada por la definición y el resultado será reducido nuevamente.
use theorem-name ···
• La sintaxis más general es algo compleja pues se deben instanciar los parámetros y variables del teorema a ser usado.
• Por ejemplo si tenemos:
theorem rule inDom [X, Y]
R: X Y x dom R ( y: Y (x, y) R)
y estamos probando un teorema sobre f: use inDom [, ] [R:=f]
use theorem-name ··· (2)
• El teorema usado es agregado como hipótesis del gol actual de manera que los comandos simplify, reduce o rewrite lo usarán para hacer avanzar la prueba.
• Si el gol, Q, no es una implicación entonces “use A” lo transforma en A Q.
• Si el gol es la implicación P Q, entonces “use A” lo transforma en A P Q.
Errores de dominio
• El sistema de tipos de Z no es tan poderoso como para garantizar que todas las expresiones sean significativas.– 1 div 0, max , # , etc.
• Por este motivo, Z/EVES verifica cada párrafo y determina si es necesaria una comprobación de dominio, en cuyo caso plantea una obligación de prueba que debe ser descargada.
Ejemplo
Ejemplof: z: f z 5
EjemploCorrf: z: z dom f f z 5
proof of Ejemplo$domainCheckf z z dom f
Es imposible de probar.
proof of Ejemplo$domainCheckf z z dom f z dom f
Se pueba facilmente con simplify
La mayoría de las obligaciones de prueba provienen de expresiones donde intervienen aplicaciones de
funciones parciales
Satisfacción de esquemas
• Un error posible es definir un esquema cuyo predicado sea (siempre) falso, es decir un esquema insatisfacible.
• Para evitar ese error, se debe probar:
Ö Schema; Inputs? × true• Si el esquema erróneo corresponde:
– al estado, entonces el sistema es imposible;– a una operación, entonces esta nunca puede ser invocada
exitosamente.
Ascensor sentido: SENTIDOSpuerta: ESTPUERTAsentido Parado puerta = Cerrada
AbrirPuertaAscensorsentido = Arribapuerta = Cerradapuerta' = Abiertasentido' = sentidotheorem AbrirPuertaInsat
AbrirPuerta trueproof of AbrirPuertaInsat instantiate sentido Arriba, AbrirPuerta[puerta := Cerrada, puerta Cerrada, puerta' := Abierta, sentido := Arriba, sentido' Arriba, sentido' := Arriba] puerta' Abierta AbrirPuerta true
invoke Arriba Parado Abierta = Cerrada
Instancia variables cuantificadas existencialmente con valores constantes ya definidos.
Cálculo de precondiciones
• La precondición de una operación es un predicado que describe todos los estados de partida en los que la operación está definida.
• Así, la precondición sólo contiene variables de estado no primadas y variables de entrada.
• La precondición de una operación es:
SystemState’; Outputs! Op
o en Z/EVES,
SystemState; Inputs? pre Op
• Es conveniente documentar la precondición, P, de cada operación:
SystemState; Inputs? | P pre OpFDoc miembros: DNI NAMEprohibidos: DNIprohibidos dom miembros
AddMemberFDoccandidato?: NAMEdoc!: DNIcandidato? ran miembrosdoc! dom miembrosmiembros' = miembros doc! Œ candidato?prohibidos' = prohibidos
Ö Fdoc’; doc!: DOC × AddMember
Ö miembros’:DOC « PERSONAS; prohibidos’:¡DOC; doc!:DOC ×
prohibidos’ º dom miembros’ Ù candidato? ´ ran miembros Ù
doc! ´ dom miembros Ù prohibidos’ = prohibidos Ùmiembros’ = miembros ¼ {doc! § candidato?}
Ö doc!: DOC × [Regla One-point con miembros’ y prohibidos’]
prohibidos º dom miembros ¼ {doc! § candidato?} Ù candidato? ´ ran miembros Ù doc! ´ dom miembros
Ö doc!: DOC × [Fdoc asegura que prohibidos º dom miembros]
candidato? ´ ran miembros Ù doc! ´ dom miembros
candidato? ´ ran miembros Ù Ö doc!: DOC × doc! ´ dom miembros
candidato? ´ ran miembros Ù dom miembros µ DOC
En Z/EVEStheorem AddMemberPre FDoc; candidato?: NAME pre AddMember
proof of AddMemberPre prove by reduce tipos doc!: DNI miembros doc! candidato? DNI NAME
candidato? ran miembros doc! dom miembros
apply cupInPinj un predicado muy largo
prove tipos doc!: DNI candidato? ran miembros
doc! dom miembros
Propiedades de un modelo
• Estas propiedades pueden haberse establecido en los requerimientos informales o pueden ser puntos clave de la especificación.
BanMemberFDocmem?: DNImem? dom miembrosprohibidos' = prohibidos mem?miembros' = miembros
BanMember | proh? ³ prohibidos ôFdoc
óFdoc; proh?: ID |proh? ³ dom miembrosprohibidos’ = prohibidos ¼ {proh?}miembros’ = miembros Ù proh? ³ prohibidos
ôFdoc
óFdoc; proh?: ID |proh? ³ dom miembrosprohibidos’ = prohibidos ¼ {proh?}miembros’ = miembros Ù proh? ³ prohibidos
miembros’ = miembros Ù prohibidos’ = prohibidos
¿AddMember candidato? ´ miembrosÓprohibidosÔ?
En Z/EVES
theorem YaEstaProhibido mem?: DNI BanMember mem? prohibidos FDocproof of YaEstaProhibido prove by reduce ... mem? prohibidos
prohibidos' = prohibidos mem? prohibidos = prohibidos mem? apply cupSubsetRight to expression prohibidos mem?
... mem? prohibidos prohibidos' = if mem? prohibidos
then prohibidos else prohibidos mem? prohibidos = if mem? prohibidos
then prohibidos else prohibidos mem?
prove true
Rage against the machine
The teacher stands in front of the classBut the lesson plan he cant’t recallThe student’s eyes don’t perceive the liesBouncing off every fucking wallHis composture is well keptI guess he fears playing the foolThe complacent students sit and listen to theBullshit that he learned in school
FIN