-
Notifications
You must be signed in to change notification settings - Fork 0
/
frogs.pml
83 lines (71 loc) · 1.59 KB
/
frogs.pml
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
/*
Students:
Adam Wendelin
Victoria Catalan
*/
#define success (\
(stones[0]==red) && \
(stones[1]==red) && \
(stones[2]==red) && \
(stones[3]==none) && \
(stones[4]==yellow) && \
(stones[5]==yellow) && \
(stones[6]==yellow) \
)
mtype{none, yellow, red};
mtype stones [7];
proctype jumpY(byte pos){
do
:: atomic{
(pos < 6) && (stones[pos+1] == none) ->
stones[pos+1] = yellow;
stones[pos] = none;
pos++;
}
:: atomic{
(pos < 5) && (stones[pos+2] == none) ->
stones[pos+2] = yellow;
stones[pos] = none;
pos = pos+2;
}
:: else -> skip;
od
}
proctype jumpR(byte pos){
do
:: atomic{
(pos > 0) && (stones[pos-1] == none) ->
stones[pos-1] = red;
stones[pos] = none;
pos--;
}
:: atomic{
(pos > 1) && (stones[pos-2] == none) ->
stones[pos-2] = red;
stones[pos] = none;
pos = pos-2;
}
:: else -> skip;
od
}
proctype monitor(){
do
::assert(!success);
od
}
init{
stones[0] = yellow;
stones[1] = yellow;
stones[2] = yellow;
stones[3] = none;
stones[4] = red;
stones[5] = red;
stones[6] = red;
run jumpY(0);
run jumpY(1);
run jumpY(2);
run jumpR(4);
run jumpR(5);
run jumpR(6);
run monitor();
}