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: