Desarrollo formal de Programas Casos Refinamiento, 2007

Anuncio
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
Descargar