Showing
1 changed file
with
281 additions
and
0 deletions
Ex3/Prism/Ex3.nm
0 → 100644
1 | +pta | ||
2 | + | ||
3 | +formula fk1Ca = (sPr=1) | (sPr=3); | ||
4 | +formula fk2Ca = (sCa=3); | ||
5 | +formula fk1O = (sPr=1); | ||
6 | +formula fk2O = (sO=2); | ||
7 | +formula fk3O = (sF=1); | ||
8 | +formula fk4O = (sO=4); | ||
9 | +formula fk1P = (sF=1); | ||
10 | +formula fk2P = (sP=3); | ||
11 | + | ||
12 | +formula flock1M1 = (sPr=6) | (sG=1); | ||
13 | +formula flock2M1 = (sM1=1); | ||
14 | +formula funlock1M1 = (sPr=9) | (sG=4); | ||
15 | +formula funlock2M1 = (sM1=3); | ||
16 | + | ||
17 | +formula flock1M2 = (sF=4) | (sH=1); | ||
18 | +formula flock2M2 = (sM2=1); | ||
19 | +formula funlock1M2 = (sF=7) | (sH=4); | ||
20 | +formula funlock2M2 = (sM2=3); | ||
21 | + | ||
22 | +formula flock1M3 = (sF=9) | (sM=1); | ||
23 | +formula flock2M3 = (sM3=1); | ||
24 | +formula funlock1M3 = (sF=12) | (sM=4); | ||
25 | +formula funlock2M3 = (sM3=3); | ||
26 | + | ||
27 | +module mCa | ||
28 | + xCa : clock; | ||
29 | + sCa : [0..3] init 0; | ||
30 | + | ||
31 | + invariant | ||
32 | + (sCa=0 => xCa <= 3000) & | ||
33 | + (sCa=1 => xCa <= 4500) & | ||
34 | + (sCa=2 => xCa <= 0) | ||
35 | + endinvariant | ||
36 | + | ||
37 | + [] sCa=0 & xCa >= 2000 -> (sCa'=1) & (xCa'=0); | ||
38 | + [] sCa=1 & xCa >= 3500 -> (sCa'=2) & (xCa'=0); | ||
39 | + [k1Ca] sCa=2 -> (sCa'=1) & (xCa'=0); | ||
40 | + [] sCa=2 & !fk1Ca -> (sCa'=3); | ||
41 | + [k2Ca] sCa=3 -> (sCa'=1) & (xCa'=0); | ||
42 | +endmodule | ||
43 | + | ||
44 | +module mO | ||
45 | + xO : clock; | ||
46 | + sO : [0..4] init 0; | ||
47 | + | ||
48 | + invariant | ||
49 | + (sO=1 => xO <= 0) & | ||
50 | + (sO=3 => xO <= 0) | ||
51 | + endinvariant | ||
52 | + | ||
53 | + [] sO=0 & xO >= 50 -> (sO'=1) & (xO'=0); | ||
54 | + [k1O] sO=1 -> (sO'=3) & (xO'=0); | ||
55 | + [] sO=1 & !fk1O -> (sO'=2); | ||
56 | + [k2O] sO=2 -> (sO'=3) & (xO'=0); | ||
57 | + [k3O] sO=3 -> (sO'=0) & (xO'=0); | ||
58 | + [] sO=3 & !fk3O -> (sO'=4); | ||
59 | + [k4O] sO=4 -> (sO'=0) & (xO'=0); | ||
60 | +endmodule | ||
61 | + | ||
62 | +module mP | ||
63 | + xP : clock; | ||
64 | + sP : [0..3] init 0; | ||
65 | + | ||
66 | + invariant | ||
67 | + (sP=0 => xP <= 3600) & | ||
68 | + (sP=1 => xP <= 3600) & | ||
69 | + (sP=2 => xP <= 0) | ||
70 | + endinvariant | ||
71 | + | ||
72 | + [] sP=0 & xP >= 2600 -> (sP'=1) & (xP'=0); | ||
73 | + [] sP=1 & xP >= 2600 -> (sP'=2) & (xP'=0); | ||
74 | + [k1P] sP=2 -> (sP'=1) & (xP'=0); | ||
75 | + [] sP=2 & !fk1P -> (sP'=3); | ||
76 | + [k2P] sP=3 -> (sP'=1) & (xP'=0); | ||
77 | +endmodule | ||
78 | + | ||
79 | +module mF | ||
80 | + xF : clock; | ||
81 | + sF : [0..12] init 0; | ||
82 | + | ||
83 | + invariant | ||
84 | + (sF=0 => xF<=0) & | ||
85 | + (sF=2 => xF<=75) & | ||
86 | + (sF=3 => xF<=0) & | ||
87 | + (sF=5 => xF<=30) & | ||
88 | + (sF=6 => xF<=0) & | ||
89 | + (sF=8 => xF<=0) & | ||
90 | + (sF=10 => xF<=20) & | ||
91 | + (sF=11 => xF<=0) | ||
92 | + endinvariant | ||
93 | + | ||
94 | + [k2P] sF=0 -> (sF'=2) & (xF'=0); | ||
95 | + [k4O] sF=0 -> (sF'=2) & (xF'=0); | ||
96 | + [] sF=0 & !fk2P & !fk4O -> (sF'=1); | ||
97 | + [k1P] sF=1 -> (sF'=2) & (xF'=0); | ||
98 | + [k3O] sF=1 -> (sF'=2) & (xF'=0); | ||
99 | + [] sF=2 & xF >= 50 -> (sF'=3) & (xF'=0); | ||
100 | + [] sF=3 & !flock2M2 -> (sF'=4); | ||
101 | + [lock2F] sF=3 -> (sF'=5) & (xF'=0); | ||
102 | + [lock1F] sF=4 -> (sF'=5) & (xF'=0); | ||
103 | + [] sF=5 & xF >= 20 -> (sF'=6) & (xF'=0); | ||
104 | + [] sF=6 & !funlock2M2 -> (sF'=7); | ||
105 | + [unlock2F] sF=6 -> (sF'=8) & (xF'=0); | ||
106 | + [unlock1F] sF=7 -> (sF'=8) & (xF'=0); | ||
107 | + [] sF=8 & !flock2M3 -> (sF'=9); | ||
108 | + [lock4F] sF=8 -> (sF'=10) & (xF'=0); | ||
109 | + [lock3F] sF=9 -> (sF'=10) & (xF'=0); | ||
110 | + [] sF=10 & xF >= 10 -> (sF'=11) & (xF'=0); | ||
111 | + [] sF=11 & !funlock2M3 -> (sF'=12); | ||
112 | + [unlock4F] sF=11 -> (sF'=0) & (xF'=0); | ||
113 | + [unlock3F] sF=12 -> (sF'=0) & (xF'=0); | ||
114 | + | ||
115 | +endmodule | ||
116 | + | ||
117 | +module mPr | ||
118 | + xPr : clock; | ||
119 | + sPr : [0..9] init 0; | ||
120 | + | ||
121 | + invariant | ||
122 | + (sPr=0 => xPr<=0) & | ||
123 | + (sPr=2 => xPr<=0) & | ||
124 | + (sPr=4 => xPr<=3000) & | ||
125 | + (sPr=5 => xPr<=0) & | ||
126 | + (sPr=7 => xPr<=300) & | ||
127 | + (sPr=8 => xPr<=0) | ||
128 | + endinvariant | ||
129 | + | ||
130 | + [k2O] sPr=0 -> (sPr'=2) & (xPr'=0); | ||
131 | + [k2Ca] sPr=0 -> (sPr'=4) & (xPr'=0); | ||
132 | + [] sPr=0 & !fk2O & !fk2Ca -> (sPr'=1); | ||
133 | + [k1O] sPr=1 -> (sPr'=2) & (xPr'=0); | ||
134 | + [k1Ca] sPr=1 -> (sPr'=4) & (xPr'=0); | ||
135 | + [k2Ca] sPr=2 -> (sPr'=4) & (xPr'=0); | ||
136 | + [] sPr=2 & !fk2Ca -> (sPr'=3); | ||
137 | + [k1Ca] sPr=3 -> (sPr'=4) & (xPr'=0); | ||
138 | + [] sPr=4 & xPr >= 2000 -> (sPr'=5) & (xPr'=0); | ||
139 | + [] sPr=5 & !flock2M1 -> (sPr'=6); | ||
140 | + [lock2Pr] sPr=5 -> (sPr'=7) & (xPr'=0); | ||
141 | + [lock1Pr] sPr=6 -> (sPr'=7) & (xPr'=0); | ||
142 | + [] sPr=7 & xPr >= 200 -> (sPr'=8) & (xPr'=0); | ||
143 | + [] sPr=8 & !funlock2M1 -> (sPr'=9); | ||
144 | + [unlock2Pr] sPr=8 -> (sPr'=0) & (xPr'=0); | ||
145 | + [unlock1Pr] sPr=9 -> (sPr'=0) & (xPr'=0); | ||
146 | + | ||
147 | +endmodule | ||
148 | + | ||
149 | +module mM1 | ||
150 | + xM1 : clock; | ||
151 | + sM1 : [0..3] init 1; | ||
152 | + | ||
153 | + invariant | ||
154 | + (sM1=0 => xM1<=0) & | ||
155 | + (sM1=2 => xM1<=0) | ||
156 | + endinvariant | ||
157 | + | ||
158 | + [] sM1=0 & !flock1M1-> (sM1'=1); | ||
159 | + [lock1G] sM1=0 -> (sM1'=2) & (xM1'=0); | ||
160 | + [lock1Pr] sM1=0 -> (sM1'=2) & (xM1'=0); | ||
161 | + [lock2G] sM1=1 -> (sM1'=2) & (xM1'=0); | ||
162 | + [lock2Pr] sM1=1 -> (sM1'=2) & (xM1'=0); | ||
163 | + [] sM1=2 & !funlock1M1 -> (sM1'=3); | ||
164 | + [unlock1G] sM1=2 -> (sM1'=0) & (xM1'=0); | ||
165 | + [unlock1Pr] sM1=2 -> (sM1'=0) & (xM1'=0); | ||
166 | + [unlock2G] sM1=3 -> (sM1'=0) & (xM1'=0); | ||
167 | + [unlock2Pr] sM1=3 -> (sM1'=0) & (xM1'=0); | ||
168 | + | ||
169 | + | ||
170 | +endmodule | ||
171 | + | ||
172 | +module mM2 | ||
173 | + xM2 : clock; | ||
174 | + sM2 : [0..3] init 1; | ||
175 | + | ||
176 | + invariant | ||
177 | + (sM2=0 => xM2<=0) & | ||
178 | + (sM2=2 => xM2<=0) | ||
179 | + endinvariant | ||
180 | + | ||
181 | + [] sM2=0 & !flock1M2-> (sM2'=1); | ||
182 | + [lock1H] sM2=0 -> (sM2'=2) & (xM2'=0); | ||
183 | + [lock1F] sM2=0 -> (sM2'=2) & (xM2'=0); | ||
184 | + [lock2H] sM2=1 -> (sM2'=2) & (xM2'=0); | ||
185 | + [lock2F] sM2=1 -> (sM2'=2) & (xM2'=0); | ||
186 | + [] sM2=2 & !funlock1M2 -> (sM2'=3); | ||
187 | + [unlock1H] sM2=2 -> (sM2'=0) & (xM2'=0); | ||
188 | + [unlock1F] sM2=2 -> (sM2'=0) & (xM2'=0); | ||
189 | + [unlock2H] sM2=3 -> (sM2'=0) & (xM2'=0); | ||
190 | + [unlock2F] sM2=3 -> (sM2'=0) & (xM2'=0); | ||
191 | + | ||
192 | + | ||
193 | +endmodule | ||
194 | + | ||
195 | +module mM3 | ||
196 | + xM3 : clock; | ||
197 | + sM3 : [0..3] init 1; | ||
198 | + | ||
199 | + invariant | ||
200 | + (sM3=0 => xM3<=0) & | ||
201 | + (sM3=2 => xM3<=0) | ||
202 | + endinvariant | ||
203 | + | ||
204 | + [] sM3=0 & !flock1M3-> (sM3'=1); | ||
205 | + [lock1M] sM3=0 -> (sM3'=2) & (xM3'=0); | ||
206 | + [lock3F] sM3=0 -> (sM3'=2) & (xM3'=0); | ||
207 | + [lock2M] sM3=1 -> (sM3'=2) & (xM3'=0); | ||
208 | + [lock4F] sM3=1 -> (sM3'=2) & (xM3'=0); | ||
209 | + [] sM3=2 & !funlock1M3 -> (sM3'=3); | ||
210 | + [unlock1M] sM3=2 -> (sM3'=0) & (xM3'=0); | ||
211 | + [unlock3F] sM3=2 -> (sM3'=0) & (xM3'=0); | ||
212 | + [unlock2M] sM3=3 -> (sM3'=0) & (xM3'=0); | ||
213 | + [unlock4F] sM3=3 -> (sM3'=0) & (xM3'=0); | ||
214 | + | ||
215 | +endmodule | ||
216 | + | ||
217 | +module mG | ||
218 | + xG : clock; | ||
219 | + sG : [0..5] init 0; | ||
220 | + | ||
221 | + invariant | ||
222 | + (sG=0 => xG<=0) & | ||
223 | + (sG=2 => xG<=310) & | ||
224 | + (sG=3 => xG<=0) & | ||
225 | + (sG=5 => xG<=500) | ||
226 | + endinvariant | ||
227 | + | ||
228 | + [lock2G] sG=0 -> (sG'=2) & (xG'=0); | ||
229 | + [] sG=0 & !flock2M1 -> (sG'=1); | ||
230 | + [lock1G] sG=1 -> (sG'=2) & (xG'=0); | ||
231 | + [] sG=2 & xG >= 210 -> (sG'=3) & (xG'=0); | ||
232 | + [unlock2G] sG=3 -> (sG'=5) & (xG'=0); | ||
233 | + [] sG=3 & !funlock2M1 -> (sG'=4); | ||
234 | + [unlock1G] sG=4 -> (sG'=5) & (xG'=0); | ||
235 | + [] sG=5 & xG >= 400 -> (sG'=0) & (xG'=0); | ||
236 | + | ||
237 | +endmodule | ||
238 | + | ||
239 | +module mH | ||
240 | + xH : clock; | ||
241 | + sH : [0..5] init 0; | ||
242 | + | ||
243 | + invariant | ||
244 | + (sH=0 => xH<=0) & | ||
245 | + (sH=2 => xH<=30) & | ||
246 | + (sH=3 => xH<=0) & | ||
247 | + (sH=5 => xH<=20) | ||
248 | + endinvariant | ||
249 | + | ||
250 | + [lock2H] sH=0 -> (sH'=2) & (xH'=0); | ||
251 | + [] sH=0 & !flock2M2 -> (sH'=1); | ||
252 | + [lock1H] sH=1 -> (sH'=2) & (xH'=0); | ||
253 | + [] sH=2 & xH >= 20 -> (sH'=3) & (xH'=0); | ||
254 | + [unlock2H] sH=3 -> (sH'=5) & (xH'=0); | ||
255 | + [] sH=3 & !funlock2M2 -> (sH'=4); | ||
256 | + [unlock1H] sH=4 -> (sH'=5) & (xH'=0); | ||
257 | + [] sH=5 & xH >= 10 -> (sH'=0) & (xH'=0); | ||
258 | + | ||
259 | +endmodule | ||
260 | + | ||
261 | +module mM | ||
262 | + xM : clock; | ||
263 | + sM : [0..5] init 0; | ||
264 | + | ||
265 | + invariant | ||
266 | + (sM=0 => xM<=0) & | ||
267 | + (sM=2 => xM<=20) & | ||
268 | + (sM=3 => xM<=0) & | ||
269 | + (sM=5 => xM<=20) | ||
270 | + endinvariant | ||
271 | + | ||
272 | + [lock2M] sM=0 -> (sM'=2) & (xM'=0); | ||
273 | + [] sM=0 & !flock2M3 -> (sM'=1); | ||
274 | + [lock1M] sM=1 -> (sM'=2) & (xM'=0); | ||
275 | + [] sM=2 & xM >= 10 -> (sM'=3) & (xM'=0); | ||
276 | + [unlock2M] sM=3 -> (sM'=5) & (xM'=0); | ||
277 | + [] sM=3 & !funlock2M3 -> (sM'=4); | ||
278 | + [unlock1M] sM=4 -> (sM'=5) & (xM'=0); | ||
279 | + [] sM=5 & xM >= 10 -> (sM'=0) & (xM'=0); | ||
280 | + | ||
281 | +endmodule |
-
Please register or login to post a comment