-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGeneralDieHard.tla
More file actions
48 lines (42 loc) · 1.74 KB
/
Copy pathGeneralDieHard.tla
File metadata and controls
48 lines (42 loc) · 1.74 KB
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
--------------------------- MODULE GeneralDieHard ---------------------------
EXTENDS Integers
Min(m, n) == IF m < n THEN m ELSE n
CONSTANTS Goal, Jugs, Capacity
ASSUME /\ Goal \in Nat
/\ Capacity \in [Jugs -> Nat \ {0}]
(***************************************************************************
--algorithm DieHarder {
variable injug = [j \in Jugs |-> 0]; {
while(TRUE) {
either with (j \in Jugs) { injug[j] := Capacity[j] }
or with (j \in Jugs) { injug[j] := 0 }
or with (j \in Jugs, k \in Jugs \ {j}) {
with (poured = Min(injug[j] + injug[k], Capacity[k]) - injug[k]) {
injug[j] := injug[j] - poured ||
injug[k] := injug[k] + poured
}
}
}
}
}
***************************************************************************)
\* BEGIN TRANSLATION (chksum(pcal) = "7bac8492" /\ chksum(tla) = "df10d8f3")
VARIABLE injug
vars == << injug >>
Init == (* Global variables *)
/\ injug = [j \in Jugs |-> 0]
Next == \/ /\ \E j \in Jugs:
injug' = [injug EXCEPT ![j] = Capacity[j]]
\/ /\ \E j \in Jugs:
injug' = [injug EXCEPT ![j] = 0]
\/ /\ \E j \in Jugs:
\E k \in Jugs \ {j}:
LET poured == Min(injug[j] + injug[k], Capacity[k]) - injug[k] IN
injug' = [injug EXCEPT ![j] = injug[j] - poured,
![k] = injug[k] + poured]
Spec == Init /\ [][Next]_vars
\* END TRANSLATION
=============================================================================
\* Modification History
\* Last modified Tue Sep 28 11:19:27 CST 2021 by wrz
\* Created Tue Sep 28 10:57:34 CST 2021 by wrz