Commit 49a49ca1 authored by Raphael Rieu-Helft's avatar Raphael Rieu-Helft
Browse files

Reflection example for division by a limb

parent e5944d8b
......@@ -502,7 +502,7 @@ let rec print_lc ctx v : unit variant { ctx }
= match ctx, v with
| Nil, Nil -> ()
| Cons l t, Cons v t2 ->
(if C.eq C.czero v then ()
(if C.eq C.czero v then ()
else (print l; print v));
print_lc t t2
| _ -> ()
......@@ -579,11 +579,6 @@ let addmul_row (m:matrix coeff) (src dst: int) (c: coeff) : unit
use import ref.Refint
(*val breakpoint (a: matrix coeff) : unit writes { a }
let a_breakpoint (v:array coeff) : unit
= v[0] <- any coeff*)
let gauss_jordan (a: matrix coeff) : option (array coeff)
(*AX=B, a=(A|B), result=X*)
returns { Some r -> Array.length r = a.columns | None -> true }
......@@ -630,7 +625,6 @@ let gauss_jordan (a: matrix coeff) : option (array coeff)
for i = 0 to !r do
v[pivots[i]] <- get a i (m-1)
done;
(* a_breakpoint v;*)
Some v (*pivots[!r] < m-1*) (*pivot on last column, no solution*)
end
......@@ -689,8 +683,6 @@ let linear_decision (l: context) (g: equality) : bool
fill_ctx l 0;
let (ex, d) = norm_eq g in
fill_goal ex;
(*let show (a: matrix coeff) (b v: array coeff) (d: coeff) = breakpoint a in
show a b v d;*)
let ab = m_append a b in
let cd = v_append v d in
let ab' = transpose ab in
......
......@@ -1407,7 +1407,7 @@ module N
value (old r) !i = value (old r) k
+ (power radix k) * (!lr)
) *)
};
};
i := Int32.(+) !i (Int32.of_int 1);
done;
!c
......@@ -2605,7 +2605,6 @@ let divmod_1 (q x:t) (y:limb) (sz:int32) : limb
invariant { mod (!r) mult = 0 }
assert { !i >= 0 };
label StartLoop in
let ghost k = p2i !i in
lx := C.get !xp;
(*TODO lshift in place would simplify things*)
let l,h = lsld_ext !lx (Limb.of_int32 clz) in
......@@ -2666,20 +2665,45 @@ let divmod_1 (q x:t) (y:limb) (sz:int32) : limb
so rem = mult * mer <= mult * (tlum - 1) = radix - mult
};
r:=rem;
assert { qu * ry + !r = l + radix * h + radix * (!r at StartLoop) };
(* coerced div2by1 postcondition *)
value_sub_update_no_change (pelts q) (!qp).offset (q.offset + 1 + p2i !i)
(q.offset + p2i sz) qu;
C.set !qp qu;
assert { mult * value_sub (pelts x) (x.offset + !i + 1) (x.offset + sz)
= value_sub (pelts q) (q.offset + !i + 1)
(q.offset + sz)
* ry
+ (!r at StartLoop) }; (* previous invariant is still true *)
xp.contents <- C.incr !xp minus_one;
qp.contents <- C.incr !qp minus_one;
i := Int32.(-) !i one;
value_sub_head (pelts x) (x.offset + k) (x.offset + p2i sz);
value_sub_head (pelts q) (q.offset + k) (q.offset + p2i sz);
assert { mult * value_sub (pelts x) (x.offset + !i + 1) (* TODO refl*)
value_sub_head (pelts x) (x.offset + int32'int !i) (x.offset + p2i sz);
value_sub_head (pelts q) (q.offset + int32'int !i) (q.offset + p2i sz);
assert { l + radix * h = mult * !lx }; (*lsld_ext postcondition *)
assert { mult * value_sub (pelts x) (x.offset + !i)
(x.offset + sz)
= mult * !lx
+ radix * (mult * value_sub (pelts x) (x.offset + !i + 1)
(x.offset + sz))
by (pelts x)[x.offset + !i] = !lx
so value_sub (pelts x) (x.offset + !i) (x.offset + sz)
= !lx + radix * value_sub (pelts x) (x.offset + !i + 1)
(x.offset + sz) }; (*nonlinear*)
assert { value_sub (pelts q) (q.offset + !i) (q.offset + sz) * ry
= qu * ry
+ radix
* (value_sub (pelts q) (q.offset + !i + 1) (q.offset + sz)
* ry)
by (pelts q)[q.offset + !i] = qu
so value_sub (pelts q) (q.offset + !i) (q.offset + sz)
= qu + radix * value_sub (pelts q) (q.offset + !i + 1)
(q.offset + sz) }; (*nonlinear*)
assert { mult * value_sub (pelts x) (x.offset + !i)
(x.offset + sz)
= value_sub (pelts q) (q.offset + !i + 1) (q.offset + sz)
= value_sub (pelts q) (q.offset + !i) (q.offset + sz)
* ry
+ !r
by
(* by
(pelts q)[q.offset + k] = qu
so
(pelts x)[x.offset + k] = !lx
......@@ -2725,8 +2749,9 @@ let divmod_1 (q x:t) (y:limb) (sz:int32) : limb
+ !r
= ry * value_sub (pelts q) (q.offset + !i + 1)
(q.offset + sz)
+ !r
}
+ !r *)
};
i := Int32.(-) !i one;
done;
let ghost res = lsr !r (Limb.of_int32 clz) in
assert { !r = res * mult
......
......@@ -9,7 +9,7 @@
<prover id="4" name="Z3" version="4.4.1" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="9" name="Alt-Ergo" version="1.30" timelimit="5" steplimit="0" memlimit="1000"/>
<file name="../mp2.mlw" proved="true">
<theory name="N" proved="true" sum="be6c8b44e363b9802ca897a6da7adb1c">
<theory name="N" proved="true" sum="03574374dee35dec33fac2e67c484414">
<goal name="VC map_eq_shift" expl="VC for map_eq_shift" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC map_eq_shift.0" expl="postcondition" proved="true">
......@@ -2929,7 +2929,7 @@
<proof prover="3"><result status="valid" time="0.16"/></proof>
</goal>
<goal name="VC mul_limbs.37.0.0.0.0.2" proved="true">
<proof prover="3"><result status="valid" time="0.87"/></proof>
<proof prover="3"><result status="valid" time="0.73"/></proof>
</goal>
</transf>
</goal>
......@@ -5320,12 +5320,15 @@
</transf>
</goal>
<goal name="VC divmod_1.31" expl="assertion" proved="true">
<proof prover="4"><result status="timeout" time="5.00"/></proof>
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.31.0" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC divmod_1.31.1" expl="VC for divmod_1" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.12"/></proof>
<proof prover="2" timelimit="1"><result status="valid" time="0.13"/></proof>
<proof prover="3"><result status="timeout" time="1.00"/></proof>
<proof prover="9" timelimit="1"><result status="timeout" time="1.01"/></proof>
</goal>
<goal name="VC divmod_1.31.2" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.05"/></proof>
......@@ -5334,37 +5337,43 @@
<proof prover="3"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC divmod_1.31.4" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.31.5" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.42"/></proof>
<proof prover="3"><result status="valid" time="0.30"/></proof>
</goal>
<goal name="VC divmod_1.31.6" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.31.7" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
<proof prover="3"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC divmod_1.31.8" expl="VC for divmod_1" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof>
<proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof>
<proof prover="3"><result status="timeout" time="1.00"/></proof>
<proof prover="9" timelimit="1"><result status="timeout" time="1.00"/></proof>
</goal>
<goal name="VC divmod_1.31.9" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC divmod_1.31.10" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC divmod_1.31.11" expl="VC for divmod_1" proved="true">
<proof prover="1"><result status="valid" time="0.08"/></proof>
<proof prover="0" timelimit="10"><result status="timeout" time="9.87"/></proof>
<proof prover="1" timelimit="10"><result status="valid" time="0.10"/></proof>
<proof prover="2" timelimit="1"><result status="unknown" time="1.54"/></proof>
<proof prover="3" timelimit="10" memlimit="2000"><result status="timeout" time="10.00"/></proof>
<proof prover="9" timelimit="10" memlimit="2000"><result status="timeout" time="9.98"/></proof>
</goal>
<goal name="VC divmod_1.31.12" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.31.13" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC divmod_1.31.14" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.00"/></proof>
<proof prover="3"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC divmod_1.31.15" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.01"/></proof>
......@@ -5373,7 +5382,7 @@
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.31.17" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
<proof prover="3"><result status="valid" time="0.06"/></proof>
</goal>
<goal name="VC divmod_1.31.18" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
......@@ -5384,7 +5393,17 @@
</transf>
</goal>
<goal name="VC divmod_1.32" expl="assertion" proved="true">
<proof prover="4"><result status="valid" time="0.03"/></proof>
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.32.0" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC divmod_1.32.1" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.32.2" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.01"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.33" expl="integer overflow" proved="true">
<proof prover="2"><result status="valid" time="0.24"/></proof>
......@@ -5399,15 +5418,15 @@
<proof prover="4"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC divmod_1.37" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.06"/></proof>
</goal>
<goal name="VC divmod_1.38" expl="precondition" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.38.0" expl="precondition" proved="true">
<goal name="VC divmod_1.37.0" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.02"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.38" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.06"/></proof>
</goal>
<goal name="VC divmod_1.39" expl="assertion" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.39.0" expl="VC for divmod_1" proved="true">
......@@ -5482,256 +5501,321 @@
</goal>
</transf>
</goal>
<goal name="VC divmod_1.42" expl="precondition" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
<goal name="VC divmod_1.42" expl="assertion" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof>
<proof prover="3"><result status="timeout" time="1.00"/></proof>
<proof prover="9" timelimit="1"><result status="timeout" time="1.01"/></proof>
</goal>
<goal name="VC divmod_1.43" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC divmod_1.44" expl="precondition" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof>
<proof prover="3"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC divmod_1.45" expl="precondition" proved="true">
<proof prover="2"><result status="valid" time="0.24"/></proof>
<proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof>
</goal>
<goal name="VC divmod_1.46" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.04"/></proof>
<goal name="VC divmod_1.46" expl="assertion" proved="true">
<proof prover="0" timelimit="10"><result status="valid" time="0.05"/></proof>
<proof prover="1" obsolete="true"><result status="timeout" time="5.00"/></proof>
<proof prover="2" timelimit="1" obsolete="true"><result status="unknown" time="2.04"/></proof>
<proof prover="3" obsolete="true"><result status="timeout" time="1.00"/></proof>
<proof prover="9" timelimit="1" obsolete="true"><result status="timeout" time="1.01"/></proof>
</goal>
<goal name="VC divmod_1.47" expl="integer overflow" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.20"/></proof>
<goal name="VC divmod_1.47" expl="precondition" proved="true">
<proof prover="2"><result status="valid" time="0.24"/></proof>
</goal>
<goal name="VC divmod_1.48" expl="precondition" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof>
<proof prover="4"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC divmod_1.49" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.07"/></proof>
</goal>
<goal name="VC divmod_1.50" expl="assertion" proved="true">
<proof prover="1"><result status="valid" time="1.05"/></proof>
<goal name="VC divmod_1.50" expl="precondition" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof>
</goal>
<goal name="VC divmod_1.51" expl="assertion" proved="true">
<proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof>
<proof prover="2" timelimit="1" obsolete="true"><result status="unknown" time="1.07"/></proof>
<proof prover="3" obsolete="true"><result status="timeout" time="1.00"/></proof>
<proof prover="9" timelimit="1" obsolete="true"><result status="timeout" time="1.01"/></proof>
</goal>
<goal name="VC divmod_1.52" expl="assertion" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.52.0" expl="VC for divmod_1" proved="true">
<proof prover="0" timelimit="10"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC divmod_1.52.1" expl="VC for divmod_1" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof>
</goal>
<goal name="VC divmod_1.52.2" expl="VC for divmod_1" proved="true">
<proof prover="1" timelimit="10"><result status="valid" time="0.11"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.53" expl="assertion" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.53.0" expl="VC for divmod_1" proved="true">
<proof prover="0" timelimit="10"><result status="valid" time="0.04"/></proof>
<proof prover="2" timelimit="1"><result status="unknown" time="2.12"/></proof>
<proof prover="3"><result status="timeout" time="1.00"/></proof>
<proof prover="9" timelimit="1"><result status="timeout" time="1.00"/></proof>
</goal>
<goal name="VC divmod_1.53.1" expl="VC for divmod_1" proved="true">
<proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof>
<proof prover="3"><result status="timeout" time="1.00"/></proof>
</goal>
<goal name="VC divmod_1.53.2" expl="VC for divmod_1" proved="true">
<proof prover="0" timelimit="10"><result status="valid" time="4.97"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.54" expl="assertion" proved="true">
<transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP">
<goal name="VC divmod_1.54.0" expl="assertion" proved="true">
<transf name="reflection_f" proved="true" arg1="mp_decision">
<goal name="VC divmod_1.54.0.0" expl="assertion" proved="true">
<proof prover="3"><result status="valid" time="0.14"/></proof>
</goal>
</transf>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.55" expl="integer overflow" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.20"/></proof>
</goal>
<goal name="VC divmod_1.51" expl="loop variant decrease" proved="true">
<goal name="VC divmod_1.56" expl="loop variant decrease" proved="true">
<proof prover="4"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC divmod_1.52" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.57" expl="loop invariant preservation" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof>
</goal>
<goal name="VC divmod_1.53" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.58" expl="loop invariant preservation" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof>
</goal>
<goal name="VC divmod_1.54" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.59" expl="loop invariant preservation" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof>
</goal>
<goal name="VC divmod_1.55" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.60" expl="loop invariant preservation" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.55.0" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.60.0" expl="loop invariant preservation" proved="true">
<proof prover="0" memlimit="1000"><result status="valid" time="0.03"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.56" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.61" expl="loop invariant preservation" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.18"/></proof>
</goal>
<goal name="VC divmod_1.57" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.62" expl="loop invariant preservation" proved="true">
<proof prover="4"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC divmod_1.58" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.63" expl="loop invariant preservation" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.14"/></proof>
</goal>
<goal name="VC divmod_1.59" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.64" expl="loop invariant preservation" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.15"/></proof>
</goal>
<goal name="VC divmod_1.60" expl="loop invariant preservation" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.14"/></proof>
<goal name="VC divmod_1.65" expl="loop invariant preservation" proved="true">
<proof prover="0" timelimit="10"><result status="valid" time="0.74"/></proof>
<proof prover="2" timelimit="1" obsolete="true"><result status="unknown" time="2.70"/></proof>
<proof prover="3" obsolete="true"><result status="timeout" time="1.00"/></proof>
<proof prover="9" timelimit="1" obsolete="true"><result status="timeout" time="1.00"/></proof>
</goal>
<goal name="VC divmod_1.61" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.66" expl="loop invariant preservation" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.61.0" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.66.0" expl="loop invariant preservation" proved="true">
<proof prover="4"><result status="valid" time="0.03"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.62" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.67" expl="loop invariant preservation" proved="true">
<proof prover="4"><result status="valid" time="0.05"/></proof>
</goal>
<goal name="VC divmod_1.63" expl="precondition" proved="true">
<goal name="VC divmod_1.68" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.64" expl="precondition" proved="true">
<goal name="VC divmod_1.69" expl="precondition" proved="true">
<proof prover="1" memlimit="1000"><result status="valid" time="0.08"/></proof>
<proof prover="4" memlimit="2000"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC divmod_1.65" expl="precondition" proved="true">
<goal name="VC divmod_1.70" expl="precondition" proved="true">
<proof prover="1"><result status="valid" time="0.08"/></proof>
</goal>
<goal name="VC divmod_1.66" expl="assertion" proved="true">
<goal name="VC divmod_1.71" expl="assertion" proved="true">
<proof prover="1"><result status="valid" time="0.09"/></proof>
</goal>
<goal name="VC divmod_1.67" expl="precondition" proved="true">
<goal name="VC divmod_1.72" expl="precondition" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.68" expl="precondition" proved="true">
<goal name="VC divmod_1.73" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.69" expl="precondition" proved="true">
<goal name="VC divmod_1.74" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC divmod_1.70" expl="postcondition" proved="true">
<goal name="VC divmod_1.75" expl="postcondition" proved="true">
<proof prover="1"><result status="valid" time="0.63"/></proof>
</goal>
<goal name="VC divmod_1.71" expl="postcondition" proved="true">
<goal name="VC divmod_1.76" expl="postcondition" proved="true">
<proof prover="1"><result status="valid" time="0.08"/></proof>
</goal>
<goal name="VC divmod_1.72" expl="precondition" proved="true">
<goal name="VC divmod_1.77" expl="precondition" proved="true">
<proof prover="9" memlimit="2000"><result status="valid" time="0.06" steps="42"/></proof>
</goal>
<goal name="VC divmod_1.73" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.78" expl="loop invariant init" proved="true">
<proof prover="9" timelimit="1"><result status="valid" time="0.05" steps="31"/></proof>
</goal>
<goal name="VC divmod_1.74" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.79" expl="loop invariant init" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.74.0" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.79.0" expl="loop invariant init" proved="true">
<proof prover="2"><result status="valid" time="0.08"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.75" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.80" expl="loop invariant init" proved="true">
<proof prover="4"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC divmod_1.76" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.81" expl="loop invariant init" proved="true">
<proof prover="9" memlimit="2000"><result status="valid" time="0.03" steps="33"/></proof>
</goal>
<goal name="VC divmod_1.77" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.82" expl="loop invariant init" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.07"/></proof>
</goal>
<goal name="VC divmod_1.78" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.83" expl="loop invariant init" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.78.0" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.83.0" expl="loop invariant init" proved="true">
<proof prover="9" timelimit="1"><result status="valid" time="0.02" steps="33"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.79" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.84" expl="loop invariant init" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.10"/></proof>
</goal>
<goal name="VC divmod_1.80" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.85" expl="loop invariant init" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.10"/></proof>
</goal>
<goal name="VC divmod_1.81" expl="loop invariant init" proved="true">
<goal name="VC divmod_1.86" expl="loop invariant init" proved="true">
<proof prover="9" timelimit="1"><result status="valid" time="0.03" steps="44"/></proof>
</goal>
<goal name="VC divmod_1.82" expl="assertion" proved="true">
<goal name="VC divmod_1.87" expl="assertion" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof>
</goal>
<goal name="VC divmod_1.83" expl="precondition" proved="true">
<goal name="VC divmod_1.88" expl="precondition" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.08"/></proof>
</goal>
<goal name="VC divmod_1.84" expl="precondition" proved="true">
<goal name="VC divmod_1.89" expl="precondition" proved="true">
<proof prover="9" timelimit="1"><result status="valid" time="0.03" steps="59"/></proof>
</goal>
<goal name="VC divmod_1.85" expl="precondition" proved="true">
<goal name="VC divmod_1.90" expl="precondition" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.85.0" expl="precondition" proved="true">
<goal name="VC divmod_1.90.0" expl="precondition" proved="true">
<proof prover="0"><result status="valid" time="0.04"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.86" expl="precondition" proved="true">
<goal name="VC divmod_1.91" expl="precondition" proved="true">
<proof prover="9"><result status="valid" time="0.03" steps="47"/></proof>
</goal>
<goal name="VC divmod_1.87" expl="precondition" proved="true">
<goal name="VC divmod_1.92" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC divmod_1.88" expl="precondition" proved="true">
<goal name="VC divmod_1.93" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.89" expl="precondition" proved="true">
<goal name="VC divmod_1.94" expl="precondition" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof>
</goal>
<goal name="VC divmod_1.90" expl="precondition" proved="true">
<goal name="VC divmod_1.95" expl="precondition" proved="true">
<proof prover="3"><result status="valid" time="0.05"/></proof>
</goal>
<goal name="VC divmod_1.91" expl="precondition" proved="true">
<goal name="VC divmod_1.96" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.92" expl="integer overflow" proved="true">
<goal name="VC divmod_1.97" expl="integer overflow" proved="true">
<proof prover="1" memlimit="1000"><result status="valid" time="0.20"/></proof>
</goal>
<goal name="VC divmod_1.93" expl="precondition" proved="true">
<goal name="VC divmod_1.98" expl="precondition" proved="true">
<proof prover="2"><result status="valid" time="0.11"/></proof>
</goal>
<goal name="VC divmod_1.94" expl="precondition" proved="true">
<goal name="VC divmod_1.99" expl="precondition" proved="true">
<proof prover="4"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC divmod_1.95" expl="assertion" proved="true">
<goal name="VC divmod_1.100" expl="assertion" proved="true">
<transf name="split_goal_wp" proved="true" >
<goal name="VC divmod_1.95.0" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.0" expl="VC for divmod_1" proved="true">
<proof prover="0"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC divmod_1.95.1" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.1" expl="VC for divmod_1" proved="true">
<proof prover="0"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC divmod_1.95.2" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.2" expl="VC for divmod_1" proved="true">
<proof prover="0"><result status="valid" time="3.50"/></proof>
</goal>
<goal name="VC divmod_1.95.3" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.3" expl="VC for divmod_1" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.07"/></proof>
</goal>
<goal name="VC divmod_1.95.4" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.4" expl="VC for divmod_1" proved="true">
<proof prover="0"><result status="valid" time="0.06"/></proof>
</goal>
<goal name="VC divmod_1.95.5" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.5" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC divmod_1.95.6" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.6" expl="VC for divmod_1" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.06"/></proof>
</goal>
<goal name="VC divmod_1.95.7" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.7" expl="VC for divmod_1" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC divmod_1.95.8" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.8" expl="VC for divmod_1" proved="true">
<proof prover="0"><result status="valid" time="3.54"/></proof>
</goal>
<goal name="VC divmod_1.95.9" expl="VC for divmod_1" proved="true">
<goal name="VC divmod_1.100.9" expl="VC for divmod_1" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.07"/></proof>
</goal>
</transf>
</goal>
<goal name="VC divmod_1.96" expl="loop variant decrease" proved="true">
<goal name="VC divmod_1.101" expl="loop variant decrease" proved="true">
<proof prover="1" memlimit="1000"><result status="valid" time="0.07"/></proof>
</goal>
<goal name="VC divmod_1.97" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.102" expl="loop invariant preservation" proved="true">
<proof prover="2" memlimit="2000"><result status="valid" time="0.08"/></proof>
</goal>
<goal name="VC divmod_1.98" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.103" expl="loop invariant preservation" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof>
</goal>
<goal name="VC divmod_1.99" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.104" expl="loop invariant preservation" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.18"/></proof>
</goal>
<goal name="VC divmod_1.100" expl="loop invariant preservation" proved="true">
<goal name="VC divmod_1.105" expl="loop invariant preservation" proved="true">
<proof prover="4"><result status="valid" time="0.03"/></proof>
</goal>