-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPOFifop.tla
57 lines (41 loc) · 1.34 KB
/
POFifop.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
---- MODULE POFifop ----
(*************************************************)
(* *)
(* From Lamport's Science of Concurrent Programs *)
(* *)
(* Augments POFifo with a prophecy variable. *)
(* *)
(*************************************************)
EXTENDS Sequences
CONSTANTS EnQers, DeQers, Data, Ids,
Done, Busy, NonElt
VARIABLES
(* external variables *)
enq,deq,
(* internal variables *)
elts,before,adding,
(* prophecy variable *)
p
ASSUME Done \notin Data
ASSUME Busy \notin Data
ASSUME NonElt \notin (Data \X Ids)
POFifo == INSTANCE POFifo
Init == /\ POFifo!Init
/\ p = <<>>
Values == Data \X Ids
BeginPOEnq(e) == /\ POFifo!BeginPOEnq(e)
/\ \E el \in Values : p' = Append(p, el)
EndPOEnq(e) == /\ POFifo!EndPOEnq(e)
/\ UNCHANGED p
BeginPODeq(d) == /\ POFifo!BeginPODeq(d)
/\ UNCHANGED p
EndPODeq(d) == /\ POFifo!EndPODeq(d)
/\ elts' = elts \ {p[1]}
/\ p' = Tail(p)
Next == \/ \E e \in EnQers : \/ BeginPOEnq(e)
\/ EndPOEnq(e)
\/ \E d \in DeQers : \/ BeginPODeq(d)
\/ EndPODeq(d)
v == POFifo!v \o p
Spec == Init /\ [][Next]_v
====