Commit 323642e8 authored by Raphael Rieu-Helft's avatar Raphael Rieu-Helft

Add general case multiplication that uses Toom-Cook

parent 38bc296d
......@@ -553,8 +553,8 @@ end
module mach.c.C
prelude "#define IGNORE2(x,y) do {} while (0)"
interface "#define IGNORE2(x,y) do {} while (0)"
prelude "#define IGNORE2(x,y) do { (void)(x); (void)(y); } while (0)"
interface "#define IGNORE2(x,y) do { (void)(x); (void)(y); } while (0)"
syntax type ptr "%1 *"
syntax type bool "int" (* ? *)
......@@ -563,6 +563,9 @@ module mach.c.C
syntax val free "free(%1)"
syntax val realloc "realloc(%1, (%2) * sizeof(%v0))"
syntax val salloc "alloca((%1) * sizeof(%v0))"
syntax val sfree "(void)(%1)"
(* syntax val is_null "(%1) == NULL" *)
syntax val is_not_null "(%1) != NULL"
syntax val null "NULL"
......
......@@ -35,7 +35,7 @@ tests: extract check-gmp
./build/minitests
bench-tests: extract
gcc -O2 -Wall -g -std=c11 tests.c $(CFILES) -Ibench-include -Irandom -fomit-frame-pointer -fno-tree-vectorize -lgmp -o build/bench-tests
gcc -O2 -Wall -Wno-unused-function -g -std=c11 tests.c $(CFILES) -Ibench-include -Irandom -fomit-frame-pointer -fno-tree-vectorize -lgmp -o build/bench-tests
build/why3%bench: extract check-gmp
......
......@@ -55,12 +55,21 @@ module Lemmas
requires { 0 < c }
ensures { c * a < c * b }
= ()
let lemma prod_compat_r (a b c:int)
requires { 0 <= a <= b }
requires { 0 <= c }
ensures { c * a <= c * b }
= ()
let lemma prod_compat_strict_lr (a b c d:int)
requires { 0 <= a < b }
requires { 0 <= c < d }
ensures { a * c < b * d }
= () (* assert { a * c < a * d = d * a < d * b = b * d } *)
meta remove_prop axiom prod_compat_strict_lr
(** {3 Integer value of a natural number} *)
(** `value_sub x n m` denotes the integer represented by
......@@ -204,4 +213,14 @@ module Lemmas
= value_sub_concat (pelts x) x.offset (x.offset + p2i n) (x.offset + p2i m)
let lemma value_sub_eq (x1 x2: map int limb) (n1 n2 m1 m2: int)
requires { x1 = x2 }
requires { n1 = n2 }
requires { m1 = m2 }
ensures { value_sub x1 n1 m1 = value_sub x2 n2 m2 }
= ()
meta remove_prop axiom value_sub_eq
end
......@@ -7,8 +7,8 @@
<prover id="2" name="CVC4" version="1.5" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="3" name="Z3" version="4.5.0" timelimit="5" steplimit="0" memlimit="1000"/>
<prover id="5" name="Alt-Ergo" version="2.0.0" timelimit="5" steplimit="0" memlimit="1000"/>
<file name="../lemmas.mlw" proved="true">
<theory name="Lemmas" proved="true">
<file name="../lemmas.mlw">
<theory name="Lemmas">
<goal name="VC map_eq_shift" expl="VC for map_eq_shift" proved="true">
<transf name="split_goal_right" proved="true" >
<goal name="VC map_eq_shift.0" expl="postcondition" proved="true">
......@@ -56,6 +56,9 @@
<goal name="VC prod_compat_r" expl="VC for prod_compat_r" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="10"/></proof>
</goal>
<goal name="VC prod_compat_strict_lr" expl="VC for prod_compat_strict_lr" proved="true">
<proof prover="2" timelimit="1"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC value_sub" expl="VC for value_sub" proved="true">
<transf name="split_goal_right" proved="true" >
<goal name="VC value_sub.0" expl="variant decrease" proved="true">
......@@ -265,6 +268,8 @@
<goal name="VC value_concat" expl="VC for value_concat" proved="true">
<proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="26"/></proof>
</goal>
<goal name="VC value_sub_eq" expl="VC for value_sub_eq">
</goal>
</theory>
</file>
</why3session>
......@@ -312,10 +312,10 @@ module Mul
done;
!c
(** `wmpn_mul r x y sx sy` multiplies `(x, sx)` and `(y,sy)` and writes
(** `wmpn_mul_basecase r x y sx sy` multiplies `(x, sx)` and `(y,sy)` and writes
the result in `(r, sx+sy)`. `sx` must be greater than or equal to
`sy`. Corresponds to `mpn_mul`. *)
let wmpn_mul (r x y:t) (sx sy:int32) : unit
let wmpn_mul_basecase (r x y:t) (sx sy:int32) : unit
requires { 0 < sy <= sx }
requires { valid x sx }
requires { valid y sy }
......
......@@ -886,542 +886,542 @@
</goal>
</transf>
</goal>
<goal name="VC wmpn_mul" expl="VC for wmpn_mul" proved="true">
<goal name="VC wmpn_mul_basecase" expl="VC for wmpn_mul_basecase" proved="true">
<transf name="split_goal_right" proved="true" >
<goal name="VC wmpn_mul.0" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.0" expl="precondition" proved="true">
<transf name="split_goal_right" proved="true" >
<goal name="VC wmpn_mul.0.0" expl="VC for wmpn_mul" proved="true">
<goal name="VC wmpn_mul_basecase.0.0" expl="VC for wmpn_mul_basecase" proved="true">
<proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="12"/></proof>
</goal>
<goal name="VC wmpn_mul.0.1" expl="VC for wmpn_mul" proved="true">
<goal name="VC wmpn_mul_basecase.0.1" expl="VC for wmpn_mul_basecase" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
</transf>
</goal>
<goal name="VC wmpn_mul.1" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.1" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.01" steps="11"/></proof>
</goal>
<goal name="VC wmpn_mul.2" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.2" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="30"/></proof>
</goal>
<goal name="VC wmpn_mul.3" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.3" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.01" steps="17"/></proof>
</goal>
<goal name="VC wmpn_mul.4" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.4" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="18"/></proof>
</goal>
<goal name="VC wmpn_mul.5" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.5" expl="precondition" proved="true">
<proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="36"/></proof>
</goal>
<goal name="VC wmpn_mul.6" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.6" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="25"/></proof>
</goal>
<goal name="VC wmpn_mul.7" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.7" expl="assertion" proved="true">
<transf name="split_goal_right" proved="true" >
<goal name="VC wmpn_mul.7.0" expl="VC for wmpn_mul" proved="true">
<goal name="VC wmpn_mul_basecase.7.0" expl="VC for wmpn_mul_basecase" proved="true">
<proof prover="0"><result status="valid" time="0.69"/></proof>
</goal>
<goal name="VC wmpn_mul.7.1" expl="VC for wmpn_mul" proved="true">
<goal name="VC wmpn_mul_basecase.7.1" expl="VC for wmpn_mul_basecase" proved="true">
<proof prover="0"><result status="valid" time="0.44"/></proof>
</goal>
<goal name="VC wmpn_mul.7.2" expl="VC for wmpn_mul" proved="true">
<goal name="VC wmpn_mul_basecase.7.2" expl="VC for wmpn_mul_basecase" proved="true">
<proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="72"/></proof>
</goal>
</transf>
</goal>
<goal name="VC wmpn_mul.8" expl="integer overflow" proved="true">
<goal name="VC wmpn_mul_basecase.8" expl="integer overflow" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="46"/></proof>
</goal>
<goal name="VC wmpn_mul.9" expl="integer overflow" proved="true">
<goal name="VC wmpn_mul_basecase.9" expl="integer overflow" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="47"/></proof>
</goal>
<goal name="VC wmpn_mul.10" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.10" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="47"/></proof>
</goal>
<goal name="VC wmpn_mul.11" expl="integer overflow" proved="true">
<goal name="VC wmpn_mul_basecase.11" expl="integer overflow" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.07" steps="55"/></proof>
</goal>
<goal name="VC wmpn_mul.12" expl="loop invariant init" proved="true">
<goal name="VC wmpn_mul_basecase.12" expl="loop invariant init" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="37"/></proof>
</goal>
<goal name="VC wmpn_mul.13" expl="loop invariant init" proved="true">
<goal name="VC wmpn_mul_basecase.13" expl="loop invariant init" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="39"/></proof>
</goal>
<goal name="VC wmpn_mul.14" expl="loop invariant init" proved="true">
<goal name="VC wmpn_mul_basecase.14" expl="loop invariant init" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.09" steps="40"/></proof>
</goal>
<goal name="VC wmpn_mul.15" expl="loop invariant init" proved="true">
<goal name="VC wmpn_mul_basecase.15" expl="loop invariant init" proved="true">
<transf name="split_goal_right" proved="true" >
<goal name="VC wmpn_mul.15.0" expl="loop invariant init" proved="true">
<goal name="VC wmpn_mul_basecase.15.0" expl="loop invariant init" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="41"/></proof>
</goal>
</transf>
</goal>
<goal name="VC wmpn_mul.16" expl="loop invariant init" proved="true">
<goal name="VC wmpn_mul_basecase.16" expl="loop invariant init" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.17" expl="loop invariant init" proved="true">
<goal name="VC wmpn_mul_basecase.17" expl="loop invariant init" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.18" expl="loop invariant init" proved="true">
<goal name="VC wmpn_mul_basecase.18" expl="loop invariant init" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="41"/></proof>
</goal>
<goal name="VC wmpn_mul.19" expl="loop invariant init" proved="true">
<goal name="VC wmpn_mul_basecase.19" expl="loop invariant init" proved="true">
<proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="86"/></proof>
</goal>
<goal name="VC wmpn_mul.20" expl="integer overflow" proved="true">
<goal name="VC wmpn_mul_basecase.20" expl="integer overflow" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.21" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.21" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="52"/></proof>
</goal>
<goal name="VC wmpn_mul.22" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.22" expl="assertion" proved="true">
<proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="90"/></proof>
</goal>
<goal name="VC wmpn_mul.23" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.23" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="72"/></proof>
</goal>
<goal name="VC wmpn_mul.24" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.24" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="55"/></proof>
</goal>
<goal name="VC wmpn_mul.25" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.25" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.14" steps="108"/></proof>
</goal>
<goal name="VC wmpn_mul.26" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.26" expl="assertion" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.14" steps="67"/></proof>
</goal>
<goal name="VC wmpn_mul.27" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.27" expl="assertion" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.54" steps="137"/></proof>
</goal>
<goal name="VC wmpn_mul.28" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.28" expl="precondition" proved="true">
<proof prover="0"><result status="valid" time="0.60"/></proof>
</goal>
<goal name="VC wmpn_mul.29" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.29" expl="precondition" proved="true">
<transf name="split_goal_right" proved="true" >
<goal name="VC wmpn_mul.29.0" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.29.0" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.13" steps="69"/></proof>
</goal>
</transf>
</goal>
<goal name="VC wmpn_mul.30" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.30" expl="precondition" proved="true">
<transf name="split_goal_right" proved="true" >
<goal name="VC wmpn_mul.30.0" expl="VC for wmpn_mul" proved="true">
<goal name="VC wmpn_mul_basecase.30.0" expl="VC for wmpn_mul_basecase" proved="true">
<proof prover="2"><result status="valid" time="0.10"/></proof>
</goal>
<goal name="VC wmpn_mul.30.1" expl="VC for wmpn_mul" proved="true">
<goal name="VC wmpn_mul_basecase.30.1" expl="VC for wmpn_mul_basecase" proved="true">
<proof prover="3" memlimit="2000"><result status="valid" time="0.01"/></proof>
</goal>
</transf>
</goal>
<goal name="VC wmpn_mul.31" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.31" expl="assertion" proved="true">
<proof prover="0"><result status="valid" time="0.39"/></proof>
</goal>
<goal name="VC wmpn_mul.32" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.32" expl="assertion" proved="true">
<proof prover="0"><result status="valid" time="0.14"/></proof>
</goal>
<goal name="VC wmpn_mul.33" expl="integer overflow" proved="true">
<goal name="VC wmpn_mul_basecase.33" expl="integer overflow" proved="true">
<proof prover="3"><result status="valid" time="0.05"/></proof>
</goal>
<goal name="VC wmpn_mul.34" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.34" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.14" steps="86"/></proof>
</goal>
<goal name="VC wmpn_mul.35" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.35" expl="precondition" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="0.22" steps="87"/></proof>
</goal>
<goal name="VC wmpn_mul.36" expl="integer overflow" proved="true">
<goal name="VC wmpn_mul_basecase.36" expl="integer overflow" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC wmpn_mul.37" expl="precondition" proved="true">
<goal name="VC wmpn_mul_basecase.37" expl="precondition" proved="true">
<proof prover="0"><result status="valid" time="0.11"/></proof>
</goal>
<goal name="VC wmpn_mul.38" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.38" expl="assertion" proved="true">
<transf name="introduce_premises" proved="true" >
<goal name="VC wmpn_mul.38.0" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.38.0" expl="assertion" proved="true">
<transf name="inline_goal" proved="true" >
<goal name="VC wmpn_mul.38.0.0" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.38.0.0" expl="assertion" proved="true">
<proof prover="0"><result status="valid" time="0.04"/></proof>
</goal>
</transf>
</goal>
</transf>
</goal>
<goal name="VC wmpn_mul.39" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.39" expl="assertion" proved="true">
<proof prover="5" timelimit="10" memlimit="2000"><result status="valid" time="3.14" steps="134"/></proof>
</goal>
<goal name="VC wmpn_mul.40" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.40" expl="assertion" proved="true">
<proof prover="5" memlimit="2000"><result status="valid" time="2.24" steps="92"/></proof>
</goal>
<goal name="VC wmpn_mul.41" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.41" expl="assertion" proved="true">
<transf name="introduce_premises" proved="true" >
<goal name="VC wmpn_mul.41.0" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.41.0" expl="assertion" proved="true">
<transf name="rewrite" proved="true" arg1="H4" arg2="in" arg3="H3">
<goal name="VC wmpn_mul.41.0.0" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0" expl="assertion" proved="true">
<transf name="rewrite" proved="true" arg1="H7" arg2="in" arg3="H6">
<goal name="VC wmpn_mul.41.0.0.0" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0" expl="assertion" proved="true">
<transf name="rewrite" proved="true" arg1="H54" arg2="in" arg3="H53">
<goal name="VC wmpn_mul.41.0.0.0.0" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0" expl="assertion" proved="true">
<transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP">
<goal name="VC wmpn_mul.41.0.0.0.0.0" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0" expl="assertion" proved="true">
<transf name="reflection_f" proved="true" arg1="mp_decision">
<goal name="VC wmpn_mul.41.0.0.0.0.0.0" expl="assertion" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0" expl="assertion" proved="true">
<transf name="apply" proved="true" arg1="HR">
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.0" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.0" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.1" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.1" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.2" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.2" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.3" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.3" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.4" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.4" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.5" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.5" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.6" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.6" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.7" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.7" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.8" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.8" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.9" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.9" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.10" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.10" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.11" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.11" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.12" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.12" proved="true">
<proof prover="3"><result status="valid" time="0.24"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.13" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.13" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.14" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.14" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.15" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.15" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.16" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.16" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.17" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.17" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.18" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.18" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.19" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.19" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.20" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.20" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.21" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.21" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.22" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.22" proved="true">
<proof prover="3"><result status="valid" time="0.17"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.23" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.23" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.24" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.24" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.25" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.25" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.26" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.26" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.27" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.27" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.28" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.28" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.29" proved="true">
<proof prover="3"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.30" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.29" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.31" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.30" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.32" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.31" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.33" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.32" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.34" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.33" proved="true">
<proof prover="3"><result status="valid" time="0.01"/></proof>
</goal>
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.34" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.35" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.35" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.36" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.36" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.37" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.37" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.38" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.38" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.39" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.39" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.40" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.40" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.41" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.41" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.42" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.42" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.43" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.43" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.44" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.44" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.45" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.45" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.46" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.46" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.47" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.47" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.48" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.48" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.49" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.49" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.50" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.50" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.51" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.51" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.52" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.52" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.53" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.53" proved="true">
<proof prover="3"><result status="valid" time="0.24"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.54" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.54" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.55" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.55" proved="true">
<proof prover="3"><result status="valid" time="0.04"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.56" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.56" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.57" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.57" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.58" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.58" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.59" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.59" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.60" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.60" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.61" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.61" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.62" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.62" proved="true">
<proof prover="3"><result status="valid" time="0.03"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.63" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.63" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.64" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.64" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.65" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.65" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.66" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.66" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.67" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.67" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.68" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.68" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.69" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.69" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.70" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.70" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.71" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.71" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.72" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.72" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.73" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.73" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.74" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.74" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.75" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.75" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.76" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.76" proved="true">
<proof prover="3"><result status="valid" time="0.02"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.77" proved="true">
<goal name="VC wmpn_mul_basecase.41.0.0.0.0.0.0.77" proved="true">
<proof prover="3"><result status="valid" time="0.26"/></proof>
</goal>
<goal name="VC wmpn_mul.41.0.0.0.0.0.0.78" proved="true">
<goal name="VC wmpn_mul