Commit 70504c50 authored by MARCHE Claude's avatar MARCHE Claude

Sudoku reproved, phew !

parent 6e1ab42d
......@@ -14,7 +14,6 @@ linked_list_rev.mlw
optimal_replay.mlw
queens.mlw
random_access_list.mlw
sudoku.mlw
sum_of_digits.mlw
topological_sorting.mlw
tortoise_and_hare.mlw
......
......@@ -330,6 +330,30 @@ module Solver
ensures { full_up_to g2 i }
= assert { grid_eq_sub g1 g2 0 i }
let lemma valid_chunk_frame (start:array int) (offsets:array int) (g1 g2:grid) (i:int)
requires { chunk_valid_indexes start offsets }
requires { 0 <= i < 81 }
requires { grid_eq g1 g2 }
requires { valid_chunk g1 i start offsets }
ensures { valid_chunk g2 i start offsets }
= ()
let rec lemma valid_up_to_frame (s:sudoku_chunks) (g1 g2:grid) (i:int)
requires { well_formed_sudoku s }
requires { 0 <= i <= 81 }
requires { grid_eq g1 g2 }
requires { valid_up_to s g1 i }
variant { i }
ensures { valid_up_to s g2 i }
= if i > 0 then
begin
assert { valid_up_to s g1 (i-1) };
valid_up_to_frame s g1 g2 (i-1);
valid_chunk_frame s.column_start s.column_offsets g1 g2 (i-1);
valid_chunk_frame s.row_start s.row_offsets g1 g2 (i-1);
valid_chunk_frame s.square_start s.square_offsets g1 g2 (i-1);
end
(** how to prove the "hard" property : if
......@@ -384,14 +408,16 @@ this is true but with 2 different possible reasons:
valid_chunk h i2 start offsets
lemma valid_up_to_change :
forall s:sudoku_chunks, g:grid, i x : int.
well_formed_sudoku s /\
is_index i /\ valid_up_to s g i /\ 1 <= x <= 9 /\
valid_column s (Map.set g i x) i /\
valid_row s (Map.set g i x) i /\
valid_square s (Map.set g i x) i
-> valid_up_to s (Map.set g i x) (i+1)
let ghost valid_up_to_change (s:sudoku_chunks) (g:grid) (i x : int)
requires { well_formed_sudoku s }
requires { is_index i }
requires { valid_up_to s g i }
requires { 1 <= x <= 9 }
requires { valid_column s (Map.set g i x) i }
requires { valid_row s (Map.set g i x) i }
requires { valid_square s (Map.set g i x) i }
ensures { valid_up_to s (Map.set g i x) (i+1) }
= ()
(** {3 The main solver loop} *)
......@@ -422,41 +448,42 @@ this is true but with 2 different possible reasons:
end
else
begin
label L in
let ghost old_g = g.elts in
for k = 1 to 9 do
invariant { grid_eq (g at L).elts (Map.set g.elts i 0) }
invariant { grid_eq old_g (Map.set g.elts i 0) }
invariant { full_up_to g.elts i }
invariant { (* for completeness *)
forall k'. 1 <= k' < k ->
let g' = Map.set (g at L).elts i k' in
let g' = Map.set old_g i k' in
forall h : grid. included g' h /\ full h -> not (valid s h) }
g[i] <- k;
valid_up_to_frame s old_g (Map.set g.elts i 0) i;
try
check_valid_chunk g i s.column_start s.column_offsets;
check_valid_chunk g i s.row_start s.row_offsets;
check_valid_chunk g i s.square_start s.square_offsets;
(* the hard part: see lemma valid_up_to_change *)
assert { let grid' = Map.set (g at L).elts i k in
assert { let grid' = Map.set old_g i k in
grid_eq grid' g.elts &&
valid_chunk grid' i s.column_start s.column_offsets &&
valid_chunk grid' i s.row_start s.row_offsets &&
valid_chunk grid' i s.square_start s.square_offsets &&
valid_up_to s grid' (i+1) };
assert { valid_up_to s g.elts (i+1) };
valid_up_to_change s old_g i k;
solve_aux s g (i + 1)
with Invalid ->
assert { (* for completeness *)
not (valid s (Map.set (g at L).elts i k)) };
not (valid s (Map.set old_g i k)) };
assert { (* for completeness *)
let g' = Map.set (g at L).elts i k in
let g' = Map.set old_g i k in
forall h : grid. included g' h /\ full h -> not (valid s h) }
end
done;
g[i] <- 0;
assert { (* for completeness *)
forall h:grid. included (g at L).elts h /\ full h ->
forall h:grid. included old_g h /\ full h ->
let k' = Map.get h i in
let g' = Map.set (g at L).elts i k' in
let g' = Map.set old_g i k' in
included g' h }
end
......@@ -491,6 +518,7 @@ this is true but with 2 different possible reasons:
end
(* Proof in progress
module RandomSolver
(* a variant: solve using a random order of cells *)
......@@ -602,6 +630,7 @@ module RandomSolver
if check_valid s g then solve s g else raise NoSolution
end
*)
(** {2 Some Tests} *)
......
......@@ -3,15 +3,15 @@
"http://why3.lri.fr/why3session.dtd">
<why3session shape_version="4">
<prover id="0" name="CVC3" version="2.4.1" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="1" name="CVC4" version="1.4" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="1" name="CVC4" version="1.4" timelimit="1" steplimit="0" memlimit="1000"/>
<prover id="2" name="Z3" version="4.3.1" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="3" name="Z3" version="3.2" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="4" name="Alt-Ergo" version="0.95.2" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="5" name="CVC4" version="1.3" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="6" name="Alt-Ergo" version="0.99.1" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="7" name="Z3" version="4.3.2" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="9" name="Alt-Ergo" version="1.30" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="10" name="Z3" version="4.5.0" timelimit="1" steplimit="0" memlimit="1000"/>
<file name="../sudoku.mlw" expanded="true">
<theory name="Grid" sum="dd1d50eda582d7f4d6d542b0712fe253" expanded="true">
<theory name="Grid" sum="5c049c59a0010c9e401062b26d7b57c4">
<goal name="grid_eq_sub">
<proof prover="0"><result status="valid" time="0.01"/></proof>
<proof prover="2"><result status="valid" time="0.01"/></proof>
......@@ -20,710 +20,486 @@
<proof prover="5"><result status="valid" time="0.00"/></proof>
</goal>
<goal name="subset_valid_chunk">
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.02"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="31"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
<proof prover="9"><result status="valid" time="0.01" steps="34"/></proof>
</goal>
<goal name="subset_valid">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.05"/></proof>
<proof prover="3"><result status="valid" time="0.09"/></proof>
<proof prover="5"><result status="valid" time="0.07"/></proof>
<proof prover="9"><result status="valid" time="0.06" steps="226"/></proof>
</goal>
</theory>
<theory name="TheClassicalSudokuGrid" sum="be8917526b56185d0131e65ea0a7e8dc" expanded="true">
<goal name="WP_parameter classical_sudoku" expl="VC for classical_sudoku">
<proof prover="2" timelimit="6"><result status="valid" time="0.78"/></proof>
<proof prover="3" timelimit="6"><result status="valid" time="0.71"/></proof>
<theory name="TheClassicalSudokuGrid" sum="4d9939c591908328a15f08be3de3be82">
<goal name="VC classical_sudoku" expl="VC for classical_sudoku">
<proof prover="10" timelimit="5"><result status="valid" time="3.41"/></proof>
</goal>
</theory>
<theory name="Solver" sum="1d6790a01a7467a84a2c94984a1a7f39" expanded="true">
<goal name="WP_parameter check_valid_chunk" expl="VC for check_valid_chunk">
<theory name="Solver" sum="99f1e17637d2e08d9c611b908d1a0ba0" expanded="true">
<goal name="VC check_valid_chunk" expl="VC for check_valid_chunk">
<transf name="split_goal_wp">
<goal name="WP_parameter check_valid_chunk.1" expl="1. index in array bounds">
<proof prover="6"><result status="valid" time="0.01" steps="11"/></proof>
<goal name="VC check_valid_chunk.1" expl="1. index in array bounds">
<proof prover="9"><result status="valid" time="0.00" steps="9"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.2" expl="2. array creation size">
<proof prover="6"><result status="valid" time="0.01" steps="9"/></proof>
<goal name="VC check_valid_chunk.2" expl="2. array creation size">
<proof prover="9"><result status="valid" time="0.00" steps="5"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.3" expl="3. postcondition">
<proof prover="6"><result status="valid" time="0.01" steps="12"/></proof>
<goal name="VC check_valid_chunk.3" expl="3. loop invariant init">
<proof prover="9"><result status="valid" time="0.00" steps="8"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.4" expl="4. loop invariant init">
<proof prover="6"><result status="valid" time="0.01" steps="15"/></proof>
<goal name="VC check_valid_chunk.4" expl="4. loop invariant init">
<proof prover="9"><result status="valid" time="0.00" steps="8"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.5" expl="5. loop invariant init">
<proof prover="6"><result status="valid" time="0.01" steps="16"/></proof>
<goal name="VC check_valid_chunk.5" expl="5. loop invariant init">
<proof prover="9"><result status="valid" time="0.00" steps="23"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.6" expl="6. loop invariant init">
<proof prover="6"><result status="valid" time="0.01" steps="22"/></proof>
<goal name="VC check_valid_chunk.6" expl="6. index in array bounds">
<proof prover="9"><result status="valid" time="0.00" steps="12"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.7" expl="7. index in array bounds">
<proof prover="6"><result status="valid" time="0.01" steps="19"/></proof>
<goal name="VC check_valid_chunk.7" expl="7. index in array bounds">
<proof prover="9"><result status="valid" time="0.01" steps="24"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.8" expl="8. index in array bounds">
<proof prover="6"><result status="valid" time="0.03" steps="32"/></proof>
<goal name="VC check_valid_chunk.8" expl="8. index in array bounds">
<proof prover="9"><result status="valid" time="0.00" steps="13"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.9" expl="9. type invariant">
<proof prover="6"><result status="valid" time="0.01" steps="21"/></proof>
<goal name="VC check_valid_chunk.9" expl="9. exceptional postcondition">
<proof prover="9"><result status="valid" time="0.02" steps="48"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.10" expl="10. index in array bounds">
<proof prover="6"><result status="valid" time="0.01" steps="21"/></proof>
<goal name="VC check_valid_chunk.10" expl="10. index in array bounds">
<proof prover="9"><result status="valid" time="0.00" steps="14"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.11" expl="11. exceptional postcondition">
<proof prover="6"><result status="valid" time="0.05" steps="50"/></proof>
<goal name="VC check_valid_chunk.11" expl="11. loop invariant preservation">
<proof prover="9"><result status="valid" time="0.01" steps="46"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.12" expl="12. index in array bounds">
<proof prover="6"><result status="valid" time="0.01" steps="24"/></proof>
<goal name="VC check_valid_chunk.12" expl="12. loop invariant preservation">
<proof prover="9"><result status="valid" time="0.01" steps="49"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.13" expl="13. loop invariant preservation">
<proof prover="6"><result status="valid" time="0.10" steps="72"/></proof>
<goal name="VC check_valid_chunk.13" expl="13. loop invariant preservation">
<proof prover="9"><result status="valid" time="0.02" steps="62"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.14" expl="14. loop invariant preservation">
<proof prover="6"><result status="valid" time="0.02" steps="37"/></proof>
<goal name="VC check_valid_chunk.14" expl="14. loop invariant preservation">
<proof prover="9"><result status="valid" time="0.01" steps="36"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.15" expl="15. loop invariant preservation">
<proof prover="6"><result status="valid" time="0.04" steps="48"/></proof>
<goal name="VC check_valid_chunk.15" expl="15. loop invariant preservation">
<proof prover="9"><result status="valid" time="0.02" steps="51"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.16" expl="16. loop invariant preservation">
<proof prover="6"><result status="valid" time="0.04" steps="39"/></proof>
<goal name="VC check_valid_chunk.16" expl="16. loop invariant preservation">
<proof prover="9"><result status="valid" time="0.02" steps="45"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.17" expl="17. loop invariant preservation">
<proof prover="6"><result status="valid" time="0.03" steps="30"/></proof>
<goal name="VC check_valid_chunk.17" expl="17. postcondition">
<proof prover="9"><result status="valid" time="0.01" steps="32"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.18" expl="18. loop invariant preservation">
<proof prover="6"><result status="valid" time="0.03" steps="41"/></proof>
</goal>
<goal name="WP_parameter check_valid_chunk.19" expl="19. postcondition">
<proof prover="6"><result status="valid" time="0.02" steps="32"/></proof>
<goal name="VC check_valid_chunk.18" expl="18. postcondition">
<proof prover="9"><result status="valid" time="0.01" steps="6"/></proof>
</goal>
</transf>
</goal>
<goal name="WP_parameter check_valid" expl="VC for check_valid">
<proof prover="0"><result status="valid" time="0.11"/></proof>
<goal name="VC check_valid" expl="VC for check_valid">
<proof prover="9"><result status="valid" time="0.26" steps="667"/></proof>
</goal>
<goal name="full_up_to_change">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
<proof prover="4"><result status="valid" time="0.21" steps="13"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
<proof prover="9"><result status="valid" time="0.01" steps="17"/></proof>
</goal>
<goal name="WP_parameter full_up_to_frame" expl="VC for full_up_to_frame">
<proof prover="0"><result status="valid" time="0.15"/></proof>
<proof prover="2"><result status="valid" time="0.02"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
<proof prover="4"><result status="valid" time="0.14" steps="86"/></proof>
<proof prover="5"><result status="valid" time="0.06"/></proof>
<goal name="VC full_up_to_frame" expl="VC for full_up_to_frame">
<proof prover="9"><result status="valid" time="0.03" steps="92"/></proof>
</goal>
<goal name="WP_parameter full_up_to_frame_all" expl="VC for full_up_to_frame_all">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="13"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
<goal name="VC full_up_to_frame_all" expl="VC for full_up_to_frame_all">
<proof prover="9"><result status="valid" time="0.01" steps="11"/></proof>
</goal>
<goal name="VC valid_chunk_frame" expl="VC for valid_chunk_frame">
<proof prover="9"><result status="valid" time="0.01" steps="51"/></proof>
</goal>
<goal name="VC valid_up_to_frame" expl="VC for valid_up_to_frame">
<transf name="split_goal_wp">
<goal name="VC valid_up_to_frame.1" expl="1. assertion">
<proof prover="9"><result status="valid" time="0.03" steps="83"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.2" expl="2. variant decrease">
<proof prover="9"><result status="valid" time="0.00" steps="8"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.3" expl="3. precondition">
<proof prover="9"><result status="valid" time="0.00" steps="8"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.4" expl="4. precondition">
<proof prover="9"><result status="valid" time="0.00" steps="8"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.5" expl="5. precondition">
<proof prover="9"><result status="valid" time="0.01" steps="9"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.6" expl="6. precondition">
<proof prover="9"><result status="valid" time="0.01" steps="9"/></proof>
<proof prover="10"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC valid_up_to_frame.7" expl="7. precondition">
<proof prover="9"><result status="valid" time="0.01" steps="10"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.8" expl="8. precondition">
<proof prover="9"><result status="valid" time="0.00" steps="10"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.9" expl="9. precondition">
<proof prover="9"><result status="valid" time="0.00" steps="11"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.10" expl="10. precondition">
<proof prover="10" timelimit="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.11" expl="11. precondition">
<proof prover="9"><result status="valid" time="0.00" steps="11"/></proof>
<proof prover="10"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC valid_up_to_frame.12" expl="12. precondition">
<proof prover="9"><result status="valid" time="0.00" steps="11"/></proof>
<proof prover="10"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC valid_up_to_frame.13" expl="13. precondition">
<proof prover="9"><result status="valid" time="0.00" steps="12"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.14" expl="14. precondition">
<proof prover="9"><result status="valid" time="0.01" steps="35"/></proof>
<proof prover="10"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC valid_up_to_frame.15" expl="15. precondition">
<proof prover="9"><result status="valid" time="0.01" steps="12"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.16" expl="16. precondition">
<proof prover="9"><result status="valid" time="0.00" steps="12"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.17" expl="17. precondition">
<proof prover="9"><result status="valid" time="0.00" steps="13"/></proof>
<proof prover="10"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC valid_up_to_frame.18" expl="18. precondition">
<proof prover="9"><result status="valid" time="0.01" steps="37"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC valid_up_to_frame.19" expl="19. postcondition">
<proof prover="9"><result status="valid" time="0.04" steps="143"/></proof>
<proof prover="10"><result status="valid" time="0.02"/></proof>
</goal>
</transf>
</goal>
<goal name="valid_unchanged_chunks">
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
<proof prover="5"><result status="valid" time="0.05"/></proof>
<proof prover="9"><result status="valid" time="0.02" steps="40"/></proof>
</goal>
<goal name="valid_changed_chunks">
<proof prover="2"><result status="valid" time="0.02"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
<proof prover="4"><result status="valid" time="0.04" steps="23"/></proof>
<proof prover="9"><result status="valid" time="0.01" steps="25"/></proof>
</goal>
<goal name="valid_up_to_change">
<proof prover="0"><result status="valid" time="0.48"/></proof>
<goal name="VC valid_up_to_change" expl="VC for valid_up_to_change">
<proof prover="9"><result status="valid" time="0.45" steps="717"/></proof>
</goal>
<goal name="WP_parameter solve_aux" expl="VC for solve_aux">
<goal name="VC solve_aux" expl="VC for solve_aux">
<transf name="split_goal_wp">
<goal name="WP_parameter solve_aux.1" expl="1. exceptional postcondition">
<proof prover="0"><result status="valid" time="0.04"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="5"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="WP_parameter solve_aux.2" expl="2. index in array bounds">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.00"/></proof>
<proof prover="3"><result status="valid" time="0.00"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="15"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.3" expl="3. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.02"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="17"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.4" expl="4. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.05"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="17"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.5" expl="5. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="18"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.6" expl="6. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.07"/></proof>
<proof prover="3"><result status="valid" time="0.09"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="18"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.7" expl="7. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.02"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="20"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.8" expl="8. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.05"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="20"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.9" expl="9. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.05"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="20"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.10" expl="10. precondition">
<proof prover="0"><result status="valid" time="0.01"/></proof>
<proof prover="2"><result status="valid" time="0.06"/></proof>
<proof prover="4"><result status="valid" time="0.01" steps="24"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.11" expl="11. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="22"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.12" expl="12. precondition">
<proof prover="0"><result status="valid" time="0.01"/></proof>
<proof prover="2"><result status="valid" time="0.02"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="5"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="WP_parameter solve_aux.13" expl="13. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.05"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="22"/></proof>
<proof prover="5"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="WP_parameter solve_aux.14" expl="14. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.09"/></proof>
<proof prover="3"><result status="valid" time="0.11"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="28"/></proof>
<proof prover="5"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="WP_parameter solve_aux.15" expl="15. variant decrease">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="24"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.16" expl="16. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.32"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="24"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.17" expl="17. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.02"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
<proof prover="4"><result status="valid" time="0.04" steps="24"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.18" expl="18. precondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.05"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="24"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.19" expl="19. precondition">
<proof prover="0"><result status="valid" time="0.03"/></proof>
<proof prover="2"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="24"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.20" expl="20. precondition">
<proof prover="0"><result status="valid" time="0.03"/></proof>
<proof prover="5"><result status="valid" time="0.04"/></proof>
<proof prover="6"><result status="valid" time="0.18" steps="119"/></proof>
<proof prover="7"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.21" expl="21. precondition">
<proof prover="0"><result status="valid" time="0.06"/></proof>
<proof prover="2"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.05"/></proof>
<proof prover="4"><result status="valid" time="0.12" steps="66"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.22" expl="22. postcondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.00"/></proof>
<proof prover="3"><result status="valid" time="0.00"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="29"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.23" expl="23. postcondition">
<proof prover="0"><result status="valid" time="0.10"/></proof>
<proof prover="5"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="WP_parameter solve_aux.24" expl="24. exceptional postcondition">
<proof prover="0"><result status="valid" time="0.01"/></proof>
<proof prover="2"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.05"/></proof>
<proof prover="5"><result status="valid" time="0.11"/></proof>
</goal>
<goal name="WP_parameter solve_aux.25" expl="25. postcondition">
<proof prover="0"><result status="valid" time="0.01"/></proof>
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.02"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="31"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.26" expl="26. postcondition">
<proof prover="0"><result status="valid" time="0.06"/></proof>
<proof prover="4"><result status="valid" time="0.66" steps="138"/></proof>
<proof prover="5"><result status="valid" time="0.05"/></proof>
</goal>
<goal name="WP_parameter solve_aux.27" expl="27. postcondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.00"/></proof>
<proof prover="3"><result status="valid" time="0.02"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="28"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.28" expl="28. postcondition">
<proof prover="0"><result status="valid" time="0.35"/></proof>
<proof prover="4"><result status="valid" time="0.48" steps="133"/></proof>
<proof prover="5"><result status="valid" time="0.06"/></proof>
</goal>
<goal name="WP_parameter solve_aux.29" expl="29. postcondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.02"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="25"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.30" expl="30. postcondition">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="5"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="WP_parameter solve_aux.31" expl="31. index in array bounds">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.02"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="17"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.32" expl="32. assertion">
<proof prover="0"><result status="valid" time="0.04"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="20"/></proof>
<proof prover="5"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="WP_parameter solve_aux.33" expl="33. postcondition">
<proof prover="0"><result status="valid" time="0.05"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.05"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="18"/></proof>
<proof prover="5"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="WP_parameter solve_aux.34" expl="34. postcondition">
<proof prover="5"><result status="valid" time="0.06"/></proof>
</goal>
<goal name="WP_parameter solve_aux.35" expl="35. loop invariant init">
<proof prover="0"><result status="valid" time="0.01"/></proof>
<proof prover="2"><result status="valid" time="0.00"/></proof>
<proof prover="3"><result status="valid" time="0.02"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="21"/></proof>
<proof prover="5"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="WP_parameter solve_aux.36" expl="36. loop invariant init">
<proof prover="0"><result status="valid" time="0.01"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="18"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.37" expl="37. loop invariant init">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.00"/></proof>
<proof prover="3"><result status="valid" time="0.00"/></proof>
<proof prover="4"><result status="valid" time="0.03" steps="21"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.38" expl="38. type invariant">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.01"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="22"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.39" expl="39. index in array bounds">
<proof prover="0"><result status="valid" time="0.02"/></proof>
<proof prover="2"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="22"/></proof>
<proof prover="5"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="WP_parameter solve_aux.40" expl="40. precondition">
<proof prover="4"><result status="valid" time="0.03" steps="23"/></proof>
</goal>
<goal name="WP_parameter solve_aux.41" expl="41. precondition">
<proof prover="0"><result status="valid" time="0.13"/></proof>
<proof prover="2"><result status="valid" time="0.05"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="5"><result status="valid" time="0.06"/></proof>
</goal>
<goal name="WP_parameter solve_aux.42" expl="42. precondition">
<proof prover="0"><result status="valid" time="0.04"/></proof>
<proof prover="2"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.06"/></proof>
<proof prover="4"><result status="valid" time="0.02" steps="24"/></proof>
<proof prover="5"><result status="valid" time="0.06"/></proof>
</goal>
<goal name="WP_parameter solve_aux.43" expl="43. precondition">