Advertisement
Guest User

Untitled

a guest
Jun 6th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. MODULE main
  2. VAR
  3.     cyfra : 0..9;
  4.     zamek: {pierwsza, bledna, pierwsza_ok, druga_ok, odblokowany}
  5.  
  6. INIT cyfra in 0..9 &
  7.     zamek = pierwsza; -- ignorujemy pierwszą cyfrę
  8.  
  9. TRANS next(cyfra) in 0..9;
  10. TRANS next(zamek) in case
  11.     -- zachowaj odblokowany stan
  12.     zamek = odblokowany : odblokowany;
  13.     -- jeśli trzecia cyfra ok to odblokowany
  14.     zamek = druga_ok & next(cyfra) = 9 : odblokowany;
  15.     -- jeśli druga cyfra ok
  16.     zamek = pierwsza_ok & next(cyfra) = 5 : druga_ok;
  17.     -- jeśli pierwsza cyfra ok
  18.     next(cyfra) = 1 : pierwsza_ok;
  19.     -- w każdym pozostałym przypadku błędna cyfra
  20.     TRUE : bledna;
  21.     esac   
  22.    
  23. -- Osiągalność: zamek jest odblokowywalny [should pass]
  24. CTLSPEC EF(zamek = odblokowany)
  25.  
  26. -- Trwałość: raz odblokowany zamek pozostanie już odblokowany [should pass]
  27. CTLSPEC AG(zamek = odblokowany -> AX(zamek = odblokowany))
  28.  
  29. -- Bezpieczeństwo: nie reagujemy na pierwszą cyfrę (nawet jak jest 1 to stan nie jest zmieniany na pierwsza_ok) [shoud pass]
  30. CTLSPEC AG(zamek = pierwsza & cyfra = 1 -> zamek = pierwsza)
  31.  
  32. -- Jeśli zamek nie jest jeszcze odblokowany, nie sprawdzamy aktualnie pierwszej cyfry oraz wylosowana cyfra to 1, to
  33. -- automat powinien znaleźć się w stanie pierwsza_ok [should pass]
  34. CTLSPEC AG(zamek != odblokowany & zamek != pierwsza & cyfra = 1 -> zamek = pierwsza_ok)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement