-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBoiler.tla
83 lines (69 loc) · 2.86 KB
/
Boiler.tla
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
------------------------------- MODULE Boiler -------------------------------
EXTENDS Naturals
CONSTANTS TEMP, PRESSURE, MIN_TEMP, MAX_TEMP, MIN_PRESSURE, MAX_PRESSURE
ASSUME /\ MIN_TEMP \in TEMP
/\ MAX_TEMP \in TEMP
/\ MIN_PRESSURE \in PRESSURE
/\ MAX_PRESSURE \in PRESSURE
VARIABLES temp, pressure, burner, tubing, network
vars == << temp, pressure, burner, tubing, network >>
TypeInvariant == /\ temp \in TEMP
/\ pressure \in PRESSURE
/\ burner \in {"high", "low"}
/\ tubing \in {"open", "closed"}
/\ network \in {"open", "closed"}
----
Init == /\ temp \in TEMP /\ temp >= MIN_TEMP /\ temp <= MAX_TEMP
/\ pressure \in PRESSURE /\ pressure >= MIN_PRESSURE /\ pressure <= MAX_PRESSURE
/\ burner \in {"high", "low"}
/\ tubing = "closed"
/\ network = "closed"
MeasureTemp(t) == /\ temp # t
/\ temp' = t
/\ UNCHANGED << pressure, burner, tubing, network >>
MeasurePressure(p) == /\ pressure # p
/\ pressure' = p
/\ UNCHANGED << temp, burner, tubing, network >>
IncreaseBurner == /\ burner = "low"
/\ temp < MIN_TEMP
/\ burner' = "high"
/\ UNCHANGED << temp, pressure, tubing, network >>
DecreaseBurner == /\ burner = "high"
/\ temp > MAX_TEMP
/\ burner' = "low"
/\ UNCHANGED << temp, pressure, tubing, network >>
OpenTubing == /\ tubing = "closed"
/\ pressure > MAX_PRESSURE
/\ tubing' = "open"
/\ UNCHANGED << temp, pressure, burner, network >>
CloseTubing == /\ tubing = "open"
/\ pressure <= MAX_PRESSURE
/\ tubing' = "closed"
/\ UNCHANGED << temp, pressure, burner, network >>
OpenNetwork == /\ network = "closed"
/\ pressure < MIN_PRESSURE
/\ network' = "open"
/\ UNCHANGED << temp, pressure, burner, tubing >>
CloseNetwork == /\ network = "open"
/\ pressure >= MIN_PRESSURE
/\ network' = "closed"
/\ UNCHANGED << temp, pressure, burner, tubing >>
Next == \/ (\E t \in TEMP : MeasureTemp(t))
\/ (\E p \in PRESSURE : MeasurePressure(p))
\/ IncreaseBurner
\/ DecreaseBurner
\/ OpenTubing
\/ CloseTubing
\/ OpenNetwork
\/ CloseNetwork
Spec == /\ Init
/\ [][Next]_vars
/\ WF_vars(IncreaseBurner \/ DecreaseBurner)
/\ WF_vars(OpenTubing \/ CloseTubing)
/\ WF_vars(OpenNetwork \/ CloseNetwork)
----
THEOREM Spec => []TypeInvariant
=============================================================================
\* Modification History
\* Last modified Mon Aug 01 12:23:51 ART 2016 by juampi
\* Created Mon Aug 01 11:39:42 ART 2016 by juampi