Considere agora a especificação SPL apresentada na figura 2.2. Este programa é uma possível solução para o exercício 7 do capítulo anterior.
local aprox_carro, aprox_comboio : bool where
(aprox_carro, aprox_comboio ) = (false, false);
local cancela_aberta, sinal_verde : bool where
(cancela_aberta, sinal_verde) = (false, false);
Estrada :: [
e0: loop forever do [
e1: noncritical;
e2: aprox_carro := true;
e3: await cancela_aberta;
e4: critical;
e5: aprox_carro := false
]
]
||
Carril :: [
c0: loop forever do [
c1: noncritical;
c2: aprox_comboio := true;
c3: await sinal_verde;
c4: critical;
c5: aprox_comboio := false
]
]
||
Controlador :: [
s0 : loop forever do [
s1: when (aprox_carro) do [
s2:cancela_aberta := true;
s3: await (!aprox_carro);
s4: cancela_aberta := false
]
or
s5: when (aprox_comboio) do [
s6:sinal_verde := true;
s7: await (!aprox_comboio);
s8: sinal_verde := false
]
]
]
|
Algumas das propriedades, e respectivas fórmulas temporais, que seria possível definir sobre esse programa são2.2: