Я взял пример с дверного замка отеля и придумал этот MWE для автомобильных дверей.
enum LockState {Locked, Unlocked}
sig Door {
var state: LockState
}
sig Vehicle {
doors : disj set Door
}
//actions
pred unlock[d: Door]{
d.state' = Unlocked
}
pred lock[d: Door]{
d.state' = Locked
}
//traces
pred init{
all s: Door.state | s = Locked
}
pred trace{
init
always {
some d: Door |
unlock[d] or
lock[d]
}
}
//demonstrate
run {} for 4 but exactly 2 Vehicle, 4 Time
Что, к моему удивлению, допускает пример, показанный ниже, в котором некоторые двери заперты, а некоторые нет. Как установить условие, что все двери заперты в самый ранний момент? а>