1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN"
3 "https://www.why3.org/why3session.dtd">
4 <why3session shape_version="6">
5 <prover id="0" name="CVC4" version="1.6" timelimit="1" steplimit="0" memlimit="1000"/>
6 <prover id="1" name="Alt-Ergo" version="2.2.0" timelimit="1" steplimit="0" memlimit="1000"/>
7 <prover id="2" name="Z3" version="4.12.2" timelimit="1" steplimit="0" memlimit="1000"/>
8 <prover id="3" name="Eprover" version="2.0" timelimit="16" steplimit="0" memlimit="1000"/>
9 <prover id="4" name="Z3" version="4.8.6" timelimit="1" steplimit="0" memlimit="1000"/>
10 <prover id="6" name="CVC4" version="1.5" timelimit="1" steplimit="0" memlimit="1000"/>
11 <prover id="7" name="Eprover" version="1.8-001" timelimit="16" steplimit="0" memlimit="1000"/>
12 <prover id="8" name="Alt-Ergo" version="2.3.0" timelimit="1" steplimit="0" memlimit="1000"/>
13 <prover id="9" name="Alt-Ergo" version="2.1.0" timelimit="1" steplimit="0" memlimit="1000"/>
14 <file format="whyml" proved="true">
15 <path name=".."/><path name="tortoise_and_hare.mlw"/>
16 <theory name="TortoiseAndHareAlgorithm" proved="true">
17 <goal name="x0'vc" expl="VC for x0" proved="true">
18 <proof prover="8"><result status="valid" time="0.000000" steps="2"/></proof>
20 <goal name="x_in_range'vc" expl="VC for x_in_range" proved="true">
21 <proof prover="9"><result status="valid" time="0.070000" steps="228"/></proof>
23 <goal name="periodicity'vc" expl="VC for periodicity" proved="true">
24 <transf name="split_vc" proved="true" >
25 <goal name="periodicity'vc.0" expl="loop invariant init" proved="true">
26 <proof prover="6"><result status="valid" time="0.020000" steps="14495"/></proof>
28 <goal name="periodicity'vc.1" expl="loop invariant init" proved="true">
29 <proof prover="6"><result status="valid" time="0.040000" steps="15820"/></proof>
31 <goal name="periodicity'vc.2" expl="loop invariant init" proved="true">
32 <proof prover="6"><result status="valid" time="0.060000" steps="15689"/></proof>
34 <goal name="periodicity'vc.3" expl="loop invariant init" proved="true">
35 <proof prover="9"><result status="valid" time="0.010000" steps="28"/></proof>
37 <goal name="periodicity'vc.4" expl="postcondition" proved="true">
38 <proof prover="6"><result status="valid" time="0.060000" steps="17447"/></proof>
40 <goal name="periodicity'vc.5" expl="postcondition" proved="true">
41 <proof prover="6"><result status="valid" time="0.150000" steps="34959"/></proof>
43 <goal name="periodicity'vc.6" expl="loop invariant preservation" proved="true">
44 <proof prover="6"><result status="valid" time="0.070000" steps="16284"/></proof>
46 <goal name="periodicity'vc.7" expl="precondition" proved="true">
47 <proof prover="6"><result status="valid" time="0.030000" steps="14477"/></proof>
49 <goal name="periodicity'vc.8" expl="precondition" proved="true">
50 <proof prover="6"><result status="valid" time="0.070000" steps="22774"/></proof>
52 <goal name="periodicity'vc.9" expl="loop invariant preservation" proved="true">
53 <proof prover="6"><result status="valid" time="0.140000" steps="28265"/></proof>
55 <goal name="periodicity'vc.10" expl="loop invariant preservation" proved="true">
56 <proof prover="9"><result status="valid" time="0.210000" steps="547"/></proof>
58 <goal name="periodicity'vc.11" expl="loop invariant preservation" proved="true">
59 <proof prover="6"><result status="valid" time="0.370000" steps="47794"/></proof>
61 <goal name="periodicity'vc.12" expl="out of loop bounds" proved="true">
62 <proof prover="6"><result status="valid" time="0.050000" steps="16072"/></proof>
64 <goal name="periodicity'vc.13" expl="unreachable point" proved="true">
65 <proof prover="6"><result status="valid" time="0.020000" steps="14191"/></proof>
67 <goal name="periodicity'vc.14" expl="unreachable point" proved="true">
68 <proof prover="6"><result status="valid" time="0.060000" steps="14411"/></proof>
72 <goal name="equality'vc" expl="VC for equality" proved="true">
73 <transf name="split_vc" proved="true" >
74 <goal name="equality'vc.0" expl="variant decrease" proved="true">
75 <proof prover="6"><result status="valid" time="0.070000" steps="10000"/></proof>
77 <goal name="equality'vc.1" expl="precondition" proved="true">
78 <proof prover="6" timelimit="5"><result status="valid" time="0.030000" steps="9720"/></proof>
80 <goal name="equality'vc.2" expl="postcondition" proved="true">
81 <transf name="split_vc" proved="true" >
82 <goal name="equality'vc.2.0" expl="postcondition" proved="true">
83 <proof prover="6" timelimit="5"><result status="valid" time="0.070000" steps="17206"/></proof>
85 <goal name="equality'vc.2.1" expl="postcondition" proved="true">
86 <proof prover="6" timelimit="5"><result status="valid" time="0.030000" steps="10084"/></proof>
90 <goal name="equality'vc.3" expl="variant decrease" proved="true">
91 <proof prover="6"><result status="valid" time="0.020000" steps="9837"/></proof>
93 <goal name="equality'vc.4" expl="precondition" proved="true">
94 <proof prover="6"><result status="valid" time="0.050000" steps="9809"/></proof>
96 <goal name="equality'vc.5" expl="precondition" proved="true">
97 <proof prover="6"><result status="valid" time="0.050000" steps="9826"/></proof>
99 <goal name="equality'vc.6" expl="precondition" proved="true">
100 <transf name="assert" proved="true" arg1="((k-1)*lambda >= 0)">
101 <goal name="equality'vc.6.0" expl="asserted formula" proved="true">
102 <proof prover="3"><result status="valid" time="3.320000"/></proof>
104 <goal name="equality'vc.6.1" expl="precondition" proved="true">
105 <proof prover="6"><result status="valid" time="0.030000" steps="10175"/></proof>
109 <goal name="equality'vc.7" expl="postcondition" proved="true">
110 <transf name="split_vc" proved="true" >
111 <goal name="equality'vc.7.0" expl="postcondition" proved="true">
112 <proof prover="6" timelimit="5"><result status="valid" time="0.030000" steps="10193"/></proof>
114 <goal name="equality'vc.7.1" expl="postcondition" proved="true">
115 <proof prover="6" timelimit="5"><result status="valid" time="0.100000" steps="23650"/></proof>
119 <goal name="equality'vc.8" expl="precondition" proved="true">
120 <proof prover="6" timelimit="5"><result status="valid" time="0.030000" steps="10262"/></proof>
122 <goal name="equality'vc.9" expl="precondition" proved="true">
123 <proof prover="6"><result status="valid" time="0.020000" steps="10262"/></proof>
125 <goal name="equality'vc.10" expl="precondition" proved="true">
126 <proof prover="6"><result status="valid" time="0.030000" steps="10422"/></proof>
128 <goal name="equality'vc.11" expl="precondition" proved="true">
129 <proof prover="4"><result status="valid" time="0.020000" steps="17373"/></proof>
131 <goal name="equality'vc.12" expl="postcondition" proved="true">
132 <proof prover="4"><result status="valid" time="0.060000" steps="59013"/></proof>
134 <goal name="equality'vc.13" expl="precondition" proved="true">
135 <proof prover="6"><result status="valid" time="0.040000" steps="9983"/></proof>
137 <goal name="equality'vc.14" expl="unreachable point" proved="true">
138 <proof prover="6" timelimit="5"><result status="valid" time="0.070000" steps="20051"/></proof>
140 <goal name="equality'vc.15" expl="precondition" proved="true">
141 <proof prover="6"><result status="valid" time="0.030000" steps="10251"/></proof>
143 <goal name="equality'vc.16" expl="precondition" proved="true">
144 <proof prover="6" timelimit="5"><result status="valid" time="0.020000" steps="10078"/></proof>
146 <goal name="equality'vc.17" expl="assertion" proved="true">
147 <proof prover="6"><result status="valid" time="0.030000" steps="17249"/></proof>
149 <goal name="equality'vc.18" expl="assertion" proved="true">
150 <proof prover="4"><result status="valid" time="0.020000" steps="7001"/></proof>
152 <goal name="equality'vc.19" expl="postcondition" proved="true">
153 <proof prover="9"><result status="valid" time="0.030000" steps="93"/></proof>
155 <goal name="equality'vc.20" expl="postcondition" proved="true">
156 <transf name="split_vc" proved="true" >
157 <goal name="equality'vc.20.0" expl="postcondition" proved="true">
158 <proof prover="6"><result status="valid" time="0.080000" steps="16020"/></proof>
160 <goal name="equality'vc.20.1" expl="postcondition" proved="true">
161 <proof prover="9"><result status="valid" time="0.010000" steps="78"/></proof>
163 <goal name="equality'vc.20.2" expl="postcondition" proved="true">
164 <transf name="assert" proved="true" arg1="((k-1) * lambda >= 0)">
165 <goal name="equality'vc.20.2.0" expl="asserted formula" proved="true">
166 <proof prover="3"><result status="valid" time="3.420000"/></proof>
168 <goal name="equality'vc.20.2.1" expl="postcondition" proved="true">
169 <proof prover="3"><result status="valid" time="0.790000"/></proof>
177 <goal name="tortoise_and_hare'vc" expl="VC for tortoise_and_hare" proved="true">
178 <transf name="split_vc" proved="true" >
179 <goal name="tortoise_and_hare'vc.0" expl="precondition" proved="true">
180 <proof prover="6"><result status="valid" time="0.020000" steps="10350"/></proof>
182 <goal name="tortoise_and_hare'vc.1" expl="precondition" proved="true">
183 <proof prover="6" timelimit="5"><result status="valid" time="0.050000" steps="15508"/></proof>
185 <goal name="tortoise_and_hare'vc.2" expl="loop invariant init" proved="true">
186 <proof prover="6"><result status="valid" time="0.070000" steps="13279"/></proof>
188 <goal name="tortoise_and_hare'vc.3" expl="precondition" proved="true">
189 <proof prover="6"><result status="valid" time="0.040000" steps="11460"/></proof>
191 <goal name="tortoise_and_hare'vc.4" expl="assertion" proved="true">
192 <proof prover="9"><result status="valid" time="0.020000" steps="38"/></proof>
194 <goal name="tortoise_and_hare'vc.5" expl="unreachable point" proved="true">
195 <proof prover="9"><result status="valid" time="0.770000" steps="839"/></proof>
197 <goal name="tortoise_and_hare'vc.6" expl="loop variant decrease" proved="true">
198 <proof prover="6"><result status="valid" time="0.020000" steps="10949"/></proof>
200 <goal name="tortoise_and_hare'vc.7" expl="loop invariant preservation" proved="true">
201 <transf name="split_vc" proved="true" >
202 <goal name="tortoise_and_hare'vc.7.0" expl="loop invariant preservation" proved="true">
203 <proof prover="6"><result status="valid" time="0.040000" steps="11278"/></proof>
205 <goal name="tortoise_and_hare'vc.7.1" expl="loop invariant preservation" proved="true">
206 <proof prover="6"><result status="valid" time="0.120000" steps="10862"/></proof>
208 <goal name="tortoise_and_hare'vc.7.2" expl="loop invariant preservation" proved="true">
209 <proof prover="6"><result status="valid" time="0.100000" steps="40019"/></proof>
211 <goal name="tortoise_and_hare'vc.7.3" expl="loop invariant preservation" proved="true">
212 <proof prover="6"><result status="valid" time="0.030000" steps="21289"/></proof>
214 <goal name="tortoise_and_hare'vc.7.4" expl="loop invariant preservation" proved="true">
215 <proof prover="6"><result status="valid" time="0.060000" steps="16622"/></proof>
219 <goal name="tortoise_and_hare'vc.8" expl="assertion" proved="true">
220 <proof prover="4"><result status="valid" time="0.040000" steps="23118"/></proof>
222 <goal name="tortoise_and_hare'vc.9" expl="assertion" proved="true">
223 <transf name="instantiate" proved="true" arg1="Ensures" arg2="(n+n),n">
224 <goal name="tortoise_and_hare'vc.9.0" expl="assertion" proved="true">
225 <proof prover="1"><result status="valid" time="0.020000" steps="36"/></proof>
229 <goal name="tortoise_and_hare'vc.10" expl="assertion" proved="true">
230 <transf name="destruct" proved="true" arg1="Assert">
231 <goal name="tortoise_and_hare'vc.10.0" expl="assertion" proved="true">
232 <transf name="replace" proved="true" arg1="n" arg2="(k*lambda)">
233 <goal name="tortoise_and_hare'vc.10.0.0" expl="assertion" proved="true">
234 <transf name="instantiate" proved="true" arg1="Ensures" arg2="(j+n),j">
235 <goal name="tortoise_and_hare'vc.10.0.0.0" expl="assertion" proved="true">
236 <proof prover="0"><result status="valid" time="0.140000" steps="24251"/></proof>
240 <goal name="tortoise_and_hare'vc.10.0.1" expl="equality hypothesis" proved="true">
241 <proof prover="6"><result status="valid" time="0.020000" steps="10869"/></proof>
247 <goal name="tortoise_and_hare'vc.11" expl="loop invariant init" proved="true">
248 <proof prover="6" timelimit="5"><result status="valid" time="0.020000" steps="11012"/></proof>
250 <goal name="tortoise_and_hare'vc.12" expl="loop invariant init" proved="true">
251 <proof prover="6"><result status="valid" time="0.250000" steps="42335"/></proof>
253 <goal name="tortoise_and_hare'vc.13" expl="loop invariant init" proved="true">
254 <proof prover="4"><result status="valid" time="0.010000" steps="1385"/></proof>
256 <goal name="tortoise_and_hare'vc.14" expl="loop invariant init" proved="true">
257 <proof prover="6"><result status="valid" time="0.090000" steps="11654"/></proof>
259 <goal name="tortoise_and_hare'vc.15" expl="loop variant decrease" proved="true">
260 <proof prover="6"><result status="valid" time="0.040000" steps="11543"/></proof>
262 <goal name="tortoise_and_hare'vc.16" expl="loop invariant preservation" proved="true">
263 <proof prover="9" timelimit="5"><result status="valid" time="0.020000" steps="66"/></proof>
265 <goal name="tortoise_and_hare'vc.17" expl="loop invariant preservation" proved="true">
266 <proof prover="6"><result status="valid" time="0.290000" steps="67116"/></proof>
268 <goal name="tortoise_and_hare'vc.18" expl="loop invariant preservation" proved="true">
269 <proof prover="9"><result status="valid" time="0.020000" steps="77"/></proof>
271 <goal name="tortoise_and_hare'vc.19" expl="loop invariant preservation" proved="true">
272 <transf name="assert" proved="true" arg1="(lam1 = 0)">
273 <goal name="tortoise_and_hare'vc.19.0" expl="asserted formula" proved="true">
274 <proof prover="6"><result status="valid" time="0.030000" steps="12254"/></proof>
276 <goal name="tortoise_and_hare'vc.19.1" expl="loop invariant preservation" proved="true">
277 <transf name="assert" proved="true" arg1="(x (n + i1) = x n)">
278 <goal name="tortoise_and_hare'vc.19.1.0" expl="asserted formula" proved="true">
279 <proof prover="6"><result status="valid" time="0.040000" steps="12259"/></proof>
281 <goal name="tortoise_and_hare'vc.19.1.1" expl="loop invariant preservation" proved="true">
282 <transf name="instantiate" proved="true" arg1="Ensures4" arg2="(n+i1),n">
283 <goal name="tortoise_and_hare'vc.19.1.1.0" expl="loop invariant preservation" proved="true">
284 <transf name="assert" proved="true" arg1="(exists k. k >= 1 /\ i1 = k * lambda)">
285 <goal name="tortoise_and_hare'vc.19.1.1.0.0" expl="asserted formula" proved="true">
286 <proof prover="6"><result status="valid" time="0.040000" steps="12598"/></proof>
288 <goal name="tortoise_and_hare'vc.19.1.1.0.1" expl="loop invariant preservation" proved="true">
289 <transf name="destruct" proved="true" arg1="h">
290 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0" expl="loop invariant preservation" proved="true">
291 <transf name="assert" proved="true" arg1="((k-1) * lambda >= 0)">
292 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.0" expl="asserted formula" proved="true">
293 <proof prover="7"><result status="valid" time="2.300000"/></proof>
295 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.1" expl="loop invariant preservation" proved="true">
296 <transf name="assert" proved="true" arg1="(i1 >= lambda)">
297 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.1.0" expl="asserted formula" proved="true">
298 <proof prover="6"><result status="valid" time="0.040000" steps="12730"/></proof>
300 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.1.1" expl="loop invariant preservation" proved="true">
301 <transf name="case" proved="true" arg1="(k=1)">
302 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.1.1.0" expl="true case (loop invariant preservation)" proved="true">
303 <proof prover="6"><result status="valid" time="0.040000" steps="12967"/></proof>
305 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.1.1.1" expl="false case (loop invariant preservation)" proved="true">
306 <transf name="assert" proved="true" arg1="(x (n + lambda) <> x n)">
307 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.1.1.1.0" expl="asserted formula" proved="true">
308 <transf name="assert" proved="true" arg1="(lambda < i1)">
309 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.1.1.1.0.0" expl="asserted formula" proved="true">
310 <proof prover="9"><result status="valid" time="0.320000" steps="259"/></proof>
312 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.1.1.1.0.1" expl="asserted formula" proved="true">
313 <proof prover="2"><result status="valid" time="0.030000" steps="38011"/></proof>
317 <goal name="tortoise_and_hare'vc.19.1.1.0.1.0.1.1.1.1" expl="false case (loop invariant preservation)" proved="true">
318 <proof prover="6"><result status="valid" time="0.630000" steps="92750"/></proof>
338 <goal name="tortoise_and_hare'vc.20" expl="loop variant decrease" proved="true">
339 <transf name="case" proved="true" arg1="(i = mu+1)">
340 <goal name="tortoise_and_hare'vc.20.0" expl="true case (loop variant decrease)" proved="true">
341 <transf name="assert" proved="true" arg1="(x mu = x (mu + n))">
342 <goal name="tortoise_and_hare'vc.20.0.0" expl="asserted formula" proved="true">
343 <proof prover="6"><result status="valid" time="0.050000" steps="14199"/></proof>
345 <goal name="tortoise_and_hare'vc.20.0.1" expl="true case (loop variant decrease)" proved="true">
346 <proof prover="6"><result status="valid" time="0.120000" steps="11613"/></proof>
350 <goal name="tortoise_and_hare'vc.20.1" expl="false case (loop variant decrease)" proved="true">
351 <proof prover="2"><result status="valid" time="0.030000" steps="9998"/></proof>
355 <goal name="tortoise_and_hare'vc.21" expl="loop invariant preservation" proved="true">
356 <transf name="replace" proved="true" arg1="n" arg2="(2*n - n)">
357 <goal name="tortoise_and_hare'vc.21.0" expl="loop invariant preservation" proved="true">
358 <proof prover="9"><result status="valid" time="0.010000" steps="61"/></proof>
360 <goal name="tortoise_and_hare'vc.21.1" expl="equality hypothesis" proved="true">
361 <proof prover="6"><result status="valid" time="0.020000" steps="11454"/></proof>
365 <goal name="tortoise_and_hare'vc.22" expl="loop invariant preservation" proved="true">
366 <transf name="split_vc" proved="true" >
367 <goal name="tortoise_and_hare'vc.22.0" expl="loop invariant preservation" proved="true">
368 <proof prover="6"><result status="valid" time="0.110000" steps="27370"/></proof>
370 <goal name="tortoise_and_hare'vc.22.1" expl="loop invariant preservation" proved="true">
371 <proof prover="6" timelimit="5"><result status="valid" time="0.320000" steps="57003"/></proof>
375 <goal name="tortoise_and_hare'vc.23" expl="loop invariant preservation" proved="true">
376 <proof prover="6"><result status="valid" time="0.190000" steps="29308"/></proof>
378 <goal name="tortoise_and_hare'vc.24" expl="loop invariant preservation" proved="true">
379 <proof prover="9"><result status="valid" time="0.020000" steps="77"/></proof>
381 <goal name="tortoise_and_hare'vc.25" expl="assertion" proved="true">
382 <transf name="instantiate" proved="true" arg1="Ensures" arg2="(n+i),n">
383 <goal name="tortoise_and_hare'vc.25.0" expl="assertion" proved="true">
384 <proof prover="0"><result status="valid" time="0.130000" steps="19717"/></proof>
388 <goal name="tortoise_and_hare'vc.26" expl="assertion" proved="true">
389 <transf name="case" proved="true" arg1="(lam = 0)">
390 <goal name="tortoise_and_hare'vc.26.0" expl="true case (assertion)" proved="true">
391 <transf name="assert" proved="true" arg1="(lambda >= mu)">
392 <goal name="tortoise_and_hare'vc.26.0.0" expl="asserted formula" proved="true">
393 <transf name="case" proved="true" arg1="(lambda < mu)">
394 <goal name="tortoise_and_hare'vc.26.0.0.0" expl="true case (asserted formula)" proved="true">
395 <transf name="assert" proved="true" arg1="(x (n + lambda) <> x n)">
396 <goal name="tortoise_and_hare'vc.26.0.0.0.0" expl="asserted formula" proved="true">
397 <proof prover="2"><result status="valid" time="0.030000" steps="25885"/></proof>
399 <goal name="tortoise_and_hare'vc.26.0.0.0.1" expl="true case (asserted formula)" proved="true">
400 <transf name="assert" proved="true" arg1="(x (n + lambda) = x n)">
401 <goal name="tortoise_and_hare'vc.26.0.0.0.1.0" expl="asserted formula" proved="true">
402 <transf name="instantiate" proved="true" arg1="Ensures" arg2="(n+lambda),n">
403 <goal name="tortoise_and_hare'vc.26.0.0.0.1.0.0" expl="asserted formula" proved="true">
404 <proof prover="0"><result status="valid" time="0.060000" steps="7375"/></proof>
408 <goal name="tortoise_and_hare'vc.26.0.0.0.1.1" expl="true case (asserted formula)" proved="true">
409 <proof prover="6"><result status="valid" time="0.030000" steps="11418"/></proof>
415 <goal name="tortoise_and_hare'vc.26.0.0.1" expl="false case (asserted formula)" proved="true">
416 <proof prover="6"><result status="valid" time="0.020000" steps="11393"/></proof>
420 <goal name="tortoise_and_hare'vc.26.0.1" expl="true case (assertion)" proved="true">
421 <transf name="destruct" proved="true" arg1="Assert2">
422 <goal name="tortoise_and_hare'vc.26.0.1.0" expl="true case (assertion)" proved="true">
423 <transf name="assert" proved="true" arg1="(n = lambda \/ n = 2*lambda)">
424 <goal name="tortoise_and_hare'vc.26.0.1.0.0" expl="asserted formula" proved="true">
425 <proof prover="1"><result status="valid" time="0.040000" steps="147"/></proof>
427 <goal name="tortoise_and_hare'vc.26.0.1.0.1" expl="true case (assertion)" proved="true">
428 <proof prover="0"><result status="valid" time="0.100000" steps="11624"/></proof>
436 <goal name="tortoise_and_hare'vc.26.1" expl="false case (assertion)" proved="true">
437 <proof prover="0"><result status="valid" time="0.050000" steps="4199"/></proof>
441 <goal name="tortoise_and_hare'vc.27" expl="postcondition" proved="true">
442 <proof prover="6"><result status="valid" time="0.030000" steps="12137"/></proof>
444 <goal name="tortoise_and_hare'vc.28" expl="postcondition" proved="true">
445 <proof prover="4"><result status="valid" time="0.030000" steps="37861"/></proof>