Working Hypothesis Desarrollo formal de Programas Casos Refinamiento, 2007 Camilo Rueda 1 1 Universidad Javeriana-Cali, Colombia PUJ 2007 Working Hypothesis Bio and Control de Trenes: componentes Hay trenes y vı́as Las vı́as están divididas en una o más secciones Hay secciones especiales: de cambio Convergente: conecta dos secciones de entrada y una de salida Divergente: conecta una sección de entrada y una de salida Los trenes ocupan secciones La red ferroviaria es una red de secciones Working Hypothesis Bio and Vı́a sección de cambio convergente Working Hypothesis Bio and Control de Trenes: propiedades P1: Al andar, los trenes entran y salen de secciones Inv1: Un tren debe frenar si entra en una sección ocupada por otro tren Inv2: Debe frenar también si entra en una sección sin continuación Working Hypothesis Bio and Sistema de Vı́as Conjuntos: S, T (las secciones y los trenes) Constantes: cambio, red Propiedades: cambio ⊆ S ∧ red ∈ S ↔ S Working Hypothesis Bio and Variables prox: La sección que sigue a otra ocup: Las secciones que ocupa un tren frente: la sección ocupada por la el frente del tren cola: la sección ocupada por la la cola del tren frenando: dice si un tren está frenando chequeado: dice si un tren ha sido chequeado para frenar Working Hypothesis Bio and Invariante prox ∈ S 6 S ∧ prox ⊆ red∧ ocup ∈ T ↔ S∧ frente ∈ T → S ∧ frente ⊆ ocup∧ cola ∈ T → S ∧ cola ⊆ ocup∧ frenando ∈ T → BOOL∧ chequeado ∈ T → BOOL∧ dom(frente; cola−1 ) = frenando−1 (TRUE) (frente; cola−1 ) ∩ id(T ) = ∅ El penúltimo predicado dice cuándo se debe estar frenando El último prediicado dice que un tren ocupa siempre más de una sección Working Hypothesis Bio and Inicialización any r1 , r2 , r3 , r4 , r5 where r1 ∈ S 6 S ∧ r1 ⊆ red r2 ∈ T ↔ S r3 ∈ T → S ∧ r3 ⊆ r2 r4 ∈ T → S ∧ r4 ⊆ r2 (r3 ; r4−1 ) ∩ id(T ) = ∅ dom(r3 ; r4−1 ) = r5−1 (TRUE) then prox, ocup, frente, cola := r1 , r2 , r3 , r4 frenando := r5 chequeado := T × {FALSE} end Working Hypothesis Bio and Eventos observables chequear un tren para ver si debe frenar Entrar un tren en una sección Salir un tren de una sección Mover sección de cambio convergente Mover sección de cambio divergente Working Hypothesis Bio and Evento: chequear tren chequear= any t where t ∈ T then frenando(t) := bool(frente(t) 6∈ dom(prox) ∨ prox(frente(t)) ∈ ran(ocup)) chequeado(t) := true end Working Hypothesis Bio and Eventos: tren entra / tren sale entrar= any t where t ∈ T∧ chequeado(t) = true ∧ frente(t) ∈ dom(prox) then frente(t) := prox(frente(t)) ocup := ocup ∪ {t 7→ prox(frente(t))} chequeado(t) := false end salir= any t where t ∈ T ∧ prox(cola(t)) 6= frente(t) then cola := (cola − {t 7→ cola(t)}) ∪ {t 7→ prox(cola(t))} end Working Hypothesis Bio and Evento: rotar sección rotar div= any se, sw where sw ∈ S ∧ sw ∈ dom(prox) ∧ se ∈ S ∧ sw 6∈ ran(ocup) sw 7→ se ∈ red ∧ se 6∈ ran(prox) ∧ sw 6= se then prox(sw) := se end rotar conv= any se, sw where sw ∈ S ∧ se ∈ S ∧ sw 6∈ ran(ocup) se 7→ sw ∈ red ∧ prox(se) 6= sw ∧ sw 6= se then prox(se) := sw end Working Hypothesis Bio and Refinamiento No es el tren el que chequea: es un controlador de vı́a Cada tren puede recibir un mensaje de frenado Nuevo conjunto: M M = {cont, frene, ninguno} cont: es seguro avanzar frene: debe frenar ninguno: no hay mensaje Nueva variable: tmens tmens ∈ T → M Working Hypothesis Bio and Invariante de encadenamiento Cuando hay señal, ésta debe corresponder con condiciones de frenado dom(frente; cola−1 ) = tmens−1 (frene) Nuevas variables que no cambian comportamiento: frenando r = frenando ∧ chequeado r = chequeado Working Hypothesis Bio and Eventos del rtefinamiento enviar mensaje= any t where t ∈ T ∧ tmens(t) = ninguno then if frente(t) ∈ dom(prox) ∧ prox(frente(t)) 6∈ ran(ocup)) then tmens(t) := cont else tmens(t) := frene end end chequear= any t where t ∈ T ∧ tmens(t) 6= ninguno then if tmens(t) = frene then frenando r := TRUE else frenando r := FALSE end chequeado r := TRUE end