1 :- module(dpllt_solver_benchmarks, [run_bmc_benchmarks1/0,
2 run_bmc_benchmarks2/0,
3 run_bmc_benchmarks3/0,
4 run_bmc_benchmarks4/0,
5 run_bmc_benchmarks5/0,
6 run_bmc_benchmarks6/0,
7 run_deadlock_benchmarks1/0,
8 run_deadlock_benchmarks2/0,
9 run_deadlock_benchmarks3/0,
10 run_deadlock_benchmarks4/0,
11 run_deadlock_benchmarks5/0,
12 run_deadlock_benchmarks6/0,
13 run_cbc_benchmarks1/0,
14 run_cbc_benchmarks2/0,
15 run_cbc_benchmarks3/0,
16 run_cbc_benchmarks4/0,
17 run_cbc_benchmarks5/0,
18 run_cbc_benchmarks6/0,
19 run_cbc_benchmarks/2,
20 run_bmc_benchmarks/2,
21 run_n_queens_benchmarks/0]).
22
23 :- meta_predicate(run_cbc_benchmark(0, ?, ?, ?)).
24 :- meta_predicate(benchmark_constraint(0, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)).
25
26 :- use_module(library(lists), [maplist/2,maplist/3,sumlist/2,select/3,nth1/3,max_member/2]).
27 :- use_module(library(file_systems)).
28
29 :- use_module(probsrc(preferences), [get_preference/2,set_preference/2]).
30 :- use_module(probsrc('dpllt_solver/dpllt_solver')).
31 :- use_module(probsrc('dpllt_solver/dpllt_settings')).
32 :- use_module(probsrc(solver_interface), [solve_predicate/3]).
33 :- use_module(probsrc(parsercall), [call_tla2b_parser/1]).
34 :- use_module(probsrc(bmachine), [b_machine_precompile/0,b_load_machine_from_file/1,b_load_eventb_project/1,b_load_machine_probfile/1]).
35
36 :- use_module(smt_solvers_interface(smt_solvers_interface), [smt_solve_predicate/4]).
37
38 :- dynamic solved_constraints/2, benchmark_result/3.
39 :- volatile solved_constraints/2, benchmark_result/3.
40
41 inc_solved_counter(Solver) :-
42 (retract(solved_constraints(Solver, Old)); Old = 0),
43 !,
44 New is Old + 1,
45 asserta(solved_constraints(Solver, New)).
46
47 add_benchmark_result(Solver, ConstraintPath, Result) :-
48 asserta(benchmark_result(Solver,ConstraintPath,Result)).
49
50 bmc_timeout(120000).
51 inductive_inv_timeout(120000).
52 deadlock_timeout(120000).
53
54 :- public amount_of_sat_vars_deadlock/0.
55
56 amount_of_sat_vars_deadlock :-
57 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/abz16_m4/', [], Acc1),
58 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/abz16_m5/', Acc1, Acc2),
59 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/abz16_m6/', Acc2, Acc3),
60 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/abz16_m7/', Acc3, Acc4),
61 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/r0_geardoor/', Acc4, Acc5),
62 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/r1_valve/', Acc5, Acc6),
63 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/r2_outputs/', Acc6, Acc7),
64 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/r3_sensors/', Acc7, Acc8),
65 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/r4_handle/', Acc8, Acc9),
66 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/r5_switch/', Acc9, Acc10),
67 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/pm_m0_aai/', Acc10, Acc11),
68 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/pm_m0_aat/', Acc11, Acc12),
69 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/pm_m0_aoo/', Acc12, Acc13),
70 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/pm_m0_voo/', Acc13, Acc14),
71 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/pm_m0_vvi/', Acc14, Acc15),
72 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/pm_m0_vvt/', Acc15, Acc16),
73 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/pm_m1_aoor/', Acc16, Acc17),
74 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/pm_m1_voor/', Acc17, Acc18),
75 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/pm_m2_aai/', Acc18, Acc19),
76 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/simple-two-phase/', Acc19, Acc20),
77 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/prisoners-4/', Acc20, Acc21),
78 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/bakery/', Acc21, Acc22),
79 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/paxos-3/', Acc22, Acc23),
80 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/lightbot/', Acc23, Acc24),
81 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/travel_agency/', Acc24, Acc25),
82 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/search_events/', Acc25, Acc26),
83 amount_of_sat_vars(deadlock, 'benchmarks_cbc_deadlock/large_branching/', Acc26, Acc27),
84 mean_of_list(Acc27, TotalMean),
85 median_of_list(Acc27, TotalMedian),
86 max_member(Max, Acc27),
87 open('amount_of_sat_vars_deadlock/total.txt', write, Stream),
88 tell(Stream),
89 format("Total mean: ~w~nTotal median: ~w~nTotal max: ~w~n", [TotalMean,TotalMedian,Max]),
90 close(Stream).
91
92 amount_of_sat_vars_inductive_inv :-
93 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/abz16_m4/', [], Acc1),
94 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/abz16_m5/', Acc1, Acc2),
95 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/abz16_m6/', Acc2, Acc3),
96 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/abz16_m7/', Acc3, Acc4),
97 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/r0_geardoor/', Acc4, Acc5),
98 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/r1_valve/', Acc5, Acc6),
99 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/r2_outputs/', Acc6, Acc7),
100 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/r3_sensors/', Acc7, Acc8),
101 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/r4_handle/', Acc8, Acc9),
102 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/r5_switch/', Acc9, Acc10),
103 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/pm_m0_aai/', Acc10, Acc11),
104 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/pm_m0_aat/', Acc11, Acc12),
105 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/pm_m0_aoo/', Acc12, Acc13),
106 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/pm_m0_voo/', Acc13, Acc14),
107 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/pm_m0_vvi/', Acc14, Acc15),
108 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/pm_m0_vvt/', Acc15, Acc16),
109 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/pm_m1_aoor/', Acc16, Acc17),
110 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/pm_m1_voor/', Acc17, Acc18),
111 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/pm_m2_aai/', Acc18, Acc19),
112 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/r6_lights/', Acc19, Acc20),
113 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/prisoners-4/', Acc20, Acc21),
114 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/bakery/', Acc21, Acc22),
115 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/paxos-3/', Acc22, Acc23),
116 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/lightbot/', Acc23, Acc24),
117 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/travel_agency/', Acc24, Acc25),
118 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/search_events/', Acc25, Acc26),
119 amount_of_sat_vars(inductive_inv, 'benchmarks_inductive_inv/large_branching/', Acc26, Acc27),
120 mean_of_list(Acc27, TotalMean),
121 median_of_list(Acc27, TotalMedian),
122 max_member(Max, Acc27),
123 open('amount_of_sat_vars_inductive_inv/total.txt', write, Stream),
124 tell(Stream),
125 format("Total mean: ~w~nTotal median: ~w~nTotal max: ~w~n", [TotalMean,TotalMedian,Max]),
126 close(Stream).
127
128 amount_of_sat_vars_bmc :-
129 amount_of_sat_vars(bmc, 'benchmarks/abz16_m4/', [], Acc1),
130 amount_of_sat_vars(bmc, 'benchmarks/abz16_m5/', Acc1, Acc2),
131 amount_of_sat_vars(bmc, 'benchmarks/abz16_m6/', Acc2, Acc3),
132 amount_of_sat_vars(bmc, 'benchmarks/abz16_m7/', Acc3, Acc4),
133 amount_of_sat_vars(bmc, 'benchmarks/r0_geardoor/', Acc4, Acc5),
134 amount_of_sat_vars(bmc, 'benchmarks/r1_valve/', Acc5, Acc6),
135 amount_of_sat_vars(bmc, 'benchmarks/r2_outputs/', Acc6, Acc7),
136 amount_of_sat_vars(bmc, 'benchmarks/r3_sensors/', Acc7, Acc8),
137 amount_of_sat_vars(bmc, 'benchmarks/r4_handle/', Acc8, Acc9),
138 amount_of_sat_vars(bmc, 'benchmarks/r5_switch/', Acc9, Acc10),
139 amount_of_sat_vars(bmc, 'benchmarks/pm_m0_aai/', Acc10, Acc11),
140 amount_of_sat_vars(bmc, 'benchmarks/pm_m0_aat/', Acc11, Acc12),
141 amount_of_sat_vars(bmc, 'benchmarks/pm_m0_aoo/', Acc12, Acc13),
142 amount_of_sat_vars(bmc, 'benchmarks/pm_m0_voo/', Acc13, Acc14),
143 amount_of_sat_vars(bmc, 'benchmarks/pm_m0_vvi/', Acc14, Acc15),
144 amount_of_sat_vars(bmc, 'benchmarks/pm_m0_vvt/', Acc15, Acc16),
145 amount_of_sat_vars(bmc, 'benchmarks/pm_m1_aoor/', Acc16, Acc17),
146 amount_of_sat_vars(bmc, 'benchmarks/pm_m1_voor/', Acc17, Acc18),
147 amount_of_sat_vars(bmc, 'benchmarks/pm_m2_aai/', Acc18, Acc19),
148 amount_of_sat_vars(bmc, 'benchmarks/simple-two-phase/', Acc19, Acc20),
149 amount_of_sat_vars(bmc, 'benchmarks/prisoners-4/', Acc20, Acc21),
150 amount_of_sat_vars(bmc, 'benchmarks/bakery/', Acc21, Acc22),
151 amount_of_sat_vars(bmc, 'benchmarks/paxos-3/', Acc22, Acc23),
152 amount_of_sat_vars(bmc, 'benchmarks/lightbot/', Acc23, Acc24),
153 amount_of_sat_vars(bmc, 'benchmarks/travel_agency/', Acc24, Acc25),
154 amount_of_sat_vars(bmc, 'benchmarks/search_events/', Acc25, Acc26),
155 amount_of_sat_vars(bmc, 'benchmarks/large_branching/', Acc26, Acc27),
156 amount_of_sat_vars(bmc, 'benchmarks/r6_lights/', Acc27, Acc28),
157 mean_of_list(Acc28, TotalMean),
158 median_of_list(Acc28, TotalMedian),
159 max_member(Max, Acc28),
160 open('amount_of_sat_vars_bmc/total.txt', write, Stream),
161 tell(Stream),
162 format("Total mean: ~w~nTotal median: ~w~nTotal max: ~w~n", [TotalMean,TotalMedian,Max]),
163 close(Stream).
164
165 run_deadlock_benchmarks1 :-
166 deadlock_timeout(Timeout),
167 preferences:set_preference(time_out, Timeout),
168 /*run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/abz16_m0/'),
169 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/abz16_m1/'),
170 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/abz16_m2/'),
171 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/abz16_m3/'),*/
172 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/abz16_m4/'),
173 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/abz16_m5/'),
174 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/abz16_m6/'),
175 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/abz16_m7/').
176
177 run_deadlock_benchmarks2 :-
178 deadlock_timeout(Timeout),
179 preferences:set_preference(time_out, Timeout),
180 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/r0_geardoor/'),
181 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/r1_valve/'),
182 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/r2_outputs/'),
183 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/r3_sensors/'),
184 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/r4_handle/'),
185 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/r5_switch/').
186 %run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/r6_lights/'), % static contradiction
187
188 run_deadlock_benchmarks3 :-
189 deadlock_timeout(Timeout),
190 preferences:set_preference(time_out, Timeout),
191 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m0_aai/'),
192 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m0_aat/'),
193 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m0_aoo/'),
194 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m0_voo/').
195 /*
196 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m2_aat/'),
197 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m2_vvi/'),
198 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m2_vvt/'),
199 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m3_aai/'),
200 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m3_aat/'),
201 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m3_vvi/'),
202 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m3_vvt/'),
203 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m4_aair/'),
204 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m4_aatr/'),
205 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m4_vvir/'),
206 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m4_vvtr/'),*/
207
208 run_deadlock_benchmarks4 :-
209 deadlock_timeout(Timeout),
210 preferences:set_preference(time_out, Timeout),
211 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m0_vvi/'),
212 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m0_vvt/'),
213 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m1_aoor/'),
214 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m1_voor/'),
215 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/pm_m2_aai/').
216
217 run_deadlock_benchmarks5 :-
218 deadlock_timeout(Timeout),
219 preferences:set_preference(time_out, Timeout),
220 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/simple-two-phase/'),
221 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/prisoners-4/'),
222 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/bakery/'),
223 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/paxos-3/').
224
225 run_deadlock_benchmarks6 :-
226 deadlock_timeout(Timeout),
227 preferences:set_preference(time_out, Timeout),
228 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/lightbot/'),
229 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/travel_agency/'),
230 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/search_events/'),
231 run_cbc_benchmarks(false, 'benchmarks_cbc_deadlock/large_branching/').
232
233 run_cbc_benchmarks1 :-
234 inductive_inv_timeout(Timeout),
235 preferences:set_preference(time_out, Timeout),
236 /*run_cbc_benchmarks(false, 'benchmarks_inductive_inv/abz16_m0/'),
237 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/abz16_m1/'),
238 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/abz16_m2/'),
239 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/abz16_m3/'),*/
240 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/abz16_m4/'),
241 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/abz16_m5/'),
242 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/abz16_m6/'),
243 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/abz16_m7/').
244
245 run_cbc_benchmarks2 :-
246 inductive_inv_timeout(Timeout),
247 preferences:set_preference(time_out, Timeout),
248 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/r0_geardoor/'),
249 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/r1_valve/'),
250 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/r2_outputs/'),
251 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/r3_sensors/'),
252 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/r4_handle/'),
253 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/r5_switch/'),
254 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/r6_lights/').
255
256 run_cbc_benchmarks3 :-
257 inductive_inv_timeout(Timeout),
258 preferences:set_preference(time_out, Timeout),
259 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m0_aai/'),
260 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m0_aat/'),
261 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m0_aoo/'),
262 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m0_voo/').
263 /*run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m2_aat/'),
264 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m2_vvi/'),
265 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m2_vvt/'),
266 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m3_aai/'),
267 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m3_aat/'),
268 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m3_vvi/'),
269 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m3_vvt/'),
270 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m4_aair/'),
271 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m4_aatr/'),
272 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m4_vvir/'),
273 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m4_vvtr/'),*/
274
275 run_cbc_benchmarks4 :-
276 inductive_inv_timeout(Timeout),
277 preferences:set_preference(time_out, Timeout),
278 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m0_vvi/'),
279 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m0_vvt/'),
280 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m1_aoor/'),
281 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m1_voor/'),
282 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/pm_m2_aai/').
283
284 run_cbc_benchmarks5 :-
285 inductive_inv_timeout(Timeout),
286 preferences:set_preference(time_out, Timeout),
287 %run_cbc_benchmarks(false, 'benchmarks_inductive_inv/simple-two-phase/'), % static contradiction
288 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/prisoners-4/'),
289 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/bakery/'),
290 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/paxos-3/').
291
292 run_cbc_benchmarks6 :-
293 inductive_inv_timeout(Timeout),
294 preferences:set_preference(time_out, Timeout),
295 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/lightbot/'),
296 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/travel_agency/'),
297 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/search_events/'),
298 run_cbc_benchmarks(false, 'benchmarks_inductive_inv/large_branching/').
299
300
301 run_bmc_benchmarks1 :-
302 bmc_timeout(Timeout),
303 preferences:set_preference(time_out, Timeout),
304 %run_bmc_benchmarks(false, 'benchmarks/paxos-5/'),
305 %run_bmc_benchmarks(false, 'benchmarks/abz16_m0/'),
306 /*run_bmc_benchmarks(false, 'benchmarks/abz16_m1/'),
307 run_bmc_benchmarks(false, 'benchmarks/abz16_m2/'),
308 run_bmc_benchmarks(false, 'benchmarks/abz16_m3/'),*/
309 run_bmc_benchmarks(false, 'benchmarks/abz16_m6/'),
310 run_bmc_benchmarks(false, 'benchmarks/abz16_m7/'),
311 run_bmc_benchmarks(false, 'benchmarks/abz16_m4/'),
312 run_bmc_benchmarks(false, 'benchmarks/abz16_m5/').
313
314 run_bmc_benchmarks2 :-
315 bmc_timeout(Timeout),
316 preferences:set_preference(time_out, Timeout),
317 run_bmc_benchmarks(false, 'benchmarks/r4_handle/'),
318 run_bmc_benchmarks(false, 'benchmarks/r5_switch/'),
319 run_bmc_benchmarks(false, 'benchmarks/r6_lights/'),
320 run_bmc_benchmarks(false, 'benchmarks/r0_geardoor/'),
321 run_bmc_benchmarks(false, 'benchmarks/r1_valve/'),
322 run_bmc_benchmarks(false, 'benchmarks/r2_outputs/'),
323 run_bmc_benchmarks(false, 'benchmarks/r3_sensors/').
324
325 run_bmc_benchmarks3 :-
326 bmc_timeout(Timeout),
327 preferences:set_preference(time_out, Timeout),
328 run_bmc_benchmarks(false, 'benchmarks/pm_m0_aai/'),
329 run_bmc_benchmarks(false, 'benchmarks/pm_m0_aat/'),
330 run_bmc_benchmarks(false, 'benchmarks/pm_m0_aoo/'),
331 run_bmc_benchmarks(false, 'benchmarks/pm_m0_voo/'),
332 run_bmc_benchmarks(false, 'benchmarks/pm_m0_vvi/').
333
334 run_bmc_benchmarks4 :-
335 bmc_timeout(Timeout),
336 preferences:set_preference(time_out, Timeout),
337 run_bmc_benchmarks(false, 'benchmarks/pm_m0_vvt/'),
338 run_bmc_benchmarks(false, 'benchmarks/pm_m1_aoor/'),
339 run_bmc_benchmarks(false, 'benchmarks/pm_m1_voor/'),
340 run_bmc_benchmarks(false, 'benchmarks/pm_m2_aai/').
341 /*run_bmc_benchmarks(false, 'benchmarks/pm_m2_aat/'),
342 run_bmc_benchmarks(false, 'benchmarks/pm_m2_vvi/'),
343 run_bmc_benchmarks(false, 'benchmarks/pm_m2_vvt/'),
344 run_bmc_benchmarks(false, 'benchmarks/pm_m3_aai/'),
345 run_bmc_benchmarks(false, 'benchmarks/pm_m3_aat/'),
346 run_bmc_benchmarks(false, 'benchmarks/pm_m3_vvi/'),
347 run_bmc_benchmarks(false, 'benchmarks/pm_m3_vvt/'),
348 run_bmc_benchmarks(false, 'benchmarks/pm_m4_aair/'),
349 run_bmc_benchmarks(false, 'benchmarks/pm_m4_aatr/'),
350 run_bmc_benchmarks(false, 'benchmarks/pm_m4_vvir/'),
351 run_bmc_benchmarks(false, 'benchmarks/pm_m4_vvtr/')*/
352
353 run_bmc_benchmarks5 :-
354 bmc_timeout(Timeout),
355 preferences:set_preference(time_out, Timeout),
356 run_bmc_benchmarks(false, 'benchmarks/simple-two-phase/'),
357 run_bmc_benchmarks(false, 'benchmarks/lightbot/'),
358 run_bmc_benchmarks(false, 'benchmarks/travel_agency/'),
359 run_bmc_benchmarks(false, 'benchmarks/search_events/').
360
361 run_bmc_benchmarks6 :-
362 bmc_timeout(Timeout),
363 preferences:set_preference(time_out, Timeout),
364 run_bmc_benchmarks(false, 'benchmarks/large_branching/'),
365 run_bmc_benchmarks(false, 'benchmarks/prisoners-4/'),
366 run_bmc_benchmarks(false, 'benchmarks/bakery/'),
367 run_bmc_benchmarks(false, 'benchmarks/paxos-3/').
368
369 select_machine_file_path(FilePaths, MachineFilePath, BenchmarkFilePaths) :-
370 select(_-MachineFilePath, FilePaths, BenchmarkFilePaths),
371 ( atom_concat(_, '.eventb', MachineFilePath)
372 ; atom_concat(_, '.mch', MachineFilePath)
373 ; atom_concat(_, '.tla', MachineFilePath)
374 ).
375
376 load_b_eventb_or_tla(MachineFilePath) :-
377 ( is_eventb_machine(MachineFilePath)
378 -> b_load_eventb_project(MachineFilePath)
379 ; is_tla_file(MachineFilePath)
380 -> call_tla2b_parser(MachineFilePath),
381 atom_concat(PrefixPath, '.tla', MachineFilePath),
382 atom_concat(PrefixPath, '.prob', BMachinePath),
383 b_load_machine_probfile(BMachinePath)
384 ; b_load_machine_from_file(MachineFilePath)
385 ),
386 b_machine_precompile.
387
388 amount_of_sat_vars(BenchmarkName, FolderPath, Acc, NewAcc) :-
389 write('Eval amount of sat variables for '), write(FolderPath), nl,
390 directory_exists(FolderPath),
391 file_members_of_directory(FolderPath, FilePaths),
392 select_machine_file_path(FilePaths, MachineFilePath, TBenchmarkFilePaths),
393 findall(FilePath, (member(_-FilePath, TBenchmarkFilePaths), atom_concat(_, '.eval', FilePath)), BenchmarkFilePaths),
394 load_b_eventb_or_tla(MachineFilePath),
395 amount_of_sat_vars_for_benchmark(BenchmarkFilePaths, AmountOfSatVars),
396 append(Acc, AmountOfSatVars, NewAcc),
397 eval_amount_of_sat_vars(BenchmarkName, AmountOfSatVars).
398
399 mean_of_list([], M) :-
400 !,
401 M = 0.
402 mean_of_list(L, M) :-
403 length(L, Len),
404 sumlist(L, Sum),
405 M is Sum / Len.
406
407 median_of_list(L, M) :-
408 length(L, Len),
409 sort(L, LS),
410 ( LS = [E]
411 -> M = E
412 ; Len21 is floor(Len / 2),
413 Len22 is ceiling(Len / 2),
414 ( Len21 \== Len22
415 -> nth1(Len22, L, M)
416 ; nth1(Len21, L, M1),
417 Len211 is Len21 + 1,
418 nth1(Len211, L, M2),
419 M is (M1+M2)/2
420 )
421 ).
422
423 eval_amount_of_sat_vars(BenchmarkName, AmountOfSatVars) :-
424 bmachine:b_machine_name(MachineName),
425 atom_concat(MachineName, 'amount_of_sat_vars.txt', OutPath1),
426 atom_concat('amount_of_sat_vars_', BenchmarkName, OutFolder1),
427 atom_concat(OutFolder1, '/', OutFolder),
428 atom_concat(OutFolder, OutPath1, OutPath),
429 mean_of_list(AmountOfSatVars, MeanAmountOfSatVars),
430 median_of_list(AmountOfSatVars, MedianAmountOfSatVars),
431 open(OutPath, write, Stream),
432 tell(Stream),
433 format("AmountOfSatVarsList: ~w~nMean: ~w~nMedian: ~w~n", [AmountOfSatVars, MeanAmountOfSatVars, MedianAmountOfSatVars]),
434 close(Stream).
435
436 amount_of_sat_vars_for_benchmark([], []).
437 amount_of_sat_vars_for_benchmark([BenchmarkFilePath|T], [AmountOfSatVars|TAmountOfSatVars]) :-
438 open(BenchmarkFilePath, read, Stream),
439 read(Stream, Constraint),
440 close(Stream),
441 dpllt_solver:get_amount_of_sat_variables(Constraint, AmountOfSatVars),
442 amount_of_sat_vars_for_benchmark(T, TAmountOfSatVars).
443
444 run_cbc_benchmarks(UseIdlSolver, FolderPath) :-
445 directory_exists(FolderPath),
446 file_members_of_directory(FolderPath, FilePaths),
447 select_machine_file_path(FilePaths, MachineFilePath, TBenchmarkFilePaths),
448 findall(FileName-FilePath, (member(FileName-FilePath, TBenchmarkFilePaths), atom_concat(_, '.eval', FilePath)), BenchmarkFilePaths),
449 load_b_eventb_or_tla(MachineFilePath),
450 run_cbc_benchmarks(UseIdlSolver, FolderPath, BenchmarkFilePaths).
451
452 run_cbc_benchmarks(_, _, []).
453 run_cbc_benchmarks(UseIdlSolver, FolderPath, [FileName-BenchmarkFilePath|T]) :-
454 open(BenchmarkFilePath, read, Stream),
455 read(Stream, Constraint),
456 close(Stream),
457 retractall(dpllt_sat_solver:incremental_mode),
458 run_cbc_benchmark(UseIdlSolver, FolderPath, FileName-BenchmarkFilePath, Constraint),
459 run_cbc_benchmarks(UseIdlSolver, FolderPath, T).
460
461 run_cbc_benchmark(UseIdlSolver, FolderPath, FileName-BenchmarkFilePath, Constraint) :-
462 inductive_inv_timeout(Timeout),
463 preferences:set_preference(time_out, Timeout),
464 set_preference(dpllt_use_idl_theory_solver, false),
465 set_preference(dpllt_perform_static_analysis, false),
466 set_preference(dpllt_perform_symmetry_breaking, true),
467 dpllt_solver:init,
468 write('Solve with Sym-Raw-SMT..'),nl,
469 writeq(BenchmarkFilePath),nl,
470 statistics(walltime, [StartDplltRawSym|_]),
471 dpllt_solve_predicate(Constraint, _, ResDplltRawSym),
472 statistics(walltime, [StopDplltRawSym|_]),
473 (dpllt_sat_solver:restarts(RestartsDplltRawSym); RestartsDplltRawSym = 0),
474 TimeDplltRawSym is StopDplltRawSym - StartDplltRawSym,
475 nl,nl,write(ResDplltRawSym),nl,nl,
476 %%
477 write('done.'), nl,
478 set_preference(dpllt_perform_static_analysis, true),
479 dpllt_solver:init,
480 write('Solve with Sym-SMT..'),nl,
481 writeq(BenchmarkFilePath),nl,
482 statistics(walltime, [StartDpllt|_]),
483 dpllt_solve_predicate(Constraint, _, ResDpllt),
484 statistics(walltime, [StopDpllt|_]),
485 (dpllt_sat_solver:restarts(RestartsDpllt); RestartsDpllt = 0),
486 TimeDpllt is StopDpllt - StartDpllt,
487 nl,nl,write(ResDpllt),nl,nl,
488 %%
489 write('done.'), nl,
490 preferences:set_preference(time_out, Timeout),
491 ( UseIdlSolver
492 -> set_preference(dpllt_perform_symmetry_breaking,false),
493 set_preference(dpllt_use_idl_theory_solver,true),
494 dpllt_solver:init,
495 write('Solve with IDL-SMT..'),nl,
496 writeq(BenchmarkFilePath),nl,
497 statistics(walltime, [StartDplltIdl|_]),
498 dpllt_solve_predicate(Constraint, _, ResDplltIdl),
499 statistics(walltime, [StopDplltIdl|_]),
500 (dpllt_sat_solver:restarts(RestartsDplltIdl); RestartsDplltIdl = 0),
501 TimeDplltIdl is StopDplltIdl - StartDplltIdl,
502 set_preference(dpllt_use_idl_theory_solver,false),
503 set_preference(dpllt_perform_symmetry_breaking,true)
504 ; TimeDplltIdl = 0,
505 RestartsDplltIdl = 0,
506 ResDplltIdl = none
507 ),
508 nl,nl,write(ResDplltIdl),nl,nl,
509 write('done.'), nl,
510 %%
511 preferences:set_preference(time_out, Timeout),
512 set_preference(dpllt_perform_symmetry_breaking,false),
513 dpllt_solver:init,
514 write('Solve with SMT..'),nl,
515 writeq(BenchmarkFilePath),nl,
516 statistics(walltime, [StartDplltNoSym|_]),
517 dpllt_solve_predicate(Constraint, _, ResDplltNoSym),
518 statistics(walltime, [StopDplltNoSym|_]),
519 (dpllt_sat_solver:restarts(RestartsDplltNoSym); RestartsDplltNoSym = 0),
520 TimeDplltNoSym is StopDplltNoSym - StartDplltNoSym,
521 nl,nl,write(ResDplltNoSym),nl,nl,
522 write('done.'), nl,
523 preferences:set_preference(time_out, Timeout),
524 %%
525 set_preference(dpllt_perform_static_analysis,false),
526 set_preference(dpllt_perform_symmetry_breaking,false),
527 dpllt_solver:init,
528 write('Solve with Raw-SMT..'),nl,
529 writeq(BenchmarkFilePath),nl,
530 statistics(walltime, [StartDplltRaw|_]),
531 dpllt_solve_predicate(Constraint, _, ResDplltRaw),
532 statistics(walltime, [StopDplltRaw|_]),
533 (dpllt_sat_solver:restarts(RestartsDplltRaw); RestartsDplltRaw = 0),
534 TimeDplltRaw is StopDplltRaw - StartDplltRaw,
535 nl,nl,write(ResDplltRaw),nl,nl,
536 write('done.'), nl,
537 preferences:set_preference(time_out, Timeout),
538 %%
539 write('Solve with Z3..'),nl,
540 writeq(BenchmarkFilePath),nl,
541 %translate:print_bexpr(Constraint),nl,
542 statistics(walltime, [StartZ3|_]),
543 smt_solve_predicate(z3,Constraint, _, ResZ3),
544 %ResZ3 = no_solution_found(solver_answered_unknown),
545 statistics(walltime, [StopZ3|_]),
546 TimeZ3 is StopZ3 - StartZ3,
547 nl,nl,write(ResZ3),nl,nl,
548 preferences:set_preference(time_out, Timeout),
549 %%
550 write('Solve with ProB..'),nl,
551 writeq(BenchmarkFilePath),nl,
552 statistics(walltime, [StartProB|_]),
553 solve_predicate(Constraint, _, ResProB),
554 %ResProB = no_solution_found(solver_answered_unknown),
555 statistics(walltime, [StopProB|_]),
556 TimeProB is StopProB - StartProB,
557 nl,nl,write(ResProB),nl,nl,
558 write('done.'), nl,
559 !,
560 eval_cbc_benchmark_data(FolderPath, FileName-BenchmarkFilePath, ResDplltRawSym, TimeDplltRawSym, RestartsDplltRawSym, ResDpllt, TimeDpllt, RestartsDpllt, ResDplltNoSym, TimeDplltNoSym, RestartsDplltNoSym, ResDplltIdl, TimeDplltIdl, RestartsDplltIdl, ResDplltRaw, TimeDplltRaw, RestartsDplltRaw, ResZ3, TimeZ3, ResProB, TimeProB).
561
562 eval_cbc_benchmark_data(FolderPath, FileName-BenchmarkFilePath, ResDplltRawSym, TimeDplltRawSym, RestartsDplltRawSym, ResDpllt, TimeDpllt, RestartsDpllt, ResDplltNoSym, TimeDplltNoSym, RestartsDplltNoSym, ResDplltIdl, TimeDplltIdl, RestartsDplltIdl, ResDplltRaw, TimeDplltRaw, RestartsDplltRaw, ResZ3, TimeZ3, ResProB, TimeProB) :-
563 atom_concat(FileNameNoExt, '.eval', FileName),
564 atom_concat('benchmark_results_', FileNameNoExt, TResultsPath),
565 atom_concat(TResultsPath, '.txt', TTResultsPath),
566 atom_concat(FolderPath, TTResultsPath, ResultsPath),
567 open(ResultsPath, write, Stream),
568 tell(Stream),
569 writeq(BenchmarkFilePath),nl,nl,
570 format("DPLLT-Res: ~w~nDPLLT-Time: ~w~nDPLLT-Restarts: ~w~n", [ResDpllt,TimeDpllt,RestartsDpllt]),
571 format("DPLLT-No-Sym-Res: ~w~nDPLLT-No-Sym-Time: ~w~nDPLLT-No-Sym-Restarts: ~w~n", [ResDplltNoSym,TimeDplltNoSym,RestartsDplltNoSym]),
572 format("DPLLT-Idl-Res: ~w~nDPLLT-Idl-Time: ~w~nDPLLT-Idl-Restarts: ~w~n", [ResDplltIdl,TimeDplltIdl,RestartsDplltIdl]),
573 format("DPLLT-Raw-Res: ~w~nDPLLT-Raw-Time: ~w~nDPLLT-Raw-Restarts: ~w~n", [ResDplltRaw,TimeDplltRaw,RestartsDplltRaw]),
574 format("DPLLT-Sym-Raw-Res: ~w~nDPLLT-Sym-Raw-Time: ~w~nDPLLT-Sym-Raw-Restarts: ~w~n", [ResDplltRawSym,TimeDplltRawSym,RestartsDplltRawSym]),
575 format("Z3-Res: ~w~nZ3-Time: ~w~n", [ResZ3,TimeZ3]),
576 format("ProB-Res: ~w~nProB-Time: ~w~n", [ResProB,TimeProB]),
577 close(Stream),
578 !.
579
580 int_range(C, B, R) :-
581 C == B,
582 !,
583 R = [C].
584 int_range(C, B, [C|T]) :-
585 C1 is C + 1,
586 int_range(C1, B, T).
587
588 get_file_paths_from_config(ConfigPath, MachineFile, ConstraintPaths, Description, MachineName) :-
589 open(ConfigPath, read, Stream),
590 read(Stream, Config),
591 close(Stream),
592 Config = benchmark_config(Description, MachineFile, MachineName, MaxBound),
593 int_range(0, MaxBound, KRange),
594 findall(ConstraintPath,
595 (member(K, KRange), atom_concat(MachineName, '_monolithic_bmc_k_', T1),
596 number_codes(K, CK), atom_codes(AK, CK),
597 atom_concat(T1, AK, T2), atom_concat(T2, '.eval', ConstraintPath)),
598 ConstraintPaths).
599
600 is_eventb_machine(MachineFile) :-
601 atom_concat(_, '.eventb', MachineFile).
602
603 is_tla_file(File) :-
604 atom_concat(_, '.tla', File).
605
606 write_to_csv(SolverName, MachineName, Data) :-
607 atom_concat('benchmarks_dpllt_journal/', MachineName, Path1),
608 atom_concat(Path1, '_results_', Path2),
609 atom_concat(Path2, SolverName, Path3),
610 atom_concat(Path3, '.csv', EvalFilePath),
611 nl,nl,write('csv'),nl,
612 write(EvalFilePath),nl,nl,
613 open(EvalFilePath, write, Stream),
614 tell(Stream),
615 format("ConstraintPath,Result,Time (ms)~n", []),
616 write_to_csv_stream(SolverName, Stream, Data),
617 close(Stream).
618
619 write_to_csv_stream(_, _, []).
620 write_to_csv_stream(SolverName, Stream, [(ConstraintPath,Time)|T]) :-
621 ( benchmark_result(SolverName, ConstraintPath, Result)
622 -> true
623 ; Result = no_solution_found
624 ),
625 format("~w,~w,~w~n", [ConstraintPath,Result,Time]),
626 write_to_csv_stream(SolverName, Stream, T).
627
628 eval_benchmark_data_csv(MachineName, Description, Data) :-
629 format("Evaluate benchmarks ~w for detailed CSV~n", [Description]),
630 findall((ConstraintPath,TimeZ3), member((ConstraintPath,TimeZ3,_,_,_,_,_,_,_,_,_,_), Data), DataZ3),
631 findall((ConstraintPath,TimeDpllt), member((ConstraintPath,_,TimeDpllt,_,_,_,_,_,_,_,_,_), Data), DataDpllt),
632 findall((ConstraintPath,TimeDplltRaw), member((ConstraintPath,_,_,TimeDplltRaw,_,_,_,_,_,_,_,_,_), Data), DataDplltRaw),
633 %findall((ConstraintPath,TimeDplltIdl), member((ConstraintPath,_,_,_,TimeDplltIdl,_,_,_,_,_,_,_,_), Data), DataDplltIdl),
634 findall((ConstraintPath,TimeDplltNoSym), member((ConstraintPath,_,_,_,_,TimeDplltNoSym,_,_,_,_,_,_,_), Data), DataDplltNoSym),
635 findall((ConstraintPath,TimeDplltRawSym), member((ConstraintPath,_,_,_,_,_,TimeDplltRawSym,_,_,_,_,_,_), Data), DataDplltRawSym),
636 findall((ConstraintPath,TimeProB), member((ConstraintPath,_,_,_,_,_,_,TimeProB,_,_,_,_,_), Data), DataProB),
637 write_to_csv(z3, MachineName, DataZ3),
638 write_to_csv(prob, MachineName, DataProB),
639 write_to_csv(smt, MachineName, DataDplltNoSym),
640 write_to_csv(sym_smt, MachineName, DataDpllt),
641 write_to_csv(raw_smt, MachineName, DataDplltRaw),
642 write_to_csv(sym_raw_smt, MachineName, DataDplltRawSym).
643
644 eval_benchmark_data(MachineName, Description, Data) :-
645 format("Evaluate benchmarks ~w~n", [Description]),
646 findall(TimeZ3, member((_,TimeZ3,_,_,_,_,_,_,_,_,_,_), Data), TimesZ3),
647 findall(TimeDpllt, member((_,_,TimeDpllt,_,_,_,_,_,_,_,_,_), Data), TimesDpllt),
648 findall(TimeDplltRaw, member((_,_,_,TimeDplltRaw,_,_,_,_,_,_,_,_,_), Data), TimesDplltRaw),
649 findall(TimeDplltIdl, member((_,_,_,_,TimeDplltIdl,_,_,_,_,_,_,_,_), Data), TimesDplltIdl),
650 findall(TimeDplltNoSym, member((_,_,_,_,_,TimeDplltNoSym,_,_,_,_,_,_,_), Data), TimesDplltNoSym),
651 findall(TimeDplltRawSym, member((_,_,_,_,_,_,TimeDplltRawSym,_,_,_,_,_,_), Data), TimesDplltRawSym),
652 findall(TimeProB, member((_,_,_,_,_,_,_,TimeProB,_,_,_,_,_), Data), TimesProB),
653 findall(RestartDpllt, member((_,_,_,_,_,_,_,_,RestartDpllt,_,_,_,_), Data), RestartsDpllt),
654 findall(RestartDplltRaw, member((_,_,_,_,_,_,_,_,_,RestartDplltRaw,_,_), Data), RestartsDplltRaw),
655 findall(RestartDplltIdl, member((_,_,_,_,_,_,_,_,_,_,RestartDplltIdl,_,_), Data), RestartsDplltIdl),
656 findall(RestartDplltNoSym, member((_,_,_,_,_,_,_,_,_,_,_,RestartDplltNoSym,_), Data), RestartsDplltNoSym),
657 findall(RestartDplltRawSym, member((_,_,_,_,_,_,_,_,_,_,_,_,RestartDplltRawSym), Data), RestartsDplltRawSym),
658 sumlist(TimesZ3, TimeZ3),
659 sumlist(TimesDpllt, TimeDpllt),
660 sumlist(TimesDplltRaw, TimeDplltRaw),
661 sumlist(TimesDplltIdl, TimeDplltIdl),
662 sumlist(TimesDplltNoSym, TimeDplltNoSym),
663 sumlist(TimesDplltRawSym, TimeDplltRawSym),
664 sumlist(TimesProB, TimeProB),
665 sumlist(RestartsDpllt, RestartDpllt),
666 sumlist(RestartsDplltRaw, RestartDplltRaw),
667 sumlist(RestartsDplltIdl, RestartDplltIdl),
668 sumlist(RestartsDplltNoSym, RestartDplltNoSym),
669 sumlist(RestartsDplltRawSym, RestartDplltRawSym),
670 atom_concat('benchmarks_dpllt_journal/', MachineName, Path1),
671 atom_concat(Path1, '_results.txt', EvalFilePath),
672 nl,nl,write('eval'),nl,
673 write(EvalFilePath),nl,nl,
674 open(EvalFilePath, write, Stream),
675 tell(Stream),
676 format("Time Sym-Raw-SMT: ~w~nRestart Sym-Raw-SMT: ~w~nTime Z3: ~w~nTime Sym-SMT: ~w~nRestart Sym-SMT: ~w~nTime Idl-SMT: ~w~nRestart Idl-SMT: ~w~nTime SMT: ~w~nRestart SMT: ~w~nTime Raw-SMT: ~w~nRestart Raw-SMT: ~w~nTime ProB: ~w~n~n", [TimeDplltRawSym,RestartsDplltRawSym,TimeZ3,TimeDpllt,RestartDpllt,TimeDplltIdl,RestartDplltIdl,TimeDplltNoSym,RestartDplltNoSym,TimeDplltRaw,RestartDplltRaw,TimeProB]),
677 findall(TO, (solved_constraints(A,B), TO = solved_constraints(A,B)), TOs),
678 (member(solved_constraints(prob,SolvedProB), TOs); SolvedProB = 0),
679 (member(solved_constraints(z3,SolvedZ3), TOs); SolvedZ3 = 0),
680 (member(solved_constraints(smt,SolvedSMT), TOs); SolvedSMT = 0),
681 (member(solved_constraints(raw_smt,SolvedRawSMT), TOs); SolvedRawSMT = 0),
682 (member(solved_constraints(sym_smt,SolvedSymSMT), TOs); SolvedSymSMT = 0),
683 (member(solved_constraints(sym_raw_smt,SolvedSymRawSMT), TOs); SolvedSymRawSMT = 0),
684 format("~w / ~w & ~w / ~w & ~w / ~w & ~w / ~w & ~w / ~w & ~w / ~w~n", [SolvedProB,TimeProB,SolvedZ3,TimeZ3,SolvedSMT,TimeDplltNoSym,SolvedRawSMT,TimeDplltRaw,SolvedSymSMT,TimeDpllt,SolvedSymRawSMT,TimeDplltRawSym]),
685 nl, write(TOs), nl,
686 close(Stream).
687
688 run_bmc_benchmarks(UseIdlSolver, DirPath) :-
689 retractall(solved_constraints(_,_)),
690 retractall(benchmark_result(_,_,_)),
691 atom_concat(DirPath, 'benchmark_config.pl', ConfigPath),
692 get_file_paths_from_config(ConfigPath, MachineFile, ConstraintPaths, Description, MachineName),
693 format("Run benchmarks ~w~n", [Description]),
694 atom_concat(DirPath, MachineFile, MachinePath),
695 load_b_eventb_or_tla(MachinePath),
696 maplist(atom_concat(DirPath), ConstraintPaths, FullConstraintPaths),
697 get_preference(time_out, Timeout),
698 retractall(dpllt_sat_solver:incremental_mode),
699 benchmark_constraints(UseIdlSolver, Timeout, FullConstraintPaths, [], Data),
700 retractall(dpllt_sat_solver:memoize_backjump_clause(_, _, _)),
701 eval_benchmark_data(MachineName, Description, Data),
702 eval_benchmark_data_csv(MachineName, Description, Data).
703
704 benchmark_constraints(_, _, [], Acc, Acc).
705 benchmark_constraints(UseIdlSolver, Timeout, [ConstraintPath|T], Acc, Data) :-
706 benchmark_constraint(UseIdlSolver, Timeout, ConstraintPath, TimeZ3, TimeDpllt, TimeDplltRaw, TimeDplltIdl, TimeDplltNoSym, TimeDplltRawSym, TimeProB, RestartsDpllt, RestartsDplltRaw, RestartsDplltIdl, RestartsDplltNoSym, RestartsDplltRawSym), !,
707 benchmark_constraints(UseIdlSolver, Timeout, T, [(ConstraintPath,TimeZ3,TimeDpllt,TimeDplltRaw,TimeDplltIdl,TimeDplltNoSym,TimeDplltRawSym,TimeProB,RestartsDpllt,RestartsDplltRaw,RestartsDplltIdl,RestartsDplltNoSym,RestartsDplltRawSym)|Acc], Data).
708
709 benchmark_constraint(UseIdlSolver, _, ConstraintPath, TimeZ3, TimeDpllt, TimeDplltRaw, TimeDplltIdl, TimeDplltNoSym, TimeDplltRawSym, TimeProB, RestartsDpllt, RestartsDplltRaw, RestartsDplltIdl, RestartsDplltNoSym, RestartsDplltRawSym) :-
710 bmc_timeout(Timeout),
711 open(ConstraintPath, read, Stream),
712 read(Stream, Constraint),
713 close(Stream),
714 write(ConstraintPath),nl,
715 %translate:print_bexpr(Constraint),nl,
716 preferences:set_preference(time_out, Timeout),
717 set_preference(dpllt_use_idl_theory_solver, false),
718 set_preference(dpllt_perform_static_analysis, false),
719 set_preference(dpllt_perform_symmetry_breaking, true),
720 dpllt_solver:init,
721 write('Solve with Sym-Raw-SMT..'),nl,
722 write(ConstraintPath),nl,
723 statistics(walltime, [StartDplltRawSym|_]),
724 dpllt_solve_predicate(sym_raw_smt, Constraint, _SolvedPred1, ResDplltRawSym),
725 %ResDplltRawSym = no_solution_found(solver_answered_unknown),
726 statistics(walltime, [StopDplltRawSym|_]),
727 (dpllt_sat_solver:restarts(RestartsDplltRawSym); RestartsDplltRawSym = 0),
728 format("Restarts: ~w~n", [RestartsDplltRawSym]),
729 TimeDplltRawSym is StopDplltRawSym - StartDplltRawSym,
730 ( solved_constraint(ResDplltRawSym)
731 -> inc_solved_counter(sym_raw_smt),
732 add_benchmark_result(sym_raw_smt, ConstraintPath, ResDplltRawSym)
733 ; true
734 ),
735 nl,nl,write(ResDplltRawSym),nl,nl,
736 write('done.'), nl,
737 set_preference(dpllt_perform_static_analysis, true),
738 dpllt_solver:init,
739 write('Solve with Sym-SMT..'),nl,
740 write(ConstraintPath),nl,
741 statistics(walltime, [StartDpllt|_]),
742 dpllt_solve_predicate(sym_smt, Constraint, _SolvedPred2, ResDpllt),
743 %ResDpllt = no_solution_found(solver_answered_unknown),
744 statistics(walltime, [StopDpllt|_]),
745 (dpllt_sat_solver:restarts(RestartsDpllt); RestartsDpllt = 0),
746 format("Restarts: ~w~n", [RestartsDpllt]),
747 TimeDpllt is StopDpllt - StartDpllt,
748 ( solved_constraint(ResDpllt)
749 -> inc_solved_counter(sym_smt),
750 add_benchmark_result(sym_smt, ConstraintPath, ResDpllt)
751 ; true
752 ),
753 nl,nl,write(ResDpllt),nl,nl,
754 write('done.'), nl,
755 preferences:set_preference(time_out, Timeout),
756 ( UseIdlSolver
757 -> set_preference(dpllt_perform_symmetry_breaking, false),
758 set_preference(dpllt_use_idl_theory_solver, true),
759 dpllt_solver:init,
760 write('Solve with IDL-SMT..'),nl,
761 statistics(walltime, [StartDplltIdl|_]),
762 dpllt_solve_predicate(idl_smt, Constraint, _SolvedPred3, ResDplltIdl),
763 statistics(walltime, [StopDplltIdl|_]),
764 (dpllt_sat_solver:restarts(RestartsDplltIdl); RestartsDplltIdl = 0),
765 format("Restarts: ~w~n", [RestartsDplltIdl]),
766 TimeDplltIdl is StopDplltIdl - StartDplltIdl,
767 ( solved_constraint(ResDplltIdl)
768 -> inc_solved_counter(idl_smt),
769 add_benchmark_result(idl_smt, ConstraintPath, ResDplltIdl)
770 ; true
771 ),
772 set_preference(dpllt_use_idl_theory_solver, false),
773 set_preference(dpllt_perform_symmetry_breaking, true)
774 ; TimeDplltIdl = 0,
775 RestartsDplltIdl = 0,
776 ResDplltIdl = none
777 ),
778 nl,nl,write(ResDplltIdl),nl,nl,
779 write('done.'), nl,
780 %%
781 preferences:set_preference(time_out, Timeout),
782 set_preference(dpllt_perform_symmetry_breaking, false),
783 dpllt_solver:init,
784 write('Solve with SMT..'),nl,
785 write(ConstraintPath),nl,
786 statistics(walltime, [StartDplltNoSym|_]),
787 dpllt_solve_predicate(smt, Constraint, _, ResDplltNoSym),
788 %ResDplltNoSym = no_solution_found(solver_answered_unknown),
789 statistics(walltime, [StopDplltNoSym|_]),
790 (dpllt_sat_solver:restarts(RestartsDplltNoSym); RestartsDplltNoSym = 0),
791 format("Restarts: ~w~n", [RestartsDplltNoSym]),
792 TimeDplltNoSym is StopDplltNoSym - StartDplltNoSym,
793 ( solved_constraint(ResDplltNoSym)
794 -> inc_solved_counter(smt),
795 add_benchmark_result(smt, ConstraintPath, ResDplltNoSym)
796 ; true
797 ),
798 nl,nl,write(ResDplltNoSym),nl,nl,
799 write('done.'), nl,
800 preferences:set_preference(time_out, Timeout),
801 %%
802 set_preference(dpllt_perform_static_analysis, false),
803 set_preference(dpllt_perform_symmetry_breaking, false),
804 dpllt_solver:init,
805 write('Solve with Raw-SMT..'),nl,
806 write(ConstraintPath),nl,
807 statistics(walltime, [StartDplltRaw|_]),
808 dpllt_solve_predicate(raw_smt, Constraint, _, ResDplltRaw),
809 %ResDplltRaw = no_solution_found(solver_answered_unknown),
810 statistics(walltime, [StopDplltRaw|_]),
811 (dpllt_sat_solver:restarts(RestartsDplltRaw); RestartsDplltRaw = 0),
812 format("Restarts: ~w~n", [RestartsDplltRaw]),
813 TimeDplltRaw is StopDplltRaw - StartDplltRaw,
814 ( solved_constraint(ResDplltRaw)
815 -> inc_solved_counter(raw_smt),
816 add_benchmark_result(raw_smt, ConstraintPath, ResDplltRaw)
817 ; true
818 ),
819 nl,nl,write(ResDplltRaw),nl,nl,
820 write('done.'), nl,
821 preferences:set_preference(time_out, Timeout),
822 set_preference(dpllt_perform_static_analysis,true),
823 set_preference(dpllt_perform_symmetry_breaking,true),
824 %%
825 write('Solve with Z3..'),nl,
826 write(ConstraintPath),nl,
827 statistics(walltime, [StartZ3|_]),
828 smt_solve_predicate(z3,Constraint, _, ResZ3),
829 %ResZ3 = no_solution_found(solver_answered_unknown),
830 statistics(walltime, [StopZ3|_]),
831 TimeZ3 is StopZ3 - StartZ3,
832 ( solved_constraint(ResZ3)
833 -> inc_solved_counter(z3),
834 add_benchmark_result(z3, ConstraintPath, ResZ3)
835 ; true
836 ),
837 nl,nl,write(ResZ3),nl,nl,
838 preferences:set_preference(time_out, Timeout),
839 write('Solve with ProB..'),nl,
840 write(ConstraintPath),nl,
841 statistics(walltime, [StartProB|_]),
842 solve_predicate(Constraint, _, ResProB),
843 %ResProB = no_solution_found(solver_answered_unknown),
844 statistics(walltime, [StopProB|_]),
845 TimeProB is StopProB - StartProB,
846 ( solved_constraint(ResProB)
847 -> inc_solved_counter(prob),
848 add_benchmark_result(prob, ConstraintPath, ResProB)
849 ; true
850 ),
851 nl,nl,write(ResProB),nl,nl,
852 write('done.'), nl.
853 /*( validate_results(ResDpllt, ResProB),
854 validate_results(ResDplltIdl, ResProB),
855 validate_results(ResDplltNoSym, ResProB)
856 -> true
857 ; add_error(benchmark_constraint, 'Benchmarks results differ'),
858 writeq(ResDpllt),
859 writeq(ResDplltIdl),
860 writeq(ResDplltNoSym),
861 writeq(ResProB)
862 ).*/
863
864 solved_constraint(solution(_)).
865 solved_constraint(contradiction_found).
866
867 validate_results(contradiction_found, contradiction_found).
868 %validate_results(time_out, _).
869 %validate_results(_, time_out).
870 validate_results(solution(_), solution(_)).
871
872 n_queens_encoding(N, b(conjunct(b(conjunct(b(equal(b(identifier(n),integer,[nodeid(p4(-1,1,1,2))]),b(integer(N),integer,[nodeid(p4(-1,1,5,7))])),pred,[nodeid(p4(-1,1,1,7))]),b(member(b(identifier(queens),set(couple(integer,integer)),[nodeid(p4(-1,1,10,16))]),b(total_injection(b(interval(b(integer(1),integer,[nodeid(p4(-1,1,19,20))]),b(identifier(n),integer,[nodeid(p4(-1,1,22,23))])),set(integer),[nodeid(p4(-1,1,19,23))]),b(interval(b(integer(1),integer,[nodeid(p4(-1,1,28,29))]),b(identifier(n),integer,[nodeid(p4(-1,1,31,32))])),set(integer),[nodeid(p4(-1,1,28,32))])),set(set(couple(integer,integer))),[nodeid(p4(-1,1,19,32))])),pred,[nodeid(p4(-1,1,10,32))])),pred,[]),b(forall([b(identifier(q1),integer,[nodeid(p4(-1,1,37,39)),introduced_by(forall)])],b(member(b(identifier(q1),integer,[nodeid(p4(-1,1,42,44)),introduced_by(forall)]),b(interval(b(integer(1),integer,[nodeid(p4(-1,1,45,46))]),b(identifier(n),integer,[nodeid(p4(-1,1,48,49))])),set(integer),[nodeid(p4(-1,1,45,49))])),pred,[nodeid(p4(-1,1,42,49))]),b(forall([b(identifier(q2),integer,[nodeid(p4(-1,1,55,57)),introduced_by(forall)])],b(conjunct(b(member(b(identifier(q2),integer,[nodeid(p4(-1,1,61,63)),introduced_by(forall)]),b(interval(b(integer(2),integer,[nodeid(p4(-1,1,64,65))]),b(identifier(n),integer,[nodeid(p4(-1,1,67,68))])),set(integer),[nodeid(p4(-1,1,64,68))])),pred,[nodeid(p4(-1,1,61,68))]),b(greater(b(identifier(q2),integer,[nodeid(p4(-1,1,71,73)),introduced_by(forall)]),b(identifier(q1),integer,[nodeid(p4(-1,1,74,76)),introduced_by(forall)])),pred,[nodeid(p4(-1,1,71,76))])),pred,[nodeid(p4(-1,1,61,76)),nodeid(p4(-1,1,61,76))]),b(conjunct(b(not_equal(b(add(b(function(b(identifier(queens),set(couple(integer,integer)),[nodeid(p4(-1,1,80,86))]),b(identifier(q1),integer,[nodeid(p4(-1,1,87,89)),introduced_by(forall)])),integer,[contains_wd_condition,nodeid(p4(-1,1,80,90))]),b(minus(b(identifier(q2),integer,[nodeid(p4(-1,1,92,94)),introduced_by(forall)]),b(identifier(q1),integer,[nodeid(p4(-1,1,95,97)),introduced_by(forall)])),integer,[nodeid(p4(-1,1,92,97))])),integer,[contains_wd_condition,nodeid(p4(-1,1,80,97))]),b(function(b(identifier(queens),set(couple(integer,integer)),[nodeid(p4(-1,1,102,108))]),b(identifier(q2),integer,[nodeid(p4(-1,1,109,111)),introduced_by(forall)])),integer,[contains_wd_condition,nodeid(p4(-1,1,102,112))])),pred,[contains_wd_condition,nodeid(p4(-1,1,80,112))]),b(not_equal(b(add(b(function(b(identifier(queens),set(couple(integer,integer)),[nodeid(p4(-1,1,115,121))]),b(identifier(q1),integer,[nodeid(p4(-1,1,122,124)),introduced_by(forall)])),integer,[contains_wd_condition,nodeid(p4(-1,1,115,125))]),b(minus(b(identifier(q1),integer,[nodeid(p4(-1,1,127,129)),introduced_by(forall)]),b(identifier(q2),integer,[nodeid(p4(-1,1,130,132)),introduced_by(forall)])),integer,[nodeid(p4(-1,1,127,132))])),integer,[contains_wd_condition,nodeid(p4(-1,1,115,132))]),b(function(b(identifier(queens),set(couple(integer,integer)),[nodeid(p4(-1,1,137,143))]),b(identifier(q2),integer,[nodeid(p4(-1,1,144,146)),introduced_by(forall)])),integer,[contains_wd_condition,nodeid(p4(-1,1,137,147))])),pred,[contains_wd_condition,nodeid(p4(-1,1,115,147))])),pred,[contains_wd_condition,nodeid(p4(-1,1,80,147)),nodeid(p4(-1,1,80,147))])),pred,[removed_typing,used_ids([n,q1,queens]),contains_wd_condition,nodeid(p4(-1,1,53,148))])),pred,[removed_typing,used_ids([n,queens]),contains_wd_condition,nodeid(p4(-1,1,35,149))])),pred,[contains_wd_condition,removed_typing])) :- integer(N), N > 0.
873
874 p(L) :-
875 writeq(L), nl,
876 L = [_AmountOfSatVars,(prob,N,TimeProB,_FResProB),(z3,N,TimeZ3,_FResZ3),(sym_smt,N,TimeDpllt,_FResDpllt)],
877 format("~w & ~w & ~w & ~w & ~n", [N,TimeProB,TimeZ3,TimeDpllt]).
878
879 print_n_queens_data(Data) :-
880 maplist(p, Data).
881
882 % for an evaluation of quantifier instantiation
883 run_n_queens_benchmarks :-
884 N = [4,6,8,10,12,14,16,18,20],
885 preferences:set_preference(time_out, 60000),
886 run_n_queens_benchmarks(N, [], Data),
887 print_n_queens_data(Data).
888
889 run_n_queens_benchmarks([], Data, Data).
890 run_n_queens_benchmarks([N|T], DataAcc, Data) :-
891 run_n_queens_benchmark(N, DataAcc, NewDataAcc),
892 run_n_queens_benchmarks(T, NewDataAcc, Data).
893
894 run_n_queens_benchmark(N, DataAcc, NewDataAcc) :-
895 n_queens_encoding(N, Constraint),
896 ast_optimizer_for_smt:precompute_values(Constraint, [instantiate_quantifier_limit(10000)], IConstraint),
897 dpllt_solver:get_amount_of_sat_variables(IConstraint, AmountOfSatVars),
898 format("Amount of SAT variables: ~w", [AmountOfSatVars]),nl,
899 format("Solve with ProB for N=~w~n", [N]),
900 statistics(walltime, [StartProB|_]),
901 solve_predicate(IConstraint, _, ResProB),
902 statistics(walltime, [StopProB|_]),
903 ResProB \= contradiction_found,
904 TimeProB is StopProB - StartProB,
905 format("Solve with Z3~n for N=~w", [N]),
906 statistics(walltime, [StartZ3|_]),
907 smt_solve_predicate(z3, Constraint, _, ResZ3),
908 statistics(walltime, [StopZ3|_]),
909 ResZ3 \= contradiction_found,
910 TimeZ3 is StopZ3 - StartZ3,
911 format("Solve with Sym-SMT~n for N=~w", [N]),
912 set_preference(dpllt_perform_static_analysis, true),
913 set_preference(dpllt_perform_symmetry_breaking, true),
914 dpllt_solver:init,
915 statistics(walltime, [StartDpllt|_]),
916 dpllt_solve_predicate(sym_smt, Constraint, _SolvedPred, ResDpllt),
917 statistics(walltime, [StopDpllt|_]),
918 ResDpllt \= contradiction_found,
919 TimeDpllt is StopDpllt - StartDpllt,
920 functor(ResProB, FResProB, _),
921 functor(ResZ3, FResZ3, _),
922 functor(ResDpllt, FResDpllt, _),
923 append(DataAcc, [[AmountOfSatVars,(prob,N,TimeProB,FResProB),(z3,N,TimeZ3,FResZ3),(sym_smt,N,TimeDpllt,FResDpllt)]], NewDataAcc).