From e55e1d35222725807ca2ee8093fec68f92acd7ff Mon Sep 17 00:00:00 2001 From: Raphael Rieu-Helft <raphael.rieu-helft@lri.fr> Date: Tue, 5 Jun 2018 16:53:45 +0200 Subject: [PATCH] Add schoolbook GMP functions to examples and bench --- bench/bench | 3 +- examples/multiprecision/add.mlw | 548 + examples/multiprecision/add/why3session.xml | 1307 ++ examples/multiprecision/add/why3shapes.gz | Bin 0 -> 15032 bytes examples/multiprecision/compare.mlw | 87 + .../multiprecision/compare/why3session.xml | 147 + examples/multiprecision/compare/why3shapes.gz | Bin 0 -> 2057 bytes examples/multiprecision/div.mlw | 4433 +++++++ examples/multiprecision/div/why3session.xml | 10635 ++++++++++++++++ examples/multiprecision/div/why3shapes.gz | Bin 0 -> 118256 bytes examples/multiprecision/lemmas.mlw | 207 + .../multiprecision/lemmas/why3session.xml | 272 + examples/multiprecision/lemmas/why3shapes.gz | Bin 0 -> 3300 bytes examples/multiprecision/lineardecision.mlw | 2105 +++ .../lineardecision/why3session.xml | 4352 +++++++ .../lineardecision/why3shapes.gz | Bin 0 -> 55540 bytes examples/multiprecision/logical.mlw | 389 + .../multiprecision/logical/why3session.xml | 899 ++ examples/multiprecision/logical/why3shapes.gz | Bin 0 -> 10701 bytes examples/multiprecision/mul.mlw | 601 + examples/multiprecision/mul/why3session.xml | 1471 +++ examples/multiprecision/mul/why3shapes.gz | Bin 0 -> 15958 bytes examples/multiprecision/sub.mlw | 546 + examples/multiprecision/sub/why3session.xml | 1261 ++ examples/multiprecision/sub/why3shapes.gz | Bin 0 -> 14208 bytes examples/multiprecision/types.mlw | 14 + examples/multiprecision/types/why3session.xml | 7 + examples/multiprecision/types/why3shapes.gz | Bin 0 -> 20 bytes examples/multiprecision/util.mlw | 65 + examples/multiprecision/util/why3session.xml | 172 + examples/multiprecision/util/why3shapes.gz | Bin 0 -> 1708 bytes examples/multiprecision/wmpn.mlw | 13 + examples/multiprecision/wmpn/why3session.xml | 7 + examples/multiprecision/wmpn/why3shapes.gz | Bin 0 -> 20 bytes 34 files changed, 29540 insertions(+), 1 deletion(-) create mode 100644 examples/multiprecision/add.mlw create mode 100644 examples/multiprecision/add/why3session.xml create mode 100644 examples/multiprecision/add/why3shapes.gz create mode 100644 examples/multiprecision/compare.mlw create mode 100644 examples/multiprecision/compare/why3session.xml create mode 100644 examples/multiprecision/compare/why3shapes.gz create mode 100644 examples/multiprecision/div.mlw create mode 100644 examples/multiprecision/div/why3session.xml create mode 100644 examples/multiprecision/div/why3shapes.gz create mode 100644 examples/multiprecision/lemmas.mlw create mode 100644 examples/multiprecision/lemmas/why3session.xml create mode 100644 examples/multiprecision/lemmas/why3shapes.gz create mode 100644 examples/multiprecision/lineardecision.mlw create mode 100644 examples/multiprecision/lineardecision/why3session.xml create mode 100644 examples/multiprecision/lineardecision/why3shapes.gz create mode 100644 examples/multiprecision/logical.mlw create mode 100644 examples/multiprecision/logical/why3session.xml create mode 100644 examples/multiprecision/logical/why3shapes.gz create mode 100644 examples/multiprecision/mul.mlw create mode 100644 examples/multiprecision/mul/why3session.xml create mode 100644 examples/multiprecision/mul/why3shapes.gz create mode 100644 examples/multiprecision/sub.mlw create mode 100644 examples/multiprecision/sub/why3session.xml create mode 100644 examples/multiprecision/sub/why3shapes.gz create mode 100644 examples/multiprecision/types.mlw create mode 100644 examples/multiprecision/types/why3session.xml create mode 100644 examples/multiprecision/types/why3shapes.gz create mode 100644 examples/multiprecision/util.mlw create mode 100644 examples/multiprecision/util/why3session.xml create mode 100644 examples/multiprecision/util/why3shapes.gz create mode 100644 examples/multiprecision/wmpn.mlw create mode 100644 examples/multiprecision/wmpn/why3session.xml create mode 100644 examples/multiprecision/wmpn/why3shapes.gz diff --git a/bench/bench b/bench/bench index 8c3b007e7c..07e4a113ec 100755 --- a/bench/bench +++ b/bench/bench @@ -269,8 +269,8 @@ goods examples/avl "-L examples/avl" goods examples/verifythis_2016_matrix_multiplication "-L examples/verifythis_2016_matrix_multiplication" goods examples/double_wp "-L examples/double_wp" goods examples/ring_decision "-L examples/ring_decision" +goods examples/multiprecision "-L examples/multiprecision" goods examples/in_progress -goods examples/in_progress/multiprecision "-L examples/in_progress/multiprecision" echo "" echo "=== Checking replay (no prover) ===" @@ -290,6 +290,7 @@ replay examples/avl "-L examples/avl --merging-only" #replay examples/to_port/verifythis_2016_matrix_multiplication "-L examples/to_port/verifythis_2016_matrix_multiplication --merging-only" replay examples/double_wp "-L examples/double_wp --merging-only" replay examples/ring_decision "-L examples/ring_decision --merging-only" +replay examples/multiprecision "-L examples/multiprecision --merging-only" #replay examples/in_progress --merging-only #replay examples/in_progress/multiprecision "-L examples/in_progress/multiprecision --merging-only" echo "" diff --git a/examples/multiprecision/add.mlw b/examples/multiprecision/add.mlw new file mode 100644 index 0000000000..57f19fe3e2 --- /dev/null +++ b/examples/multiprecision/add.mlw @@ -0,0 +1,548 @@ +module Add + + use import int.Int + use import mach.int.Int32 + use import mach.int.UInt64GMP as Limb + use import int.Power + use import ref.Ref + use import mach.c.C + use import array.Array + use import map.Map + use import types.Types + use import lemmas.Lemmas + + (** [add_limb r x y sz] adds to [x] the value of the limb [y], + writes the result in [r] and returns the carry. [r] and [x] + have size [sz]. This corresponds to the function [mpn_add_1] *) + (* r and x must be separated. This is enforced by Why3 regions in typing *) + let add_limb (r x:t) (y:limb) (sz:int32) : limb + requires { valid x sz } + requires { valid r sz } + requires { sz > 0 } (* ? GMP does the same for 0 and 1*) + ensures { value r sz + (power radix sz) * result = + value x sz + y } + ensures { 0 <= result <= 1 } + ensures { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + writes { r.data.elts } + = + let limb_zero = Limb.of_int 0 in + let c = ref y in + let lx = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sz && (not (Limb.(=) !c limb_zero)) do + invariant { 0 <= !i <= sz } + invariant { !i > 0 -> 0 <= !c <= 1 } + invariant { value r !i + (power radix !i) * !c = + value x !i + y } + invariant { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + variant { sz - !i } + label StartLoop in + lx := get_ofs x !i; + let (res, carry) = add_with_carry !lx !c limb_zero in + set_ofs r !i res; + assert { value r !i + (power radix !i) * !c = + value x !i + y }; + c := carry; + value_tail r !i; + value_tail x !i; + assert { value r (!i+1) + (power radix (!i+1)) * !c + = value x (!i+1) + y + (* by + value r !i + (power radix !i) * !c + = value r k + (power radix k) * res + + (power radix !i) * !c + = value r k + (power radix k) * res + + (power radix k) * radix * !c + = value r k + (power radix k) * (res + radix * !c) + = value r k + + (power radix k) * (!lx + (!c at StartLoop)) + = value r k + (power radix k) * (!c at StartLoop) + + (power radix k) * !lx + = value x k + y + (power radix k) * !lx + = value x !i + y*) }; + i := Int32.(+) !i (Int32.of_int 1); + done; + if Int32.(=) !i sz then !c + else begin + while Int32.(<) !i sz do + invariant { !c = 0 } + invariant { 0 <= !i <= sz } + invariant { value r !i + (power radix !i) * !c = + value x !i + y } + invariant { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + variant { sz - !i } + lx := get_ofs x !i; + set_ofs r !i !lx; + assert { value r !i + (power radix !i) * !c = + value x !i + y }; + let ghost k = p2i !i in + i := Int32.(+) !i (Int32.of_int 1); + value_sub_tail (pelts r) r.offset (r.offset + k); + value_sub_tail (pelts x) x.offset (x.offset + k); + done; + !c + end + + + (** [add_limbs r x y sz] adds [x[0..sz-1]] and [y[0..sz-1]] and writes the result in [r]. + Returns the carry, either [0] or [1]. Corresponds to the function [mpn_add_n]. *) + + let add_limbs (r x y:t) (sz:int32) : limb + requires { valid x sz } + requires { valid y sz } + requires { valid r sz } + ensures { 0 <= result <= 1 } + ensures { value r sz + (power radix sz) * result = + value x sz + value y sz } + ensures { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + writes { r.data.elts } + = + let limb_zero = Limb.of_int 0 in + let lx = ref limb_zero in + let ly = ref limb_zero in + let c = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sz do + variant { sz - !i } + invariant { 0 <= !i <= sz } + invariant { value r !i + (power radix !i) * !c = + value x !i + value y !i } + invariant { 0 <= !c <= 1 } + invariant { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + label StartLoop in + lx := get_ofs x !i; + ly := get_ofs y !i; + let res, carry = add_with_carry !lx !ly !c in + set_ofs r !i res; + assert { value r !i + (power radix !i) * !c = + value x !i + value y !i + by value r !i = (value r !i at StartLoop) }; + c := carry; + value_tail r !i; + value_tail x !i; + value_tail y !i; + assert { value r (!i+1) + (power radix (!i+1)) * !c = + value x (!i+1) + value y (!i+1) + (*by + value r !i + (power radix !i) * !c + = value r k + (power radix k) * res + + (power radix !i) * !c + = value r k + (power radix k) * res + + (power radix k) * radix * !c + = value r k + (power radix k) * (res + radix * !c) + = value r k + + (power radix k) * (!lx + !ly + (!c at StartLoop)) + = value r k + (power radix k) * (!c at StartLoop) + + (power radix k) * (!lx + !ly) + = value x k + value y k + + (power radix k) * (!lx + !ly) + = value x k + (power radix k) * !lx + + value y k + (power radix k) * !ly + = value x !i + + value y k + (power radix k) * !ly + = value x !i + + (value y k + (power radix k) * !ly) + = value x !i + value y !i*) }; + i := Int32.(+) !i (Int32.of_int 1); + done; + !c + + (** [add r x y sx sy] adds [(x, sx)] to [(y,sy)] and writes the + result in [(r, sx)]. [sx] must be greater than or equal to + [sy]. Returns carry, either 0 or 1. Corresponds to [mpn_add]. *) + let add (r x y:t) (sx sy:int32) : limb + requires { 0 <= sy <= sx } + requires { valid x sx } + requires { valid y sy } + requires { valid r sx } + ensures { value r sx + (power radix sx) * result = + value x sx + value y sy } + ensures { forall j. (j < offset r \/ offset r + sx <= j) + -> (pelts r)[j] = old (pelts r)[j] } + ensures { 0 <= result <= 1 } + writes { r.data.elts } + = + let limb_zero = Limb.of_int 0 in + let lx = ref limb_zero in + let ly = ref limb_zero in + let c = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sy do + variant { sy - !i } + invariant { 0 <= !i <= sy } + invariant { value r !i + (power radix !i) * !c = + value x !i + value y !i } + invariant { 0 <= !c <= 1 } + invariant { forall j. (j < offset r \/ offset r + sx <= j) + -> (pelts r)[j] = old (pelts r)[j] } + label StartLoop in + lx := get_ofs x !i; + ly := get_ofs y !i; + let res, carry = add_with_carry !lx !ly !c in + set_ofs r !i res; + assert { value r !i + (power radix !i) * !c = + value x !i + value y !i }; + c := carry; + value_tail r !i; + value_tail x !i; + value_tail y !i; + assert { value r (!i+1) + (power radix (!i+1)) * !c = + value x (!i+1) + value y (!i+1) + (*by + value r !i + (power radix !i) * !c + = value r k + (power radix k) * res + + (power radix !i) * !c + = value r k + (power radix k) * res + + (power radix k) * radix * !c + = value r k + (power radix k) * (res + radix * !c) + = value r k + + (power radix k) * (!lx + !ly + (!c at StartLoop)) + = value r k + (power radix k) * (!c at StartLoop) + + (power radix k) * (!lx + !ly) + = value x k + value y k + + (power radix k) * (!lx + !ly) + = value x k + (power radix k) * !lx + + value y k + (power radix k) * !ly + = value x !i + + value y k + (power radix k) * !ly + = value x !i + + (value y k + (power radix k) * !ly) + = value x !i + value y !i*) }; + i := Int32.(+) !i (Int32.of_int 1); + done; + try + begin while Int32.(<) !i sx do + variant { sx - !i } + invariant { sy <= !i <= sx } + invariant { value r !i + (power radix !i) * !c = + value x !i + value y sy } + invariant { 0 <= !c <= 1 } + invariant { forall j. (j < offset r \/ offset r + sx <= j) + -> (pelts r)[j] = old (pelts r)[j] } + (if (Limb.(=) !c (Limb.of_int 0)) then raise Break); + label StartLoop2 in + lx := get_ofs x !i; + let res, carry = add_with_carry !lx limb_zero !c in + set_ofs r !i res; + assert { value r !i + (power radix !i) * !c = + value x !i + value y sy }; + c := carry; + value_tail r !i; + value_tail x !i; + assert { value r (!i+1) + (power radix (!i+1)) * !c = + value x (!i+1) + value y sy + (*by + value r !i + (power radix !i) * !c + = value r k + (power radix k) * res + + (power radix !i) * !c + = value r k + (power radix k) * res + + (power radix k) * radix * !c + = value r k + (power radix k) * (res + radix * !c) + = value r k + + (power radix k) * (!lx + 0 + (!c at StartLoop2)) + = value r k + (power radix k) * (!c at StartLoop2) + + (power radix k) * !lx + = value x k + value y sy + + (power radix k) * !lx + = value x !i + + value y sy*) }; + i := Int32.(+) !i (Int32.of_int 1); + done; + assert { !i = sx } + end + with Break -> assert { !c = 0 } + end; + while Int32.(<) !i sx do + variant { sx - !i } + invariant { sy <= !i <= sx } + invariant { !i = sx \/ !c = 0 } + invariant { value r !i + power radix !i * !c = + value x !i + value y sy } + invariant { forall j. (j < offset r \/ offset r + sx <= j) + -> (pelts r)[j] = old (pelts r)[j] } + assert { !c = 0 by !i < sx }; + lx := get_ofs x !i; + set_ofs r !i !lx; + value_tail r !i; + value_tail x !i; + assert { value r !i = value x !i + value y sy }; (* true with this, should not be needed *) + assert { value r (!i+1) + power radix (!i+1) * !c + = value x (!i+1) + value y sy + (* + by + value r !i + power radix !i * !c + = value r !i + = value r k + power radix k * !lx + so value x !i + = value x k + power radix k * !lx + so value r k + = value r k + power radix k * !c + = value x k + value y sy*) }; + i := Int32.(+) !i (Int32.of_int 1); + done; + !c + + let add_in_place (x y:t) (sx sy:int32) : limb + requires { 0 <= sy <= sx } + requires { valid x sx } + requires { valid y sy } + ensures { value x sx + (power radix sx) * result + = value (old x) sx + value y sy } + ensures { 0 <= result <= 1 } + ensures { forall j. j < x.offset \/ x.offset + sx <= j -> + (pelts x)[j] = (pelts (old x))[j] } + writes { x.data.elts } + = + let ghost ox = { x } in + let limb_zero = Limb.of_int 0 in + let lx = ref limb_zero in + let ly = ref limb_zero in + let c = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sy do + variant { sy - !i } + invariant { 0 <= !i <= sy } + invariant { value x !i + (power radix !i) * !c = + value ox !i + value y !i } + invariant { 0 <= !c <= 1 } + invariant { forall j. !i <= j < sx -> + (pelts x)[x.offset + j] = (pelts ox)[x.offset + j] } + invariant { forall j. j < x.offset \/ x.offset + sx <= j -> + (pelts x)[j] = (pelts (old x))[j] } + label StartLoop in + lx := get_ofs x !i; + assert { !lx = (pelts ox)[ox.offset + !i] }; + ly := get_ofs y !i; + let res, carry = add_with_carry !lx !ly !c in + set_ofs x !i res; + assert { forall j. !i < j < sx -> + (pelts x)[x.offset + j] + = (pelts ox)[x.offset + j] + by (pelts x)[x.offset + j] + = (pelts (x at StartLoop))[x.offset + j] + = (pelts ox)[x.offset + j]}; + assert { value x !i + (power radix !i) * !c = value ox !i + value y !i }; + c := carry; + value_tail x !i; + value_tail ox !i; + value_tail y !i; + assert { value x (!i+1) + (power radix (!i+1)) * !c = + value ox (!i+1) + value y (!i+1) + (*by value ox k + (power radix k) * !lx + = value ox !i + so value x !i + (power radix !i) * !c + = value x k + (power radix k) * res + + (power radix !i) * !c + = value x k + (power radix k) * res + + (power radix k) * radix * !c + = value x k + (power radix k) * (res + radix * !c) + = value x k + + (power radix k) * (!lx + !ly + (!c at StartLoop)) + = value x k + (power radix k) * (!c at StartLoop) + + (power radix k) * (!lx + !ly) + = value ox k + value y k + + (power radix k) * (!lx + !ly) + = (value ox k + (power radix k) * !lx) + + (value y k + (power radix k) * !ly) + = value ox !i + + (value y k + (power radix k) * !ly) + = value ox !i + + (value y k + (power radix k) * !ly) + = value ox !i + value y !i*) }; + i := Int32.(+) !i (Int32.of_int 1); + done; + try + while Int32.(<) !i sx do + variant { sx - !i } + invariant { sy <= !i <= sx } + invariant { value x !i + (power radix !i) * !c = + value ox !i + value y sy } + invariant { 0 <= !c <= 1 } + invariant { forall j. !i <= j < sx -> + (pelts x)[x.offset + j] = (pelts ox) [x.offset + j] } + invariant { forall j. j < x.offset \/ x.offset + sx <= j -> + (pelts x)[j] = (pelts (old x))[j] } + (if (Limb.(=) !c limb_zero) then raise ReturnLimb limb_zero); + label StartLoop2 in + lx := get_ofs x !i; + assert { !lx = (pelts ox)[ox.offset + !i] }; + let res, carry = add_with_carry !lx limb_zero !c in + value_sub_update_no_change (pelts x) (x.offset + p2i !i) + (x.offset + p2i !i + 1) + (x.offset + p2i sx) res; + set_ofs x !i res; + assert { value x !i + (power radix !i) * !c = value ox !i + value y sy }; + c := carry; + assert { forall j. !i < j < sx -> + (pelts x)[x.offset + j] = (pelts ox) [x.offset + j] }; + value_tail ox !i; + value_tail x !i; + assert { value x (!i+1) + (power radix (!i+1)) * !c = + value ox (!i+1) + value y sy + (*by value ox k + (power radix k) * !lx + = value ox !i + so + value x !i + (power radix !i) * !c + = value x k + (power radix k) * res + + (power radix !i) * !c + = value x k + (power radix k) * res + + (power radix k) * radix * !c + = value x k + (power radix k) * (res + radix * !c) + = value x k + + (power radix k) * (!lx + 0 + (!c at StartLoop2)) + = value x k + (power radix k) * (!c at StartLoop2) + + (power radix k) * !lx + = value ox k + value y sy + + (power radix k) * !lx + = value ox !i + + value y sy*) }; + i := Int32.(+) !i (Int32.of_int 1); + done; + assert { !i = sx }; + !c + with ReturnLimb n -> begin + assert { n = 0 = !c }; + assert { forall j. x.offset + !i <= j < x.offset + sx + -> (pelts x)[j] = (pelts ox)[j] + by !i <= j - x.offset < sx + so (pelts x)[x.offset + (j - x.offset)] + = (pelts ox)[x.offset + (j - x.offset)] }; + value_sub_frame (pelts x) (pelts ox) (x.offset + p2i !i) (x.offset + p2i sx); + value_sub_concat (pelts x) x.offset (x.offset + p2i !i) (x.offset + p2i sx); + value_sub_concat (pelts ox) x.offset (x.offset + p2i !i) (x.offset + p2i sx); + assert { value x sx = value (old x) sx + value y sy }; + n + end + end + + use import int.EuclideanDivision + + (** [incr x y sz] adds to [x] the value of the limb [y] in place. + [x] has size [sz]. The addition must not overflow. This corresponds + to [mpn_incr] *) + let incr (x:t) (y:limb) (ghost sz:int32) : unit + requires { valid x sz } + requires { sz > 0 } + requires { value x sz + y < power radix sz } + ensures { value x sz = value (old x) sz + y } + ensures { forall j. j < x.offset \/ x.offset + sz <= j -> + (pelts x)[j] = (pelts (old x))[j] } + writes { x.data.elts } + = + let ghost ox = { x } in + let c = ref y in + let lx : ref limb = ref 0 in + let i : ref int32 = ref 0 in + while not (Limb.(=) !c 0) do + invariant { 0 <= !i <= sz } + invariant { !i = sz -> !c = 0 } + invariant { !i > 0 -> 0 <= !c <= 1 } + invariant { value x !i + (power radix !i) * !c + = value ox !i + y } + invariant { forall j. !i <= j < sz -> + (pelts x)[x.offset + j] = (pelts ox)[x.offset + j] } + invariant { forall j. j < x.offset \/ x.offset + sz <= j -> + (pelts x)[j] = (pelts ox)[j] } + variant { sz - !i } + label StartLoop in + lx := get_ofs x !i; + assert { !lx = (pelts ox)[ox.offset + !i] }; + let (res, carry) = add_with_carry !lx !c 0 in (*TODO*) + assert { res + radix * carry = !lx + !c }; (* TODO remove this *) + value_sub_update_no_change (pelts x) (x.offset + p2i !i) + (x.offset + p2i !i + 1) + (x.offset + p2i sz) res; + set_ofs x !i res; + assert { forall j. !i < j < sz -> + (pelts x)[x.offset + j] + = (pelts ox)[x.offset + j] }; + assert { value x !i + (power radix !i) * !c = value ox !i + y }; + c := carry; + value_tail x !i; + value_tail ox !i; + assert { value x (!i+1) + power radix (!i+1) * !c = + value ox (!i+1) + y }; + i := Int32.(+) !i 1; + assert { !i = sz -> !c = 0 + by value x sz + power radix sz * !c = value ox sz + y + so value ox sz + y < power radix sz + so 0 <= !c <= 1}; + done; + value_concat x !i sz; + value_concat ox !i sz; + assert { forall j. x.offset + !i <= j < x.offset + sz -> + (pelts x)[j] = (pelts ox)[j] + by let k = j - x.offset in + !i <= k < sz + so (pelts x)[x.offset + k] = (pelts ox)[x.offset + k]}; + value_sub_frame (pelts x) (pelts ox) (x.offset + p2i !i) (x.offset + p2i sz) + + (** [incr_1 x sz] adds 1 to [x] in place. + [x] has size [sz]. The addition must not overflow. + This corresponds to [mpn_incr] *) + let incr_1 (x:t) (ghost sz:int32) : unit + requires { valid x sz } + requires { sz > 0 } + requires { value x sz + 1 < power radix sz } + ensures { value x sz = value (old x) sz + 1 } + ensures { forall j. j < x.offset \/ x.offset + sz <= j -> + (pelts x)[j] = (pelts (old x))[j] } + writes { x.data.elts } + = + let ghost ox = { x } in + let r : ref limb = ref 0 in + let ghost c : ref limb = ref 1 in + let lx : ref limb = ref 0 in + let i : ref int32 = ref 0 in + while (Limb.(=) !r 0) do + invariant { 0 <= !i <= sz } + invariant { !i = sz -> !r <> 0 } + invariant { !r <> 0 <-> !c = 0 } + invariant { 0 <= !c <= 1 } + invariant { value x !i + (power radix !i) * !c + = value ox !i + 1 } + invariant { forall j. !i <= j < sz -> + (pelts x)[x.offset + j] = (pelts ox)[x.offset + j] } + invariant { forall j. j < x.offset \/ x.offset + sz <= j -> + (pelts x)[j] = (pelts ox)[j] } + variant { sz - !i } + label StartLoop in + lx := get_ofs x !i; + assert { !lx = (pelts ox)[ox.offset + !i] }; + let res = add_mod !lx 1 in + r := res; + ghost (if Limb.(=) res 0 then c := 1 else c := 0); + assert { res + radix * !c = !lx + 1 }; + value_sub_update_no_change (pelts x) (x.offset + p2i !i) + (x.offset + p2i !i + 1) + (x.offset + p2i sz) res; + set_ofs x !i res; + assert { forall j. !i < j < sz -> + (pelts x)[x.offset + j] + = (pelts ox)[x.offset + j] }; + assert { value x !i + (power radix !i) * (!c at StartLoop) = value ox !i + 1 }; + value_tail x !i; + value_tail ox !i; + assert { value x (!i+1) + power radix (!i+1) * !c = + value ox (!i+1) + 1 }; + i := Int32.(+) !i 1; + assert { !i = sz -> !c = 0 + by value x sz + power radix sz * !c = value ox sz + 1 + so value ox sz + 1 < power radix sz + so 0 <= !c <= 1}; + done; + value_concat x !i sz; + value_concat ox !i sz; + assert { forall j. x.offset + !i <= j < x.offset + sz -> + (pelts x)[j] = (pelts ox)[j] + by let k = j - x.offset in + !i <= k < sz + so (pelts x)[x.offset + k] = (pelts ox)[x.offset + k]}; + value_sub_frame (pelts x) (pelts ox) (x.offset + p2i !i) (x.offset + p2i sz) + +end \ No newline at end of file diff --git a/examples/multiprecision/add/why3session.xml b/examples/multiprecision/add/why3session.xml new file mode 100644 index 0000000000..bd1f243383 --- /dev/null +++ b/examples/multiprecision/add/why3session.xml @@ -0,0 +1,1307 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<prover id="0" name="Eprover" version="1.9.1-001" timelimit="5" steplimit="0" memlimit="2000"/> +<prover id="1" name="CVC3" version="2.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="2" name="CVC4" version="1.4" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="3" name="Z3" version="4.5.0" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="4" name="Z3" version="4.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="5" name="Alt-Ergo" version="2.0.0" timelimit="5" steplimit="0" memlimit="1000"/> +<file name="../add.mlw" proved="true"> +<theory name="Add" proved="true"> + <goal name="VC add_limb" expl="VC for add_limb" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_limb.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.04" steps="20"/></proof> + </goal> + <goal name="VC add_limb.1" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.03" steps="21"/></proof> + </goal> + <goal name="VC add_limb.2" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.04" steps="11"/></proof> + </goal> + <goal name="VC add_limb.3" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.01" steps="13"/></proof> + </goal> + <goal name="VC add_limb.4" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="70"/></proof> + </goal> + <goal name="VC add_limb.5" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_limb.6" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="1.22"/></proof> + <proof prover="5"><result status="valid" time="0.06" steps="49"/></proof> + </goal> + <goal name="VC add_limb.7" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="21"/></proof> + </goal> + <goal name="VC add_limb.8" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_limb.8.0" expl="VC for add_limb" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add_limb.8.0.0" expl="VC for add_limb" proved="true"> + <proof prover="0"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_limb.8.1" expl="VC for add_limb" proved="true"> + <proof prover="1" memlimit="2000"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_limb.9" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.51"/></proof> + </goal> + <goal name="VC add_limb.10" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_limb.11" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_limb.12" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC add_limb.12.0" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add_limb.12.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC add_limb.12.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC add_limb.12.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC add_limb.12.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.34"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add_limb.13" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_limb.14" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_limb.15" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_limb.16" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_limb.17" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_limb.18" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_limb.19" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC add_limb.20" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_limb.20.0" expl="postcondition" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC add_limb.20.0.0" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="17"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_limb.20.1" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="25"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_limb.21" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5"><result status="valid" time="0.04" steps="25"/></proof> + </goal> + <goal name="VC add_limb.22" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_limb.23" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.04" steps="45"/></proof> + </goal> + <goal name="VC add_limb.24" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + <proof prover="5"><result status="valid" time="0.08" steps="23"/></proof> + </goal> + <goal name="VC add_limb.25" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.06" steps="23"/></proof> + </goal> + <goal name="VC add_limb.26" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_limb.27" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="42"/></proof> + </goal> + <goal name="VC add_limb.28" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="43"/></proof> + </goal> + <goal name="VC add_limb.29" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="123"/></proof> + </goal> + <goal name="VC add_limb.30" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="52"/></proof> + </goal> + <goal name="VC add_limb.31" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="54"/></proof> + </goal> + <goal name="VC add_limb.32" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.05" steps="44"/></proof> + </goal> + <goal name="VC add_limb.33" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_limb.34" expl="loop variant decrease" proved="true"> + <proof prover="1"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC add_limb.35" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5"><result status="valid" time="0.02" steps="46"/></proof> + </goal> + <goal name="VC add_limb.36" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5"><result status="valid" time="0.05" steps="46"/></proof> + </goal> + <goal name="VC add_limb.37" expl="loop invariant preservation" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="87"/></proof> + </goal> + <goal name="VC add_limb.38" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="79"/></proof> + </goal> + <goal name="VC add_limb.39" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="32"/></proof> + </goal> + <goal name="VC add_limb.40" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="33"/></proof> + </goal> + <goal name="VC add_limb.41" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_limbs" expl="VC for add_limbs" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_limbs.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5"><result status="valid" time="0.05" steps="24"/></proof> + </goal> + <goal name="VC add_limbs.1" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="25"/></proof> + </goal> + <goal name="VC add_limbs.2" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_limbs.2.0" expl="VC for add_limbs" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="11"/></proof> + </goal> + <goal name="VC add_limbs.2.1" expl="VC for add_limbs" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_limbs.3" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="77"/></proof> + </goal> + <goal name="VC add_limbs.4" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.10" steps="14"/></proof> + </goal> + <goal name="VC add_limbs.5" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_limbs.6" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5"><result status="valid" time="0.04" steps="36"/></proof> + </goal> + <goal name="VC add_limbs.7" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.07" steps="37"/></proof> + </goal> + <goal name="VC add_limbs.8" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.08" steps="24"/></proof> + </goal> + <goal name="VC add_limbs.9" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="41"/></proof> + </goal> + <goal name="VC add_limbs.10" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.81"/></proof> + </goal> + <goal name="VC add_limbs.11" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + <proof prover="5"><result status="valid" time="0.10" steps="36"/></proof> + </goal> + <goal name="VC add_limbs.12" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5"><result status="valid" time="0.12" steps="37"/></proof> + </goal> + <goal name="VC add_limbs.13" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + <proof prover="5"><result status="valid" time="0.02" steps="38"/></proof> + </goal> + <goal name="VC add_limbs.14" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add_limbs.14.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC add_limbs.14.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC add_limbs.14.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.39"/></proof> + </goal> + <goal name="VC add_limbs.14.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC add_limbs.14.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.20"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add_limbs.15" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_limbs.16" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_limbs.16.0" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_limbs.17" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_limbs.18" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_limbs.19" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_limbs.20" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_limbs.21" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC add_limbs.22" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.04" steps="22"/></proof> + </goal> + <goal name="VC add_limbs.23" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="22"/></proof> + </goal> + <goal name="VC add_limbs.24" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add" expl="VC for add" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.1" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="28"/></proof> + </goal> + <goal name="VC add.2" expl="loop invariant init" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.3" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="84"/></proof> + </goal> + <goal name="VC add.4" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC add.5" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add.6" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="39"/></proof> + </goal> + <goal name="VC add.7" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.8" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.9" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add.9.0" expl="VC for add" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add.9.1" expl="VC for add" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="30"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add.10" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.93"/></proof> + </goal> + <goal name="VC add.11" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add.12" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.13" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.14" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add.14.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC add.14.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC add.14.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.39"/></proof> + </goal> + <goal name="VC add.14.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC add.14.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.19"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add.15" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add.16" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.17" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.18" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.19" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.20" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add.21" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC add.22" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="24"/></proof> + </goal> + <goal name="VC add.23" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="26"/></proof> + </goal> + <goal name="VC add.24" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="27"/></proof> + </goal> + <goal name="VC add.25" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add.26" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="51"/></proof> + </goal> + <goal name="VC add.27" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.28" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.29" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.30" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.31" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.32" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add.32.0" expl="VC for add" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.11" steps="48"/></proof> + </goal> + <goal name="VC add.32.1" expl="VC for add" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.08" steps="48"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add.33" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="63"/></proof> + </goal> + <goal name="VC add.34" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="64"/></proof> + </goal> + <goal name="VC add.35" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.36" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.37" expl="assertion" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="1.05"/></proof> + </goal> + <goal name="VC add.38" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add.38.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC add.38.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC add.38.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC add.38.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC add.38.0.0.2" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.32" steps="188"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add.39" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="76"/></proof> + </goal> + <goal name="VC add.40" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="78"/></proof> + </goal> + <goal name="VC add.41" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.42" expl="loop invariant preservation" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="63"/></proof> + </goal> + <goal name="VC add.43" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="65"/></proof> + </goal> + <goal name="VC add.44" expl="loop invariant preservation" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="65"/></proof> + </goal> + <goal name="VC add.45" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.10" steps="106"/></proof> + </goal> + <goal name="VC add.46" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="48"/></proof> + </goal> + <goal name="VC add.47" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.48" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add.49" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.50" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="39"/></proof> + </goal> + <goal name="VC add.51" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add.51.0" expl="VC for add" proved="true"> + <proof prover="0"><result status="valid" time="5.70"/></proof> + </goal> + <goal name="VC add.51.1" expl="VC for add" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add.52" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.21" steps="156"/></proof> + </goal> + <goal name="VC add.53" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.54" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.55" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add.55.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC add.55.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC add.55.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC add.55.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC add.55.0.0.2" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add.56" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC add.57" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.67" steps="72"/></proof> + </goal> + <goal name="VC add.58" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.59" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC add.60" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.61" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.62" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC add.63" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.64" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC add.65" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="36"/></proof> + </goal> + <goal name="VC add.66" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="36"/></proof> + </goal> + <goal name="VC add.67" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add.68" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add.68.0" expl="VC for add" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="45"/></proof> + </goal> + <goal name="VC add.68.1" expl="VC for add" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.10" steps="46"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add.69" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="61"/></proof> + </goal> + <goal name="VC add.70" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="62"/></proof> + </goal> + <goal name="VC add.71" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.72" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.73" expl="assertion" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="1.10"/></proof> + </goal> + <goal name="VC add.74" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add.74.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC add.74.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC add.74.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC add.74.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC add.74.0.0.2" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.23" steps="186"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add.75" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="74"/></proof> + </goal> + <goal name="VC add.76" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.77" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.78" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add.79" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add.79.0" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="63"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add.80" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.81" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.12" steps="104"/></proof> + </goal> + <goal name="VC add.82" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="45"/></proof> + </goal> + <goal name="VC add.83" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add.84" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_in_place" expl="VC for add_in_place" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_in_place.0" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="22"/></proof> + </goal> + <goal name="VC add_in_place.1" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="23"/></proof> + </goal> + <goal name="VC add_in_place.2" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="12"/></proof> + </goal> + <goal name="VC add_in_place.3" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="70"/></proof> + </goal> + <goal name="VC add_in_place.4" expl="loop invariant init" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC add_in_place.5" expl="loop invariant init" proved="true"> + <proof prover="0"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_in_place.6" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="6"/></proof> + </goal> + <goal name="VC add_in_place.7" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="34"/></proof> + </goal> + <goal name="VC add_in_place.8" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="50"/></proof> + </goal> + <goal name="VC add_in_place.9" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="36"/></proof> + </goal> + <goal name="VC add_in_place.10" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="26"/></proof> + </goal> + <goal name="VC add_in_place.11" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_in_place.11.0" expl="VC for add_in_place" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="30"/></proof> + </goal> + <goal name="VC add_in_place.11.1" expl="VC for add_in_place" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_in_place.12" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="62"/></proof> + </goal> + <goal name="VC add_in_place.13" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="1.08"/></proof> + </goal> + <goal name="VC add_in_place.14" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.08" steps="38"/></proof> + </goal> + <goal name="VC add_in_place.15" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_in_place.16" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_in_place.17" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add_in_place.17.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC add_in_place.17.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC add_in_place.17.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC add_in_place.17.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC add_in_place.17.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.22"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add_in_place.18" expl="integer overflow" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC add_in_place.19" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_in_place.20" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_in_place.21" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_in_place.22" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_in_place.23" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_in_place.24" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.39"/></proof> + </goal> + <goal name="VC add_in_place.25" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_in_place.25.0" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_in_place.26" expl="loop invariant init" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC add_in_place.27" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="25"/></proof> + </goal> + <goal name="VC add_in_place.28" expl="loop invariant init" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC add_in_place.29" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="53"/></proof> + </goal> + <goal name="VC add_in_place.30" expl="loop invariant init" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add_in_place.30.0" expl="loop invariant init" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC add_in_place.30.0.0" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="51"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add_in_place.31" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="36"/></proof> + </goal> + <goal name="VC add_in_place.32" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_in_place.32.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_in_place.32.1" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_in_place.32.2" expl="VC for add_in_place" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="66"/></proof> + </goal> + <goal name="VC add_in_place.32.3" expl="VC for add_in_place" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_in_place.33" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="78"/></proof> + </goal> + <goal name="VC add_in_place.34" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_in_place.35" expl="precondition" proved="true"> + <proof prover="5" timelimit="50" memlimit="2000"><result status="valid" time="0.04" steps="39"/></proof> + </goal> + <goal name="VC add_in_place.36" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="69"/></proof> + </goal> + <goal name="VC add_in_place.37" expl="postcondition" proved="true"> + <proof prover="5" timelimit="50" memlimit="2000"><result status="valid" time="0.03" steps="41"/></proof> + </goal> + <goal name="VC add_in_place.38" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="42"/></proof> + </goal> + <goal name="VC add_in_place.39" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_in_place.39.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_in_place.40" expl="precondition" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC add_in_place.41" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="63"/></proof> + </goal> + <goal name="VC add_in_place.42" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="38"/></proof> + </goal> + <goal name="VC add_in_place.43" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="41"/></proof> + </goal> + <goal name="VC add_in_place.44" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="42"/></proof> + </goal> + <goal name="VC add_in_place.45" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="53"/></proof> + </goal> + <goal name="VC add_in_place.46" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_in_place.46.0" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.25" steps="149"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_in_place.47" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_in_place.47.0" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="81"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_in_place.48" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC add_in_place.49" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="52"/></proof> + </goal> + <goal name="VC add_in_place.50" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add_in_place.50.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC add_in_place.50.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC add_in_place.50.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC add_in_place.50.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC add_in_place.50.0.0.2" proved="true"> + <proof prover="2"><result status="valid" time="0.31"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add_in_place.51" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.13" steps="66"/></proof> + </goal> + <goal name="VC add_in_place.52" expl="integer overflow" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC add_in_place.53" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC add_in_place.54" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC add_in_place.55" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.26" steps="59"/></proof> + </goal> + <goal name="VC add_in_place.56" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC add_in_place.57" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.43"/></proof> + </goal> + <goal name="VC add_in_place.58" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC add_in_place.59" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="99"/></proof> + </goal> + <goal name="VC add_in_place.60" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="35"/></proof> + </goal> + <goal name="VC add_in_place.61" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="36"/></proof> + </goal> + <goal name="VC add_in_place.62" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="61"/></proof> + </goal> + </transf> + </goal> + <goal name="VC incr" expl="VC for incr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC incr.0" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC incr.1" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC incr.2" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr.3" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="26"/></proof> + </goal> + <goal name="VC incr.4" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.5" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr.6" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="98"/></proof> + </goal> + <goal name="VC incr.7" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="38"/></proof> + </goal> + <goal name="VC incr.8" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr.9" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC incr.10" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC incr.11" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr.12" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.05" steps="129"/></proof> + </goal> + <goal name="VC incr.13" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="51"/></proof> + </goal> + <goal name="VC incr.14" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="1.06"/></proof> + </goal> + <goal name="VC incr.15" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr.16" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.17" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC incr.17.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC incr.17.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC incr.17.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.35"/></proof> + </goal> + <goal name="VC incr.17.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC incr.17.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.24"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC incr.18" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC incr.19" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC incr.19.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC incr.19.1" expl="VC for incr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.19.2" expl="VC for incr" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC incr.19.3" expl="VC for incr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC incr.19.4" expl="VC for incr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC incr.20" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.21" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC incr.22" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.23" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr.24" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.25" expl="loop invariant preservation" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC incr.25.0" expl="loop invariant preservation" proved="true"> + <transf name="apply" proved="true" arg1="H14"> + <goal name="VC incr.25.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC incr.26" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC incr.27" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.28" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.29" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC incr.29.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.29.1" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr.29.2" expl="VC for incr" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="39"/></proof> + </goal> + <goal name="VC incr.29.3" expl="VC for incr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC incr.30" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC incr.30.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC incr.30.0.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC incr.31" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="23"/></proof> + </goal> + <goal name="VC incr.32" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC incr_1" expl="VC for incr_1" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC incr_1.0" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC incr_1.1" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.2" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.3" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.4" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC incr_1.5" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.09" steps="20"/></proof> + </goal> + <goal name="VC incr_1.6" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="18"/></proof> + </goal> + <goal name="VC incr_1.7" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="90"/></proof> + </goal> + <goal name="VC incr_1.8" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="40"/></proof> + </goal> + <goal name="VC incr_1.9" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="52"/></proof> + </goal> + <goal name="VC incr_1.10" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.11" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr_1.12" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="131"/></proof> + </goal> + <goal name="VC incr_1.13" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="55"/></proof> + </goal> + <goal name="VC incr_1.14" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.09" steps="117"/></proof> + </goal> + <goal name="VC incr_1.15" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.16" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr_1.17" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="55"/></proof> + </goal> + <goal name="VC incr_1.18" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC incr_1.19" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC incr_1.19.0" expl="VC for incr_1" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="47"/></proof> + </goal> + <goal name="VC incr_1.19.1" expl="VC for incr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr_1.19.2" expl="VC for incr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC incr_1.19.3" expl="VC for incr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.19.4" expl="VC for incr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + <goal name="VC incr_1.20" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC incr_1.21" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.07" steps="123"/></proof> + </goal> + <goal name="VC incr_1.22" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.23" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC incr_1.24" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.25" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="51"/></proof> + </goal> + <goal name="VC incr_1.26" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="67"/></proof> + </goal> + <goal name="VC incr_1.27" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.07" steps="70"/></proof> + </goal> + <goal name="VC incr_1.28" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="53"/></proof> + </goal> + <goal name="VC incr_1.29" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC incr_1.30" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr_1.31" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.05" steps="132"/></proof> + </goal> + <goal name="VC incr_1.32" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="56"/></proof> + </goal> + <goal name="VC incr_1.33" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.11" steps="115"/></proof> + </goal> + <goal name="VC incr_1.34" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr_1.35" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr_1.36" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="43"/></proof> + </goal> + <goal name="VC incr_1.37" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC incr_1.38" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC incr_1.39" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC incr_1.40" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="123"/></proof> + </goal> + <goal name="VC incr_1.41" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.42" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.43" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.44" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.05" steps="51"/></proof> + </goal> + <goal name="VC incr_1.45" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="67"/></proof> + </goal> + <goal name="VC incr_1.46" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="70"/></proof> + </goal> + <goal name="VC incr_1.47" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.48" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC incr_1.49" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC incr_1.49.0" expl="VC for incr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC incr_1.49.1" expl="VC for incr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC incr_1.49.2" expl="VC for incr_1" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="44"/></proof> + </goal> + <goal name="VC incr_1.49.3" expl="VC for incr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC incr_1.50" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC incr_1.51" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="26"/></proof> + </goal> + <goal name="VC incr_1.52" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="40"/></proof> + </goal> + </transf> + </goal> +</theory> +</file> +</why3session> diff --git a/examples/multiprecision/add/why3shapes.gz b/examples/multiprecision/add/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..62d04273f3f86547bb4dc5f9a51c1c695bcbd336 GIT binary patch literal 15032 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 E04dMBb^rhX literal 0 HcmV?d00001 diff --git a/examples/multiprecision/compare.mlw b/examples/multiprecision/compare.mlw new file mode 100644 index 0000000000..acbda8e76b --- /dev/null +++ b/examples/multiprecision/compare.mlw @@ -0,0 +1,87 @@ +module Compare + + use import int.Int + use import mach.int.Int32 + use import mach.int.UInt64GMP as Limb + use import int.Power + use import ref.Ref + use import mach.c.C + use import map.Map + use import types.Types + use import lemmas.Lemmas + + function compare_int (x y:int) : int = + if x < y then -1 else if x=y then 0 else 1 + + (** [compare_same_size] compares [x[0..sz-1]] and [y[0..sz-1]] as unsigned integers. It corresponds to [GMPN_CMP]. *) + let compare_same_size (x y:t) (sz:int32) : int32 + requires { valid x sz } + requires { valid y sz } + ensures { result = compare_int (value x sz) (value y sz) } + = + let i = ref sz in + try + while Int32.(>=) !i (Int32.of_int 1) do + variant { p2i !i } + invariant { 0 <= !i <= sz } + invariant { forall j. !i <= j < sz -> + (pelts x)[x.offset+j] = (pelts y)[y.offset+j] } + assert { forall j. 0 <= j < sz - !i -> + let k = !i+j in + !i <= k < sz -> + (pelts x)[x.offset+k] = (pelts y)[y.offset+k] /\ + (pelts x)[!i+x.offset+j] = (pelts y)[!i+y.offset+j] }; + value_sub_frame_shift (pelts x) (pelts y) (p2i !i+x.offset) + (p2i !i+y.offset) ((p2i sz) - (p2i !i)); + let ghost k = p2i !i in + i := Int32.(-) !i (Int32.of_int 1); + + assert { 0 <= !i < sz }; + let lx = get_ofs x !i in + let ly = get_ofs y !i in + if (not (Limb.(=) lx ly)) + then begin + value_sub_concat (pelts x) x.offset (x.offset+k) (x.offset+p2i sz); + value_sub_concat (pelts y) y.offset (y.offset+k) (y.offset+p2i sz); + assert { compare_int (value x sz) + (value y sz) + = compare_int (value x k) (value y k) }; + value_sub_tail (pelts x) x.offset (x.offset+k-1); + value_sub_tail (pelts y) y.offset (y.offset+k-1); + if Limb.(>) lx ly + then begin + value_sub_upper_bound (pelts y) y.offset (y.offset+k-1); + value_sub_lower_bound (pelts x) x.offset (x.offset+k-1); + assert { value x k - value y k = + (l2i lx - ly) * (power radix (k-1)) + - ((value y (k-1)) - (value x (k-1))) + }; + assert { (lx - ly) * (power radix (k-1)) + >= power radix (k-1) + > ((value y (k-1)) - (value x (k-1))) + }; + raise Return32 (Int32.of_int 1) + end + else begin + assert { ly > lx }; + value_sub_upper_bound (pelts x) x.offset (x.offset+k-1); + value_sub_lower_bound (pelts y) y.offset (y.offset+k-1); + assert { value y k - value x k = + (ly - lx) * (power radix (k-1)) + - ((value x (k-1)) - (value y (k-1))) + }; + assert { (ly - lx) * (power radix (k-1)) + >= power radix (k-1) + > ((value x (k-1)) - (value y (k-1))) + }; + raise Return32 (Int32.(-_) (Int32.of_int 1)) + end + end + else () + done; + value_sub_frame_shift (pelts x) (pelts y) x.offset y.offset (p2i sz); + Int32.of_int 0 + with Return32 r -> r + end + +end \ No newline at end of file diff --git a/examples/multiprecision/compare/why3session.xml b/examples/multiprecision/compare/why3session.xml new file mode 100644 index 0000000000..fd61f6bc3e --- /dev/null +++ b/examples/multiprecision/compare/why3session.xml @@ -0,0 +1,147 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<prover id="1" name="CVC3" version="2.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="3" name="Z3" version="4.5.0" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="4" name="Z3" version="4.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="5" name="Alt-Ergo" version="2.0.0" timelimit="5" steplimit="0" memlimit="1000"/> +<file name="../compare.mlw" proved="true"> +<theory name="Compare" proved="true"> + <goal name="VC compare_same_size" expl="VC for compare_same_size" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC compare_same_size.0" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="9"/></proof> + </goal> + <goal name="VC compare_same_size.1" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.03" steps="10"/></proof> + </goal> + <goal name="VC compare_same_size.2" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="21"/></proof> + </goal> + <goal name="VC compare_same_size.3" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="39"/></proof> + </goal> + <goal name="VC compare_same_size.4" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="46"/></proof> + </goal> + <goal name="VC compare_same_size.5" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5"><result status="valid" time="0.04" steps="24"/></proof> + </goal> + <goal name="VC compare_same_size.6" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="26"/></proof> + </goal> + <goal name="VC compare_same_size.7" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="16"/></proof> + </goal> + <goal name="VC compare_same_size.8" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="28"/></proof> + </goal> + <goal name="VC compare_same_size.9" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + <proof prover="5"><result status="valid" time="0.06" steps="28"/></proof> + </goal> + <goal name="VC compare_same_size.10" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5"><result status="valid" time="0.05" steps="20"/></proof> + </goal> + <goal name="VC compare_same_size.11" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="21"/></proof> + </goal> + <goal name="VC compare_same_size.12" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="51"/></proof> + </goal> + <goal name="VC compare_same_size.13" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5"><result status="valid" time="0.05" steps="23"/></proof> + </goal> + <goal name="VC compare_same_size.14" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5"><result status="valid" time="0.07" steps="24"/></proof> + </goal> + <goal name="VC compare_same_size.15" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC compare_same_size.16" expl="assertion" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC compare_same_size.16.0" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="19"/></proof> + </goal> + </transf> + </goal> + <goal name="VC compare_same_size.17" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC compare_same_size.17.0" expl="VC for compare_same_size" proved="true"> + <proof prover="1" memlimit="2000"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC compare_same_size.17.1" expl="VC for compare_same_size" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC compare_same_size.18" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC compare_same_size.19" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC compare_same_size.20" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.05" steps="26"/></proof> + </goal> + <goal name="VC compare_same_size.21" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC compare_same_size.22" expl="assertion" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC compare_same_size.22.0" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.05" steps="20"/></proof> + </goal> + </transf> + </goal> + <goal name="VC compare_same_size.23" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC compare_same_size.23.0" expl="VC for compare_same_size" proved="true"> + <proof prover="1" memlimit="2000"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC compare_same_size.23.1" expl="VC for compare_same_size" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC compare_same_size.24" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5"><result status="valid" time="0.23" steps="43"/></proof> + </goal> + <goal name="VC compare_same_size.25" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC compare_same_size.26" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC compare_same_size.27" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.03" steps="20"/></proof> + </goal> + <goal name="VC compare_same_size.28" expl="loop invariant preservation" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="20"/></proof> + </goal> + <goal name="VC compare_same_size.29" expl="loop invariant preservation" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="44"/></proof> + </goal> + <goal name="VC compare_same_size.30" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="43"/></proof> + </goal> + <goal name="VC compare_same_size.31" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC compare_same_size.32" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="37"/></proof> + </goal> + </transf> + </goal> +</theory> +</file> +</why3session> diff --git a/examples/multiprecision/compare/why3shapes.gz b/examples/multiprecision/compare/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..d96164e40957441c3c528c27d1ae5e976946bc0a GIT binary patch literal 2057 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 literal 0 HcmV?d00001 diff --git a/examples/multiprecision/div.mlw b/examples/multiprecision/div.mlw new file mode 100644 index 0000000000..5ff4e649d0 --- /dev/null +++ b/examples/multiprecision/div.mlw @@ -0,0 +1,4433 @@ +module Div + + use import int.Int + use import mach.int.Int32 + use import mach.int.UInt64GMP as Limb + use import int.Power + use import ref.Ref + use import mach.c.C + use import array.Array + use import map.Map + use import types.Types + use import lemmas.Lemmas + use import compare.Compare + use import util.Util + use import add.Add + use import sub.Sub + use import logical.Logical + use import int.EuclideanDivision + + (** Based on Niels Möller and Torbjörn Granlund, “Improved + division by invariant integers” 2010 *) + + use int.MinMax as MM + + predicate reciprocal (v d:limb) = + v = (div (radix*radix - 1) (d)) - radix + + let lemma fact_div (x y z:int) + requires { y > 0 } + ensures { div (x + y * z) y = (div x y) + z } + = + assert { x + y * z = y * (div (x + y * z) y) + mod (x + y * z) y + so mod (x + y * z) y = mod (y * z + x) y = mod x y + so x + y * z = y * (div (x + y * z) y) + mod x y + so + x = y * div x y + mod x y + so x + y * z = y * div x y + mod x y + y * z + so y * (div (x + y * z) y) + mod x y + = y * div x y + mod x y + y * z + so y * (div (x + y * z) y) = y * div x y + y * z + = y * ((div x y) + z) + so y <> 0 + so div (x + y * z) y = div x y + z + } + + let invert_limb (d:limb) : limb + requires { d >= div radix 2 } + ensures { reciprocal result d } + = + let v = div2by1 (Limb.of_int max_uint64) + (Limb.(-) (Limb.of_int max_uint64) d) + d in + fact_div (radix * radix - 1) (l2i d) (- radix); + assert { v = (div (radix*radix - 1) (d)) - radix + by + radix - 1 + radix * (radix - 1 - d) + = radix - 1 + radix * (radix - 1) - radix * d + = radix - 1 + radix * radix - radix - radix * d + = radix * radix - 1 - radix * d + so + radix - 1 + radix * (radix - 1 - d) + = radix * radix - 1 - radix * d + so + v + = div ((radix - 1) + radix * (radix - 1 - d)) (d) + = div (radix * radix - 1 - radix * d) (d) + = div (radix * radix - 1) (d) - radix + }; + v + + (** Divide a two-word integer by a one-word integer given the + reciprocal of the divisor. *) + let div2by1_inv (uh ul d v:limb) : (limb,limb) + requires { d >= div radix 2 } + requires { uh < d } + requires { reciprocal v d } + returns { q, r -> l2i q * d + l2i r = ul + radix * uh } + returns { _q, r -> 0 <= l2i r < d } + = + let zero = Limb.of_int 0 in + let one = Limb.of_int 1 in + let ghost k = radix * radix - (radix + l2i v) * l2i d in + let ghost u = l2i ul + radix * l2i uh in + assert { 1 <= k <= d }; + let l,h = mul_double v uh in + let sl,c = add_with_carry l ul zero in + let (sh,ghost c') = add_with_carry uh h c in (* <c',sh,sl> = <uh, ul> + <h,l> *) + assert { sl + radix * sh + radix * radix * c' + = l + radix * h + ul + radix * uh }; + assert { c' = 0 + by + uh < d + so v * uh <= v * d + so k = radix * radix - (radix + v) * d + = radix * radix - radix * d - v * d + so v * d = radix * radix - radix * d - k + = radix * (radix - d) - k + so k > 0 + so v * d < radix * (radix - d) + so v * uh < radix * (radix - d) + so l + radix * h = v * uh + so l + radix * h < radix * (radix - d) + so uh <= d - 1 + so radix * uh <= radix * (d - 1) = radix * d - radix + so l + radix * h + radix * uh + < radix * (radix - d) + radix * uh + <= radix * (radix - d) + radix * d - radix + <= radix * (radix - d + d) - radix = radix * radix - radix + so ul < radix + so l + radix * h + ul + radix * uh + = l + radix * h + radix * uh + ul + < radix * radix - radix + ul + < radix * radix - radix + radix = radix * radix + so sl + radix * sh + radix * radix * c' + = l + radix * h + ul + radix * uh + < radix * radix + so radix * radix * c' <= sl + radix * sh + radix * radix * c' + so radix * radix * c' < radix * radix + }; + assert { sl + radix * sh = l + radix * h + ul + radix * uh + = v * uh + ul + radix * uh + = ul + (radix + v) * uh }; + let qh = ref (sh:limb) in + let ql = ref sl in + let ghost q0 = l2i !ql in + let ghost cq = l2i sh + 1 in (*candidate quotient*) + let ghost cr = l2i ul - cq * l2i d + radix * l2i uh in (*candidate remainder*) + assert { cq * d + cr = u}; + qh := add_mod !qh one; + assert { !qh = mod cq radix }; + let p = mul_mod !qh d in + let r = ref (sub_mod ul p) in + let ghost r' = !r in + assert { r' = mod cr radix + by + let a = (- div (!qh * d) radix) in + r' = !r + = mod (ul - p) radix + = mod (ul - mod (!qh * d) radix) radix + = mod (radix * a + + ul - mod (!qh * d) radix) radix + = mod (ul - mod (!qh * d) radix + - radix * div (!qh * d) radix) radix + = mod (ul - !qh * d) radix + = mod (ul - mod cq radix * d) radix + = mod (radix * (- (div cq radix)) * d + ul - mod cq radix * d) radix + = mod (ul - (mod cq radix + radix * div cq radix) * d) radix + = mod (ul - cq * d) radix + = mod (radix * uh + ul - cq * d) radix + = mod (ul - cq * d + radix * uh) radix + = mod cr radix }; + assert { radix * cr = uh * k + ul * (radix - d) + q0 * d - radix * d }; + prod_compat_strict_r (l2i ul) radix (radix - l2i d); + prod_compat_strict_r (l2i d) radix (radix - q0); + assert { (* Theorem 2 of Möller&Granlund 2010 *) + (MM.max (radix - d) (q0 + 1)) - radix <= cr < MM.max (radix - d) q0 + by radix * cr = uh * k + ul * (radix - d) + q0 * d - radix * d + so (uh * k + ul * (radix - d) >= 0 + by uh >= 0 /\ k >= 0 /\ ul >= 0 /\ radix - d >= 0) + so radix * cr >= q0 * d - radix * d + so radix * cr >= - radix * d + so cr >= - d + so radix * cr >= q0 * d - radix * d = (q0 - radix) * d + so radix > d + so radix - q0 > 0 + so d * (radix-q0) < radix * (radix - q0) + so (q0 - radix) * d > (q0 - radix) * radix + so radix * cr > (q0 - radix) * radix + so cr > q0 - radix + so (let m = MM.max (radix - d) (q0 +1) in + cr >= m - radix + by (cr + radix >= - d + radix + /\ (cr + radix > q0 so cr + radix >= q0 + 1)) + so cr + radix >= m) + so 0 < k <= d so 0 <= uh < d + so k * uh < k * d <= d * d + so radix * cr < d * d + ul * (radix - d) + q0 * d - radix * d + so ul * (radix - d) < radix * (radix - d) + so radix * cr < d * d + radix * (radix - d) + q0 * d - radix * d + so (radix * cr < (radix - d) * (radix - d) + q0 * d + by + d * d + radix * (radix - d) + q0 * d - radix * d + = radix * (radix - d) + d * d - radix * d + q0 * d + = radix * (radix - d) + (d - radix) * d + q0 * d + = radix * (radix - d) - d * (radix - d) + q0 * d + = (radix - d) * (radix - d) + q0 * d) + so let m = MM.max (radix - d) q0 in + radix - d <= m + so (radix - d) * (radix - d) <= m* (radix - d) + so (q0 * d <= m * d by 0 <= q0 <= m /\ 0 < d) + so radix * cr < (radix - d) * (radix - d) + q0 * d + <= m* (radix - d) + q0 * d + <= m* (radix - d) + m * d + = m * radix + so cr < m + }; + assert { cr >= 0 -> r' = cr }; + assert { cr < 0 -> + ( r' = cr + radix + by cr >= MM.max (radix - d) (q0 + 1) - radix + so cr >= - d + so cr + radix >= radix - d >= 0 + so 0 <= cr + radix < radix + so mod (cr + radix) radix = mod cr radix + so r' = mod (cr + radix) radix ) }; + assert { cr < 0 -> + ( !r > !ql + by MM.max (radix - d) (q0 + 1) >= q0 + 1 > q0 + so cr >= (MM.max (radix - d) (q0 +1)) - radix > q0 - radix + so r' = cr + radix > q0 - radix + radix = q0 ) }; + assert { 1 <= cq <= radix }; + assert { (!qh = cq \/ (!qh = 0 /\ cq = radix) + by (1 <= cq < radix -> !qh = mod cq radix = cq) + so (cq = radix -> !qh = 0) ) }; + assert { cq = radix -> + (cr < 0 + by cq * d + cr = u + so uh <= d - 1 + so 1 + uh <= d + so ul < radix + so u = ul + radix * uh + < radix + radix * uh + = radix * (1 + uh) + <= radix * d + so u < radix * d + so radix * d + cr = u + so radix * d + cr < radix * d + so cr < 0) }; + assert { 1 <= cq < radix -> !qh = cq /\ !qh * d + cr = u }; + if Limb.(>) !r !ql + then + begin + qh := sub_mod !qh one; + r := add_mod !r d; + assert { cr >= 0 -> + (!r = cr + d + by r' = cr + so r' < MM.max (radix - d) q0 + so r' > q0 + so 0 <= r' < radix - d + so d <= r' + d < radix + so !r = mod (r' + d) radix = r' + d) }; + assert { cr >= 0 -> + ( !r >= d + by r' = cr >= 0 + so !r = r' + d >= d ) }; + assert { cr < 0 -> + ( !r = r' + d - radix + by r' = cr + radix < radix + so cr >= MM.max (radix - d) (q0 + 1) - radix + >= radix - d - radix = - d + so r' = cr + radix >= radix - d + so !r = mod (r' + d) radix + so radix + radix >= r' + d >= radix + so !r = mod (r' + d) radix = r' + d - radix ) }; + assert { cr < 0 -> + ( 0 <= !r < d + by r' = cr + radix < radix + so !r = mod (r' + d) radix = r' + d - radix + so !r >= 0 + so !r = r' + d - radix < d ) }; + assert { cq = radix -> + ( !qh * d + !r = u + by cq * d + cr = u + so cr < 0 + so r' = cr + radix + so u = radix * d + cr + = (radix - 1) * d + d + cr + = (radix - 1) * d + d + r' - radix + so r' = cr + radix >= MM.max (radix - d) (q0 + 1) + >= radix - d + so radix + radix >= d + r' >= radix + so !r = mod (d + r') radix = d + r' - radix + so (radix - 1) * d + !r = u + so !qh = mod ((mod cq radix) - 1) radix + = mod (-1) radix + = radix - 1 + so !qh * d + !r = u + ) }; + assert { !r = cr + d by [@case_split] cr >= 0 \/ cr < 0 }; + assert { 1 <= cq <= radix -> + ( !qh * d + !r = u + by cq * d + cr = u + so !qh = cq - 1 + so !qh * d + cr + d = u + so !r = cr + d ) }; + end + else + begin + assert { cr >= 0 }; + assert { 1 <= cq < radix }; + end; + assert { !qh * d + !r = ul + radix * uh + by [@case_split] cq = radix \/ 1 <= cq < radix }; + if Limb.(>=) !r d + then begin + assert { cr >= 0 }; + assert { !qh < radix - 1 + by + !qh * d = ul + radix * uh - !r + so uh <= d - 1 + so ul + radix * uh - !r + <= ul + radix * (d - 1) - !r + = ul + radix * d - radix - !r + = (ul - radix) + radix * d - !r + < radix * d - !r + <= radix * d - d + = (radix - 1) * d + so !qh * d < (radix - 1) * d + so d > 0 + so !qh < radix - 1 }; + qh := Limb.(+) !qh one; + r := Limb.(-) !r d; + assert { 0 <= !r < d }; + assert { !qh * d + !r = ul + radix * uh }; + end; + assert { 0 <= !r < d }; + assert { !qh * d + !r = ul + radix * uh }; + (!qh,!r) + +(** [divmod_1 q x y sz] divides [(x,sz)] by [y], writes the quotient + in [(q, sz)] and returns the remainder. Corresponds to + [mpn_divmod_1]. *) +(* TODO develop further decimal points (qxn) *) +let divmod_1 (q x:t) (y:limb) (sz:int32) : limb + requires { valid x sz } + requires { valid q sz } + requires { 0 < sz } + requires { 0 < y } + ensures { value x sz + = value q sz * y + result } + ensures { result < y } + = + let limb_zero = Limb.of_int 0 in + let zero = Int32.of_int 0 in + let one = Int32.of_int 1 in + let msb = Int32.(-) sz one in + let lx = ref limb_zero in + let i = ref msb in + let r = ref limb_zero in + (*normalize divisor*) + let clz = count_leading_zeros y in + if (Int32.(>) clz zero) + then begin + let ghost mult = power 2 (p2i clz) in + let ry = lsl y (Limb.of_int32 clz) in + assert { ry = mult * y }; + let ghost tlum = power 2 (Limb.length - p2i clz) in + assert { tlum * mult = radix }; + let v = invert_limb ry in + while (Int32.(>=) !i zero) do + variant { p2i !i } + invariant { -1 <= !i <= msb } + invariant { !r < ry } + invariant { 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 } + invariant { !r <= radix - mult } + invariant { mod (!r) mult = 0 } + assert { !i >= 0 }; + label StartLoop in + lx := C.get_ofs x !i; + (*TODO lshift in place would simplify things*) + let l,h = lsld_ext !lx (Limb.of_int32 clz) in + mod_mult mult (l2i y) 0; + assert { !r + h < ry + by + let drm = div (!r) mult in + let dym = div (ry) mult in + mod (!r) mult = 0 + so !r = mult * drm + so mod (ry) mult + = mod (mult * (y) + 0) mult + = mod 0 mult + = 0 + so ry = mult * dym + so !r < ry + so 0 < ry - !r + = mult * dym - mult * drm + = mult * (dym - drm) + so mult > 0 + so dym - drm > 0 + so dym >= drm + 1 + so h < mult + so !r + h = mult * drm + h + < mult * drm + mult + = mult * (drm + 1) + <= mult * dym = l2i ry }; + assert { !r + h < radix by + !r + h < ry < radix }; + let (qu,rem) = div2by1_inv (Limb.(+) !r h) l ry v in + mod_mult mult (l2i y * l2i qu) (l2i rem); + mod_mult mult (tlum * (l2i !r + l2i h)) (l2i l); + assert { mod (rem) mult = 0 + by + ry * qu + rem + = (radix * (!r + h) + l) + so + mult * y * qu + rem + = (mult * tlum * (!r + h) + l) + so mod (mult * y * qu + rem) mult + = mod (mult * tlum * (!r + h) + l) mult + so mult > 0 + so mod (mult * (y * qu) + rem) mult + = mod (rem) mult + so mod (mult * tlum * (!r + h) + l) mult + = mod (l) mult + = 0 + }; + let ghost mer = div (l2i rem) mult in + assert { rem <= radix - mult + by + mod (rem) mult = 0 + so mult * mer = l2i rem < radix = mult * tlum + so mult > 0 + so 0 < mult * tlum - mult * mer = mult * (tlum - mer) + so tlum - mer > 0 + so mer < tlum + 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) (q.offset + p2i !i) + (q.offset + 1 + p2i !i) + (q.offset + p2i sz) qu; + C.set_ofs q !i 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 *) + 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) (q.offset + sz) + * ry + + !r + (* by + (pelts q)[q.offset + k] = qu + so + (pelts x)[x.offset + k] = !lx + so + l + radix * h = !lx * mult + so + mult * value_sub (pelts x) (x.offset + !i + 1) + (x.offset + sz) + = mult * value_sub (pelts x) (x.offset + k) (x.offset + sz) + = mult * ((pelts x)[x.offset + k] + + radix * value_sub (pelts x) (x.offset + k + 1) + (x.offset + sz)) + = mult * !lx + + mult * radix * value_sub (pelts x) (x.offset + k + 1) + (x.offset + sz) + = l + radix * h + + mult * radix * value_sub (pelts x) (x.offset + k + 1) + (x.offset + sz) + = l + radix * h + + radix * (value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz) + * ry + + (!r at StartLoop)) + = l + radix * h + radix * (!r at StartLoop) + + radix * (value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz) + * ry) + = l + radix * (h + (!r at StartLoop)) + + radix * (value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz) + * ry) + = qu * ry + !r + + radix * value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz) + * ry + = (pelts q)[q.offset + k] * ry + !r + + radix * value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz) + * ry + = ry * ((pelts q)[q.offset + k] + + radix * value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz)) + + !r + = ry * value_sub (pelts q) (q.offset + !i + 1) + (q.offset + sz) + + !r *) + }; + i := Int32.(-) !i one; + done; + let ghost res = lsr !r (Limb.of_int32 clz) in + assert { value x sz = value q sz * y + res + by !r = res * mult + so mult * value x sz + = value q sz * ry + !r + = value q sz * y * mult + !r + = value q sz * y * mult + res * mult + = (value q sz * y + res) * mult }; + lsr !r (Limb.of_int32 clz) end + else begin + let v = invert_limb y in + while (Int32.(>=) !i zero) do + variant { p2i !i } + invariant { -1 <= !i <= msb } + invariant { !r < y } + invariant { value_sub (pelts x) (x.offset + !i + 1) (x.offset + sz) + = value_sub (pelts q) (q.offset + !i + 1) + (q.offset + sz) + * y + + !r } + assert { !i >= 0 }; + label StartLoop in + let ghost k = p2i !i in + lx := C.get_ofs x !i; + let (qu, rem) = div2by1_inv !r !lx y v in + r := rem; + value_sub_update_no_change (pelts q) (q.offset + p2i !i) + (q.offset + 1 + p2i !i) + (q.offset + p2i sz) qu; + C.set_ofs q !i qu; + 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 { value_sub (pelts x) (x.offset + !i + 1) (x.offset + sz) + = value_sub (pelts q) (q.offset + !i + 1) + (q.offset + sz) + * y + + !r + by (pelts q)[q.offset + k] = qu + so (pelts x)[x.offset + k] = !lx + so value_sub (pelts x) (x.offset + !i + 1) (x.offset + sz) + = value_sub (pelts x) (x.offset + k) (x.offset + sz) + = !lx + radix * value_sub (pelts x) (x.offset + k + 1) + (x.offset + sz) + = !lx + radix * (value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz) + * y + (!r at StartLoop)) + = !lx + radix * (!r at StartLoop) + + radix * (value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz) + * y) + = qu * y + !r + + radix * (value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz) + * y) + = (qu + radix * value_sub (pelts q) (q.offset + k + 1) + (q.offset + sz)) + * y + + !r + = value_sub (pelts q) (q.offset + !i + 1) + (q.offset + sz) + * y + + !r }; + done; + !r + end + + + predicate reciprocal_3by2 (v dh dl:limb) = + v = div (radix*radix*radix -1) (dl + radix * dh) - radix + + let div3by2_inv (uh um ul dh dl v: limb) : (limb,limb,limb) + requires { dh >= div radix 2 } + requires { reciprocal_3by2 v dh dl } + requires { um + radix * uh < dl + radix * dh } + returns { q, rl, rh -> uint64'int q * dl + radix * q * dh + + uint64'int rl + radix * uint64'int rh + = ul + radix * um + radix * radix * uh } + returns { _q, rl, rh -> 0 <= uint64'int rl + radix * uint64'int rh < dl + radix * dh } + = + let ghost d = l2i dl + radix * l2i dh in + let ghost u = l2i ul + radix * (l2i um + radix * l2i uh) in + let zero = Limb.of_int 0 in + let one = Limb.of_int 1 in + let q1 = ref zero in + let r0 = ref zero in + let r1 = ref zero in + let l,h = mul_double v uh in + let sl, c = add_with_carry um l zero in + let sh, ghost c' = add_with_carry uh h c in + assert { sl + radix * sh + radix * radix * c' + = um + radix * uh + v * uh }; + assert { c' = 0 + by + um + radix * uh < d + so radix * uh < d + so radix * (um + radix * uh + v * uh) + < radix * (d + v * uh) + = radix * d + v * radix * uh + <= radix * d + v * d + = (div (radix * radix * radix - 1) d) * d + <= radix * radix * radix - 1 + < radix * radix * radix + so um + radix * uh + v * uh < radix * radix + so sl + radix * sh + radix * radix * c' < radix * radix + so radix * radix * c' < radix * radix + }; + q1 := sh; + let ghost q0 = l2i sl in + let ghost cq = l2i !q1 + 1 in (*candidate quotient*) + q1 := add_mod !q1 one; + assert { !q1 = mod cq radix }; + let p = mul_mod dh sh in + r1 := sub_mod um p; + label CQuot in + let ghost a = div (l2i um - l2i dh * l2i sh) radix in + (*assert { um - dh * sh = a * radix + !r1 + by !r1 = mod (um - dh * sh) radix };*) + let tl, th = mul_double sh dl in + let il, b = sub_with_borrow ul tl zero in + let (ih, ghost b') = sub_with_borrow !r1 th b in + assert { il + radix * ih - radix * radix * b' + = ul + radix * !r1 - sh * dl }; + let bl,b2 = sub_with_borrow il dl zero in + let bh, ghost b2' = sub_with_borrow ih dh b2 in + assert { bl + radix * bh - radix * radix * b2' + = il + radix * ih - dl - radix * dh }; + mod_mult (radix * radix) (l2i b') + (l2i ul + radix * l2i !r1 - l2i sh * l2i dl - l2i dl + - radix * l2i dh); + assert { bl + radix * bh + = mod (ul + radix * !r1 + - sh * dl- dl + - radix * dh) (radix * radix) + by + bl + radix * bh + = mod (il + radix * ih + - dl - radix * dh) (radix * radix) + so il + radix * ih + = radix * radix * b' + ul + radix * !r1 + - sh * dl + so mod (il + radix * ih + - dl - radix * dh) (radix * radix) + = mod (radix * radix * b' + ul + radix * !r1 + - sh * dl - dl - radix * dh) + (radix * radix) + = mod (ul + radix * !r1 + - sh * dl - dl + - radix * dh) (radix * radix) }; + r1 := bh; + r0 := bl; + let ghost r' = l2i !r0 + radix * l2i !r1 in + let ghost cr = u - d * cq in + assert { r' = mod cr(radix * radix) + by + (!r1 at CQuot = mod (um - dh * sh) radix + by let a' = div (dh * sh) radix in + dh * sh = p + radix * a' + so !r1 at CQuot = mod (um - p) radix + = mod (radix * a' + um - dh * sh) radix + = mod (um - dh * sh) radix ) + so um - dh * sh = a * radix + !r1 at CQuot + so !r0 + radix * !r1 + = mod (ul + radix * (!r1 at CQuot) + - sh * dl - dl + - radix * dh) (radix * radix) + so ul + radix * (!r1 at CQuot) + - sh * dl - dl - radix * dh + = ul + radix * (um - dh * sh - a * radix) + - sh * dl - dl - radix * dh + = ul + radix * um - radix * dh * sh + - radix * radix * a - sh * dl - dl + - radix * dh + = ul + radix * um - radix * dh * (sh + 1) + - radix * radix * a - sh * dl - dl + = ul + radix * um - radix * dh * (sh + 1) + - radix * radix * a - dl * (sh + 1) + = ul + radix * um + - (dl + radix * dh) * (sh + 1) + - radix * radix * a + = ul + radix * um - d * cq - radix * radix * a + = u - radix * radix * uh - d * cq - radix * radix * a + = cr + radix * radix * (- a - uh) + so (*let y = - a - uh in*) + mod (ul + radix * (!r1 at CQuot) + - sh * dl - dl + - radix * dh) (radix * radix) + = mod (radix * radix * (-a - uh) + cr) + (radix * radix) + = mod cr (radix*radix) + }; + let ghost m = MM.max (radix * radix - d) (q0 * radix) in + assert { (* Theorem 3 of Moller&Granlund 2010 *) + m - radix * radix <= cr < m + by + let k = radix * radix * radix - (radix + v) * d in + reciprocal_3by2 v dh dl + so let m3 = radix * radix * radix - 1 in + (radix + v) * d = d * div m3 d = m3 - mod m3 d + so (k = 1 + mod m3 d + by k = radix * radix * radix - (radix + v) * d + = m3 + 1 - (radix + v) * d + = m3 + 1 - m3 + mod m3 d + = 1 + mod m3 d) + so 1 <= k <= d + so q0 + radix * sh = (radix + v) * uh + um + so cq = sh + 1 + so radix * cq = radix * sh + radix + = (radix + v) * uh + um - q0 + radix + so (radix * cr = k * uh + (radix * radix - d) * um + + radix * ul + d * q0 - d * radix + by radix * cr = radix * (u - cq * d) + = radix * u + - ((radix + v) * uh + um - q0 + radix) * d + = radix * u - d * (radix + v) * uh + - d * um + d * q0 - d * radix + = radix * u - (radix * radix * radix - k) * uh + - d * um + d * q0 - d * radix + = (radix * radix * radix * uh + radix * radix * um + + radix * ul) - (radix * radix * radix - k) * uh + - d * um + d * q0 - d * radix + = k * uh + radix * radix * um + radix * ul + - d * um + d * q0 - d * radix + = k * uh + (radix * radix - d) * um + radix * ul + + d * q0 - d * radix ) + so (cr >= m - radix * radix + by ( + k >= 0 so radix * radix - d >= 0 + so uh >= 0 so um >= 0 so ul >= 0 + so k * uh + (radix * radix - d) * um + radix * ul + >= 0 + so radix * cr >= d * q0 - d * radix + so q0 >= 0 so d >= 0 + so d * q0 >= 0 + so radix * cr >= - d * radix + so cr >= -d = radix * radix - d - radix * radix + so radix * cr >= d * (q0 - radix) + so ( + (radix - q0) * d < (radix - q0) * radix * radix + by let rq = radix - q0 in let r2 = radix * radix in + rq > 0 /\ d < r2 + so rq * d < rq * r2 + ) + so d * (q0 - radix) > radix * radix * (q0 - radix) + so radix * cr > radix * radix * (q0 - radix) + so cr > radix * (q0 - radix) = radix * q0 - radix * radix + )) + so cr < m + by ( + let bbd = radix * radix - d in + bbd > 0 /\ bbd <= m /\ q0 * radix <= m + so (bbd * bbd <= bbd * m + by [@case_split] + (bbd = m \/ (bbd < m so bbd * bbd < bbd * m))) + so (d*(radix * q0) <= d * m + by [@case_split] + (radix * q0 = m \/ (radix * q0 < m so d > 0 so d * (radix * q0) < d * m))) + so if uh <= dh - 1 + then + let dm = dh - 1 in + uh <= dm + so + k * uh <= k * dm + so (k * dm <= d * dm + by k <= d /\ 0 <= dm + so [@case_split] (k = d \/ dm = 0 \/ + (k < d /\ dm > 0 so k * dm < d * dm))) + so k * uh <= d * dm + so + bbd * um <= bbd * (radix - 1) + so + radix * cr + = k * uh + (radix * radix - d) * um + + radix * ul + d * q0 - radix * d + <= d * dm + bbd * um + + radix * ul + d * q0 - radix * d + <= d * dm + bbd * (radix - 1) + + radix * ul + d * q0 - radix * d + < d * dm + bbd * (radix - 1) + + radix * radix + d * q0 - radix * d + so radix * radix * cr + < radix * (d * dm + bbd * (radix - 1) + + radix * radix + d * q0 - radix * d) + = d * radix * (dh - 1) + bbd * radix * (radix - 1) + + radix * radix * radix + radix * d * q0 - radix * radix * d + = d * radix * dh - d * radix + bbd * radix * (radix - 1) + + radix * radix * radix + radix * d * q0 - radix * radix * d + = d * (d - dl) - d * radix + bbd * radix * (radix - 1) + + radix * radix * radix + radix * d * q0 - radix * radix * d + = d * d - d * radix + bbd * radix * (radix - 1) + + radix * radix * radix + radix * d * q0 - radix * radix * d - d * dl + so (d * dl >= 0 by d >= 0 /\ dl >= 0) + so radix * radix * cr + < d * d - d * radix + bbd * radix * (radix - 1) + + radix * radix * radix + radix * d * q0 - radix * radix * d - d * dl + <= d * d - d * radix + bbd * radix * (radix - 1) + + radix * radix * radix + radix * d * q0 - radix * radix * d + = d * d - d * radix + bbd * (radix * radix - radix) + + radix * radix * radix + radix * d * q0 - radix * radix * d + = d * d - d * radix + bbd * radix * radix - (radix * radix - d) * radix + + radix * radix * radix + radix * d * q0 - radix * radix * d + = d * d - d * radix + bbd * radix * radix + + radix * d - radix * radix * radix + + radix * radix * radix + radix * d * q0 - radix * radix * d + = d * d + bbd * radix * radix - radix * radix * d + radix * d * q0 + = bbd * radix * radix - d * (radix * radix - d) + radix * d * q0 + = bbd * radix * radix - d * bbd + radix * d * q0 + = bbd * bbd + d * (radix * q0) + <= bbd * m + d * (radix * q0) + <= bbd * m + d * m + = radix * radix * m + so cr < m + else + uh = dh + so + (um <= dl - 1 + by um + radix * uh < dl + radix * dh) + so (radix * radix - d) * um <= (radix * radix - d) * (dl - 1) + so + ( radix * radix * cr + < radix * radix * m + - (radix - dl) * (radix * radix * radix - d * (1+ radix)) + by radix * cr + = k * dh + (radix * radix - d) * um + + radix * ul + d * q0 - radix * d + <= d * dh + (radix * radix - d) * um + + radix * ul + d * q0 - radix * d + <= d * dh + (radix * radix - d) * (dl - 1) + + radix * ul + d * q0 - radix * d + < d * dh + (radix * radix - d) * (dl - 1) + + radix * radix + d * q0 - radix * d + so radix * radix * cr + < radix * (d * dh + (radix * radix - d) * (dl - 1) + + radix * radix + d * q0 - radix * d) + = d * radix * dh + + (radix * radix - d) * (dl - 1) * radix + + radix * radix * radix + d * q0 * radix - radix * radix * d + = d * (d - dl) + + (radix * radix - d) * (radix * dl - radix) + + radix * radix * radix + d * q0 * radix - radix * radix * d + = d * d - d * dl + radix * radix * radix * dl + - d * radix * dl + d * radix - radix * radix * radix + + radix * radix * radix + d * q0 * radix - radix * radix * d + = d * d - d * dl + radix * radix * radix * dl + - d * radix * dl + d * radix + d * q0 * radix + - radix * radix * d + = d * d - radix * radix * d + d * radix + d * q0 * radix + + dl * (radix * radix * radix - d - d * radix) + = d * (d - radix * radix) + d * radix + d * q0 * radix + + dl * (radix * radix * radix - d - d * radix) + = bbd * (-d) + d * radix + d * q0 * radix + + dl * (radix * radix * radix - d - d * radix) + = bbd * (bbd - radix * radix) + d * radix + d * q0 * radix + + dl * (radix * radix * radix - d - d * radix) + = bbd * bbd + d * q0 * radix + - bbd * radix * radix + d * radix + + dl * (radix * radix * radix - d * (1 + radix)) + = bbd * bbd + d * q0 * radix + - (radix * radix - d) * radix * radix + d * radix + + dl * (radix * radix * radix - d * (1 + radix)) + = bbd * bbd + d * q0 * radix + - radix * ((radix * radix - d) * radix - d) + + dl * (radix * radix * radix - d * (1 + radix)) + = bbd * bbd + d * q0 * radix + - radix * (radix * radix * radix - d * radix - d) + + dl * (radix * radix * radix - d * (1 + radix)) + = bbd * bbd + d * q0 * radix + - radix * (radix * radix * radix - d * (1+ radix)) + + dl * (radix * radix * radix - d * (1 + radix)) + = bbd * bbd + d * q0 * radix + - (radix - dl) * (radix * radix * radix - d * (1+ radix)) + <= bbd * m + d * q0 * radix + - (radix - dl) * (radix * radix * radix - d * (1+ radix)) + <= bbd * m + d * m + - (radix - dl) * (radix * radix * radix - d * (1+ radix)) + = (bbd + d) * m + - (radix - dl) * (radix * radix * radix - d * (1+ radix)) + = radix * radix * m + - (radix - dl) * (radix * radix * radix - d * (1+ radix)) + ) + so + (cr < m by + if d <= radix * (radix - 1) + then (radix + 1) * d <= radix * (radix - 1) * (radix + 1) + = radix * (radix * radix - 1) + = radix * radix * radix - radix + < radix * radix * radix + so (radix * radix * radix - d * (1+ radix)) > 0 + so radix - dl > 0 + so (radix - dl) * (radix * radix * radix + - d * (1+ radix)) + > 0 + so + radix * radix * cr + < radix * radix * m + - (radix - dl) * (radix * radix * radix + - d * (1+ radix)) + < radix * radix * m + so radix * radix * cr < radix * radix * m + else + dl + radix * dh = d > radix * (radix - 1) + so dl < radix + so dl + radix * dh < radix * (1 + dh) + so radix - 1 < 1 + dh + so dh > radix - 2 + so dh = radix - 1 + so uh = dh + so d >= radix * (radix - 1) +1 + so d * (radix + 1) + >= (radix * (radix - 1) + 1) * (radix +1) + = radix * (radix * radix - 1) + radix + 1 + = radix * radix * radix - radix + radix + 1 + = radix * radix * radix + 1 + so + (d * div (radix * radix * radix - 1) d + <= d * (radix + 1) + by d * div (radix * radix * radix - 1) d + <= radix * radix * radix - 1 + < radix * radix * radix + 1 + <= d * (radix + 1)) + so (let a = div (radix * radix * radix - 1) d in + a < radix + 1 + by d > 0 + so (forall x y z. x * z < y * z /\ z > 0 -> x < y) + so (forall x y. x * d < y * d -> x < y) + so let r = radix + 1 in + a * d < r * d + so a < r) + so v = div (radix * radix * radix - 1) d - radix + < radix + 1 - radix = 1 + so v = 0 + so sh = uh = radix - 1 + so cq = sh + 1 = radix + so cr = u - cq * d + = u - radix * d + = ul + radix * (um + radix * dh) + - radix * (dl + radix * dh) + = ul + radix * (um - dl) + so um <= dl - 1 + so 1 + um - dl <= 0 + so ul < radix + so cr = ul + radix * (um - dl) + < radix + radix * (um - dl) + = radix * (1 + um - dl) <= 0 + so cr < 0 <= m + ) + ) + }; + assert { cr >= 0 -> r' = cr }; + assert { cr < 0 -> r' = radix * radix + cr + by + m >= radix * radix - d + so cr >= m - radix * radix >= -d + so cr + radix * radix >= radix * radix - d >= 0 + so 0 <= cr + radix * radix < radix * radix + so mod (radix * radix + cr) (radix*radix) = mod cr (radix*radix) + so r' = mod (radix * radix + cr) (radix*radix) }; + assert { cr < 0 -> !r1 >= sl + by m >= radix * q0 + so cr >= m - radix * radix >= radix * q0 - radix * radix + so r' = radix * radix + cr >= radix * q0 + so r' = radix * !r1 + !r0 >= radix * q0 + so !r0 < radix + so r' < radix * !r1 + radix = radix * (!r1 + 1) + so radix * q0 < radix * (!r1 + 1) + so sl = q0 < !r1 + 1 }; + assert { 1 <= cq <= radix }; + assert { 1 <= cq < radix -> !q1 = cq so !q1 * d + cr = u }; + assert { cq = radix -> + (cr < 0 + by cq * d + cr = u + so um + radix * uh <= d - 1 + so radix * d + cr = ul + + radix * (um + radix * uh) + <= ul + radix * (d - 1) + = ul - radix + radix * d + < radix * d + ) + }; + label PreCorrections in + if Limb.(>=) !r1 sl + then begin + q1 := sub_mod !q1 one; + assert { !q1 = cq - 1 + by + if cq = radix + then + (!q1 at PreCorrections) + = mod cq radix = mod radix radix= 0 + so !q1 = mod (0 - 1) radix = radix - 1 = cq - 1 + else + 0 <= cq - 1 < radix - 1 + so (!q1 at PreCorrections) = cq + so !q1 = mod (cq - 1) radix = cq - 1 + }; + let rl, c = add_with_carry !r0 dl zero in + let rh, ghost c' = add_with_carry !r1 dh c in + assert { rl + radix * rh = mod (r' + d) (radix * radix) + by radix * radix * c' + rl + radix * rh + = r' + d + so mod (r' + d) (radix * radix) + = mod (radix * radix * c' + rl + radix * rh) + (radix * radix) + = mod (rl + radix * rh) (radix * radix) }; + assert { rl + radix * rh = cr + d + by + if cr >= 0 + then r' = cr + so rl + radix * rh = mod (cr + d) (radix * radix) + so cr < MM.max (radix * radix - d) (q0*radix) + so (cr >= q0 * radix + by + r' = radix * !r1 + !r0 + >= radix * !r1 + >= radix * q0) + so cr < radix * radix - d + so cr + d < radix * radix + so (cr + d >= 0 by cr + d >= cr) + so mod (cr + d) (radix * radix) = cr + d + else + r' = cr + radix * radix + so cr >= m - radix * radix + so r' >= m >= radix * radix - d + so r' + d >= radix * radix + so r' < radix * radix + so d < radix * radix + so r' + d < radix * radix + radix * radix + so mod (r' + d) (radix * radix) + = r' + d - radix * radix + = cr + d + }; + r1 := rh; + r0 := rl; + assert { !q1 * d + !r0 + radix * !r1 = u + by + cq * d + cr = u + so !q1 = cq - 1 + so !r0 + radix * !r1 = cr + d + so !q1 * d + !r0 + radix * !r1 + = (cq - 1) * d + cr + d + = cq * d - d + cr + d + = cq * d + cr }; + end + else assert { !q1 * d + r' = u + by cr >= 0 + so r' = cr + so 1 <= cq < radix + so !q1 * d + cr = u }; + assert { !q1 * d + !r0 + radix * !r1 = u }; + label PreRemAdjust in + if [@ex:unlikely] (Limb.(>) !r1 dh) || (Limb.(=) !r1 dh && Limb.(>=) !r0 dl) + then begin + let bl, b = sub_with_borrow !r0 dl zero in + let bh, ghost b'= sub_with_borrow !r1 dh b in + assert { b' = 0 }; + assert { bl + radix * bh = !r0 + radix * !r1 - d }; + assert { !q1 < radix - 1 + by !q1 * d + !r0 + radix * !r1 = u + so !r0 + radix * !r1 >= d + so um + radix * uh <= d - 1 + so u = ul + radix * (um + radix * uh) + <= ul + radix * (d - 1) + < radix + radix * (d-1) + = radix * d + so (!q1 * d < (radix - 1) * d + by + !q1 * d = u - (!r0 + radix * !r1) + <= u - d + < radix * d - d + = (radix - 1) * d ) + }; + q1 := add_mod !q1 one; + assert { !q1 = (!q1 at PreRemAdjust) + 1 }; + r1 := bh; + r0 := bl; + assert { !q1 * d + !r0 + radix * !r1 = u + by + !q1 * d + !r0 + radix * !r1 + = ((!q1 at PreRemAdjust) + 1) * d + + (!r0 + radix * !r1 at PreRemAdjust) - d + = (!q1 * d + !r0 + radix * !r1 at PreRemAdjust) + }; + end; + assert { 0 <= !r0 + radix * !r1 < d }; + (!q1,!r0,!r1) + + let lemma bounds_imply_rec3by2 (v dh dl:limb) + requires { radix * radix * radix - (dl + radix * dh) + <= (radix + v) * (dl + radix * dh) + < radix * radix * radix } + ensures { reciprocal_3by2 v dh dl } + = () + (*let ghost d = dl + radix * dh in + let ghost w = Limb.of_int (div (radix*radix*radix -1) d - radix) in + assert { reciprocal_3by2 w dh dl }; + let ghost e = v - w in + assert { radix * radix * radix - d + <= (radix + w) * d + < radix * radix * radix }; + assert { e = 0 }*) + + + let reciprocal_word_3by2 (dh dl:limb) : limb + requires { dh >= div radix 2 } + ensures { reciprocal_3by2 result dh dl } + = + let ghost d = l2i dl + radix * l2i dh in + let one = Limb.of_int 1 in + let v = ref (invert_limb dh) in + assert { radix * radix - dh + <= (radix + !v) * dh + < radix * radix + by + radix + !v = div (radix * radix - 1) (dh) }; + let p = ref (mul_mod dh !v) in + assert { (radix + !v) * dh + = radix * (radix-1) + + !p + by + mod ((radix + !v) * dh) radix + = mod (radix * dh + dh * !v) radix + = mod (dh * !v) radix = l2i !p + so + div ((radix + !v) * dh) radix = radix - 1 + so + (radix + !v) * dh + = radix * div ((radix + !v) * dh) radix + + mod (dh * !v) radix + = radix * (radix - 1) + !p + }; + label Estimate in + p := add_mod !p dl; + if Limb.(<) !p dl (* carry out *) + then begin + assert { (!p at Estimate) + dl >= radix }; + assert { (!p at Estimate) + dl = radix + !p }; + assert { !v >= 1 + by + (!p at Estimate) + dl >= radix + so (!p at Estimate) > 0 + }; + assert { (radix + !v) * dh + dl + = radix * (radix - 1) + radix + !p }; + label Carry in + if Limb.(>=) !p dh + then begin + v := Limb.(-) !v one; + p := Limb.(-) !p dh; + assert { (radix + !v) * dh + dl + = radix * (radix - 1) + radix + !p + }; + end; + label Borrow in + v := Limb.(-) !v one; + assert { !p < dh }; + p := sub_mod !p dh; + assert { !p = radix + !p at Borrow - dh }; + end; + assert { (radix + !v) * dh * radix + radix * dl + = radix * radix * (radix - 1) + radix * !p + by (radix + !v) * dh + dl + = radix * (radix - 1) + !p }; + assert { radix * radix - dh + <= (radix + !v) * dh + dl + < radix * radix }; + let tl, th = mul_double !v dl in + label Adjust in + p := add_mod !p th; + if Limb.(<) !p th (* carry out *) + then begin + assert { (!p at Adjust) + th >= radix }; + assert { (!p at Adjust) + th = radix + !p + by (!p at Adjust) + th < radix + radix + so div ((!p at Adjust) + th) radix = 1 + so !p = mod ((!p at Adjust) + th) radix + so (!p at Adjust) + th + = radix * div ((!p at Adjust) + th) radix + + mod ((!p at Adjust) + th) radix + = radix + !p + }; + assert { !v >= 1 + by + th <> 0 + so !v <> 0 + }; + if Limb.(>) !p dh || (Limb.(=) !p dh && Limb.(>=) tl dl) + then begin + assert { tl + radix * !p >= d }; + v := Limb.(-) !v one; + assert { (radix + !v) * dh * radix + radix * dl + + !v * dl + = radix * radix * radix + + radix * !p + tl - d + by + (radix + !v) * dh * radix + radix * dl + + !v * dl + = (radix + !v at Adjust - 1) * dh * radix + + radix * dl + + (!v at Adjust - 1) * dl + = (radix + !v at Adjust) * dh * radix + + radix * dl + + (!v at Adjust) * dl - radix * dh + - dl + = radix * radix * (radix - 1) + radix * (!p at Adjust) + + (!v at Adjust) * dl - radix * dh + - dl + = radix * radix * (radix - 1) + radix * (!p at Adjust) + + radix * th + tl - d + = radix * radix * (radix - 1) + radix * (radix + !p) + + tl - d + = radix * radix * (radix - 1) + radix * radix + radix * !p + + tl - d + = radix * radix * radix + radix * !p + tl - d + }; + end; + assert { radix * radix * radix + <= (radix + !v) * dh * radix + radix * dl + + !v * dl + < radix * radix * radix + d }; + v := Limb.(-) !v one; + end; + bounds_imply_rec3by2 !v dh dl; + !v + + let sub3 (x y z:limb) : (limb,limb) + returns { (r,d) -> x - y - z = l2i r - radix * l2i d + /\ 0 <= d <= 2 } + = + let limb_zero = Limb.of_int 0 in + let u1, b1 = sub_with_borrow x y limb_zero in + let u2, b2 = sub_with_borrow u1 z limb_zero in + (u2, (Limb.(+) b1 b2)) + + (** [submul_limb r x y sz] multiplies [(x, sz)] by [y], substracts the [sz] + least significant limbs from [(r, sz)] and writes the result in [(r,sz)]. + Returns the most significant limb of the product plus the borrow + of the substraction. Corresponds to [mpn_submul_1].*) + let submul_limb (r x:t) (y:limb) (sz:int32):limb + requires { valid x sz } + requires { valid r sz } + ensures { value r sz - (power radix sz) * result + = value (old r) sz + - value x sz * y } + writes { r.data.elts } + ensures { forall j. j < r.offset \/ r.offset + sz <= j -> + (pelts r)[j] = (pelts (old r))[j] } += + let limb_zero = Limb.of_int 0 in + let lx = ref limb_zero in + let lr = ref limb_zero in + let b = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sz do + variant { sz - !i } + invariant { 0 <= !i <= sz } + invariant { value r !i - (power radix !i) * !b + = value (old r) !i + - value x !i * y } + invariant { forall j. !i <= j < sz -> + (pelts (old r)) [r.offset+j] = (pelts r)[r.offset + j] } + invariant { forall j. j < r.offset \/ r.offset + sz <= j -> + (pelts r)[j] = (pelts (old r))[j] } + label StartLoop in + let ghost k = p2i !i in + lx := get_ofs x !i; + lr := get_ofs r !i; + assert { !lr = (pelts (old r))[r.offset + !i] }; + let rl, rh = Limb.mul_double !lx y in + let res, borrow = sub3 !lr rl !b in + value_sub_tail (pelts r) r.offset (r.offset + k); + value_sub_tail (pelts x) x.offset (x.offset + k); + value_sub_update (pelts r) (r.offset + p2i !i) + r.offset (r.offset + p2i !i +1) res; + set_ofs r !i res; + assert { forall j. (!i + 1) <= j < sz -> + (pelts (old r))[r.offset+j] = (pelts r)[r.offset+j] + by + (pelts r)[r.offset+j] = ((pelts r) at StartLoop)[r.offset+j] + = (pelts (old r))[r.offset+j] }; + assert { value r (!i + 1) + = value (r at StartLoop) (!i + 1) + + (power radix !i) * (res - !lr) + }; + assert { rl + radix * rh <= (radix-1)*(radix-1) + by + (!lx * y <= !lx * (radix-1) <= (radix-1)*(radix-1) + by + 0 <= !lx <= radix - 1 /\ 0 <= y <= radix -1) + /\ + rl + radix * rh = !lx * y + }; + assert { rh < radix - 1 + by + rl + radix * rh <= (radix -1) * (radix -1) + so + radix * rh <= (radix -1) * (radix -1) + }; + assert { rh = radix - 2 -> rl <= 1 + by + rl + radix * rh <= (radix-1)*(radix-1) }; + assert { rh = radix - 2 -> borrow <= 1 + by rl <= 1 }; + b := Limb.(+) rh borrow; + i := Int32.(+) !i (Int32.of_int 1); + assert { value r !i - (power radix !i) * !b + = value (old r) !i + - value x !i * y + by + (value r !i - (power radix !i) * !b + = value (r at StartLoop) !i + + (power radix k) * (res - !lr) + - (power radix !i) * !b + = value (r at StartLoop) !i + + (power radix k) * (res - !lr) + - (power radix !i) * (rh + borrow) + = value (r at StartLoop) !i + + (power radix k) * (res - !lr) + - (power radix k) * radix * (rh + borrow) + = value (r at StartLoop) !i + + (power radix k) * (res - !lr + - radix * (rh + borrow)) + = value (r at StartLoop) !i + + (power radix k) * (res - radix * borrow + - !lr - radix * rh) + = value (r at StartLoop) !i + + (power radix k) * (!lr - rl - (!b at StartLoop) + - !lr - radix * rh) + = value (r at StartLoop) !i - + (power radix k) * (rl + radix * rh + (!b at StartLoop)) + = value (r at StartLoop) !i - + (power radix k) * (!lx * y + (!b at StartLoop)) + = value (r at StartLoop) k + + (power radix k) * !lr + - (power radix k) * (!lx * y + (!b at StartLoop)) + = value (r at StartLoop) k + - (power radix k) * (!b at StartLoop) + + (power radix k) * (!lr - !lx * y) + = value (old r) k + - value x k * y + + (power radix k) * (!lr - !lx * y) + = value (old r) k + + (power radix k) * !lr + - (value x k + (power radix k)*(!lx)) * y + = value (old r) !i + - (value x k + (power radix k)*(!lx)) * y + = value (old r) !i + - value x !i * y + by + value (old r) !i = value (old r) k + + (power radix k) * (!lr) + ) + }; + done; + !b + + (* [(x,sz)] is normalized if its most significant bit is set. *) + predicate normalized (x:t) (sz:int32) = + valid x sz + /\ (pelts x)[x.offset + sz - 1] >= div radix 2 + + let div_sb_qr (q x y:t) (sx sy:int32) : limb + requires { 3 <= sy <= sx } + requires { valid x sx } + requires { valid y sy } + requires { valid q (sx - sy) } + requires { normalized y sy } + ensures { value (old x) sx = + (value q (sx - sy) + + power radix (sx - sy) * result) + * value y sy + + value x sy } + ensures { value x sy < value y sy } + ensures { 0 <= result <= 1 } + = + let one = Int32.of_int 1 in + let two = Int32.of_int 2 in + let limb_zero = Limb.of_int 0 in + let zero = Int32.of_int 0 in + let uone = Limb.of_int 1 in + let xp = ref (C.incr x (Int32.(-) sx two)) in + let qp = ref (C.incr q (Int32.(-) sx sy)) in + let dh = C.get_ofs y (Int32.(-) sy one) in + assert { dh >= div radix 2 by normalized y sy }; + let dl = C.get_ofs y (Int32.(-) sy two) in + let v = reciprocal_word_3by2 dh dl in + let i = ref (Int32.(-) sx sy) in + let mdn = Int32.(-) two sy in + let ql = ref limb_zero in + let xd = C.incr !xp mdn in + let ghost vy = value y (p2i sy) in + let x1 = ref limb_zero in + let x0 = ref limb_zero in + let r = compare_same_size xd y sy in + let qh = (*begin + ensures { r >= 0 -> result = 1 } + ensures { r < 0 -> result = 0 }*) + if (Int32.(>=) r zero) + then uone + else limb_zero + (*end*) in + label PreAdjust in + begin + ensures { value (old x) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 } + ensures { value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + < vy } + ensures { dl + radix * dh + >= (pelts x)[(!xp).offset] + radix * !x1 } + let ghost ox = pelts x in + begin [@vc:sp] + if (not (Limb.(=) qh limb_zero)) + then begin + assert { qh = 1 }; + let ghost b = sub_in_place xd y sy sy in + begin + ensures { value (x at PreAdjust) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x sx } + ensures { value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy) + < vy } + value_sub_upper_bound (pelts x) xd.offset (xd.offset + p2i sy); + assert { b = 0 }; + assert { value (xd at PreAdjust) sy + = value xd sy + vy }; + value_sub_concat (pelts x) x.offset xd.offset (xd.offset + p2i sy); + value_sub_concat ox x.offset xd.offset (xd.offset + p2i sy); + value_sub_frame (pelts x) ox x.offset xd.offset; + assert { value (x at PreAdjust) sx + = value x sx + + power radix (sx - sy) * vy + by + value_sub (pelts (x at PreAdjust)) x.offset xd.offset + = value_sub (pelts x) x.offset xd.offset + so pelts (xd at PreAdjust) = pelts (x at PreAdjust) + so value_sub (pelts (x at PreAdjust)) xd.offset (xd.offset + sy) + = value (xd at PreAdjust) sy + so value (x at PreAdjust) sx + = value_sub (pelts (x at PreAdjust)) x.offset xd.offset + + power radix (sx - sy) + * value_sub (pelts (x at PreAdjust)) xd.offset (xd.offset + sy) + = value_sub (pelts x) x.offset xd.offset + + power radix (sx - sy) + * value (xd at PreAdjust) sy + = value_sub (pelts x) x.offset xd.offset + + power radix (sx - sy) + * (value xd sy + vy) + = value_sub (pelts x) x.offset xd.offset + + power radix (sx - sy) + * (value_sub (pelts x) (xd.offset) (xd.offset + sy) + vy) + = value_sub (pelts x) x.offset xd.offset + + power radix (sx - sy) + * value_sub (pelts x) (xd.offset) (xd.offset + sy) + + power radix (sx - sy) * vy + = value x sx + + power radix (sx - sy) * vy + }; + value_sub_tail (pelts x) x.offset (x.offset + p2i sy + p2i !i - 1); + assert { value (x at PreAdjust) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x sx + by + !i = sx - sy + so power radix (sx - sy - !i) = 1 + so value !qp (sx - sy - !i) = 0 }; + value_sub_lower_bound_tight (pelts y) y.offset (y.offset + p2i sy); + assert { value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy) + < vy + by + value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy) + = value xd sy + = value (xd at PreAdjust) sy - vy + so value (xd at PreAdjust) sy + < power radix sy + so vy >= dh * power radix (sy - 1) + so 2 * vy >= 2 * dh * power radix (sy - 1) + so 2 * dh >= radix + so 2 * dh * power radix (sy - 1) >= radix * power radix (sy - 1) + so 2 * vy >= radix * power radix (sy - 1) = power radix sy + so value (xd at PreAdjust) sy < 2 * vy + so value (xd at PreAdjust) sy - vy < vy }; + end + end + else begin + assert { value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy) + < vy + by r < 0 }; + assert { value (x at PreAdjust) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x sx + by qh = 0 + so sx - sy - !i = 0 + so (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) = 0 }; + end + end; + let ghost gx1 = (C.get_ofs !xp one) in + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_upper_bound_tight (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_tail (pelts x) (!xp.offset) (!xp.offset + p2i sy - 1); + value_sub_lower_bound_tight (pelts x) (!xp.offset) (!xp.offset + p2i sy - 1); + assert { dl + radix * dh + >= (pelts x)[(!xp).offset] + radix * gx1 + by value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy) + < vy + so value y (sy - 1) < (dl + 1) * power radix (sy - 1 - 1) + so vy = dh * power radix (sy - 1) + + value y (sy - 1) + < dh * power radix (sy - 1) + + (dl + 1) * power radix (sy - 1 - 1) + = power radix (sy - 2) * (dl+1 + radix * dh) + so !xp.offset + mdn + sy - 1 = !xp.offset + 1 + so (pelts x)[!xp.offset + mdn + sy - 1] + = (pelts x)[!xp.offset + 1] = gx1 + so value_sub (pelts x) (!xp.offset + mdn) (!xp.offset + mdn + sy) + = gx1 * power radix (sy - 1) + + value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + >= gx1 * power radix (sy - 1) + + (pelts x)[!xp.offset] * power radix (sy - 1 - 1) + = power radix (sy - 2) + * ((pelts x) [!xp.offset] + radix * gx1) + so power radix (sy - 2) * ((pelts x) [!xp.offset] + radix * gx1) + < power radix (sy - 2) * (dl+1 + radix * dh) + so (pelts x) [!xp.offset] + radix * gx1 + < dl + 1 + radix * dh + }; + value_sub_tail (pelts x) (!xp.offset + p2i mdn) + (!xp.offset + p2i mdn + p2i sy - 1); + value_sub_tail (pelts x) x.offset (x.offset + p2i sy + p2i !i - 1); + + x1 := (C.get_ofs !xp one); + assert { value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + < vy + by + !xp.offset + mdn + sy - 1 = !xp.offset + 1 + so value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * (pelts x)[!xp.offset + 1] + = value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) + * (pelts x)[!xp.offset + mdn + sy - 1] + = value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy) + < vy }; + assert { value (x at PreAdjust) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + by value (x at PreAdjust) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x sx + so sx = sy + !i + so x.offset + sy + !i - 1 = !xp.offset + 1 + so (pelts x)[x.offset + sy + !i - 1] = + (pelts x)[!xp.offset + 1]= !x1 + so value x sx + = value x (sx - 1) + + power radix (sx -1) * (pelts x)[x.offset + sx - 1] + = value x (sy + !i - 1) + + power radix (sy + !i - 1) * (pelts x)[x.offset + sy + !i - 1] + so value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = value x sx + }; + end; + while (Int32.(>) !i zero) do + variant { p2i !i } + invariant { 0 <= !i <= sx - sy } + invariant { (!qp).offset = q.offset + !i } + invariant { (!xp).offset = x.offset + sy + !i - 2 } + invariant { plength !qp = plength q } + invariant { !qp.min = q.min } + invariant { !qp.max = q.max } + invariant { plength !xp = plength x } + invariant { !xp.min = x.min } + invariant { !xp.max = x.max } + invariant { pelts !qp = pelts q } + invariant { pelts !xp = pelts x } + invariant { value (old x) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 } + invariant { value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + < vy } + invariant { dl + radix * dh + >= (pelts x)[(!xp).offset] + radix * !x1 } + label StartLoop in + let ghost k = int32'int !i in + i := Int32.(-) !i one; + let ghost s = int32'int sy + int32'int !i - 1 in + xp.contents <- C.incr !xp (-1); + let xd = C.incr !xp mdn in + let nx0 = C.get_ofs !xp one in + if [@ex:unlikely] (Limb.(=) !x1 dh && Limb.(=) nx0 dl) + then begin + ql := Limb.of_int Limb.max_uint64; + value_sub_concat (pelts x) x.offset xd.offset (xd.offset + p2i sy); + value_sub_tail (pelts xd) xd.offset (xd.offset + p2i sy - 1); + let ghost vlx = value xd (p2i sy - 1) in + assert { value xd sy + = vlx + power radix (sy - 1) * dl + by value xd sy + = vlx + power radix (sy - 1) + * (pelts xd)[xd.offset + sy - 1] + so xd.offset + sy - 1 = !xp.offset + mdn + sy - 1 + = !xp.offset + 1 + so pelts xd = pelts !xp + so (pelts xd)[xd.offset + sy - 1] + = (pelts !xp)[!xp.offset + 1] = dl + }; + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 2); + let ghost vly = value y (p2i sy - 2) in + assert { vy = vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh + by (pelts y)[y.offset + sy - 1] = dh + so (pelts y)[y.offset + sy - 2] = dl + so + vy = value y (sy - 1) + + power radix (sy - 1) * dh + = vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh }; + begin + ensures { value_sub (pelts xd) (xd.offset+1) (xd.offset + p2i sy - 1) + + power radix (sy - 2) * dl + + power radix (sy - 1) * dh + < vy } + value_sub_tail (pelts xd) (xd.offset + 1) (xd.offset + p2i sy - 2); + assert { value_sub (pelts x) (!xp.offset at StartLoop + mdn) + (!xp.offset at StartLoop + mdn + sy - 1) + = value_sub (pelts xd) (xd.offset+1) (xd.offset + p2i sy - 1) + + power radix (sy - 2) * dl + by + pelts x = pelts xd + so !xp.offset at StartLoop + mdn = xd.offset + 1 + so !xp.offset at StartLoop + mdn + sy - 1 = xd.offset + sy + so xd.offset + sy - 1 = !xp.offset + 1 + so pelts xd = pelts !xp + so (pelts xd)[xd.offset + sy - 1] = (pelts !xp)[!xp.offset+1] = dl + so value_sub (pelts x) (!xp.offset at StartLoop + mdn) + (!xp.offset at StartLoop + mdn + sy - 1) + = value_sub (pelts xd) (xd.offset+1) (xd.offset + sy) + = value_sub (pelts xd) (xd.offset+1) (xd.offset + p2i sy - 1) + + power radix (sy - 2) + * (pelts xd)[xd.offset + p2i sy - 1] + = value_sub (pelts xd) (xd.offset+1) (xd.offset + p2i sy - 1) + + power radix (sy - 2) * dl + }; + assert { !x1 = dh }; + end; + label SubMax in + let ghost xc = Array.copy (x.data) in + value_sub_frame (pelts x) xc.elts x.offset (x.offset + p2i !i); + let ghost b = submul_limb xd y !ql sy in + begin + ensures { value x !i + = value (x at SubMax) !i } + assert { forall j. x.offset <= j < x.offset + !i + -> (pelts x)[j] = xc.elts[j] + by + (pelts x)[j] = (pelts x at SubMax)[j] + so + ((pelts x at SubMax)[j] = xc.elts[j] + by + 0 <= j /\ j < xc.Array.length + ) }; + value_sub_frame (pelts x) xc.elts x.offset (x.offset + p2i !i); + end; + value_sub_upper_bound (pelts xd) xd.offset (xd.offset + p2i sy); + value_sub_lower_bound (pelts xd) xd.offset (xd.offset + p2i sy); + value_sub_head (pelts xd) xd.offset (xd.offset + p2i sy - 1); + assert { vlx < radix * vly + by + vlx = value_sub (pelts xd at SubMax) xd.offset + (xd.offset + sy - 1) + = (pelts xd at SubMax)[xd.offset] + + radix * value_sub (pelts xd at SubMax) + (xd.offset + 1) + (xd.offset + sy - 1) + so value_sub (pelts xd at SubMax) (xd.offset + 1) + (xd.offset + sy - 1) + + power radix (sy - 2) * dl + + power radix (sy - 1) * dh + < vy + = vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh + so value_sub (pelts xd at SubMax) (xd.offset + 1) + (xd.offset + sy - 1) + < vly + so value_sub (pelts xd at SubMax) (xd.offset + 1) + (xd.offset + sy - 1) + <= vly - 1 + so vlx = (pelts xd at SubMax)[xd.offset] + + radix * value_sub (pelts xd at SubMax) + (xd.offset + 1) + (xd.offset + sy - 1) + <= (pelts xd at SubMax)[xd.offset] + + radix * (vly - 1) + < radix + radix * (vly - 1) + = radix * vly + }; + assert { b = dh + by + value xd sy + = value (xd at SubMax) sy + - (!ql) * vy + + power radix sy * b + so !ql = radix - 1 + so 0 <= value xd sy < power radix sy + so radix * power radix (sy - 2) = power radix (sy - 1) + so radix * power radix (sy - 1) = power radix sy + so value xd sy + = power radix (sy - 1) * dl + vlx + - (radix - 1) * vy + + power radix sy * b + = power radix (sy - 1) * dl + vlx + - radix * (vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh) + + vy + power radix sy * b + = power radix (sy - 1) * dl + vlx + - radix * vly - radix * power radix (sy - 2) * dl + - radix * power radix (sy - 1) * dh + + vy + power radix sy * b + = power radix (sy - 1) * dl + vlx + - radix * vly - power radix (sy - 1) * dl + - power radix sy * dh + + vy + power radix sy * b + = power radix sy * (b - dh) + + vlx - radix * vly + vy + so vlx < radix * vly + so (0 <= vlx - radix * vly + vy < power radix sy + by + vy - radix * vly + = vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh + - radix * vly + = power radix (sy - 2) * (dl + radix * dh) + - vly * (radix - 1) + so let pr2 = power radix (sy - 2) in + 0 <= vly < pr2 + so 0 <= vly * (radix - 1) < pr2 * (radix - 1) + so vy - radix * vly + >= pr2 * (dl + radix * dh) + - pr2 * (radix - 1) + = pr2 * (dl + radix * dh - (radix - 1)) + so dh + radix * dh - (radix - 1) >= 0 + so pr2 >= 0 + so vy - radix * vly + >= pr2 * (dl + radix * dh - (radix - 1)) >= 0 + so vlx - radix * vly < 0 + so vlx - radix * vly + vy < vy < power radix sy + ) + so - (power radix sy) + < power radix sy * (b - dh) + < power radix sy + so - 1 < b - dh < 1 + }; + value_sub_concat (pelts x) x.offset xd.offset (x.offset + s); + x1 := C.get_ofs !xp one; + qp.contents <- C.incr !qp (-1); + value_sub_update_no_change (pelts q) (!qp).offset + ((!qp).offset + 1) + ((!qp).offset + p2i sx - p2i sy - p2i !i) + !ql; + label QUp in + C.set !qp !ql; + assert { value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) + = value (!qp at StartLoop) + (sx - sy - k) + by value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) + = value_sub (pelts q at QUp) (!qp.offset + 1) + ((!qp).offset + sx - sy - !i) + = value (!qp at StartLoop) (sx - sy - k) + (* by offset !qp at StartLoop = (!qp).offset + 1 + so offset (!qp at StartLoop) + sx - sy - k + = (!qp).offset + sx - sy - !i + so map_eq_sub_shift (pelts q) (pelts !qp at StartLoop) + ((!qp).offset + 1) ((!qp).offset + 1) (sx + sy - k) *) }; + value_sub_head (pelts q) (!qp).offset + ((!qp).offset + p2i sx - p2i sy - p2i !i); + value_sub_tail (pelts x) x.offset (x.offset + p2i sy + p2i !i - 1); + assert { value xd (sy - 1) + + power radix (sy - 1) * !x1 + = value (xd at SubMax) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + by + value xd sy + = value (xd at SubMax) sy + - (!ql) * vy + + power radix sy * b + so b = dh = !x1 at StartLoop + so pelts !xp = pelts x = pelts xd + so ((pelts xd)[xd.offset + sy - 1] = !x1 + by + xd.offset = x.offset + !i + so (!xp).offset = x.offset + !i + sy - 2 + so (!xp).offset + 1 = xd.offset + sy - 1 + so (pelts xd)[xd.offset + sy - 1] + = (pelts !xp)[(!xp).offset + 1] + = !x1 + ) + so value xd sy + = value xd (sy - 1) + + power radix (sy - 1) * (pelts xd)[xd.offset + sy - 1] + = value xd (sy - 1) + + power radix (sy - 1) * !x1 + }; + (* refl *) + assert { value (old x) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + by + pelts !xp = pelts x = pelts xd + so + value xd sy + = value (xd at SubMax) sy + - (!ql) * vy + + power radix sy * b + = value (xd at SubMax) sy + - (!ql) * vy + + power radix sy * dh + so (value x s + = value x !i + + power radix !i + * value xd (sy - 1) + by + xd.offset = x.offset + !i + so x.offset + s = xd.offset + sy - 1 + so value_sub (pelts x) (x.offset + !i) (x.offset + s) + = value xd (sy - 1) + so value x s + = value x !i + + power radix !i + * value_sub (pelts x) (x.offset + !i) + (x.offset + s) + = value x !i + + power radix !i + * value xd (sy - 1)) + so (power radix s + = power radix !i * power radix (sy - 1) + by + let n = !i in + let m = sy - 1 in + let x = radix in + power x s = power x (n + m) + so (power x (n + m) = power x n * power x m + by 0 <= n + so 0 <= m + so forall x:int, n:int, m:int. + 0 <= n -> 0 <= m -> + power x (n + m) = (power x n * power x m))) + so (value x s + power radix s * !x1 + = value x !i + + power radix !i * (value xd sy) + by + value x s + power radix s * !x1 + = value x !i + + power radix !i + * value xd (sy - 1) + + power radix (!i + sy - 1) * !x1 + = value x !i + + power radix !i * + (value xd (sy - 1) + + power radix (sy - 1) * !x1) + = value x !i + + power radix !i * (value xd sy) + ) + so (value (x at StartLoop) (sy + k - 1) + = value (x at SubMax) !i + + power radix !i + * value (xd at SubMax) sy + by + pelts xd at SubMax = pelts x at SubMax + so x.offset at SubMax + !i = xd.offset at SubMax + so + value (x at StartLoop) (sy + k - 1) + = value_sub (pelts x at SubMax) (x at SubMax).offset + (xd.offset at SubMax) + + power radix !i + * value_sub (pelts x at SubMax) + (xd.offset at SubMax) + (xd.offset at SubMax + sy) + so value_sub (pelts x at SubMax) (x at SubMax).offset + (xd at SubMax).offset + = value (x at SubMax) !i + so value_sub (pelts x at SubMax) (xd.offset at SubMax) + (xd.offset at SubMax + sy) + = value (xd at SubMax) sy + ) + so value x !i + = value (x at SubMax) !i + so value x s + power radix s * !x1 + = value (x at StartLoop) (sy + k - 1) + + power radix !i + * (value xd sy + - value (xd at SubMax) sy) + = value (x at StartLoop) (sy + k - 1) + + power radix !i + * (- (!ql) * vy + + power radix sy * b) + = value (x at StartLoop) (sy + k - 1) + + power radix !i + * (- (!ql) * vy + + power radix sy * (!x1 at StartLoop)) + so value !qp (sx - sy - !i) + = !ql + radix * + value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) + so (value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) + = value (!qp at StartLoop) + (sx - sy - k) + by value (!qp at StartLoop) (sx - sy - k) + = value_sub (pelts q at StartLoop) + (!qp.offset + 1) (!qp.offset + sx - sy - !i)) + so value !qp (sx - sy - !i) + = !ql + radix * value (!qp at StartLoop) + (sx - sy - k) + so power radix (sx - sy - !i) + = radix * power radix (sx - sy - k) + so radix * power radix !i = power radix k + so (power radix !i * power radix sy + = power radix (sy + k - 1) + by !i + sy = sy + k - 1 + so power radix !i * power radix sy + = power radix (!i + sy)) + so (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = (!ql + radix * value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = (!ql + radix * value (!qp at StartLoop) + (sx - sy - k) + + radix * qh * power radix (sx - sy - k)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = (!ql + radix * value (!qp at StartLoop) + (sx - sy - k) + + radix * qh * power radix (sx - sy - k)) + * vy * power radix !i + + value x s + + power radix s * !x1 + = !ql * vy * power radix !i + + radix * (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix !i + + value x s + + power radix s * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * radix * power radix !i + + value x s + + power radix s * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value x s + + power radix s * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value (x at StartLoop) (sy + k - 1) + + power radix !i + * (- (!ql) * vy + + power radix sy * (!x1 at StartLoop)) + = (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value (x at StartLoop) (sy + k - 1) + + power radix !i * power radix sy + * (!x1 at StartLoop) + = (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value (x at StartLoop) (sy + k - 1) + + power radix (sy + k - 1) * (!x1 at StartLoop) + = value (old x) sx + }; + assert { value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + < vy + by + pelts x = pelts xd + so xd.offset = !xp.offset + mdn + so !xp.offset + mdn + sy - 1 = xd.offset + sy - 1 + so + value xd (sy - 1) + = value_sub (pelts xd) xd.offset (xd.offset + sy - 1) + = value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + so value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + = value (xd at SubMax) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + so value (xd at SubMax) sy = + vlx + power radix (sy - 1) * dl + so vlx < radix * vly + so (value (xd at SubMax) sy + + power radix sy * (!x1 at StartLoop) + < radix * vy + by + !x1 at StartLoop = dh + so power radix sy = radix * power radix (sy - 1) + so power radix (sy - 1) = radix * power radix (sy - 2) + so value (xd at SubMax) sy + + power radix sy * (!x1 at StartLoop) + = vlx + power radix (sy - 1) * dl + + power radix sy * dh + < radix * vly + power radix (sy - 1) * dl + + power radix sy * dh + = radix * vly + radix * power radix (sy - 2) * dl + + radix * power radix (sy - 1) * dh + = radix * (vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh) + = radix * vy + ) + so !ql = radix - 1 + so value (xd at SubMax) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + < radix * vy - (radix - 1) * vy + = vy + }; + value_sub_tail (pelts x) (!xp.offset + p2i mdn) (!xp.offset); + value_sub_upper_bound (pelts y) (y.offset) (y.offset + p2i sy - 2); + value_sub_lower_bound (pelts x) (!xp.offset + p2i mdn) (!xp.offset); + assert { dl + radix * dh + >= (pelts x)[(!xp).offset] + radix * !x1 + by + vy = vly + power radix (sy - 2) + * (dl + radix * dh) + so value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + < vy + so !xp.offset + mdn + sy - 1 = !xp.offset + 1 + so power radix (sy - 1) = power radix (sy - 2) * radix + so - mdn = sy - 2 + so vy + > value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + 1) + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (- mdn) * (pelts x)[(!xp).offset] + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (sy - 2) * (pelts x)[(!xp).offset] + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (sy - 2) * (pelts x)[(!xp).offset] + + power radix (sy - 2) * radix * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1) + >= power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1) + so vly < power radix (sy - 2) + so vy < power radix (sy - 2) + + power radix (sy - 2) + * (dl + radix * dh) + = power radix (sy - 2) + * (1 + dl + radix * dh) + so power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1) + < power radix (sy - 2) * (1 + dl + radix * dh) + so power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1 + - (1 + dl + radix * dh)) + < 0 + so (pelts x)[(!xp).offset] + radix * !x1 + - (1 + dl + radix * dh) + < 0 + }; + end + else begin + assert { dl + radix * dh + > (pelts x)[(!xp).offset + 1] + radix * !x1 + by + dl + radix * dh + >= (pelts x)[(!xp).offset + 1] + radix * !x1 + so dh >= !x1 + so [@case_split] dh <> !x1 + \/ (dh = !x1 + /\ dl <> (pelts x)[(!xp).offset + 1]) + so + [@case_split] dh > !x1 \/ + (dh = !x1 /\ dl > (pelts x)[(!xp).offset + 1]) + }; + label SmallDiv in + let ghost vlx = value xd (p2i sy - 2) in + let xp0 = C.get !xp in + let xp1 = C.get_ofs !xp one in + begin + ensures { value xd sy = + vlx + + power radix (sy - 2) * (xp0 + radix * xp1) } + value_sub_tail (pelts xd) xd.offset (xd.offset + p2i sy - 1); + value_sub_tail (pelts xd) xd.offset (xd.offset + p2i sy - 2); + value_sub_upper_bound (pelts xd) xd.offset (xd.offset + p2i sy - 2); + assert { value xd sy + = vlx + power radix (sy - 2) + * (xp0 + radix * xp1) + by xd.offset + sy - 2 = !xp.offset + so (pelts xd)[xd.offset + sy - 1] = xp1 + so (pelts xd)[xd.offset + sy - 2] = xp0 + so pelts xd = pelts !xp + so value xd sy + = value xd (sy - 1) + + power radix (sy - 1) + * (pelts xd)[xd.offset + sy - 1] + = value xd (sy - 2) + + power radix (sy - 2) + * (pelts xd)[xd.offset + sy - 2] + + power radix (sy - 1) + * (pelts xd)[xd.offset + sy - 1] + = vlx + + power radix (sy - 2) * xp0 + + power radix (sy - 1) * xp1 + = value xd (sy - 2) + + power radix (sy - 2) * xp0 + + power radix (sy - 2) * radix * xp1 + = vlx + power radix (sy - 2) + * (xp0 + radix * xp1) + }; + end; + let qu, rl, rh = + div3by2_inv !x1 xp1 xp0 dh dl v in + ql := qu; + x1 := rh; + x0 := rl; + label SubProd in + value_sub_concat (pelts x) x.offset xd.offset + (x.offset + p2i sy + k - 1); + let ghost xc = Array.copy (x.data) in + value_sub_frame (pelts x) xc.elts x.offset (x.offset + p2i !i); + let cy = submul_limb xd y !ql (Int32.(-) sy two) in + label PostSub in + begin + ensures { value x !i + = value (x at SubProd) !i } + assert { forall j. x.offset <= j < x.offset + !i + -> (pelts x)[j] = xc.elts[j] + by + (pelts x)[j] = (pelts x at SubProd)[j] + so + ((pelts x at SubProd)[j] = xc.elts[j] + by + 0 <= j /\ j < xc.Array.length + ) }; + value_sub_frame (pelts x) xc.elts x.offset (x.offset + p2i !i); + end; + let cy1 = [@vc:sp] if (Limb.(<) !x0 cy) then uone else limb_zero in + x0 := sub_mod !x0 cy; + let cy2 = [@vc:sp] if (Limb.(<) !x1 cy1) then uone else limb_zero in + x1 := sub_mod !x1 cy1; + assert { 0 <= cy2 <= 1 }; + (* assert { cy2 = 1 -> rh = 0 }; (* and cy > rl *)*) + value_sub_update (pelts x) (!xp).offset xd.offset + (xd.offset + p2i sy - 1) !x0; + value_sub_update_no_change (pelts x) (!xp).offset + x.offset (x.offset + p2i !i) !x0; + value_sub_update_no_change (pelts x) (!xp).offset + xd.offset (xd.offset + p2i sy - 2) !x0; + C.set !xp !x0; + assert { value x !i + = value (x at SubProd) !i + by + value x !i + = value (x at PostSub) !i + = value (x at SubProd) !i }; + value_sub_tail (pelts x) xd.offset (xd.offset + p2i sy - 1); + begin + ensures { value xd (sy - 1) + + power radix (sy - 1) * !x1 + - power radix sy * cy2 + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy } + assert { value xd (sy - 2) + = value (xd at PostSub) (sy - 2) }; + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 2); + let ghost vly = value y (p2i sy - 2) in + assert { vy = vly + power radix (sy - 2) + * (dl + radix * dh) + by (pelts y)[y.offset + sy - 1] = dh + so (pelts y)[y.offset + sy - 2] = dl + so + vy = value y (sy - 1) + + power radix (sy - 1) * dh + = vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh + so power radix (sy - 1) + = power radix (sy - 2) * radix }; + assert { value xd (sy - 2) + - power radix (sy - 2) * cy + = vlx - !ql * vly + by + value xd (sy - 2) + - power radix (sy - 2) * cy + = value (xd at PostSub) (sy - 2) + - power radix (sy - 2) * cy + = vlx - !ql * vly + }; + assert { power radix sy + = power radix (sy - 2) * radix * radix }; + assert { xp0 + radix * xp1 + + radix * radix * !x1 at StartLoop + - !ql * (dl + radix * dh) + = rl + radix * rh }; + begin ensures { value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + = value xd (sy - 2) + - power radix (sy - 2) * cy + + power radix (sy - 2) * + (rl + radix * rh) } + assert { value (xd at SubProd) sy + = vlx + power radix (sy - 2) * xp0 + + power radix (sy - 1) * xp1 }; (*nonlinear*) + assert { !ql * vy = !ql * vly + + power radix (sy - 2) + * (!ql * (dl + radix * dh)) }; (*nonlinear*) + (*assert { value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + = value xd (sy - 2) + - power radix (sy - 2) * cy + + power radix (sy - 2) * (rl + radix * rh) + by + value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + = vlx + power radix (sy - 2) + * (xp0 + radix * xp1) + + power radix sy * (!x1 at StartLoop) + - !ql * vy + = vlx + power radix (sy - 2) + * (xp0 + radix * xp1) + + power radix sy * (!x1 at StartLoop) + - !ql * (vly + power radix (sy - 2) + * (dl + radix * dh)) + = vlx + + power radix (sy - 2) + * (xp0 + radix * xp1 + + radix * radix * !x1 at StartLoop) + - !ql * (vly + power radix (sy - 2) + * (dl + radix * dh)) + = vlx + + power radix (sy - 2) + * (xp0 + radix * xp1 + + radix * radix * !x1 at StartLoop) + - !ql * vly + - power radix (sy - 2) + * !ql * (dl + radix * dh) + = vlx - !ql * vly + + power radix (sy - 2) + * (xp0 + radix * xp1 + + radix * radix * !x1 at StartLoop + - !ql * (dl + radix * dh)) + = vlx - !ql * vly + + power radix (sy - 2) * + (rl + radix * rh) + = value xd (sy - 2) + - power radix (sy - 2) * cy + + power radix (sy - 2) * + (rl + radix * rh) + } *) + end; + begin ensures { value xd (sy - 2) + - power radix (sy - 2) * cy + + power radix (sy - 2) * (rl + radix * rh) + = value xd (sy - 1) + + power radix (sy - 1) * !x1 + - power radix sy * cy2 } + value_sub_tail (pelts xd) xd.offset (xd.offset + p2i sy - 2); + assert { value xd (sy - 1) + = value xd (sy - 2) + + power radix (sy - 2) * !x0 + by (pelts xd)[xd.offset + sy - 2] = !x0 + so value xd (sy - 1) + = value_sub (pelts xd) xd.offset (xd.offset + sy - 1) + = value_sub (pelts xd) xd.offset (xd.offset + sy - 2) + + power radix (sy - 2) * !x0 + = value xd (sy - 2) + + power radix (sy - 2) * !x0 }; + assert { rl + radix * rh - cy + = !x0 + radix * !x1 - power radix 2 * cy2 + by + (!x0 - radix * cy1 = rl - cy + by + !x0 = mod (rl - cy) radix + so - radix < rl - cy < radix + so (if rl < cy + then cy1 = 1 + /\ (- radix < rl - cy < 0 + so + div (rl - cy) radix = - 1 + so rl - cy + = radix * div (rl - cy) radix + + mod (rl - cy) radix + = !x0 - radix + = !x0 - radix * cy1) + else cy1 = 0 /\ rl - cy = l2i !x0)) } + (* nonlinear *) + (* refl example *) + (* assert { value xd (sy - 2) + - power radix (sy - 2) * cy + + power radix (sy - 2) * + (rl + radix * rh) + = value xd (sy - 1) + + power radix (sy - 1) * !x1 + - power radix sy * cy2 + by + (rl + radix * rh - cy + = !x0 + radix * !x1 - radix * radix * cy2 + by + (!x0 - radix * cy1 = rl - cy + by + !x0 = mod (rl - cy) radix + so - radix < rl - cy < radix + so (if rl < cy + then cy1 = 1 + /\ (- radix < rl - cy < 0 + so + div (rl - cy) radix = - 1 + so rl - cy + = radix * div (rl - cy) radix + + mod (rl - cy) radix + = !x0 - radix + = !x0 - radix * cy1) + else cy1 = 0 /\ rl - cy = l2i !x0) + ) + so !x1 - radix * cy2 = rh - cy1 + so radix * !x1 - radix * radix * cy2 + = radix * rh - radix * cy1 + so radix * rh + = radix * cy1 + + radix * !x1 - radix * radix * cy2 + so rl + radix * rh - cy + = rl - cy + radix * rh + = !x0 - radix * cy1 + radix * rh + = !x0 - radix * cy1 + + radix * cy1 + + radix * !x1 - radix * radix * cy2 + = !x0 + radix * !x1 - radix * radix * cy2 + ) + so + ( - power radix (sy - 2) * cy + + power radix (sy - 2) * (rl + radix * rh) + = power radix (sy - 2) + * (rl + radix * rh - cy) + = power radix (sy - 2) + * (!x0 + radix * !x1 - radix * radix * cy2) + = power radix (sy - 2) * !x0 + + power radix (sy - 1) * !x1 + - power radix sy * cy2 + by power radix (sy - 2) * radix = power radix (sy - 1) + so power radix (sy - 2) * radix * radix = power radix sy + ) + so value xd (sy - 2) + - power radix (sy - 2) * cy + + power radix (sy - 2) * (rl + radix * rh) + = value xd (sy - 2) + + power radix (sy - 2) * !x0 + + power radix (sy - 1) * !x1 + - power radix sy * cy2 + = value xd (sy - 1) + + power radix (sy - 1) * !x1 + - power radix sy * cy2 + }*) + end; + end; + if [@ex:unlikely] (not (Limb.(=) cy2 limb_zero)) + then begin + label Adjust in + assert { cy2 = 1 }; + begin ensures { !ql > 0 } + value_sub_lower_bound (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_upper_bound (pelts xd) xd.offset (xd.offset + p2i sy - 1); + assert { !ql > 0 + by + (value xd (sy - 1) + + power radix (sy - 1) * !x1 + - power radix sy * cy2 + < 0 + by + value xd (sy - 1) < power radix (sy - 1) + so !x1 <= radix - 1 + so value xd (sy - 1) + + power radix (sy - 1) * !x1 + < power radix (sy - 1) + + power radix (sy - 1) * !x1 + = power radix (sy - 1) * (1 + !x1) + <= power radix (sy - 1) * radix + = power radix sy + so value xd (sy - 1) + + power radix (sy - 1) * !x1 + - power radix sy * cy2 + < power radix sy - power radix sy * cy2 + = 0 + ) + so value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + < 0 + so (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) >= 0 + by value (xd at SubProd) sy >= 0 + so !x1 at StartLoop >= 0 + so power radix sy * (!x1 at StartLoop) >= 0 + ) + so !ql * vy > 0 + so vy = value_sub (pelts y) + y.offset (y.offset + sy - 1) + + power radix (sy - 1) * dh + so dh > 0 + so vy > 0 + }; + end; + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 2); + let ghost vly = value y (p2i sy - 2) in + assert { vy = vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh + by (pelts y)[y.offset + sy - 1] = dh + so (pelts y)[y.offset + sy - 2] = dl + so + vy = value y (sy - 1) + + power radix (sy - 1) * dh + = vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh }; + begin + ensures { value xd (sy - 1) + + power radix (sy - 1) * !x1 + >= power radix sy - vy } + assert { value xd (sy - 1) + + power radix (sy - 1) * !x1 + = power radix sy + value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy }; + assert { value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + >= - vy + by + value (xd at SubProd) sy + = vlx + power radix (sy - 2) * (xp0 + radix * xp1) + so xp0 + radix * xp1 + radix * radix * (!x1 at StartLoop) + = !ql * (dl + radix * dh) + rl + radix * rh + so power radix (sy - 1) = power radix (sy - 2) * radix + so vy = vly + power radix (sy - 2) * (dl + radix * dh) + so (!ql * vly < vy + by + vly <= power radix (sy - 2) + so !ql < radix + so !ql * vly <= !ql * power radix (sy - 2) + < radix * power radix (sy - 2) + = power radix (sy - 1) + so vy = vly + power radix (sy - 2) * (dl + radix * dh) + so dh >= div radix 2 > 1 + so vly >= 0 + so dl >= 0 + so vy >= power radix (sy - 2) * radix * dh + > power radix (sy - 2) * radix * 1 + = power radix (sy - 1) + ) + so - !ql * vly > - vy + so vlx >= 0 + so power radix sy = power radix (sy - 2) * radix * radix + so value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + = vlx + power radix (sy - 2) * (xp0 + radix * xp1) + + power radix sy * (!x1 at StartLoop) + - !ql * vy + = vlx + power radix (sy - 2) * (xp0 + radix * xp1) + + power radix (sy - 2) + * radix * radix * (!x1 at StartLoop) + - !ql * vy + = vlx + power radix (sy - 2) + * (xp0 + radix * xp1 + + radix * radix * (!x1 at StartLoop)) + - !ql * vy + = vlx + power radix (sy - 2) * + (!ql * (dl + radix * dh) + rl + radix * rh) + - !ql * vy + = vlx + power radix (sy - 2) * + (!ql * (dl + radix * dh) + rl + radix * rh) + - !ql * (vly + + power radix (sy - 2) * (dl + radix * dh)) + = vlx + power radix (sy - 2) * (rl + radix * rh) + - !ql * vly + >= power radix (sy - 2) * (rl + radix * rh) + - !ql * vly + >= - !ql * vly > - vy + }; + end; + let ghost xc = Array.copy (x.data) in + assert { forall j. x.offset <= j < x.offset + !i + -> (pelts x)[j] = xc.elts[j] + by + 0 <= x.offset <= j /\ j < x.offset + !i <= xc.Array.length + so 0 <= j < xc.Array.length + } ; + value_sub_frame (pelts x) xc.elts x.offset (x.offset + p2i !i); + let c = add_in_place xd y (Int32.(-) sy one) (Int32.(-) sy one) in + begin + ensures { value x !i + = value (x at Adjust) !i } + assert { forall j. x.offset <= j < x.offset + !i + -> (pelts x)[j] = xc.elts[j] + by + pelts (xd at Adjust) = pelts (x at Adjust) + so pelts x = pelts xd + so (pelts x)[j] = (pelts x at Adjust)[j] + so + ((pelts x at Adjust)[j] = xc.elts[j] + by + 0 <= j /\ j < xc.Array.length + ) } ; + value_sub_frame (pelts x) xc.elts x.offset (x.offset + p2i !i); + end; + label MidAdd in + begin + ensures { value xd (sy - 1) + power radix (sy - 1) * !x1 + = value (xd at Adjust) (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + + vy + - power radix sy } + assert { 0 <= c <= 1 + by + value xd (sy - 1) + c * power radix (sy - 1) + = value (xd at Adjust) (sy - 1) + + value y (sy - 1) + so + value (xd at Adjust) (sy - 1) + < power radix (sy - 1) + so value y (sy - 1) < power radix (sy - 1) + so value xd (sy - 1) >= 0 + so c * power radix (sy - 1) < 2 * power radix (sy - 1) + so let p = power radix (sy - 1) in + (c < 2 by c * p < 2 * p so p > 0) + }; + let ghost c' = div (l2i !x1 + l2i dh + l2i c) radix in + x1 := add_mod !x1 (add_mod dh c); + assert { !x1 + c' * radix = !x1 at Adjust + dh + c + by + (!x1 = mod (!x1 at Adjust + dh + c) radix + by + !x1 = mod (!x1 at Adjust + (mod (dh + c) radix)) radix + so mod (div (dh + c) radix * radix + !x1 at Adjust + + mod (dh + c) radix) radix + = mod (!x1 at Adjust + (mod (dh + c) radix)) radix + so !x1 = mod (div (dh + c) radix * radix + !x1 at Adjust + + mod (dh + c) radix) radix + = mod (!x1 at Adjust + dh + c) radix + ) + so (!x1 at Adjust) + dh + c + = div (!x1 at Adjust + dh + c) radix * radix + + mod (!x1 at Adjust + dh + c) radix + = c' * radix + !x1 + }; + assert { 0 <= c' <= 1 }; + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 1); + assert { value xd (sy - 1) + power radix (sy - 1) * !x1 + = value (xd at Adjust) (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + + vy + - power radix sy + by + value xd (sy - 1) + power radix (sy - 1) * c + = value (xd at Adjust) (sy - 1) + + value y (sy - 1) + so vy = value y (sy - 1) + + power radix (sy - 1) * dh + so value xd (sy - 1) + power radix (sy - 1) * c + + power radix (sy - 1) * (!x1 at Adjust) + + power radix (sy - 1) * dh + = value (xd at Adjust) (sy - 1) + + value y (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + + power radix (sy - 1) * dh + = value (xd at Adjust) (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + + vy + so value xd (sy - 1) + power radix (sy - 1) * c + + power radix (sy - 1) * (!x1 at Adjust) + + power radix (sy - 1) * dh + = value xd (sy - 1) + + power radix (sy - 1) * (c + dh + !x1 at Adjust) + = value xd (sy - 1) + + power radix (sy - 1) * (!x1 + radix * c') + = value xd (sy - 1) + + power radix (sy - 1) * !x1 + + power radix sy * c' + so value xd (sy - 1) + + power radix (sy - 1) * !x1 + + power radix sy * c' + = value (xd at Adjust) (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + + vy + so value (xd at Adjust) (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + >= power radix sy - vy + so value xd (sy - 1) < power radix (sy - 1) + so !x1 <= radix - 1 + so power radix (sy - 1) * !x1 + <= power radix (sy - 1) * (radix - 1) + so value xd (sy - 1) + + power radix (sy - 1) * !x1 + <= value xd (sy - 1) + + power radix (sy - 1) * (radix - 1) + < power radix (sy - 1) + + power radix (sy - 1) * (radix - 1) + = power radix sy + so c' <> 0 + so c' = 1 + }; + end; + ql := Limb.(-) !ql uone; + (* todo refl *) + assert { value xd (sy - 1) + power radix (sy - 1) * !x1 + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + by + value xd (sy - 1) + power radix (sy - 1) * !x1 + = value (xd at Adjust) (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + + vy + - power radix sy + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - (!ql at Adjust) * vy + + vy + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - (!ql + 1) * vy + + vy + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy }; + qp.contents <- C.incr !qp (-1); + value_sub_update_no_change (pelts q) (!qp).offset + ((!qp).offset + 1) + ((!qp).offset + p2i sx - p2i sy - p2i !i) + !ql; + C.set !qp !ql; + value_sub_head (pelts q) (!qp).offset + ((!qp).offset + p2i sx - p2i sy - p2i !i); + value_sub_tail (pelts x) x.offset (x.offset + p2i sy + p2i !i - 1); + value_sub_concat (pelts x) x.offset xd.offset (x.offset + s); + (* todo refl *) + assert { value (old x) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + by + value !qp (sx - sy - !i) + = !ql + radix * + value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) + so (value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) + = value (!qp at StartLoop) + (sx - sy - k) + by + (!qp at StartLoop).offset = (!qp).offset + 1 + so ((!qp).offset + sx - sy - !i) + - ((!qp).offset + 1) + = sx - sy - k + ) + so value !qp (sx - sy - !i) + = !ql + radix * value (!qp at StartLoop) + (sx - sy - k) + so (value x s + = value x !i + + power radix !i + * value xd (sy - 1) + by + xd.offset = x.offset + !i + so x.offset + s = xd.offset + sy - 1 + so pelts x = pelts xd + so x.offset + s - xd.offset = sy - 1 + so value_sub (pelts x) xd.offset (x.offset + s) + = value xd (sy - 1) + so value x s + = value_sub (pelts x) x.offset xd.offset + + power radix !i * value_sub (pelts x) xd.offset (x.offset + s) + = value x !i + + power radix !i * value xd (sy - 1) + ) + so (power radix s + = power radix !i * power radix (sy - 1) + by + let n = !i in + let m = sy - 1 in + let x = radix in + power x s = power x (n + m) + so (power x (n + m) = power x n * power x m + by 0 <= n + so 0 <= m + so forall x:int, n:int, m:int. + 0 <= n -> 0 <= m -> power x (n + m) = (power x n * power x m))) + so (value x s + power radix s * !x1 + = value x !i + + power radix !i * + (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy) + by value xd (sy - 1) + + power radix (sy - 1) * !x1 + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + so value x s + power radix s * !x1 + = value x !i + + power radix !i + * value xd (sy - 1) + + power radix (!i + sy - 1) * !x1 + = value x !i + + power radix !i + * value xd (sy - 1) + + power radix !i + * power radix (sy - 1) * !x1 + = value x !i + + power radix !i * + (value xd (sy - 1) + + power radix (sy - 1) * !x1) + = value x !i + + power radix !i * + (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy) + ) + so (value (x at StartLoop) (sy + k - 1) + = value (x at SubProd) !i + + power radix !i + * value (xd at SubProd) sy + by + value (x at StartLoop) (sy + k - 1) + = value_sub (pelts x at SubProd) (x at SubProd).offset + ((x at SubProd).offset + sy + k - 1) + = value_sub (pelts x at SubProd) (x at SubProd).offset xd.offset + + power radix (xd.offset - (x at SubProd).offset) + * value_sub (pelts x at SubProd) xd.offset + ((x at SubProd).offset + sy + k - 1) + so (x at SubProd).offset = x.offset + so xd.offset = x.offset + !i + so value_sub (pelts x at SubProd) (x at SubProd).offset xd.offset + = value (x at SubProd) !i + so power radix (xd.offset - x.offset) = power radix !i + so x.offset + sy + k - 1 - xd.offset = p2i sy + so value_sub (pelts x at SubProd) xd.offset + (x.offset + sy + k - 1) + = value (xd at SubProd) sy + ) + so (value x !i + = value (x at SubProd) !i + by + value x !i + = value (x at Adjust) !i + = value (x at SubProd) !i + ) + so power radix !i * power radix sy = power radix (!i + sy) + so value x s + power radix s * !x1 + - value (x at StartLoop) (sy + k - 1) + = value x !i + + power radix !i * + (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy) + - (value (x at SubProd) !i + + power radix !i + * value (xd at SubProd) sy) + = value x !i + + power radix !i * + (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy) + - (value x !i + + power radix !i + * value (xd at SubProd) sy) + = power radix !i + * (power radix sy * (!x1 at StartLoop) + - !ql * vy) + = power radix !i * power radix sy * (!x1 at StartLoop) + - power radix !i * !ql * vy + = power radix (!i + sy) * (!x1 at StartLoop) + - power radix !i * !ql * vy + = power radix (sy + k - 1) * (!x1 at StartLoop) + - power radix !i * !ql * vy + so value x s + power radix s * !x1 + = value (x at StartLoop) (sy + k - 1) + + power radix (sy + k - 1) * (!x1 at StartLoop) + - power radix !i * !ql * vy + so power radix (sx - sy - !i) + = radix * power radix (sx - sy - k) + so radix * power radix !i = power radix k + so (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = (!ql + radix * value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = (!ql + radix * value (!qp at StartLoop) + (sx - sy - k) + + qh * radix * power radix (sx - sy - k)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * radix * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value x s + + power radix s * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value (x at StartLoop) (sy + k - 1) + + power radix (sy + k - 1) * (!x1 at StartLoop) + - power radix !i * !ql * vy + = (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value (x at StartLoop) (sy + k - 1) + + power radix (sy + k - 1) * (!x1 at StartLoop) + = value (old x) sx + }; + assert { value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + < vy + by + (value xd (sy - 1) + power radix (sy - 1) * !x1 < vy + by + value xd (sy - 1) + power radix (sy - 1) * !x1 + = value (xd at Adjust) (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + + vy + - power radix sy + so value (xd at Adjust) (sy - 1) + < power radix (sy - 1) + so 1 + (!x1 at Adjust) <= radix + so value (xd at Adjust) (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + + vy + - power radix sy + < power radix (sy - 1) + + power radix (sy - 1) * (!x1 at Adjust) + + vy + - power radix sy + = power radix (sy - 1) * (1 + !x1 at Adjust) + + vy + - power radix sy + <= power radix (sy - 1) * radix + + vy + - power radix sy + = vy + ) + so pelts x = pelts xd + so xd.offset = !xp.offset + mdn + so value xd (sy - 1) + = value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + }; + assert { dl + radix * dh + >= (pelts x)[(!xp).offset] + radix * !x1 + by + vy = vly + power radix (sy - 2) + * (dl + radix * dh) + so value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + < vy + so !xp.offset + mdn + sy - 1 = !xp.offset + 1 + so power radix (sy - 1) = power radix (sy - 2) * radix + so - mdn = sy - 2 + so vy + > value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + 1) + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (- mdn) * (pelts x)[(!xp).offset] + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (sy - 2) * (pelts x)[(!xp).offset] + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (sy - 2) * (pelts x)[(!xp).offset] + + power radix (sy - 2) * radix * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1) + >= power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1) + so vly < power radix (sy - 2) + so vy < power radix (sy - 2) + + power radix (sy - 2) + * (dl + radix * dh) + = power radix (sy - 2) + * (1 + dl + radix * dh) + so power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1) + < power radix (sy - 2) * (1 + dl + radix * dh) + so power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1 + - (1 + dl + radix * dh)) + < 0 + so (pelts x)[(!xp).offset] + radix * !x1 + - (1 + dl + radix * dh) + < 0 + }; + end + else begin + qp.contents <- C.incr !qp (-1); + value_sub_update_no_change (pelts q) (!qp).offset + ((!qp).offset + 1) + ((!qp).offset + p2i sx - p2i sy - p2i !i) + !ql; + C.set !qp !ql; + value_sub_head (pelts q) (!qp).offset + ((!qp).offset + p2i sx - p2i sy - p2i !i); + assert { value !qp (sx - sy - !i) * vy + = !ql * vy + radix * + (value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) * vy) }; (*nonlinear*) + assert { value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) * vy + = (value !qp (sx - sy - !i) * vy at StartLoop) }; (*nonlinear*) + value_tail x (sy + !i - 1); + value_sub_concat (pelts x) x.offset xd.offset (x.offset + s); + (* todo refl *) + assert { cy2 = 0 }; + assert { value x !i = value (x at SubProd) !i }; + assert { value x s = value x !i + power radix !i * value xd (sy-1) + by xd.offset = x.offset + !i + so x.offset + s = xd.offset + sy - 1 + so pelts x = pelts xd + so x.offset + s - xd.offset = sy - 1 + so value_sub (pelts x) xd.offset (x.offset + s) + = value xd (sy - 1) + so value x s + = value_sub (pelts x) x.offset xd.offset + + power radix !i * value_sub (pelts x) xd.offset (x.offset + s) + = value x !i + + power radix !i * value xd (sy - 1)}; (*lifted from assertion*) + assert { (value !qp (sx - sy - !i) + qh * power radix (sx - sy - !i)) + * vy + = value !qp (sx - sy - !i) * vy + + qh * vy * power radix (sx - sy - !i) }; (*nonlinear*) + assert { ((value !qp (sx - sy - !i) + qh * power radix (sx - sy - !i)) + * vy at StartLoop) + = (value !qp (sx - sy - !i) * vy + + qh * vy * power radix (sx - sy - !i) at StartLoop) }; (*nonlinear*) + assert { value x s = value x (sy + !i - 1) }; + assert { value (xd at SmallDiv) sy = + vlx + power radix (sy - 2) * xp0 + + power radix (sy - 1) * xp1 }; (*nonlinear*) + assert { value (x at SubProd) (sy + (!i at StartLoop) - 1) + = value (x at SubProd) !i + power radix !i * value (xd at SubProd) sy }; + assert { value (old x) sx = + (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + (*by + value !qp (sx - sy - !i) + = !ql + radix * + value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) + so (value_sub (pelts q) ((!qp).offset + 1) + ((!qp).offset + sx - sy - !i) + = value (!qp at StartLoop) + (sx - sy - k) + by + (!qp at StartLoop).offset = (!qp).offset + 1 + so ((!qp).offset + sx - sy - !i) + - ((!qp).offset + 1) + = sx - sy - k + ) + so value !qp (sx - sy - !i) + = !ql + radix * value (!qp at StartLoop) + (sx - sy - k) + so (value x s + = value x !i + + power radix !i + * value xd (sy - 1) + by + xd.offset = x.offset + !i + so x.offset + s = xd.offset + sy - 1 + so pelts x = pelts xd + so x.offset + s - xd.offset = sy - 1 + so value_sub (pelts x) xd.offset (x.offset + s) + = value xd (sy - 1) + so value x s + = value_sub (pelts x) x.offset xd.offset + + power radix !i * value_sub (pelts x) xd.offset (x.offset + s) + = value x !i + + power radix !i * value xd (sy - 1) + ) + so (power radix s + = power radix !i * power radix (sy - 1) + by + let n = !i in + let m = sy - 1 in + let x = radix in + power x s = power x (n + m) + so (power x (n + m) = power x n * power x m + by 0 <= n + so 0 <= m + so forall x:int, n:int, m:int. + 0 <= n -> 0 <= m -> power x (n + m) = (power x n * power x m))) + so (value x s + power radix s * !x1 + = value x !i + + power radix !i * + (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy) + by + cy2 = 0 + so value xd (sy - 1) + + power radix (sy - 1) * !x1 + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + so value x s + power radix s * !x1 + = value x !i + + power radix !i + * value xd (sy - 1) + + power radix (!i + sy - 1) * !x1 + = value x !i + + power radix !i + * value xd (sy - 1) + + power radix !i + * power radix (sy - 1) * !x1 + = value x !i + + power radix !i * + (value xd (sy - 1) + + power radix (sy - 1) * !x1) + = value x !i + + power radix !i * + (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy) + ) + so (value (x at StartLoop) (sy + k - 1) + = value (x at SubProd) !i + + power radix !i + * value (xd at SubProd) sy + by + value (x at StartLoop) (sy + k - 1) + = value_sub (pelts x at SubProd) (x at SubProd).offset + ((x at SubProd).offset + sy + k - 1) + = value_sub (pelts x at SubProd) (x at SubProd).offset xd.offset + + power radix (xd.offset - (x at SubProd).offset) + * value_sub (pelts x at SubProd) xd.offset + ((x at SubProd).offset + sy + k - 1) + so (x at SubProd).offset = x.offset + so xd.offset = x.offset + !i + so value_sub (pelts x at SubProd) (x at SubProd).offset xd.offset + = value (x at SubProd) !i + so power radix (xd.offset - x.offset) = power radix !i + so x.offset + sy + k - 1 - xd.offset = p2i sy + so value_sub (pelts x at SubProd) xd.offset + (x.offset + sy + k - 1) + = value (xd at SubProd) sy + ) + so (value x !i + = value (x at SubProd) !i + ) + so power radix !i * power radix sy = power radix (!i + sy) + so value x s + power radix s * !x1 + - value (x at StartLoop) (sy + k - 1) + = value x !i + + power radix !i * + (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy) + - (value (x at SubProd) !i + + power radix !i + * value (xd at SubProd) sy) + = value x !i + + power radix !i * + (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy) + - (value x !i + + power radix !i + * value (xd at SubProd) sy) + = power radix !i + * (power radix sy * (!x1 at StartLoop) + - !ql * vy) + = power radix !i * power radix sy * (!x1 at StartLoop) + - power radix !i * !ql * vy + = power radix (!i + sy) * (!x1 at StartLoop) + - power radix !i * !ql * vy + = power radix (sy + k - 1) * (!x1 at StartLoop) + - power radix !i * !ql * vy + so value x s + power radix s * !x1 + = value (x at StartLoop) (sy + k - 1) + + power radix (sy + k - 1) * (!x1 at StartLoop) + - power radix !i * !ql * vy + so power radix (sx - sy - !i) + = radix * power radix (sx - sy - k) + so radix * power radix !i = power radix k + so (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = (!ql + radix * value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = (!ql + radix * value (!qp at StartLoop) + (sx - sy - k) + + qh * radix * power radix (sx - sy - k)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * radix * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value x s + + power radix s * !x1 + = !ql * vy * power radix !i + + (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value (x at StartLoop) (sy + k - 1) + + power radix (sy + k - 1) * (!x1 at StartLoop) + - power radix !i * !ql * vy + = (value (!qp at StartLoop) + (sx - sy - k) + + qh * power radix (sx - sy - k)) + * vy * power radix k + + value (x at StartLoop) (sy + k - 1) + + power radix (sy + k - 1) * (!x1 at StartLoop) + = value (old x) sx *) + }; + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 2); + let ghost vly = value y (p2i sy - 2) in + assert { vy = vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh + by (pelts y)[y.offset + sy - 1] = dh + so (pelts y)[y.offset + sy - 2] = dl + so + vy = value y (sy - 1) + + power radix (sy - 1) * dh + = vly + power radix (sy - 2) * dl + + power radix (sy - 1) * dh }; + assert { value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + < vy + by + pelts x = pelts xd + so xd.offset = !xp.offset + mdn + so !xp.offset + mdn + sy - 1 = xd.offset + sy - 1 + so + value xd (sy - 1) + = value_sub (pelts xd) xd.offset (xd.offset + sy - 1) + = value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + so value xd (sy - 1) + + power radix (sy - 1) * !x1 + - power radix sy * cy2 + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + so cy2 = 0 + so value xd (sy - 1) + + power radix (sy - 1) * !x1 + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + so !ql * (dl + radix * dh) + + (rl + radix * rh) + = xp0 + + radix * xp1 + + radix * radix * (!x1 at StartLoop) + so vy = vly + power radix (sy - 2) + * (dl + radix * dh) + so !ql * vy + = power radix (sy - 2) * + (xp0 + + radix * xp1 + + radix * radix * (!x1 at StartLoop)) + - power radix (sy - 2) * (rl + radix * rh) + + !ql * vly + so value (xd at SubProd) sy + = vlx + + power radix (sy - 2) * (xp0 + radix * xp1) + so power radix sy + = power radix (sy - 2) * radix * radix + so (value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + < vy + by + (!ql * vly >= 0 + by !ql >= 0 so vly >= 0) + so (power radix (sy - 2) * (rl + radix * rh) + <= power radix (sy - 2) + * (dl + radix * dh) + - power radix (sy - 2) + by + rl + radix * rh <= dl + radix * dh - 1 + so power radix (sy - 2) >= 0 + so power radix (sy - 2) * (rl + radix * rh) + <= power radix (sy - 2) + * (dl + radix * dh - 1) + = power radix (sy - 2) + * (dl + radix * dh) + - power radix (sy - 2) + ) + so vlx < power radix (sy - 2) + so value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + = vlx + + power radix (sy - 2) * (xp0 + radix * xp1) + + power radix sy * (!x1 at StartLoop) + - !ql * vy + = vlx + + power radix (sy - 2) * + (xp0 + radix * xp1 + + radix * radix * (!x1 at StartLoop)) + - !ql * vy + = vlx + + power radix (sy - 2) * + (xp0 + radix * xp1 + + radix * radix * (!x1 at StartLoop)) + - (power radix (sy - 2) * + (xp0 + + radix * xp1 + + radix * radix * (!x1 at StartLoop)) + - power radix (sy - 2) * (rl + radix * rh) + + !ql * vly) + = vlx + + power radix (sy - 2) * (rl + radix * rh) + - !ql * vly + <= vlx + + power radix (sy - 2) * (rl + radix * rh) + <= vlx + + power radix (sy - 2) + * (dl + radix * dh) + - power radix (sy - 2) + < power radix (sy - 2) + + power radix (sy - 2) + * (dl + radix * dh) + - power radix (sy - 2) + = power radix (sy - 2) * (dl + radix * dh) + = vy - vly <= vy + ) + so value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + = value xd (sy - 1) + + power radix (sy - 1) * !x1 + = value (xd at SubProd) sy + + power radix sy * (!x1 at StartLoop) + - !ql * vy + < vy + }; + value_sub_tail (pelts x) (!xp.offset + p2i mdn) (!xp.offset); + value_sub_upper_bound (pelts y) (y.offset) (y.offset + p2i sy - 2); + value_sub_lower_bound (pelts x) (!xp.offset + p2i mdn) (!xp.offset); + assert { dl + radix * dh + >= (pelts x)[(!xp).offset] + radix * !x1 + by + vy = vly + power radix (sy - 2) + * (dl + radix * dh) + so value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + < vy + so !xp.offset + mdn + sy - 1 = !xp.offset + 1 + so power radix (sy - 1) = power radix (sy - 2) * radix + so - mdn = sy - 2 + so vy + > value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + mdn + sy - 1) + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) + (!xp.offset + 1) + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (- mdn) * (pelts x)[(!xp).offset] + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (sy - 2) * (pelts x)[(!xp).offset] + + power radix (sy - 1) * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (sy - 2) * (pelts x)[(!xp).offset] + + power radix (sy - 2) * radix * !x1 + = value_sub (pelts x) (!xp.offset + mdn) (!xp.offset) + + power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1) + >= power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1) + so vly < power radix (sy - 2) + so vy < power radix (sy - 2) + + power radix (sy - 2) + * (dl + radix * dh) + = power radix (sy - 2) + * (1 + dl + radix * dh) + so power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1) + < power radix (sy - 2) * (1 + dl + radix * dh) + so power radix (sy - 2) + * ((pelts x)[(!xp).offset] + radix * !x1 + - (1 + dl + radix * dh)) + < 0 + so (pelts x)[(!xp).offset] + radix * !x1 + - (1 + dl + radix * dh) + < 0 + }; + end; + end; + done; + label EndLoop in + assert { !i = 0 }; + assert { !xp.offset = x.offset + sy - 2 }; + value_sub_update_no_change (pelts x) (!xp.offset + 1) + x.offset (!xp.offset) !x1; + C.set_ofs !xp 1 !x1; + assert { value x (sy - 1) = + value (x at EndLoop) (sy - 1) + by pelts x = Map.set (pelts x at EndLoop) (x.offset + sy - 1) !x1 }; + value_sub_tail (pelts x) x.offset (!xp.offset+1); + (* todo refl *) + assert { value (old x) sx = + (value q (sx - sy) + + power radix (sx - sy) * qh) + * value y sy + + value x sy + by + value x sy + = value x (sy - 1) + + power radix (sy - 1) * !x1 + so vy = value y sy + so value (old x) sx + = (value !qp (sx - sy - !i) + + qh * power radix (sx - sy - !i)) + * vy * power radix !i + + value x (sy + !i - 1) + + power radix (sy + !i - 1) * !x1 + = (value !qp (sx - sy) + + qh * power radix (sx - sy)) + * vy * 1 + + value x (sy - 1) + + power radix (sy - 1) * !x1 + = (value !qp (sx - sy) + + qh * power radix (sx - sy)) + * value y sy + + value x sy }; + qh + + let divmod_2 (q x y:t) (sx:int32) : limb + requires { 2 <= sx } + requires { valid x sx } + requires { valid y 2 } + requires { valid q (sx - 2) } + requires { (pelts y)[y.offset + 1] >= div radix 2 } + ensures { value (old x) sx = + (value q (sx - 2) + + power radix (sx - 2) * result) + * value y 2 + + value x 2 } + ensures { value x 2 < value y 2 } + ensures { 0 <= result <= 1 } + = + let one = Int32.of_int 1 in + let zero = Int32.of_int 0 in + let two = Int32.of_int 2 in + let uzero = Limb.of_int 0 in + let uone = Limb.of_int 1 in + let xp = ref (C.incr x (Int32.(-) sx two)) in + let dh = C.get_ofs y one in + let dl = C.get y in + let rh = ref (C.get_ofs !xp one) in + let rl = ref (C.get !xp) in + let qh = ref uzero in + let lx = ref uzero in + assert { value y 2 = dl + radix * dh }; + let i = ref (Int32.(-) sx two) in + let dinv = reciprocal_word_3by2 dh dl in + ([@vc:sp] if (Limb.(>=) !rh dh && ([@vc:sp] Limb.(>) !rh dh || Limb.(>=) !rl dl)) + then + label Adjust in + begin + ensures { value x sx + = (value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + * value y 2 * power radix !i + + value x !i + + power radix !i * (!rl + radix * !rh) } + ensures { !rl + radix * !rh < dl + radix * dh } + ensures { !qh = 1 } + let (r0, b) = sub_with_borrow !rl dl uzero in + let (r1, ghost b') = sub_with_borrow !rh dh b in + assert { b' = 0 }; + assert { r0 + radix * r1 = !rl + radix * !rh - (dl + radix * dh) }; + value_sub_tail (pelts x) x.offset (x.offset + p2i sx - 1); + value_sub_tail (pelts x) x.offset (x.offset + p2i sx - 2); + rh := r1; + rl := r0; + qh := uone; + assert { value x sx + = (value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + * value y 2 * power radix !i + + value x !i + + power radix !i * (!rl + radix * !rh) + by + value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) = 0 + so (value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + * value y 2 * power radix !i + + value x !i + + power radix !i * (!rl + radix * !rh) + = value y 2 * power radix !i + + value x !i + + power radix !i * (!rl + radix * !rh) + = value x !i + + power radix !i * (dl + radix * dh + !rl + radix * !rh) + = value x !i + + power radix !i * (!rl at Adjust + radix * !rh at Adjust) + = value x !i + + power radix !i * !rl at Adjust + + power radix (!i+1) * !rh at Adjust + = value x sx + }; + end + else + begin + ensures { value x sx + = (value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + * value y 2 * power radix !i + + value x !i + + power radix !i * (!rl + radix * !rh) } + ensures { !rl + radix * !rh < dl + radix * dh } + ensures { !qh = 0 } + value_sub_tail (pelts x) x.offset (x.offset + p2i sx - 1); + value_sub_tail (pelts x) x.offset (x.offset + p2i sx - 2); + end); + while (Int32.(>) !i zero) do + variant { p2i !i } + invariant { 0 <= !i <= sx - 2 } + invariant { !xp.offset = x.offset + !i } + invariant { plength !xp = plength x } + invariant { !xp.min = x.min } + invariant { !xp.max = x.max } + invariant { pelts !xp = pelts x } + invariant { value x sx + = (value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + * value y 2 * power radix !i + + value x !i + + power radix !i * (!rl + radix * !rh) } + invariant { !rl + radix * !rh < dl + radix * dh } + label StartLoop in + let ghost k = p2i !i in + xp.contents <- C.incr !xp (-1); + lx := C.get !xp; + label Got in + let (qu, r0, r1) = div3by2_inv !rh !rl !lx dh dl dinv in + rh := r1; + rl := r0; + i := Int32.(-) !i one; + C.set_ofs q !i qu; + assert { qu * (dl + radix * dh) + r0 + radix * r1 + = !lx + radix * (!rl at StartLoop) + + radix * radix * (!rh at StartLoop) + by + radix * ((!rl at StartLoop) + radix * (!rh at StartLoop)) + = radix * (!rl at StartLoop) + radix * radix * (!rh at StartLoop) + so + qu * (dl + radix * dh) + r0 + radix * r1 + = !lx + radix * ((!rl at StartLoop) + radix * (!rh at StartLoop)) + = !lx + radix * (!rl at StartLoop) + + radix * radix * (!rh at StartLoop) + }; + value_sub_head (pelts q) (q.offset + p2i !i) (q.offset + p2i sx - 2); + value_sub_tail (pelts x) x.offset (x.offset + p2i !i); + assert { value x sx + = (value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + * value y 2 * power radix !i + + value x !i + + power radix !i * (!rl + radix * !rh) + by + value x k = value x !i + power radix !i * !lx + so value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + = qu + radix + * value_sub (pelts q) (q.offset + k) (q.offset + sx - 2) + so power radix (sx - 2 - !i) = radix * power radix (sx - 2 - k) + so + (value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + = qu + radix + * (value_sub (pelts q) (q.offset + k) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + so power radix !i * radix = power radix k + so ((value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + * value y 2 * power radix !i + = power radix !i * qu * (dl + radix * dh) + + (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + * value y 2 * power radix k + by + (value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + * value y 2 * power radix !i + = (qu + radix + * (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k))) + * value y 2 * power radix !i + = power radix !i * qu * (dl + radix * dh) + + radix * (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + * value y 2 * power radix !i + = power radix !i * qu * (dl + radix * dh) + + (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + * value y 2 * power radix k) + so (value_sub (pelts q) (q.offset + !i) (q.offset + sx - 2) + + !qh * power radix (sx - 2 - !i)) + * value y 2 * power radix !i + + value x !i + + power radix !i * (!rl + radix * !rh) + = power radix !i * qu * (dl + radix * dh) + + (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + * value y 2 * power radix k + + value x !i + + power radix !i * (!rl + radix * !rh) + = (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + * value y 2 * power radix k + + value x !i + + power radix !i * (qu * (dl + radix * dh) + + !rl + radix * !rh) + = (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + * value y 2 * power radix k + + value x !i + + power radix !i + * (!lx + radix * (!rl at StartLoop) + + radix * radix * (!rh at StartLoop)) + = (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + * value y 2 * power radix k + + value x !i + + power radix !i * !lx + + power radix !i * (radix * (!rl at StartLoop + + radix * !rh at StartLoop)) + = (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + * value y 2 * power radix k + + value x k + + power radix !i * (radix * (!rl at StartLoop + + radix * !rh at StartLoop)) + = (value_sub (pelts q) (q.offset + k) + (q.offset + sx - 2) + + !qh * power radix (sx - 2 - k)) + * value y 2 * power radix k + + value x k + + power radix k * (!rl at StartLoop + + radix * !rh at StartLoop) + = value x sx + }; + done; + assert { !i = 0 }; + assert { value x sx + = (value_sub (pelts q) q.offset (q.offset + sx - 2) + + !qh * power radix (sx - 2)) + * value y 2 + + !rl + radix * !rh + by power radix !i = 1 }; + C.set_ofs x one !rh; + C.set x !rl; + assert { value x 2 = !rl + radix * !rh + by (pelts x)[x.offset] = !rl + /\ (pelts x)[x.offset + 1] = !rh}; + !qh + + +(* val sub_limb_in_place (x:t) (y:limb) (sz:int32) : limb*) + + (** [div_qr q r x y sx sy] divides [(x,sx)] by [(y,sy)], writes the quotient + in [(q, (sx-sy))] and the remainder in [(r, sy)]. Corresponds to + [mpn_tdiv_qr]. *) + let div_qr (q r x y nx ny:t) (sx sy:int32) : unit + requires { 1 <= sy <= sx <= (Int32.max_int32 - 1) } + requires { valid x sx } + requires { valid y sy } + requires { valid q (sx - sy + 1) } + requires { valid r sy } + requires { valid nx (sx + 1) } + requires { valid ny sy } + requires { (pelts y)[y.offset + sy - 1] > 0 } + ensures { value x sx + = value q (sx - sy + 1) * value y sy + + value r sy } + ensures { value r sy < value y sy } + = + label Start in + let one = Int32.of_int 1 in + let limb_zero = Limb.of_int 0 in + let zero = Int32.of_int 0 in + let two = Int32.of_int 2 in + value_sub_tail (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_lower_bound (pelts y) y.offset (y.offset + p2i sy - 1); + assert { value y sy >= power radix (sy - 1) }; + if (Int32.(=) sy one) + then + let lr = divmod_1 q x (C.get y) sx in + C.set r lr + else + if (Int32.(=) sy two) + then + let clz = clz_ext (C.get_ofs y (Int32.(-) sy one)) in + let ghost p = power 2 (p2i clz) in + if Int32.(=) clz zero + then begin + copy nx x sx; + value_sub_shift_no_change (pelts x) x.offset (p2i sx) (p2i sx) limb_zero; + C.set_ofs nx sx limb_zero; + value_sub_frame_shift (pelts x) (pelts nx) x.offset nx.offset (p2i sx); + label Div2_ns in + let ghost _qh = divmod_2 q nx y (Int32.(+) sx one) in + copy r nx sy; + assert { value x sx + = value q (sx - sy + 1) * value y sy + + value r sy + by value r sy = value nx sy + so value (nx at Div2_ns) (sx + 1) < power radix sx + so value (nx at Div2_ns) (sx + 1) + = value (nx at Div2_ns) sx + so (_qh = 0 + by + power radix sx + > value (nx at Div2_ns) (sx + 1) + = (value q (sx - 1) + power radix (sx - 1) * _qh) + * value y 2 + + value nx 2 + so value nx 2 >= 0 + so value y 2 >= radix + so value q (sx - 1) >= 0 + so _qh >= 0 + so (value q (sx - 1) + + power radix (sx - 1) * _qh) >= 0 + so (value q (sx - 1) + power radix (sx - 1) * _qh) + * value y 2 + + value nx 2 + >= (value q (sx - 1) + + power radix (sx - 1) * _qh) + * value y 2 + >= (value q (sx - 1) + + power radix (sx - 1) * _qh) + * radix + >= power radix (sx - 1) * _qh * radix + = power radix sx * _qh + so power radix sx > power radix sx * _qh + ) + so value x sx = value (nx at Div2_ns) sx + }; + () + end + else begin + let ghost _c = lshift ny y sy (Limb.of_int32 clz) in + begin + ensures { normalized ny sy } + ensures { value ny sy = power 2 clz * value y sy } + let ghost dh = (pelts y)[y.offset + p2i sy - 1] in + assert { value y sy + = value y (sy - 1) + power radix (sy - 1) * dh }; + value_sub_upper_bound (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_tail (pelts ny) ny.offset (ny.offset + p2i sy - 1); + value_sub_upper_bound (pelts ny) ny.offset (ny.offset + p2i sy - 1); + let ghost ndh = (pelts ny)[ny.offset + p2i sy - 1] in + assert { normalized ny sy + /\ value ny sy = power 2 clz * value y sy + by + value y sy < (dh + 1) * power radix (sy - 1) + so value ny sy + (power radix sy) * _c + = power 2 clz * value y sy + = power 2 clz + * (value y (sy - 1) + + dh * power radix (sy - 1)) + so power 2 clz * dh <= radix - power 2 clz + so value ny sy + (power radix sy) * _c + = power 2 clz * value y (sy - 1) + + power 2 clz * dh * power radix (sy - 1) + < power 2 clz * power radix (sy - 1) + + power 2 clz * dh * power radix (sy - 1) + <= power 2 clz * power radix (sy - 1) + + (radix - power 2 clz) * power radix (sy - 1) + = radix * power radix (sy - 1) + = power radix sy + so _c = 0 + so value ny sy + = power 2 clz * value y sy + so value y sy >= dh * power radix (sy - 1) + so value ny sy + >= power 2 clz * dh * power radix (sy - 1) + so value ny sy = + value ny (sy - 1) + power radix (sy - 1) * ndh + < power radix (sy - 1) + power radix (sy - 1) * ndh + = power radix (sy - 1) * (ndh + 1) + so power radix (sy - 1) * (ndh + 1) + > power radix (sy - 1) * (power 2 clz * dh) + so ndh + 1 > power 2 clz * dh + so ndh >= power 2 clz * dh + so 2 * power 2 clz * dh >= radix + so 2 * ndh >= radix + so ndh >= div radix 2 + }; + end; + let h = lshift nx x sx (Limb.of_int32 clz) in + C.set_ofs nx sx h; + begin + ensures { value nx (sx + 1) + = p * value x sx } + value_sub_tail (pelts nx) nx.offset (nx.offset + p2i sx); + assert { value nx (sx + 1) + = p * value x sx + by + value nx sx + power radix sx * h + = p * value x sx + so value nx (sx + 1) + = value nx sx + power radix sx * h + } + end; + label Div2_s in + (* TODO don't add 1 when not needed, cf "adjust" in GMP algo *) + let ghost _qh = divmod_2 q nx ny (Int32.(+) sx one) in + let ghost _l = rshift r nx sy (Limb.of_int32 clz) in + begin ensures { value nx 2 = p * value r 2 } + assert { _l = 0 + by + (mod (value nx sy) p = 0 + by + value (nx at Div2_s) (sx + 1) + = (value q (sx - 1) + power radix (sx - 1) * _qh) + * value ny sy + + value nx sy + so value (nx at Div2_s) (sx + 1) + = p * value x sx + so value ny sy = p * value y sy + so value nx sy + = value (nx at Div2_s) (sx + 1) + - (value q (sx - 1) + + power radix (sx - 1) * _qh) + * value ny sy + = p * value x sx + - p * (value q (sx - 1) + + power radix (sx - 1) * _qh) + * value y sy + = p * (value x sx + - (value q (sx - 1) + + power radix (sx - 1) * _qh) + * value y sy) + so let n = (value x sx + - (value q (sx - 1) + + power radix (sx - 1) * _qh) + * value y sy) + in + value nx sy = p * n + so value nx sy >= 0 + so p > 0 + so n >= 0 + so mod (value nx sy) p + = mod (p * n) p + = mod ((p*n)+0) p + = mod 0 p + = 0 + ) + so _l + radix * value r sy + = power 2 (Limb.length - clz) * (value nx sy) + so let a = div (value nx sy) p in + value nx sy = p * a + so power 2 (Limb.length - clz) * p = radix + so power 2 (Limb.length - clz) * (value nx sy) + = power 2 (Limb.length - clz) * (p * a) + = (power 2 (Limb.length - clz) * p) * a + = radix * a + so mod (radix * value r sy + _l) radix + = mod _l radix + so mod (radix * value r sy + _l) radix + = mod (radix * a) radix = 0 + so mod _l radix = 0 + so 0 <= _l < radix + }; + assert { value nx 2 = p * value r 2 + by + radix * value r 2 + = power 2 (Limb.length - clz) * value nx 2 + so p * power 2 (Limb.length - clz) + = radix + so p * radix * value r 2 + = p * power 2 (Limb.length - clz) * value nx 2 + = radix * value nx 2 + so p * value r 2 = value nx 2 + } + end; + assert { value x sx + = value q (sx - sy + 1) * value y sy + + value r sy + by + value (nx at Div2_s) (sx + 1) + = (value q (sx - 1) + power radix (sx - 1) * _qh) + * value ny 2 + + value nx 2 + so value (nx at Div2_s) (sx + 1) + = p * value x sx + so value ny 2 = p * value y 2 + so (_qh = 0 + by + value x sx < power radix sx + so value y 2 >= radix + so value ny 2 >= p * radix + so value q (sx - 1) >= 0 + so value nx 2 >= 0 + so (value q (sx - 1) + power radix (sx - 1) * _qh) + >= 0 + so (value q (sx - 1) + power radix (sx - 1) * _qh) + * value ny 2 + + value nx 2 + >= (value q (sx - 1) + + power radix (sx - 1) * _qh) + * value ny 2 + >= (value q (sx - 1) + + power radix (sx - 1) * _qh) + * (p * radix) + >= power radix (sx - 1) * _qh * p * radix + = power radix sx * p * _qh + so power radix sx * p + > value (nx at Div2_s) (sx + 1) + >= power radix sx * p * _qh + ) + so value nx 2 = p * value r 2 + so p * value x sx + = value q (sx - 1) * p * value y 2 + + p * value r 2 + = p * (value q (sx - 1) * value y 2 + + value r 2) + }; + () + end + else + (* let qn = ref (Int32.(-) (Int32.(+) sx one) sy) in + if (Int32.(>=) (Int32.(+) !qn !qn) sx) + then*) begin + let adjust = + if Limb.(>=) (get_ofs x (Int32.(-) sx one)) + (get_ofs y (Int32.(-) sy one)) + then one + else zero + in + let clz = clz_ext (C.get_ofs y (Int32.(-) sy one)) in + let ghost p = power 2 (p2i clz) in + if Int32.(=) clz zero + then begin + copy nx x sx; + value_sub_shift_no_change (pelts x) x.offset + (p2i sx) (p2i sx) limb_zero; + C.set_ofs nx sx limb_zero; + value_sub_frame_shift (pelts x) (pelts nx) x.offset nx.offset (p2i sx); + assert { value y sy * (power radix (sx - sy + adjust)) + > value nx (sx + adjust) + by + let dh = (pelts y)[y.offset + sy - 1] in + value y sy >= dh * power radix (sy - 1) + so value nx (sx + adjust) = value nx sx = value x sx + so [@case_split] + ((adjust = 1 + so value x sx < power radix sx + so value y sy * power radix (sx - sy + adjust) + >= dh * power radix (sy - 1) + * power radix (sx - sy + adjust) + = dh * power radix ((sy - 1) + (sx - sy + adjust)) + = dh * power radix sx + so dh >= div radix 2 > 1 + so dh * power radix sx > power radix sx ) + \/ + (adjust = 0 + so let ah = (pelts x)[x.offset + sx - 1] in + value x sx < (ah + 1) * power radix (sx - 1) + so ah + 1 <= dh + so value x sx < dh * power radix (sx - 1) + so value y sy * power radix (sx - sy + adjust) + = value y sy * power radix (sx - sy) + >= dh * power radix (sy - 1) + * power radix (sx - sy) + = dh * power radix (sy - 1 + sx - sy) + = dh * power radix (sx - 1))) }; + label Div_ns in + let ghost _qh = div_sb_qr q nx y (Int32.(+) sx adjust) sy in + copy r nx sy; + assert { value x sx + = value q (sx - sy + adjust) * value y sy + + value r sy + by value r sy = value nx sy + so value (nx at Div_ns) (sx + adjust) = value x sx < power radix sx + so value (nx at Div_ns) (sx + adjust) + = value (nx at Div_ns) sx + so (_qh = 0 + by + value (nx at Div_ns) (sx + adjust) + = (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value y sy + + value nx sy + so value nx sy >= 0 + so value q (sx - sy + adjust) >= 0 + so _qh >= 0 + so (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) >= 0 + so (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value y sy + + value nx sy + >= (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value y sy + >= power radix (sx - sy + adjust) * _qh * value y sy + so _qh <> 1) + so value x sx = value (nx at Div_ns) sx + }; + label Ret_ns in + begin + ensures { value q (sx - sy + 1) + = value (q at Ret_ns) (sx - sy + adjust) } + if (Int32.(=) adjust zero) + then begin + value_sub_shift_no_change (pelts x) x.offset + (p2i sx) (p2i sx) limb_zero; + set_ofs q (Int32.(-) sx sy) limb_zero; + value_sub_tail (pelts q) q.offset (q.offset + p2i sx - p2i sy); + () + end + end + end + else begin + let ghost _c = lshift ny y sy (Limb.of_int32 clz) in + begin + ensures { normalized ny sy } + ensures { value ny sy + = power 2 clz * value y sy } + let ghost dh = (pelts y)[y.offset + p2i sy - 1] in + assert { value y sy + = value y (sy - 1) + power radix (sy - 1) * dh }; + value_sub_upper_bound (pelts y) y.offset (y.offset + p2i sy - 1); + value_sub_tail (pelts ny) ny.offset (ny.offset + p2i sy - 1); + value_sub_upper_bound (pelts ny) ny.offset (ny.offset + p2i sy - 1); + let ghost ndh = (pelts ny)[ny.offset + p2i sy - 1] in + assert { normalized ny sy + /\ value ny sy + = power 2 clz * value y sy + by + value y sy < (dh + 1) * power radix (sy - 1) + so value ny sy + (power radix sy) * _c + = power 2 clz * value y sy + = power 2 clz + * (value y (sy - 1) + + dh * power radix (sy - 1)) + so power 2 clz * dh <= radix - power 2 clz + so (_c = 0 + by + value ny sy + (power radix sy) * _c + = power 2 clz * value y (sy - 1) + + power 2 clz * dh * power radix (sy - 1) + < power 2 clz * power radix (sy - 1) + + power 2 clz * dh * power radix (sy - 1) + <= power 2 clz * power radix (sy - 1) + + (radix - power 2 clz) * power radix (sy - 1) + = radix * power radix (sy - 1) + = power radix sy + so value ny sy >= 0 + so power radix sy * _c < power radix sy + so power radix sy > 0 + so _c >= 0 + ) + so value ny sy + = power 2 clz * value y sy + so value y sy >= dh * power radix (sy - 1) + so value ny sy + >= power 2 clz * dh * power radix (sy - 1) + so value ny sy = + value ny (sy - 1) + power radix (sy - 1) * ndh + < power radix (sy - 1) + power radix (sy - 1) * ndh + = power radix (sy - 1) * (ndh + 1) + so power radix (sy - 1) * (ndh + 1) + > power radix (sy - 1) * (power 2 clz * dh) + so ndh + 1 > power 2 clz * dh + so ndh >= power 2 clz * dh + so 2 * power 2 clz * dh >= radix + so 2 * ndh >= radix + so ndh >= div radix 2 + }; + end; + let h = lshift nx x sx (Limb.of_int32 clz) in + label Shifted in + C.set_ofs nx sx h; + begin + ensures { value nx (sx + adjust) + = p * value x sx } + if (Int32.(=) adjust one) + then begin + value_sub_tail (pelts nx) nx.offset (nx.offset + p2i sx); + assert { value nx (sx + 1) + = p * value x sx + by + value nx sx + power radix sx * h + = p * value x sx + so value nx (sx + 1) + = value nx sx + power radix sx * h + } end + else begin + assert { adjust = 0 }; + assert { h = 0 + by + let dh = (pelts y)[y.offset + sy - 1] in + let ah = (pelts x)[x.offset + sx - 1] in + p * dh < radix + so 0 <= ah <= dh + so p * ah < radix + so (p * ah <= radix - p + by + let q = power 2 (Limb.length - clz) in + radix = p * q + so p * ah < p * q + so ah < q + so ah <= q - 1 + so p * ah <= p * (q - 1) = radix - p + ) + so p * (ah + 1) <= radix + so let s = power radix (sx - 1) in + value x sx < (ah + 1) * s + so p * value x sx < p * (ah + 1) * s + so (p * (ah + 1) * s + <= radix * s + by + [@case_split] + (p * (ah + 1) = radix + \/ (p * (ah + 1) < radix + so s > 0 + so p * (ah + 1) * s + < radix * s))) + so radix * power radix (sx - 1) = power radix sx + so value (nx at Shifted) sx + power radix sx * h + < power radix sx + so power radix sx * h < power radix sx * 1 + so (h < 1 by power radix sx > 0) + } + end + end; + label Div_s in + assert { value ny sy * (power radix (sx - sy + adjust)) + > value nx (sx + adjust) + by + let dh = (pelts y)[y.offset + sy - 1] in + value ny sy >= p * dh * power radix (sy - 1) + so value nx (sx + adjust) = p * value x sx + so p > 0 + so [@case_split] + ((adjust = 1 + so value x sx < power radix sx + so p * value x sx < p * power radix sx + so value ny sy * power radix (sx - sy + adjust) + >= p * dh * power radix (sy - 1) + * power radix (sx - sy + adjust) + = p * dh * power radix ((sy - 1) + (sx - sy + adjust)) + = p * dh * power radix sx + so dh >= 1 + so p * dh * power radix sx >= p * power radix sx ) + \/ + (adjust = 0 + so let ah = (pelts x)[x.offset + sx - 1] in + value x sx < (ah + 1) * power radix (sx - 1) + so ah + 1 <= dh + so value x sx < dh * power radix (sx - 1) + so p * value x sx < p * dh * power radix (sx - 1) + so value ny sy * power radix (sx - sy + adjust) + = value ny sy * power radix (sx - sy) + >= p * dh * power radix (sy - 1) + * power radix (sx - sy) + = p * dh * power radix (sy - 1 + sx - sy) + = p * dh * power radix (sx - 1))) }; + let ghost _qh = div_sb_qr q nx ny (Int32.(+) sx adjust) sy in + let ghost _l = rshift r nx sy (Limb.of_int32 clz) in + begin ensures { value nx sy = p * value r sy } + assert { _l = 0 + by + (mod (value nx sy) p = 0 + by + value (nx at Div_s) (sx + adjust) + = (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value ny sy + + value nx sy + so value (nx at Div_s) (sx + adjust) + = p * value x sx + so value ny sy = p * value y sy + so value nx sy + = value (nx at Div_s) (sx + adjust) + - (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value ny sy + = p * value x sx + - p * (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value y sy + = p * (value x sx + - (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value y sy) + so let n = (value x sx + - (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value y sy) + in + value nx sy = p * n + so value nx sy >= 0 + so p > 0 + so n >= 0 + so mod (value nx sy) p + = mod (p * n) p + = mod ((p*n)+0) p + = mod 0 p + = 0 + ) + so _l + radix * value r sy + = power 2 (Limb.length - clz) * (value nx sy) + so let a = div (value nx sy) p in + value nx sy = p * a + so power 2 (Limb.length - clz) * p = radix + so power 2 (Limb.length - clz) * (value nx sy) + = power 2 (Limb.length - clz) * (p * a) + = (power 2 (Limb.length - clz) * p) * a + = radix * a + so mod (radix * value r sy + _l) radix + = mod _l radix + so mod (radix * value r sy + _l) radix + = mod (radix * a) radix = 0 + so mod _l radix = 0 + so 0 <= _l < radix + }; + assert { value nx sy = p * value r sy + by + radix * value r sy + = power 2 (Limb.length - clz) * value nx sy + so p * power 2 (Limb.length - clz) + = radix + so p * radix * value r sy + = p * power 2 (Limb.length - clz) * value nx sy + = radix * value nx sy + so p * value r sy = value nx sy + } + end; + assert { value x sx + = value q (sx - sy + adjust) * value y sy + + value r sy + by + value (nx at Div_s) (sx + adjust) + = (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value ny sy + + value nx sy + so value (nx at Div_s) (sx + adjust) + = p * value x sx + so power radix (sx - sy + 1) * power radix (sy - 1) + = power radix sx + so value ny sy = p * value y sy + so (_qh = 0 + by + value (nx at Div_s) (sx + adjust) + = (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value ny sy + + value nx sy + so value nx sy >= 0 + so value q (sx - sy + adjust) >= 0 + so _qh >= 0 + so (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) >= 0 + so (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value ny sy + + value nx sy + >= (value q (sx - sy + adjust) + + power radix (sx - sy + adjust) * _qh) + * value ny sy + >= power radix (sx - sy + adjust) * _qh * value ny sy + so _qh <> 1) + so value nx sy = p * value r sy + so p * value x sx + = value q (sx - sy + adjust) * p * value y sy + + p * value r sy + = p * (value q (sx - sy + adjust) + * value y sy + + value r sy) + }; + label Ret_s in + begin + ensures { value q (sx - sy + 1) + = value (q at Ret_s) (sx - sy + adjust) } + if (Int32.(=) adjust zero) + then begin + value_sub_shift_no_change (pelts x) x.offset + (p2i sx) (p2i sx) limb_zero; + set_ofs q (Int32.(-) sx sy) limb_zero; + value_sub_tail (pelts q) q.offset (q.offset + p2i sx - p2i sy); + assert { value q (sx - sy + 1) = value (q at Ret_s) (sx - sy) + by value q (sx - sy + 1) + = value (q at Ret_s) (sx - sy) + power radix (sx - sy) * 0 + = value (q at Ret_s) (sx - sy) } + end + end; + () + end + end + (* else begin + let dn = Int32.(+) !qn one in + let dqn = Int32.(+) !qn !qn in + let ign = Int32.(-) sy dn in + let ix = C.incr nx (Int32.(-) sx dqn) in + let iy = C.incr y ign in + let clz = clz_ext (C.get_ofs y (Int32.(-) sy one)) in + (*let ghost p = power 2 (p2i clz) in*) + (if Int32.(=) clz zero + then begin + copy nx x sx; + C.set_ofs nx sx limb_zero; + ( + if (Int32.(=) dn two) + then + let _d1 = divmod_2 q ix iy (Int32.(+) dqn one) in () + else + let _s1 = div_sb_qr q ix iy (Int32.(+) dqn one) dn in () + ) + end + else begin + let _ = lshift ny y sy (Limb.of_int32 clz) in + let h = lshift nx x sx (Limb.of_int32 clz) in + C.set_ofs nx sx h; + begin + if (Int32.(=) dn two) + then + let _d2 = divmod_2 q ix (incr ny ign) (Int32.(+) dqn one) in () + else + let _s2 = div_sb_qr q ix (incr ny ign) (Int32.(+) dqn one) dn in () + end + end); + (* we have an estimated q, adjust by at most 1 *) + let dl = ref limb_zero in + let st = Int32.(-) sy one in + let snx = Int32.(+) sx one in + let tp = C.malloc (UInt32.of_int32 st) in + mul tp q ny !qn ign; + let b = sub_in_place nx tp snx st in + (if Limb.(>) b limb_zero + then (* quotient too large *) + let _s = sub_limb_in_place q (Limb.of_int 1) (!qn) in + let _a = add_in_place nx ny snx sy in + () + else ()); + if Int32.(=) clz zero + then begin copy r nx sy end + else let _r = rshift r nx sy (Limb.of_int32 clz) in (); + C.free tp; + () + end*) + + let tdiv_qr (q r x y:t) (sx sy:int32) : unit + requires { 1 <= sy <= sx <= (Int32.max_int32 - 1) } + requires { valid x sx } + requires { valid y sy } + requires { valid q (sx - sy + 1) } + requires { valid r sy } + requires { (pelts y)[y.offset + sy - 1] > 0 } + ensures { value x sx + = value q (sx - sy + 1) * value y sy + + value r sy } + ensures { value r sy < value y sy } + diverges + = + let uone = UInt32.of_int 1 in + let nx = malloc (UInt32.(+) (UInt32.of_int32 sx) uone) in + c_assert (is_not_null nx); + let ny = malloc (UInt32.of_int32 sy) in + c_assert (is_not_null ny); + div_qr q r x y nx ny sx sy; + free nx; + free ny; + +end \ No newline at end of file diff --git a/examples/multiprecision/div/why3session.xml b/examples/multiprecision/div/why3session.xml new file mode 100644 index 0000000000..400b55d67b --- /dev/null +++ b/examples/multiprecision/div/why3session.xml @@ -0,0 +1,10635 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<prover id="0" name="Eprover" version="1.9.1-001" timelimit="5" steplimit="0" memlimit="2000"/> +<prover id="1" name="CVC3" version="2.4.1" timelimit="5" steplimit="0" memlimit="2000"/> +<prover id="2" name="CVC4" version="1.4" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="3" name="Z3" version="4.5.0" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="4" name="Z3" version="4.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="5" name="Alt-Ergo" version="2.0.0" timelimit="1" steplimit="0" memlimit="1000"/> +<file name="../div.mlw" proved="true"> +<theory name="Div" proved="true"> + <goal name="VC fact_div" expl="VC for fact_div" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC fact_div.0" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC fact_div.0.0" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="9"/></proof> + </goal> + <goal name="VC fact_div.0.1" expl="VC for fact_div" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC fact_div.0.2" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="10"/></proof> + </goal> + <goal name="VC fact_div.0.3" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="11"/></proof> + </goal> + <goal name="VC fact_div.0.4" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="13"/></proof> + </goal> + <goal name="VC fact_div.0.5" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="13"/></proof> + </goal> + <goal name="VC fact_div.0.6" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="14"/></proof> + </goal> + <goal name="VC fact_div.0.7" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="15"/></proof> + </goal> + <goal name="VC fact_div.0.8" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="15"/></proof> + </goal> + <goal name="VC fact_div.0.9" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="17"/></proof> + </goal> + <goal name="VC fact_div.0.10" expl="VC for fact_div" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="26"/></proof> + </goal> + </transf> + </goal> + <goal name="VC fact_div.1" expl="postcondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.17"/></proof> + </goal> + </transf> + </goal> + <goal name="VC invert_limb" expl="VC for invert_limb" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC invert_limb.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC invert_limb.1" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC invert_limb.2" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.06" steps="11"/></proof> + </goal> + <goal name="VC invert_limb.3" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC invert_limb.4" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC invert_limb.4.0" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.05"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC invert_limb.5" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.01" steps="13"/></proof> + </goal> + <goal name="VC invert_limb.6" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv" expl="VC for div2by1_inv" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.0" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.1" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div2by1_inv.2" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div2by1_inv.3" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.3.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.3.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.4" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div2by1_inv.5" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="21"/></proof> + </goal> + <goal name="VC div2by1_inv.6" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.7" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div2by1_inv.8" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div2by1_inv.9" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="29"/></proof> + </goal> + <goal name="VC div2by1_inv.10" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.10.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.10.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div2by1_inv.10.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="32"/></proof> + </goal> + <goal name="VC div2by1_inv.10.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.10.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.10.5" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.10.6" expl="VC for div2by1_inv" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="32"/></proof> + </goal> + <goal name="VC div2by1_inv.10.7" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.10.8" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.10.9" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.10.10" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.10.11" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.10.12" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.10.13" expl="VC for div2by1_inv" proved="true"> + <proof prover="5"><result status="valid" time="0.21" steps="42"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.11" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.11.0" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.12" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.12.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.12.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.13" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.14" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div2by1_inv.15" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div2by1_inv.16" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.16.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div2by1_inv.16.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.16.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div2by1_inv.16.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div2by1_inv.16.5" expl="VC for div2by1_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div2by1_inv.16.6" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.16.7" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div2by1_inv.16.8" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.9" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.16.10" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.11" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div2by1_inv.16.12" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div2by1_inv.16.13" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.14" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.15" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div2by1_inv.16.16" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.17" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.18" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.19" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.16.20" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div2by1_inv.16.21" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.16.22" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.16.23" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.16.24" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div2by1_inv.16.25" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.16.26" expl="VC for div2by1_inv" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div2by1_inv.16.26.0" expl="VC for div2by1_inv" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_strict_r"> + <goal name="VC div2by1_inv.16.26.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.26.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.16.27" expl="VC for div2by1_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div2by1_inv.16.28" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.16.29" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.16.30" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.16.31" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.16.32" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.33" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.16.34" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.35" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.36" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div2by1_inv.16.37" expl="VC for div2by1_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div2by1_inv.16.38" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div2by1_inv.16.39" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div2by1_inv.16.40" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.16.41" expl="VC for div2by1_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.16.42" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.43" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.44" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.45" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.16.46" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.16.47" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div2by1_inv.16.48" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.17" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.17.0" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.31"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.18" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.18.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.18.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div2by1_inv.18.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.18.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.18.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.18.5" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.18.6" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.18.7" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.18.8" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.29"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.19" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.19.0" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div2by1_inv.19.1" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div2by1_inv.19.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.19.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.19.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div2by1_inv.19.5" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.19.6" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.19.7" expl="VC for div2by1_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.20" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.20.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.20.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.21" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.21.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.03"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.12"/></proof> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div2by1_inv.21.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div2by1_inv.21.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC div2by1_inv.21.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.22" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div2by1_inv.23" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="3.42"/></proof> + </goal> + <goal name="VC div2by1_inv.24" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.24.0" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.24.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.24.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div2by1_inv.24.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div2by1_inv.24.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.24.5" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.24.6" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.24.7" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div2by1_inv.24.8" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div2by1_inv.24.9" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.25" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.26" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="1.71"/></proof> + </goal> + <goal name="VC div2by1_inv.27" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.27.0" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.27.1" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div2by1_inv.27.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div2by1_inv.27.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div2by1_inv.27.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div2by1_inv.27.5" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.27.6" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div2by1_inv.27.7" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div2by1_inv.27.8" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.28" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.28.0" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.28.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.28.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.28.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.28.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.28.5" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.28.6" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.28.7" expl="VC for div2by1_inv" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div2by1_inv.28.7.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.28.8" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.28.9" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.28.10" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.28.11" expl="VC for div2by1_inv" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div2by1_inv.28.11.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="0" timelimit="55"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.28.12" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div2by1_inv.28.13" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.28.14" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.56"/></proof> + </goal> + <goal name="VC div2by1_inv.28.15" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div2by1_inv.28.16" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.28.17" expl="VC for div2by1_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div2by1_inv.28.18" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.29" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div2by1_inv.30" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.30.0" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.30.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC div2by1_inv.30.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div2by1_inv.30.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.30.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.31" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div2by1_inv.32" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC div2by1_inv.33" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.33.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.33.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div2by1_inv.33.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.33.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.33.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.33.5" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div2by1_inv.33.6" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.33.7" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.33.8" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div2by1_inv.33.9" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.33.10" expl="VC for div2by1_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div2by1_inv.33.11" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.34" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.34.0" expl="integer overflow" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.35" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC div2by1_inv.36" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.37" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div2by1_inv.38" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.39" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.40" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.41" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.41.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.41.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.42" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.42.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.42.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.43" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC div2by1_inv.44" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.45" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.46" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.46.0" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.47" expl="assertion" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.04"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.19"/></proof> + <proof prover="2"><result status="valid" time="0.05"/></proof> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.48" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div2by1_inv.49" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.49.0" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.50" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.50.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.50.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.50.2" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.50.3" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.50.4" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.50.5" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div2by1_inv.50.6" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.50.7" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.50.8" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.50.9" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.50.10" expl="VC for div2by1_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div2by1_inv.50.11" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.51" expl="integer overflow" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div2by1_inv.52" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div2by1_inv.53" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.54" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div2by1_inv.55" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.55.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div2by1_inv.55.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.56" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.56.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.57" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.57.0" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.58" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div2by1_inv.59" expl="assertion" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.02"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.12"/></proof> + <proof prover="2"><result status="valid" time="0.05"/></proof> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div2by1_inv.60" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div2by1_inv.61" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.61.0" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div2by1_inv.62" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div2by1_inv.62.0" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div2by1_inv.62.1" expl="VC for div2by1_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC divmod_1" expl="VC for divmod_1" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.0" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="22"/></proof> + </goal> + <goal name="VC divmod_1.1" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.1.0" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.08" steps="23"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.2" expl="integer overflow" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC divmod_1.3" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.06" steps="26"/></proof> + </goal> + <goal name="VC divmod_1.4" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.5" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.6" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.7" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.03" steps="23"/></proof> + </goal> + <goal name="VC divmod_1.8" expl="assertion" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.05" steps="22"/></proof> + </goal> + <goal name="VC divmod_1.9" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_1.10" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.11" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.12" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.04" steps="27"/></proof> + </goal> + <goal name="VC divmod_1.13" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="55"/></proof> + </goal> + <goal name="VC divmod_1.14" expl="loop invariant init" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.15" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="53"/></proof> + </goal> + <goal name="VC divmod_1.16" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC divmod_1.17" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC divmod_1.18" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.19" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.20" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.20.0" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.21" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.21.0" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.21.1" expl="VC for divmod_1" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC divmod_1.21.2" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_1.21.3" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.21.4" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.21.5" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.60"/></proof> + </goal> + <goal name="VC divmod_1.21.6" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.21.7" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC divmod_1.21.8" expl="VC for divmod_1" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC divmod_1.21.9" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.21.10" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_1.21.11" expl="VC for divmod_1" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC divmod_1.21.11.0" expl="VC for divmod_1" proved="true"> + <proof prover="1"><result status="valid" time="0.26"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.21.12" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.21.13" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.21.14" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC divmod_1.21.15" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.21.16" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.21.17" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.21.18" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.21.19" 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.22" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.22.0" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC divmod_1.22.1" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.22.2" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.23" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.24" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_1.25" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.25.0" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.26" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.27" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.27.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.28" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC divmod_1.29" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.29.0" expl="VC for divmod_1" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC divmod_1.29.1" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.29.2" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.29.3" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.29.4" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC divmod_1.29.5" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC divmod_1.29.6" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_1.29.7" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.30" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.31" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.31.0" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></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.15"/></proof> + </goal> + <goal name="VC divmod_1.31.2" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.31.3" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.31.4" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_1.31.5" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></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="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.31.8" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC divmod_1.31.9" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.31.10" expl="VC for divmod_1" proved="true"> + <proof prover="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.31.11" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_1.31.12" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.32" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.33" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC divmod_1.34" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.35" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC divmod_1.36" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_1.37" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.38" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC divmod_1.39" expl="assertion" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.40" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.40.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.40.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.40.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.41" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.41.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.41.1" expl="VC for divmod_1" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.41.2" expl="VC for divmod_1" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="4.44"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.42" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.43" expl="integer overflow" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC divmod_1.44" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.45" expl="loop invariant preservation" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC divmod_1.46" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.47" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="4.18"/></proof> + </goal> + <goal name="VC divmod_1.48" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.48.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.49" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_1.50" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.51" 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.52" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.53" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC divmod_1.54" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.55" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.56" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.57" expl="postcondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC divmod_1.57.0" expl="postcondition" proved="true"> + <transf name="replace" proved="true" arg1="result" arg2="res"> + <goal name="VC divmod_1.57.0.0" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.57.0.1" proved="true"> + <proof prover="1"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.58" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.59" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.06" steps="46"/></proof> + </goal> + <goal name="VC divmod_1.60" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="21"/></proof> + </goal> + <goal name="VC divmod_1.61" expl="loop invariant init" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC divmod_1.62" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="51"/></proof> + </goal> + <goal name="VC divmod_1.63" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC divmod_1.64" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC divmod_1.65" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="61"/></proof> + </goal> + <goal name="VC divmod_1.66" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.66.0" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.67" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.68" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.69" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.70" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC divmod_1.71" expl="integer overflow" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC divmod_1.72" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC divmod_1.73" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC divmod_1.74" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_1.74.0" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_1.74.1" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_1.74.2" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="2.92"/></proof> + </goal> + <goal name="VC divmod_1.74.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.74.4" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC divmod_1.74.5" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC divmod_1.74.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.74.7" expl="VC for divmod_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.74.8" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="3.09"/></proof> + </goal> + <goal name="VC divmod_1.74.9" expl="VC for divmod_1" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_1.75" expl="loop variant decrease" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC divmod_1.76" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_1.77" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC divmod_1.78" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_1.79" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC divmod_1.80" expl="postcondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv" expl="VC for div3by2_inv" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.0" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="12"/></proof> + </goal> + <goal name="VC div3by2_inv.1" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="13"/></proof> + </goal> + <goal name="VC div3by2_inv.2" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.2.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.2.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.3" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.3.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.3.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.11"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.4" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.09"/></proof> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div3by2_inv.5" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.5.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.5.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.5.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.5.3" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.5.4" expl="VC for div3by2_inv" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div3by2_inv.5.4.0" expl="VC for div3by2_inv" proved="true"> + <transf name="cut" proved="true" arg1="(v * (radix2 * uh) <= v * d)"> + <goal name="VC div3by2_inv.5.4.0.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.5.4.0.1" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_r"> + <goal name="VC div3by2_inv.5.4.0.1.0" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.5.4.0.1.1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.5.5" expl="VC for div3by2_inv" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="23"/></proof> + </goal> + <goal name="VC div3by2_inv.5.6" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div3by2_inv.5.7" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.5.8" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.5.9" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.5.10" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.5.11" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.6" expl="assertion" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.02"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.12"/></proof> + <proof prover="2"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC div3by2_inv.7" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.8" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.9" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.09"/></proof> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div3by2_inv.10" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.10.0" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.11" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.02"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.09"/></proof> + <proof prover="2"><result status="valid" time="0.09"/></proof> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.12" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.13" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div3by2_inv.14" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.09"/></proof> + <proof prover="2"><result status="valid" time="0.06"/></proof> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.15" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="2.78"/></proof> + </goal> + <goal name="VC div3by2_inv.16" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.16.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div3by2_inv.16.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div3by2_inv.16.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div3by2_inv.16.3" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.16.4" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div3by2_inv.16.5" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div3by2_inv.16.6" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div3by2_inv.16.7" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.16.8" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.16.9" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.16.10" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.16.11" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.16.12" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.16.13" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.16.14" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.16.15" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.16.16" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.16.17" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.17" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.17.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.17.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div3by2_inv.17.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div3by2_inv.17.3" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.4" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.5" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div3by2_inv.17.6" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.7" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.8" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div3by2_inv.17.9" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.58"/></proof> + </goal> + <goal name="VC div3by2_inv.17.10" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div3by2_inv.17.11" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.12" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div3by2_inv.17.13" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.14" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.15" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div3by2_inv.17.16" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.17" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.18" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.19" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.20" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.21" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.22" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.17.23" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div3by2_inv.17.24" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div3by2_inv.17.25" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div3by2_inv.17.26" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div3by2_inv.17.27" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div3by2_inv.17.28" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.17.29" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div3by2_inv.17.30" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.17.31" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC div3by2_inv.17.32" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.17.33" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.34" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.35" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.36" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div3by2_inv.17.37" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div3by2_inv.17.38" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="4.33"/></proof> + </goal> + <goal name="VC div3by2_inv.17.39" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.17.40" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.41" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.42" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.43" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.44" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC div3by2_inv.17.45" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div3by2_inv.17.46" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div3by2_inv.17.47" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div3by2_inv.17.48" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.17.49" expl="VC for div3by2_inv" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div3by2_inv.17.49.0" expl="VC for div3by2_inv" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_strict_r"> + <goal name="VC div3by2_inv.17.49.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.49.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.17.50" expl="VC for div3by2_inv" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div3by2_inv.17.50.0" expl="VC for div3by2_inv" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_r"> + <goal name="VC div3by2_inv.17.50.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.17.50.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.17.51" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.52" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.53" expl="VC for div3by2_inv" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div3by2_inv.17.53.0" expl="VC for div3by2_inv" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_strict_r"> + <goal name="VC div3by2_inv.17.53.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.53.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.17.54" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="1.79"/></proof> + </goal> + <goal name="VC div3by2_inv.17.55" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.56" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div3by2_inv.17.57" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="1.07"/></proof> + </goal> + <goal name="VC div3by2_inv.17.58" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.17.59" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.17.60" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.17.61" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="1.18"/></proof> + </goal> + <goal name="VC div3by2_inv.17.62" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="1.31"/></proof> + </goal> + <goal name="VC div3by2_inv.17.63" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.64" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="1.95"/></proof> + </goal> + <goal name="VC div3by2_inv.17.65" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.66" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.67" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.68" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div3by2_inv.17.69" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.70" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.71" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.72" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.73" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.74" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.75" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div3by2_inv.17.76" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div3by2_inv.17.77" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.78" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.79" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.80" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.81" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.82" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.83" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.84" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.85" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.86" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.87" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.88" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.89" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.90" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.91" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.92" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="1.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.93" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div3by2_inv.17.94" expl="VC for div3by2_inv" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div3by2_inv.17.94.0" expl="VC for div3by2_inv" proved="true"> + <transf name="cut" proved="true" arg1="(k*dh <= d*dh)"> + <goal name="VC div3by2_inv.17.94.0.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.94.0.1" proved="true"> + <proof prover="0"><result status="valid" time="1.33"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.17.95" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.96" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div3by2_inv.17.97" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.98" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.99" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.100" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.101" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.102" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.103" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.104" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.105" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.106" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.107" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.108" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.109" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.110" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.111" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.112" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.113" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.114" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.115" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.116" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.117" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.118" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.119" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.120" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.121" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.122" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.123" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.124" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div3by2_inv.17.125" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div3by2_inv.17.126" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.127" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.128" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.129" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div3by2_inv.17.130" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.131" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.132" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.133" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div3by2_inv.17.134" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.135" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.136" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.137" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.138" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.139" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.140" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.141" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.142" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.143" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.144" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.145" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC div3by2_inv.17.146" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.147" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.17.148" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div3by2_inv.17.149" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.150" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div3by2_inv.17.151" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.152" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.153" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div3by2_inv.17.154" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC div3by2_inv.17.155" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.17.156" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.17.157" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.17.158" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.159" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.160" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div3by2_inv.17.161" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.162" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.163" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.164" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div3by2_inv.17.165" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div3by2_inv.17.166" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.167" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.17.168" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.17.169" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.170" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.171" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.17.172" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.17.173" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.17.174" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.18" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.18.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.51"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.19" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.19.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.34"/></proof> + <proof prover="4"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div3by2_inv.19.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.19.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.19.3" expl="VC for div3by2_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.19.4" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.19.5" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.19.6" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.19.7" expl="VC for div3by2_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div3by2_inv.19.8" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.19.9" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="1.45"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.20" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.20.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.20.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.20.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.20.3" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.20.4" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.20.5" expl="VC for div3by2_inv" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC div3by2_inv.20.6" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.20.7" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.20.8" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.20.9" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div3by2_inv.20.10" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div3by2_inv.20.11" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.20.12" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.20.13" expl="VC for div3by2_inv" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div3by2_inv.20.13.0" expl="VC for div3by2_inv" proved="true"> + <transf name="cut" proved="true" arg1="(v * (radix2 * uh) <= v * d)"> + <goal name="VC div3by2_inv.20.13.0.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.20.13.0.1" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_r"> + <goal name="VC div3by2_inv.20.13.0.1.0" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.20.13.0.1.1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.21" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.09"/></proof> + <proof prover="2"><result status="valid" time="0.22"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.22" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.22.0" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.67"/></proof> + </goal> + <goal name="VC div3by2_inv.22.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.23" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.23.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.23.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.23.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.23.3" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div3by2_inv.23.4" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.23.5" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div3by2_inv.23.6" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.24" expl="assertion" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="2.96"/></proof> + </goal> + <goal name="VC div3by2_inv.25" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div3by2_inv.26" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.26.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div3by2_inv.26.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.27" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.27.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div3by2_inv.27.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.27.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.27.3" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="1.94"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.28" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.77"/></proof> + </goal> + <goal name="VC div3by2_inv.29" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div3by2_inv.30" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.30.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.31" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.23"/></proof> + <proof prover="4"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div3by2_inv.32" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.32.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div3by2_inv.32.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.33" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.33.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div3by2_inv.33.1" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.34" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.34.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div3by2_inv.34.1" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.17"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.35" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div3by2_inv.36" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.27"/></proof> + <proof prover="2"><result status="valid" time="1.20"/></proof> + </goal> + <goal name="VC div3by2_inv.37" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div3by2_inv.38" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.38.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="2"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC div3by2_inv.38.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.39" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div3by2_inv.40" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div3by2_inv.41" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.41.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div3by2_inv.41.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.26"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.42" expl="postcondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.24"/></proof> + <proof prover="2"><result status="valid" time="0.18"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.43" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.43.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.43.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.44" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.44.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.44.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.44.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div3by2_inv.44.3" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.44.4" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.94"/></proof> + </goal> + <goal name="VC div3by2_inv.44.5" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.45" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.45.0" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.46" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.46.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div3by2_inv.46.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.47" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div3by2_inv.48" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC div3by2_inv.49" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div3by2_inv.50" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.50.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.50.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div3by2_inv.50.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.50.3" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.50.4" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.50.5" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div3by2_inv.50.6" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div3by2_inv.50.7" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.50.8" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.50.9" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.50.10" expl="VC for div3by2_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.50.11" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div3by2_inv.50.12" expl="VC for div3by2_inv" proved="true"> + <proof prover="1"><result status="valid" time="0.34"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.51" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="1.04"/></proof> + </goal> + <goal name="VC div3by2_inv.52" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.52.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="0"><result status="valid" time="0.48"/></proof> + </goal> + <goal name="VC div3by2_inv.52.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div3by2_inv.52.2" expl="VC for div3by2_inv" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div3by2_inv.53" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="4.04"/></proof> + </goal> + <goal name="VC div3by2_inv.54" expl="postcondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.13"/></proof> + <proof prover="2"><result status="valid" time="0.19"/></proof> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.55" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div3by2_inv.56" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div3by2_inv.57" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div3by2_inv.58" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div3by2_inv.58.0" expl="VC for div3by2_inv" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div3by2_inv.58.1" expl="VC for div3by2_inv" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC bounds_imply_rec3by2" expl="VC for bounds_imply_rec3by2" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="12"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2" expl="VC for reciprocal_word_3by2" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.0" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.0.0" expl="integer overflow" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.1" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.1.0" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.03"/></proof> + <proof prover="2"><result status="valid" time="0.05"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="9"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.2" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC reciprocal_word_3by2.2.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.2.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="87"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.2.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="53"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.3" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.3.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.06" steps="13"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.3.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="72"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.3.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="13"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.3.3" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="20"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.3.4" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="16"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.3.5" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="16"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.3.6" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.4" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="17"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.5" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.26"/></proof> + <proof prover="2"><result status="valid" time="0.89"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.6" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.7" expl="assertion" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.02"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.08"/></proof> + <proof prover="2"><result status="valid" time="0.07"/></proof> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.8" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.9" expl="integer overflow" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.10" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.11" expl="integer overflow" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.12" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.13" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.13.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="1.13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.14" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.14.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="1"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.14.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.11"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.15" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.15.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.15.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="34"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.16" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.16.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.17" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.17.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.17.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.32" steps="42"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.17.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.26" steps="43"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.17.3" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.35" steps="44"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.17.4" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.17.5" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.22" steps="46"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.18" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.18.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.18.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.18.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.21"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.19" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.19.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.19.1" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.20" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.45"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.21" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.21.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.68" steps="47"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.21.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.21.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.21.3" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.21.4" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.21.5" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.21.6" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.21.7" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.22" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.23" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.23.0" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.35"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.23.1" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.29"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.24" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.25" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.26" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.37"/></proof> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.27" expl="integer overflow" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.28" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.29" expl="postcondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.07"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.67" steps="49"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.30" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.62"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.31" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.31.0" expl="postcondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.18" steps="41"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.32" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.33" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.34" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.34.0" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.35" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.36" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.37" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.37.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.38" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.38.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.38.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="37"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.38.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.13" steps="38"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.38.3" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="39"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.38.4" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.38.5" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="41"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.39" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.39.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.39.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.39.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.40" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.40.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + <proof prover="4"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.40.1" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.41" expl="integer overflow" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.53"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.47"/></proof> + <proof prover="2"><result status="valid" time="0.06"/></proof> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.42" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.42.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.20" steps="42"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.42.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.42.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.42.3" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.42.4" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.42.5" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.42.6" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.42.7" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.43" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.44" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.45" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.46" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.47" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.47.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.47.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.48" expl="integer overflow" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.49" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.49.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="1"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.49.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.50" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.50.0" expl="postcondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.12" steps="40"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.50.1" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.51" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.52" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.52.0" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.53" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.35"/></proof> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.54" expl="assertion" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.07" steps="22"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.55" expl="assertion" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="24"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.56" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.56.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.56.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="26"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.56.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="27"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.56.3" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="28"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.56.4" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="28"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.56.5" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="30"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.57" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.58" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.58.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.58.1" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.59" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.59.0" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.10" steps="32"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.59.1" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.60" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.60.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="31"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.60.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.60.2" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.60.3" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.60.4" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.60.5" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.60.6" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.60.7" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.61" expl="assertion" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="2.30" steps="38"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.62" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.62.0" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.62.0.0" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.29"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.62.1" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.62.1.0" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.20"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.63" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC reciprocal_word_3by2.63.0" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.63.1" expl="VC for reciprocal_word_3by2" proved="true"> + <proof prover="1"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC reciprocal_word_3by2.64" expl="postcondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.07"/></proof> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.65" expl="assertion" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.28"/></proof> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.66" expl="integer overflow" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.67" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.68" expl="postcondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.02"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.06"/></proof> + <proof prover="2"><result status="valid" time="0.05"/></proof> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.69" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC reciprocal_word_3by2.70" expl="postcondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.06"/></proof> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub3" expl="VC for sub3" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub3.0" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.02" steps="8"/></proof> + </goal> + <goal name="VC sub3.1" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.02" steps="8"/></proof> + </goal> + <goal name="VC sub3.2" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="11"/></proof> + </goal> + <goal name="VC sub3.3" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="15"/></proof> + </goal> + <goal name="VC sub3.4" expl="postcondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="17"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb" expl="VC for submul_limb" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.0" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.0.0" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.02" steps="20"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.1" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.09" steps="21"/></proof> + </goal> + <goal name="VC submul_limb.2" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.06" steps="12"/></proof> + </goal> + <goal name="VC submul_limb.3" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="73"/></proof> + </goal> + <goal name="VC submul_limb.4" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + </transf> + </goal> + <goal name="VC submul_limb.5" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + </transf> + </goal> + <goal name="VC submul_limb.6" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.02" steps="30"/></proof> + </goal> + <goal name="VC submul_limb.7" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.7.0" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC submul_limb.7.1" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.8" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="46"/></proof> + </goal> + <goal name="VC submul_limb.9" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.9.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.00"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.10" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.74"/></proof> + </goal> + <goal name="VC submul_limb.11" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.11.0" expl="VC for submul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC submul_limb.11.1" expl="VC for submul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.12" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC submul_limb.13" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.13.0" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC submul_limb.13.1" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC submul_limb.13.2" expl="VC for submul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.14" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.50"/></proof> + </goal> + <goal name="VC submul_limb.15" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.15.0" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC submul_limb.15.1" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC submul_limb.15.2" expl="VC for submul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC submul_limb.15.3" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC submul_limb.15.4" expl="VC for submul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC submul_limb.15.5" expl="VC for submul_limb" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC submul_limb.15.6" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC submul_limb.15.7" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.16" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC submul_limb.17" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.17.0" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC submul_limb.17.1" expl="VC for submul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.18" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC submul_limb.19" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.19.0" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.20" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC submul_limb.21" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.21.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.22" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.22.0" expl="VC for submul_limb" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="6.36"/></proof> + </goal> + <goal name="VC submul_limb.22.1" expl="VC for submul_limb" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC submul_limb.22.2" expl="VC for submul_limb" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC submul_limb.22.3" expl="VC for submul_limb" proved="true"> + <proof prover="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC submul_limb.22.4" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC submul_limb.22.5" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC submul_limb.22.6" expl="VC for submul_limb" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC submul_limb.22.7" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC submul_limb.22.8" expl="VC for submul_limb" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC submul_limb.22.9" expl="VC for submul_limb" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC submul_limb.22.9.0" expl="VC for submul_limb" proved="true"> + <transf name="cut" proved="true" arg1="(value r1 i = value r1 k + power radix2 k * lr)"> + <goal name="VC submul_limb.22.9.0.0" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC submul_limb.22.9.0.1" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.22.10" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC submul_limb.22.11" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC submul_limb.22.12" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC submul_limb.22.13" expl="VC for submul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC submul_limb.22.14" expl="VC for submul_limb" proved="true"> + <proof prover="0"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC submul_limb.22.15" expl="VC for submul_limb" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.23" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC submul_limb.24" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.24.0" expl="VC for submul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC submul_limb.24.1" expl="VC for submul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.25" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.25.0" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.26" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.54"/></proof> + </goal> + <goal name="VC submul_limb.27" expl="loop invariant preservation" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC submul_limb.28" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.28.0" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="20"/></proof> + </goal> + </transf> + </goal> + <goal name="VC submul_limb.29" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC submul_limb.29.0" expl="postcondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="44"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr" expl="VC for div_sb_qr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.0" expl="integer overflow" proved="true"> + <proof prover="4" memlimit="2000"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.1" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.2" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.2.0" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="35"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.3" expl="integer overflow" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.3.0" expl="integer overflow" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.3.0.0" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.4" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.4.0" expl="integer overflow" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.4.0.0" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.5" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.02" steps="39"/></proof> + </goal> + <goal name="VC div_sb_qr.6" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.10"/></proof> + <proof prover="4" memlimit="2000"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.7" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.8" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="46"/></proof> + </goal> + <goal name="VC div_sb_qr.9" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.06" steps="55"/></proof> + </goal> + <goal name="VC div_sb_qr.10" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div_sb_qr.11" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="36"/></proof> + </goal> + <goal name="VC div_sb_qr.12" expl="integer overflow" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.12.0" expl="integer overflow" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.12.0.0" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.12.0.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.12.0.0.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.13" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.14" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.15" expl="integer overflow" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.16" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.16.0" expl="integer overflow" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.16.0.0" expl="integer overflow" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.16.0.0.0" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.17" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.17"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="0.12"/></proof> + <proof prover="4" memlimit="2000"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.18" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.18.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.18.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.18.0.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.18.0.0.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.18.0.0.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.18.0.0.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.18.0.0.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.18.0.0.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.19" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.20" expl="assertion" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC div_sb_qr.20.0" expl="assertion" proved="true"> + <proof prover="1" timelimit="55"><result status="valid" time="0.29"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.21" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.22" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.23" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="54"/></proof> + </goal> + <goal name="VC div_sb_qr.24" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.25" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.25.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.25.0.0" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="1.06"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.26" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.26.0" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="74"/></proof> + </goal> + <goal name="VC div_sb_qr.26.1" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="51"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.27" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="74"/></proof> + </goal> + <goal name="VC div_sb_qr.28" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.29" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.53"/></proof> + </goal> + <goal name="VC div_sb_qr.30" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.30.0" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.30.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.30.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.30.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="127"/></proof> + </goal> + <goal name="VC div_sb_qr.30.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="120"/></proof> + </goal> + <goal name="VC div_sb_qr.30.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="79"/></proof> + </goal> + <goal name="VC div_sb_qr.30.5" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.30.5.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.30.5.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.30.6" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.30.6.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.30.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.30.8" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.30.8.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.30.8.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="120"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.30.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.66" steps="85"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.31" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.31.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.31.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.32" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.32.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.04" steps="79"/></proof> + </goal> + <goal name="VC div_sb_qr.32.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.04" steps="120"/></proof> + </goal> + <goal name="VC div_sb_qr.32.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.32.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.03" steps="81"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.33" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_sb_qr.34" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.34.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.34.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.34.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="1.62"/></proof> + </goal> + <goal name="VC div_sb_qr.34.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.60" steps="150"/></proof> + </goal> + <goal name="VC div_sb_qr.34.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.34.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.34.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC div_sb_qr.34.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.34.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.34.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div_sb_qr.34.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.34.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.35" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.36" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.37" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.37.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.37.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.38" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.38.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.38.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.38.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="189"/></proof> + </goal> + <goal name="VC div_sb_qr.38.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="54"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.39" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.39.0" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.39.0.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.39.0.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="97"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.39.1" expl="VC for div_sb_qr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.39.1.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.39.1.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.40" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.40.0" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.40.1" expl="precondition" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC div_sb_qr.40.1.0" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.13"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.41" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.42" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.43" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + <proof prover="4"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.44" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.44.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="106"/></proof> + </goal> + <goal name="VC div_sb_qr.44.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.92"/></proof> + </goal> + <goal name="VC div_sb_qr.44.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.74"/></proof> + </goal> + <goal name="VC div_sb_qr.44.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.44.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="95"/></proof> + </goal> + <goal name="VC div_sb_qr.44.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.44.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.44.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.44.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="3.14"/></proof> + </goal> + <goal name="VC div_sb_qr.44.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="3.17"/></proof> + </goal> + <goal name="VC div_sb_qr.44.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC div_sb_qr.44.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.44.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.47"/></proof> + </goal> + <goal name="VC div_sb_qr.44.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.45" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.46" expl="precondition" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC div_sb_qr.46.0" expl="precondition" proved="true"> + <proof prover="1" timelimit="20"><result status="valid" time="0.13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.47" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC div_sb_qr.48" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.48.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.48.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div_sb_qr.48.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="57"/></proof> + </goal> + <goal name="VC div_sb_qr.48.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.48.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.20" steps="108"/></proof> + </goal> + <goal name="VC div_sb_qr.48.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.49" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.49.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.49.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.49.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="102"/></proof> + </goal> + <goal name="VC div_sb_qr.49.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.49.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.49.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="1.39"/></proof> + </goal> + <goal name="VC div_sb_qr.49.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.20" steps="62"/></proof> + </goal> + <goal name="VC div_sb_qr.49.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.12" steps="64"/></proof> + </goal> + <goal name="VC div_sb_qr.49.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.13" steps="65"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.50" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.51" expl="postcondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="58"/></proof> + </goal> + <goal name="VC div_sb_qr.52" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.53" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.54" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="64"/></proof> + </goal> + <goal name="VC div_sb_qr.55" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.55.0" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.55.1" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="67"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.56" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.56.0" expl="loop invariant init" proved="true"> + <proof prover="4" memlimit="2000"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.56.1" expl="loop invariant init" proved="true"> + <proof prover="4" memlimit="2000"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.57" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.58" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.59" expl="loop invariant init" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.60" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.61" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.62" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.63" expl="loop invariant init" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.64" expl="loop invariant init" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.65" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.65.0" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.02" steps="72"/></proof> + </goal> + <goal name="VC div_sb_qr.65.1" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.66" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.66.0" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.66.1" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="72"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.67" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.67.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_sb_qr.67.1" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.68" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC div_sb_qr.69" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div_sb_qr.70" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.71" expl="integer overflow" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.72" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.73" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.29" steps="110"/></proof> + </goal> + <goal name="VC div_sb_qr.74" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.95"/></proof> + </goal> + <goal name="VC div_sb_qr.75" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.75.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_sb_qr.75.1" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.76" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.77" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.77.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.77.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="4.66"/></proof> + </goal> + <goal name="VC div_sb_qr.77.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.94"/></proof> + </goal> + <goal name="VC div_sb_qr.77.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.98"/></proof> + </goal> + <goal name="VC div_sb_qr.77.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.78" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div_sb_qr.79" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.79.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.79.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div_sb_qr.79.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.79.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC div_sb_qr.79.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.79.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.79.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.79.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="1.18" steps="122"/></proof> + </goal> + <goal name="VC div_sb_qr.79.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.41"/></proof> + </goal> + <goal name="VC div_sb_qr.79.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.79.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.80" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.80.0" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.80.1" expl="assertion" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.26" steps="109"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.81" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.82" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.82.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.82.0.0" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.82.0.0.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.82.0.0.0.0" expl="precondition" proved="true"> + <transf name="split_all_full" proved="true" > + <goal name="VC div_sb_qr.82.0.0.0.0.0" expl="precondition" proved="true"> + <proof prover="3" timelimit="10" memlimit="4000"><result status="valid" time="6.84"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.83" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.83.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.83.0.0" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.25"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.84" expl="precondition" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC div_sb_qr.84.0" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div_sb_qr.84.1" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.85" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.85.0" expl="assertion" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.64"/></proof> + </goal> + <goal name="VC div_sb_qr.85.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.85.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC div_sb_qr.85.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC div_sb_qr.85.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.86" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="2.15"/></proof> + </goal> + <goal name="VC div_sb_qr.87" expl="postcondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="2.52" steps="178"/></proof> + </goal> + <goal name="VC div_sb_qr.88" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.89" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.89.0" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.89.0.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.89.0.0.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.89.1" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.89.1.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.89.1.1" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.90" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.90.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.90.0.0" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.90.0.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="4" timelimit="30" memlimit="2000"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.6" expl="VC for div_sb_qr" proved="true"> + <transf name="cut" proved="true" arg1="(plength xd = plength x)"> + <goal name="VC div_sb_qr.90.0.0.6.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.6.1" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.90.0.0.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.90.0.0.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.91" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.91.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.91.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.91.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.91.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.91.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.91.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.91.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.91.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.91.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.91.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.91.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.91.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.91.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.91.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div_sb_qr.91.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.91.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.91.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.91.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.91.18" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.91.19" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.91.20" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.91.21" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.91.22" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.91.23" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.76"/></proof> + </goal> + <goal name="VC div_sb_qr.91.24" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.91.25" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.91.26" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.91.27" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div_sb_qr.91.28" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.91.29" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.91.30" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.91.31" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.91.32" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.91.33" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.92" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div_sb_qr.93" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.45"/></proof> + </goal> + <goal name="VC div_sb_qr.94" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.94.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.94.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.19"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.95" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.95.0" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div_sb_qr.95.1" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.96" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.97" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.97.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.97.1" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC div_sb_qr.97.1.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="1.46"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.98" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.98.0" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.98.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.98.1" expl="VC for div_sb_qr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.98.1.0" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.98.1.0.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.98.1.0.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.60"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.98.1.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.15"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.98.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.99" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC div_sb_qr.100" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.100.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC div_sb_qr.100.1" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.11"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.101" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.101.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.101.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.101.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.101.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.101.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_sb_qr.101.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC div_sb_qr.101.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC div_sb_qr.101.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC div_sb_qr.101.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.101.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.101.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.101.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.64"/></proof> + </goal> + <goal name="VC div_sb_qr.101.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.101.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.36"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.102" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.102.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.46"/></proof> + </goal> + <goal name="VC div_sb_qr.102.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.102.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC div_sb_qr.102.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.102.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.102.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.102.6" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.102.6.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.102.6.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.102.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="2.57"/></proof> + </goal> + <goal name="VC div_sb_qr.102.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.102.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.102.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.102.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.102.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.102.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.102.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.102.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.102.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.102.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC div_sb_qr.102.18" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC div_sb_qr.102.19" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC div_sb_qr.102.20" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.102.21" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC div_sb_qr.102.22" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.19"/></proof> + </goal> + <goal name="VC div_sb_qr.102.23" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.102.24" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.102.25" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.102.26" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.102.27" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC div_sb_qr.102.28" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.102.29" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.102.30" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.102.31" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.102.32" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.102.33" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.102.34" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="1.16"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="3.90"/></proof> + </goal> + <goal name="VC div_sb_qr.102.35" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.44"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="3.86"/></proof> + </goal> + <goal name="VC div_sb_qr.102.36" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.45"/></proof> + </goal> + <goal name="VC div_sb_qr.102.37" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div_sb_qr.102.38" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.53"/></proof> + </goal> + <goal name="VC div_sb_qr.102.39" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.102.40" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.102.41" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.102.42" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.102.43" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.102.44" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC div_sb_qr.102.45" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC div_sb_qr.102.46" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.102.47" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.102.48" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.102.49" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.35"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.103" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.103.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.103.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC div_sb_qr.103.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.103.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.103.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.103.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC div_sb_qr.103.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.103.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.103.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.103.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.103.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.103.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC div_sb_qr.103.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.103.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.103.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.103.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.103.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.103.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.103.18" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.103.19" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.103.20" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.104" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.104.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.104.0.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.104.0.1" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.104.1" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.105" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC div_sb_qr.106" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.106.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.08"/></proof> + </goal> + <goal name="VC div_sb_qr.106.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC div_sb_qr.106.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.106.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.74"/></proof> + </goal> + <goal name="VC div_sb_qr.106.4" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.106.4.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1" timelimit="15"><result status="valid" time="0.42"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.106.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.106.6" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC div_sb_qr.106.6.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.22"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.106.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.106.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.106.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.106.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.106.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC div_sb_qr.106.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC div_sb_qr.106.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.106.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.106.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.106.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.106.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.32"/></proof> + </goal> + <goal name="VC div_sb_qr.106.18" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC div_sb_qr.106.18.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.31"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.107" expl="loop variant decrease" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.107.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.107.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.108" expl="loop invariant preservation" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC div_sb_qr.109" expl="loop invariant preservation" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC div_sb_qr.110" expl="loop invariant preservation" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.49"/></proof> + </goal> + <goal name="VC div_sb_qr.111" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.77"/></proof> + </goal> + <goal name="VC div_sb_qr.112" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.113" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.114" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.70"/></proof> + </goal> + <goal name="VC div_sb_qr.115" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.116" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.117" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.117.0" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.117.1" expl="loop invariant preservation" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.117.1.0" expl="loop invariant preservation" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.117.1.0.0" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.118" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.82"/></proof> + </goal> + <goal name="VC div_sb_qr.119" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.120" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.35"/></proof> + <proof prover="4"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.121" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC div_sb_qr.122" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.122.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.28" steps="107"/></proof> + </goal> + <goal name="VC div_sb_qr.122.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.122.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.39" steps="152"/></proof> + </goal> + <goal name="VC div_sb_qr.122.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.41" steps="158"/></proof> + </goal> + <goal name="VC div_sb_qr.122.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.20"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.123" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="1.83"/></proof> + </goal> + <goal name="VC div_sb_qr.124" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.20"/></proof> + <proof prover="4"><result status="valid" time="1.76"/></proof> + </goal> + <goal name="VC div_sb_qr.125" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.126" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.126.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.126.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.127" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.127.0" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div_sb_qr.127.1" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.128" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.128.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div_sb_qr.128.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.37" steps="112"/></proof> + </goal> + <goal name="VC div_sb_qr.128.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.40" steps="113"/></proof> + </goal> + <goal name="VC div_sb_qr.128.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.128.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.45" steps="155"/></proof> + </goal> + <goal name="VC div_sb_qr.128.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.44" steps="155"/></proof> + </goal> + <goal name="VC div_sb_qr.128.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.38" steps="114"/></proof> + </goal> + <goal name="VC div_sb_qr.128.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.44" steps="162"/></proof> + </goal> + <goal name="VC div_sb_qr.128.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.128.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.15"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.129" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div_sb_qr.130" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.130.0" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC div_sb_qr.130.1" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.131" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.132" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.26" steps="109"/></proof> + </goal> + <goal name="VC div_sb_qr.133" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.133.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.133.0.0" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.134" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.134.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.134.0.0" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.134.0.0.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.134.0.0.0.0" expl="precondition" proved="true"> + <transf name="split_all_full" proved="true" > + <goal name="VC div_sb_qr.134.0.0.0.0.0" expl="precondition" proved="true"> + <proof prover="3" timelimit="10" memlimit="4000"><result status="valid" time="4.36"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.135" expl="integer overflow" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC div_sb_qr.136" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.136.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.136.0.0" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.26"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.137" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div_sb_qr.138" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.138.0" expl="assertion" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.92"/></proof> + <proof prover="3" timelimit="5" memlimit="2000"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.138.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.138.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC div_sb_qr.138.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div_sb_qr.138.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.139" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="2.63"/></proof> + </goal> + <goal name="VC div_sb_qr.140" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.141" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.142" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div_sb_qr.143" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC div_sb_qr.144" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.145" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.146" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.146.0" expl="precondition" proved="true"> + <proof prover="4" memlimit="2000"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.146.1" expl="precondition" proved="true"> + <proof prover="4" memlimit="2000"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.147" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.50"/></proof> + </goal> + <goal name="VC div_sb_qr.148" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.148.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.148.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.148.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.149" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.25"/></proof> + <proof prover="4" memlimit="2000"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.150" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.151" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.152" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.152.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.152.1" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.152.1.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.152.1.0.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.153" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.153.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.153.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.153.2" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.153.2.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.153.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="3.30"/></proof> + </goal> + <goal name="VC div_sb_qr.153.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.153.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.154" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.154.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC div_sb_qr.154.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.154.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.35"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.155" expl="assertion" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.66"/></proof> + </goal> + <goal name="VC div_sb_qr.156" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC div_sb_qr.157" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.157.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.EqPropMP"> + <goal name="VC div_sb_qr.157.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC div_sb_qr.157.0.0.0" expl="assertion" proved="true"> + <transf name="apply" proved="true" arg1="HR"> + <goal name="VC div_sb_qr.157.0.0.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.3" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.4" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.5" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.6" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.7" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.8" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.9" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.10" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.11" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.12" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.13" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.14" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.15" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.16" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.17" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.18" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.19" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.20" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.21" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.22" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.23" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.24" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.25" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.26" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.27" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.28" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.29" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.30" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.31" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.32" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.33" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.34" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.35" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.36" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.37" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.38" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.39" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.40" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.41" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.42" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.43" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.44" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.45" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.46" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.47" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.48" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.49" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.50" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.51" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.52" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.53" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.54" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.55" proved="true"> + <proof prover="3"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.56" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.57" proved="true"> + <proof prover="3"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.58" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.59" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.60" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.61" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.62" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.63" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.64" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.65" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.66" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.67" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.68" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.69" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.70" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.71" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.72" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.73" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.74" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.75" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.76" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.77" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.78" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.79" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.80" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.81" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.82" proved="true"> + <proof prover="3"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.83" proved="true"> + <proof prover="3"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.84" proved="true"> + <proof prover="3"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.85" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.86" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.87" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.88" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.89" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.90" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.91" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.92" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.93" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.94" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.95" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.96" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.97" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.98" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.99" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.100" proved="true"> + <proof prover="3"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.101" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.102" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.103" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.104" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.105" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.106" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.107" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.108" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.109" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.110" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.111" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.112" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.113" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.114" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.115" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.116" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.117" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.118" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.119" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.120" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.121" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.122" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.123" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.124" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.125" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.126" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.127" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.128" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.129" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.130" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.131" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.132" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.133" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.134" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.135" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.136" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.137" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.138" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.139" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.140" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.141" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.142" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.143" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.144" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.145" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.146" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.147" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.148" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.149" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.150" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.151" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.152" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.153" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.154" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.155" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.156" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.157" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.158" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.159" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.160" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.161" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.162" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.163" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.164" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.165" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.166" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.167" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.168" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.169" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.170" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.171" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.172" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.173" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.174" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.175" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.176" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.177" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.178" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.0.179" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.157.0.0.1" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC div_sb_qr.157.0.0.2" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.46"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.158" expl="assertion" proved="true"> + <proof prover="1" timelimit="10"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC div_sb_qr.159" expl="postcondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.159.0" expl="postcondition" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC div_sb_qr.159.0.0" expl="postcondition" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC div_sb_qr.159.0.0.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="3.50"/></proof> + </goal> + <goal name="VC div_sb_qr.159.0.0.1" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div_sb_qr.159.0.0.2" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.39"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.160" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.36"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.161" expl="assertion" proved="true"> + <proof prover="1" timelimit="10"><result status="valid" time="4.99"/></proof> + </goal> + <goal name="VC div_sb_qr.162" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.162.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_sb_qr.162.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.162.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.162.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_sb_qr.162.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.162.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.162.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.162.7" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.162.7.0" expl="VC for div_sb_qr" proved="true"> + <transf name="split_all_full" proved="true" > + <goal name="VC div_sb_qr.162.7.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="10" memlimit="4000"><result status="valid" time="3.45"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.162.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.43"/></proof> + </goal> + <goal name="VC div_sb_qr.162.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC div_sb_qr.162.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC div_sb_qr.162.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div_sb_qr.162.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.162.13" expl="VC for div_sb_qr" proved="true"> + <transf name="replace" proved="true" arg1="(power radix2 2)" arg2="(radix2 * radix2)"> + <goal name="VC div_sb_qr.162.13.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="4.43"/></proof> + </goal> + <goal name="VC div_sb_qr.162.13.1" proved="true"> + <proof prover="3" timelimit="5" memlimit="2000"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.163" expl="postcondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.163.0" expl="postcondition" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC div_sb_qr.163.0.0" expl="postcondition" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC div_sb_qr.163.0.0.0" expl="postcondition" proved="true"> + <transf name="apply" proved="true" arg1="HR"> + <goal name="VC div_sb_qr.163.0.0.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.3" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.4" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.5" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.6" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.7" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.8" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.9" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.10" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.11" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.12" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.13" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.14" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.15" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.16" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.17" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.18" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.19" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.20" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.21" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.22" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.23" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.24" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.25" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.26" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.27" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.28" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.29" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.30" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.31" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.32" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.33" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.34" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.35" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.36" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.37" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.38" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.39" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.40" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.41" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.42" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.43" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.44" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.45" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.46" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.47" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.48" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.49" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.50" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.51" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.52" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.53" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.54" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.55" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.56" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.57" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.58" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.59" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.60" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.61" proved="true"> + <proof prover="3"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.62" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.63" proved="true"> + <proof prover="3"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.64" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.65" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.66" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.67" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.68" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.69" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.70" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.71" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.72" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.73" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.74" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.75" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.76" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.77" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.78" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.79" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.80" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.81" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.82" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.83" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.84" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.85" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.86" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.87" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.88" proved="true"> + <proof prover="3"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.89" proved="true"> + <proof prover="3"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.90" proved="true"> + <proof prover="3"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.91" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.92" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.93" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.94" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.95" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.96" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.97" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.98" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.99" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.100" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.101" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.102" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.103" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.104" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.105" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.106" proved="true"> + <proof prover="3"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.107" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.108" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.109" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.110" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.111" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.112" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.113" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.114" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.115" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.116" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.117" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.118" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.119" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.120" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.121" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.122" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.123" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.124" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.125" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.126" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.127" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.128" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.129" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.130" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.131" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.132" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.133" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.134" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.135" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.136" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.137" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.138" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.139" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.140" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.141" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.142" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.143" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.144" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.145" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.146" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.147" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.148" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.149" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.150" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.151" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.152" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.153" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.154" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.155" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.156" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.157" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.158" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.159" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.160" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.161" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.162" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.163" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.164" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.165" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.166" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.167" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.168" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.169" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.170" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.171" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.172" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.173" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.174" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.175" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.176" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.177" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.178" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.179" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.180" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.181" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.182" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.183" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.184" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.0.185" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.163.0.0.1" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div_sb_qr.163.0.0.2" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.46"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.164" expl="postcondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div_sb_qr.165" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.165.0" expl="assertion" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC div_sb_qr.165.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + <proof prover="1"><result status="valid" time="0.21"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.165.1" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.166" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.167" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC div_sb_qr.168" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.168.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.168.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_sb_qr.168.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.168.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.168.4" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.168.4.0" expl="VC for div_sb_qr" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_r"> + <goal name="VC div_sb_qr.168.4.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.168.4.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.168.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.168.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.168.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_sb_qr.168.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.168.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.168.10" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.168.10.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.168.10.0.0" expl="VC for div_sb_qr" proved="true"> + <transf name="unfold" proved="true" arg1="value"> + <goal name="VC div_sb_qr.168.10.0.0.0" expl="VC for div_sb_qr" proved="true"> + <transf name="apply" proved="true" arg1="value_sub_lower_bound"> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.168.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.168.12" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.168.12.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.168.12.0.0" expl="VC for div_sb_qr" proved="true"> + <transf name="cut" proved="true" arg1="(0 <= x12 /\ 0 <= power radix2 sy)"> + <goal name="VC div_sb_qr.168.12.0.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.65"/></proof> + </goal> + <goal name="VC div_sb_qr.168.12.0.0.1" proved="true"> + <proof prover="3" timelimit="5" memlimit="2000"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.168.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.168.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.168.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="4.02"/></proof> + </goal> + <goal name="VC div_sb_qr.168.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.168.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.74"/></proof> + </goal> + <goal name="VC div_sb_qr.168.18" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.58"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.169" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.169.0" expl="postcondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.169.1" expl="postcondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.30"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.170" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.171" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.172" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.172.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC div_sb_qr.172.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.32"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.172.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div_sb_qr.172.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="2.10"/></proof> + </goal> + <goal name="VC div_sb_qr.172.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="2.31"/></proof> + </goal> + <goal name="VC div_sb_qr.172.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.19"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.173" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_sb_qr.174" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.174.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.174.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC div_sb_qr.174.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div_sb_qr.174.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC div_sb_qr.174.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.174.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.174.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.174.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.92"/></proof> + </goal> + <goal name="VC div_sb_qr.174.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.174.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.174.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.174.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.174.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.174.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.174.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="3.06"/></proof> + </goal> + <goal name="VC div_sb_qr.174.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_sb_qr.174.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.174.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC div_sb_qr.174.18" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.174.19" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="3.89"/></proof> + </goal> + <goal name="VC div_sb_qr.174.20" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC div_sb_qr.174.21" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.174.22" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.174.23" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.174.24" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.174.25" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.174.26" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.174.27" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.174.28" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.91"/></proof> + </goal> + <goal name="VC div_sb_qr.174.29" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.174.30" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.175" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC div_sb_qr.176" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.176.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.176.1" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.176.2" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.176.3" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC div_sb_qr.176.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.176.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.176.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.29"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.177" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="3.62"/></proof> + </goal> + <goal name="VC div_sb_qr.178" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_sb_qr.179" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC div_sb_qr.180" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.180.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.180.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.181" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="5.16"/></proof> + </goal> + <goal name="VC div_sb_qr.182" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.182.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.182.0.0" expl="precondition" proved="true"> + <proof prover="2" timelimit="20" memlimit="1500"><result status="valid" time="0.28"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.183" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.183.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.183.0.0" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.26"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.184" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="4.72"/></proof> + </goal> + <goal name="VC div_sb_qr.185" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.186" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.187" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.188" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.188.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.188.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="4.36"/></proof> + </goal> + <goal name="VC div_sb_qr.188.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.188.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.68"/></proof> + </goal> + <goal name="VC div_sb_qr.188.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC div_sb_qr.188.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.64"/></proof> + </goal> + <goal name="VC div_sb_qr.188.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.188.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.38"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.189" expl="assertion" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.76"/></proof> + </goal> + <goal name="VC div_sb_qr.190" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.191" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.191.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.191.1" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.191.1.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.191.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.191.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.191.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.191.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.191.6" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.191.6.0" expl="VC for div_sb_qr" proved="true"> + <transf name="cut" proved="true" arg1="((power radix2 (int32'int sy - 1) * (uint64'int x1 + radix2 * c'))=(power radix2 (int32'int sy - 1) * uint64'int x1) + (power radix2 (int32'int sy) * c'))"> + <goal name="VC div_sb_qr.191.6.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3" timelimit="5" memlimit="2000"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.191.6.0.1" proved="true"> + <proof prover="1"><result status="valid" time="0.53"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.191.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.53"/></proof> + </goal> + <goal name="VC div_sb_qr.191.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.191.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="6.70"/></proof> + </goal> + <goal name="VC div_sb_qr.191.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.191.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="1.24"/></proof> + </goal> + <goal name="VC div_sb_qr.191.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.191.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.191.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.191.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.191.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.191.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.34"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.192" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.192.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC div_sb_qr.192.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.30"/></proof> + <proof prover="4"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.193" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.193.0" expl="integer overflow" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.60"/></proof> + </goal> + <goal name="VC div_sb_qr.193.1" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.193.1.0" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.193.1.1" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.194" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.194.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.194.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC div_sb_qr.194.2" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.194.2.0" expl="VC for div_sb_qr" proved="true"> + <transf name="replace" proved="true" arg1="(uint64'int ql1)" arg2="(uint64'int ql+1)"> + <goal name="VC div_sb_qr.194.2.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.194.2.0.1" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.194.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.194.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.195" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.195.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2"><result status="valid" time="0.91"/></proof> + <proof prover="4"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.195.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="2"><result status="valid" time="0.70"/></proof> + <proof prover="4"><result status="valid" time="0.33"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.196" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div_sb_qr.197" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.197.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_sb_qr.197.1" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.198" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.83"/></proof> + </goal> + <goal name="VC div_sb_qr.199" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.199.0" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.199.1" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.200" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.200.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.50"/></proof> + </goal> + <goal name="VC div_sb_qr.200.1" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.201" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC div_sb_qr.202" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.202.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.86"/></proof> + </goal> + <goal name="VC div_sb_qr.202.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.87"/></proof> + </goal> + <goal name="VC div_sb_qr.202.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.92"/></proof> + </goal> + <goal name="VC div_sb_qr.202.3" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.202.3.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.202.3.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.38"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.202.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.49"/></proof> + </goal> + <goal name="VC div_sb_qr.202.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.64"/></proof> + </goal> + <goal name="VC div_sb_qr.202.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.202.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.202.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.202.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.202.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="3.77"/></proof> + </goal> + <goal name="VC div_sb_qr.202.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.202.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.61"/></proof> + </goal> + <goal name="VC div_sb_qr.202.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.202.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div_sb_qr.202.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.202.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.202.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.202.18" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.202.19" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.202.20" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.41"/></proof> + </goal> + <goal name="VC div_sb_qr.202.21" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.202.22" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.202.23" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.202.24" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.47"/></proof> + </goal> + <goal name="VC div_sb_qr.202.25" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.202.26" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.202.27" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.50"/></proof> + </goal> + <goal name="VC div_sb_qr.202.28" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC div_sb_qr.202.29" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="4.67"/></proof> + </goal> + <goal name="VC div_sb_qr.202.30" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div_sb_qr.202.31" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC div_sb_qr.202.32" expl="VC for div_sb_qr" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.202.32.0" expl="VC for div_sb_qr" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.202.32.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.30"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.202.33" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.202.34" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.57"/></proof> + </goal> + <goal name="VC div_sb_qr.202.35" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.202.36" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.202.37" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div_sb_qr.202.38" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.58"/></proof> + </goal> + <goal name="VC div_sb_qr.202.39" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div_sb_qr.202.40" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.202.41" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.202.42" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.202.43" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.202.44" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.66"/></proof> + </goal> + <goal name="VC div_sb_qr.202.45" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="1.14"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="7.18"/></proof> + </goal> + <goal name="VC div_sb_qr.202.46" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.43"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="7.50"/></proof> + </goal> + <goal name="VC div_sb_qr.202.47" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.202.48" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.202.49" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.202.50" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.48"/></proof> + </goal> + <goal name="VC div_sb_qr.202.51" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.202.52" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.202.53" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.202.54" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.202.55" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.74"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.203" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.203.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.203.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.96"/></proof> + </goal> + <goal name="VC div_sb_qr.203.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.203.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.203.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.203.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.01"/></proof> + </goal> + <goal name="VC div_sb_qr.203.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div_sb_qr.203.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.203.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div_sb_qr.203.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC div_sb_qr.203.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.203.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.11"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.204" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.204.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.56"/></proof> + </goal> + <goal name="VC div_sb_qr.204.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.204.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC div_sb_qr.204.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div_sb_qr.204.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.204.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.204.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.204.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.84"/></proof> + </goal> + <goal name="VC div_sb_qr.204.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.204.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.204.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.204.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC div_sb_qr.204.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.204.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_sb_qr.204.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.204.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.204.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.204.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.29"/></proof> + </goal> + <goal name="VC div_sb_qr.204.18" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.205" expl="loop variant decrease" proved="true"> + <proof prover="4" memlimit="2000"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.206" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.57"/></proof> + </goal> + <goal name="VC div_sb_qr.207" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.48"/></proof> + </goal> + <goal name="VC div_sb_qr.208" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="1.01"/></proof> + </goal> + <goal name="VC div_sb_qr.209" expl="loop invariant preservation" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.209.0" expl="loop invariant preservation" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.209.0.0" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.11"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.210" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.211" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.212" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.80"/></proof> + </goal> + <goal name="VC div_sb_qr.213" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.214" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_sb_qr.215" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.76"/></proof> + </goal> + <goal name="VC div_sb_qr.216" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.82"/></proof> + </goal> + <goal name="VC div_sb_qr.217" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div_sb_qr.218" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.218.0" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="0.45"/></proof> + </goal> + <goal name="VC div_sb_qr.218.1" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.42"/></proof> + <proof prover="4" memlimit="2000"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.219" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.219.0" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.219.1" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.220" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.220.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="4" memlimit="2000"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC div_sb_qr.220.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.22"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.221" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.222" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.222.0" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.222.1" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.222.1.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.222.1.0.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.223" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.53"/></proof> + </goal> + <goal name="VC div_sb_qr.224" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.225" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.225.0" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.225.0.0" expl="assertion" proved="true"> + <transf name="replace" proved="true" arg1="(value qp ((int32'int sx - int32'int sy) - int32'int i))" arg2="(uint64'int ql+ radix2 *value_sub (pelts q) (offset qp + 1) (((offset qp + int32'int sx) - int32'int sy) - int32'int i))"> + <goal name="VC div_sb_qr.225.0.0.0" expl="assertion" proved="true"> + <proof prover="3" timelimit="5" memlimit="2000"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.225.0.0.1" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.225.1" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.225.1.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="1.10"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.226" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.226.0" expl="assertion" proved="true"> + <transf name="replace" proved="true" arg1="(value_sub (pelts q) (offset qp + 1) (((offset qp + int32'int sx) - int32'int sy) - int32'int i))" arg2="(value qp2 ((int32'int sx - int32'int sy) - int32'int i1))"> + <goal name="VC div_sb_qr.226.0.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.226.0.1" proved="true"> + <proof prover="0"><result status="valid" time="0.51"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.227" expl="integer overflow" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.68"/></proof> + </goal> + <goal name="VC div_sb_qr.228" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.229" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.229.0" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC div_sb_qr.229.1" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.28"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.230" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.230.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.20"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div_sb_qr.230.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.31"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.231" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.232" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.233" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.233.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div_sb_qr.233.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.233.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.233.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.233.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.233.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="1.58"/></proof> + </goal> + <goal name="VC div_sb_qr.233.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.233.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.55"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.234" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.234.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.234.1" expl="assertion" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.235" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.235.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.235.1" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.236" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.237" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.237.0" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.237.1" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.237.1.0" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.42"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.238" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.238.0" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.238.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.238.1" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.238.1.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="3.15"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.239" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.239.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.EqPropMP"> + <goal name="VC div_sb_qr.239.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="prop_mp_decision"> + <goal name="VC div_sb_qr.239.0.0.0" expl="assertion" proved="true"> + <transf name="apply" proved="true" arg1="HR"> + <goal name="VC div_sb_qr.239.0.0.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.3" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.4" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.5" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.6" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.7" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.8" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.9" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.10" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.11" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.12" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.13" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.14" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.15" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.16" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.17" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.18" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.19" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.20" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.21" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.22" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.23" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.24" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.25" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.26" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.27" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.28" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.29" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.30" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.31" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.32" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.33" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.34" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.35" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.36" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.37" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.38" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.39" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.40" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.41" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.42" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.43" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.44" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.45" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.46" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.47" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.48" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.49" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.50" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.51" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.52" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.53" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.54" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.55" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.56" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.57" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.58" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.59" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.60" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.61" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.62" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.63" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.64" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.65" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.66" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.67" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.68" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.69" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.70" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.71" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.72" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.73" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.74" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.75" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.76" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.77" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.78" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.79" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.80" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.81" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.82" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.83" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.84" proved="true"> + <proof prover="3"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.85" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.86" proved="true"> + <proof prover="3"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.87" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.88" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.89" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.90" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.91" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.92" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.93" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.94" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.95" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.96" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.97" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.98" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.99" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.100" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.101" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.102" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.103" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.104" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.105" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.106" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.107" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.108" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.109" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.110" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.111" proved="true"> + <proof prover="3"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.112" proved="true"> + <proof prover="3"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.113" proved="true"> + <proof prover="3"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.114" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.115" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.116" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.117" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.118" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.119" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.120" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.121" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.122" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.123" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.124" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.125" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.126" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.127" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.128" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.129" proved="true"> + <proof prover="3"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.130" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.131" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.132" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.133" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.134" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.135" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.136" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.137" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.138" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.139" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.140" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.141" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.142" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.143" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.144" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.145" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.146" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.147" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.148" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.149" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.150" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.151" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.152" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.153" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.154" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.155" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.156" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.157" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.158" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.159" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.160" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.161" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.162" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.163" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.164" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.165" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.166" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.167" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.168" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.169" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.170" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.171" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.172" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.173" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.174" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.175" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.176" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.177" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.178" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.179" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.180" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.181" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.182" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.183" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.184" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.185" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.186" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.187" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.188" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.189" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.190" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.191" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.192" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.193" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.194" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.195" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.196" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.197" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.198" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.199" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.200" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.201" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.202" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.203" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.204" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.205" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.206" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.207" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.0.208" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.239.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.2" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.50"/></proof> + </goal> + <goal name="VC div_sb_qr.239.0.0.3" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.50"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.240" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC div_sb_qr.241" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.35"/></proof> + </goal> + <goal name="VC div_sb_qr.242" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_sb_qr.242.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_sb_qr.242.0.0" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.242.0.0.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.242.0.0.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.242.0.0.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.242.0.0.3" expl="VC for div_sb_qr" proved="true"> + <transf name="cut" proved="true" arg1="(value y (sy - 1) = vly + (power radix2 (sy-2) * dl))"> + <goal name="VC div_sb_qr.242.0.0.3.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3" timelimit="5" memlimit="2000"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.242.0.0.3.1" proved="true"> + <transf name="replace" proved="true" arg1="(sy - 1)" arg2="((sy - 2) + 1)"> + <goal name="VC div_sb_qr.242.0.0.3.1.0" proved="true"> + <transf name="unfold" proved="true" arg1="vly"> + <goal name="VC div_sb_qr.242.0.0.3.1.0.0" proved="true"> + <transf name="unfold" proved="true" arg1="value"> + <goal name="VC div_sb_qr.242.0.0.3.1.0.0.0" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.242.0.0.3.1.1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.242.0.0.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.243" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.243.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div_sb_qr.243.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.37"/></proof> + </goal> + <goal name="VC div_sb_qr.243.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.243.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.243.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.243.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.243.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.243.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC div_sb_qr.243.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.54"/></proof> + </goal> + <goal name="VC div_sb_qr.243.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.33"/></proof> + </goal> + <goal name="VC div_sb_qr.243.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.243.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.243.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.37"/></proof> + </goal> + <goal name="VC div_sb_qr.243.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.243.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div_sb_qr.243.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC div_sb_qr.243.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.243.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.243.18" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.243.19" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.243.20" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.243.21" expl="VC for div_sb_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="7.58"/></proof> + </goal> + <goal name="VC div_sb_qr.243.22" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.243.23" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.35"/></proof> + </goal> + <goal name="VC div_sb_qr.243.24" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.243.25" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.243.26" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.243.27" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.243.28" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.243.29" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.243.30" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.243.31" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.243.32" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.243.33" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.243.34" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.243.35" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.243.36" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.15"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.244" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div_sb_qr.245" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.56"/></proof> + </goal> + <goal name="VC div_sb_qr.246" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.246.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.37"/></proof> + </goal> + <goal name="VC div_sb_qr.246.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.246.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_sb_qr.246.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.246.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.246.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.246.6" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_sb_qr.246.7" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.246.8" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC div_sb_qr.246.9" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.246.10" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_sb_qr.246.11" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.246.12" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_sb_qr.246.13" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.246.14" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.246.15" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div_sb_qr.246.16" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.246.17" expl="VC for div_sb_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.97"/></proof> + </goal> + <goal name="VC div_sb_qr.246.18" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.247" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC div_sb_qr.248" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.51"/></proof> + </goal> + <goal name="VC div_sb_qr.249" expl="loop invariant preservation" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC div_sb_qr.250" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.250.0" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC div_sb_qr.250.1" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.77"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.251" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.71"/></proof> + </goal> + <goal name="VC div_sb_qr.252" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.253" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.254" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.96"/></proof> + </goal> + <goal name="VC div_sb_qr.255" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_sb_qr.256" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_sb_qr.257" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.257.0" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.60"/></proof> + </goal> + <goal name="VC div_sb_qr.257.1" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.70"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.258" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.258.0" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.41"/></proof> + </goal> + <goal name="VC div_sb_qr.258.1" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.77"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.259" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.259.0" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_sb_qr.259.1" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.08"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="0.58"/></proof> + <proof prover="4" memlimit="2000"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.260" expl="loop invariant preservation" proved="true"> + <proof prover="4" memlimit="2000"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.261" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.261.0" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC div_sb_qr.261.1" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.262" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div_sb_qr.263" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_sb_qr.264" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC div_sb_qr.265" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_sb_qr.266" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_sb_qr.267" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.267.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.67" steps="157"/></proof> + </goal> + <goal name="VC div_sb_qr.267.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="5.54"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.268" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.268.0" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_sb_qr.268.1" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.269" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.269.0" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.59" steps="157"/></proof> + </goal> + <goal name="VC div_sb_qr.269.1" expl="VC for div_sb_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_sb_qr.269.2" expl="VC for div_sb_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.35" steps="108"/></proof> + </goal> + <goal name="VC div_sb_qr.269.3" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_sb_qr.269.4" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="1.15"/></proof> + </goal> + <goal name="VC div_sb_qr.269.5" expl="VC for div_sb_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.270" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.270.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_sb_qr.270.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.271" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_sb_qr.271.0" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.51" steps="157"/></proof> + </goal> + <goal name="VC div_sb_qr.271.1" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.23" steps="157"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_sb_qr.272" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.13"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="0.13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2" expl="VC for divmod_2" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.0" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.06" steps="31"/></proof> + </goal> + <goal name="VC divmod_2.1" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="32"/></proof> + </goal> + <goal name="VC divmod_2.2" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.2.0" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.3" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.4" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_2.5" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_2.6" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.01" steps="36"/></proof> + </goal> + <goal name="VC divmod_2.7" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.06" steps="43"/></proof> + </goal> + <goal name="VC divmod_2.8" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC divmod_2.9" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC divmod_2.10" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.10.0" expl="VC for divmod_2" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.13"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.06"/></proof> + <proof prover="2"><result status="valid" time="0.15"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.10.1" expl="VC for divmod_2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.11" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC divmod_2.12" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.13" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.46"/></proof> + </goal> + <goal name="VC divmod_2.14" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_2.15" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.16" expl="assertion" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.16" steps="292"/></proof> + </goal> + <goal name="VC divmod_2.17" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC divmod_2.18" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_2.19" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC divmod_2.20" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.20.0" expl="VC for divmod_2" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.20.1" expl="VC for divmod_2" proved="true"> + <proof prover="5"><result status="valid" time="0.18" steps="82"/></proof> + </goal> + <goal name="VC divmod_2.20.2" expl="VC for divmod_2" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="43"/></proof> + </goal> + <goal name="VC divmod_2.20.3" expl="VC for divmod_2" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="43"/></proof> + </goal> + <goal name="VC divmod_2.20.4" expl="VC for divmod_2" proved="true"> + <proof prover="5"><result status="valid" time="0.26" steps="83"/></proof> + </goal> + <goal name="VC divmod_2.20.5" expl="VC for divmod_2" proved="true"> + <proof prover="5"><result status="valid" time="0.23" steps="82"/></proof> + </goal> + <goal name="VC divmod_2.20.6" expl="VC for divmod_2" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.21" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_2.22" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC divmod_2.23" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.24" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC divmod_2.25" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_2.26" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="81"/></proof> + </goal> + <goal name="VC divmod_2.27" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC divmod_2.28" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.29" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="28"/></proof> + </goal> + <goal name="VC divmod_2.30" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC divmod_2.31" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.31.0" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_2.31.1" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.32" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_2.33" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_2.34" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.34.0" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_2.34.1" expl="loop invariant init" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.35" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.44" steps="135"/></proof> + </goal> + <goal name="VC divmod_2.36" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.37" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC divmod_2.38" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="71"/></proof> + </goal> + <goal name="VC divmod_2.39" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_2.40" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.40.0" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC divmod_2.40.0.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC divmod_2.40.0.0.0" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="1.38"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.40.1" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.40.1.0" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_2.40.1.1" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.41" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_2.42" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC divmod_2.43" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC divmod_2.44" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.45" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_2.46" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.47" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.47.0" expl="VC for divmod_2" proved="true"> + <proof prover="0"><result status="valid" time="1.96"/></proof> + </goal> + <goal name="VC divmod_2.47.1" expl="VC for divmod_2" proved="true"> + <proof prover="1"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC divmod_2.47.2" expl="VC for divmod_2" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.94"/></proof> + </goal> + <goal name="VC divmod_2.47.3" expl="VC for divmod_2" proved="true"> + <proof prover="0"><result status="valid" time="4.48"/></proof> + </goal> + <goal name="VC divmod_2.47.4" expl="VC for divmod_2" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="1.07"/></proof> + </goal> + <goal name="VC divmod_2.47.5" expl="VC for divmod_2" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.47.6" expl="VC for divmod_2" proved="true"> + <proof prover="1"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC divmod_2.47.7" expl="VC for divmod_2" proved="true"> + <proof prover="0"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC divmod_2.47.8" expl="VC for divmod_2" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_2.47.9" expl="VC for divmod_2" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC divmod_2.47.9.0" expl="VC for divmod_2" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC divmod_2.47.9.0.0" expl="VC for divmod_2" proved="true"> + <proof prover="1"><result status="valid" time="0.20"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.47.10" expl="VC for divmod_2" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.47.11" expl="VC for divmod_2" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + <transf name="introduce_premises" proved="true" > + <goal name="VC divmod_2.47.11.0" expl="VC for divmod_2" proved="true"> + <transf name="revert" proved="true" arg1="H26"> + <goal name="VC divmod_2.47.11.0.0" expl="VC for divmod_2" proved="true"> + <proof prover="1" timelimit="10"><result status="valid" time="0.13"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.47.12" expl="VC for divmod_2" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC divmod_2.47.12.0" expl="VC for divmod_2" proved="true"> + <transf name="revert" proved="true" arg1="H26"> + <goal name="VC divmod_2.47.12.0.0" expl="VC for divmod_2" proved="true"> + <proof prover="1" timelimit="10"><result status="valid" time="0.13"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.47.13" expl="VC for divmod_2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC divmod_2.47.14" expl="VC for divmod_2" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC divmod_2.47.14.0" expl="VC for divmod_2" proved="true"> + <transf name="replace" proved="true" arg1="(value_sub (pelts q) (offset q + k) ((offset q + int32'int sx) - 2) + (uint64'int qh * power radix2 ((int32'int sx - 2) - k)))" arg2="(value_sub (pelts q1) (offset q1 + k) ((offset q1 + int32'int sx) - 2) + (uint64'int qh * power radix2 ((int32'int sx - 2) - k)))"> + <goal name="VC divmod_2.47.14.0.0" expl="VC for divmod_2" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC divmod_2.47.14.0.1" proved="true"> + <proof prover="1"><result status="valid" time="0.11"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.47.15" expl="VC for divmod_2" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC divmod_2.47.15.0" expl="VC for divmod_2" proved="true"> + <proof prover="1"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.47.16" expl="VC for divmod_2" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.48" expl="loop variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.11"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.49" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.49.0" expl="VC for divmod_2" proved="true"> + <proof prover="2"><result status="valid" time="0.15"/></proof> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.49.1" expl="VC for divmod_2" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.50" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC divmod_2.51" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.52" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.53" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.54" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.54.0" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC divmod_2.54.1" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.55" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.56" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC divmod_2.57" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC divmod_2.58" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC divmod_2.59" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC divmod_2.60" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC divmod_2.61" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC divmod_2.61.0" expl="VC for divmod_2" proved="true"> + <proof prover="5"><result status="valid" time="0.20" steps="58"/></proof> + </goal> + <goal name="VC divmod_2.61.1" expl="VC for divmod_2" proved="true"> + <proof prover="5"><result status="valid" time="0.22" steps="58"/></proof> + </goal> + <goal name="VC divmod_2.61.2" expl="VC for divmod_2" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC divmod_2.61.2.0" expl="VC for divmod_2" proved="true"> + <transf name="split_all_full" proved="true" > + <goal name="VC divmod_2.61.2.0.0" expl="VC for divmod_2" proved="true"> + <proof prover="2" timelimit="10" memlimit="4000"><result status="valid" time="2.73"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC divmod_2.62" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.17" steps="98"/></proof> + </goal> + <goal name="VC divmod_2.63" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC divmod_2.64" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr" expl="VC for div_qr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.1" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="51"/></proof> + </goal> + <goal name="VC div_qr.2" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.3" expl="integer overflow" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.4" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.4.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.5" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.6" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.7" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.10"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="26"/></proof> + </goal> + <goal name="VC div_qr.8" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.9" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.9.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.9.0.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.10" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.07" steps="28"/></proof> + </goal> + <goal name="VC div_qr.11" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.12" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.27" steps="171"/></proof> + </goal> + <goal name="VC div_qr.13" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_qr.14" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.14.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.15" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="61"/></proof> + </goal> + <goal name="VC div_qr.16" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.16.0" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + <proof prover="4" memlimit="2000"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.17" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.18" expl="precondition" proved="true"> + <proof prover="5" timelimit="20" memlimit="2000"><result status="valid" time="0.06" steps="69"/></proof> + </goal> + <goal name="VC div_qr.19" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="42"/></proof> + </goal> + <goal name="VC div_qr.20" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.21" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="75"/></proof> + </goal> + <goal name="VC div_qr.22" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.22.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="131"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.23" expl="integer overflow" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.30"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.06" steps="84"/></proof> + </goal> + <goal name="VC div_qr.24" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.24.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.24.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.24.0.0.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.25" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.25.0" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.07" steps="141"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.26" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.26.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.27" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.27.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="55"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.28" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.14" steps="167"/></proof> + </goal> + <goal name="VC div_qr.29" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.06" steps="151"/></proof> + </goal> + <goal name="VC div_qr.30" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.30.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.30.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.30.0.0.0" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.30.0.0.1" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.30.0.0.2" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.30.0.0.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_qr.30.0.0.4" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_qr.30.0.0.5" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.31" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.31.0" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.48" steps="227"/></proof> + </goal> + <goal name="VC div_qr.31.1" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.57" steps="237"/></proof> + </goal> + <goal name="VC div_qr.31.2" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.35" steps="227"/></proof> + </goal> + <goal name="VC div_qr.31.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.31.4" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="75"/></proof> + </goal> + <goal name="VC div_qr.31.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC div_qr.31.6" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.46"/></proof> + </goal> + <goal name="VC div_qr.31.7" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div_qr.31.8" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.31.9" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC div_qr.31.10" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.31.11" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="146"/></proof> + </goal> + <goal name="VC div_qr.31.12" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.31.13" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.37" steps="240"/></proof> + </goal> + <goal name="VC div_qr.31.14" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.31.15" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.31.16" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.31.17" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="77"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.32" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.33" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.82"/></proof> + </goal> + <goal name="VC div_qr.34" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.34.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="36"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.35" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.35.0" expl="VC for div_qr" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.10" steps="37"/></proof> + </goal> + <goal name="VC div_qr.35.1" expl="VC for div_qr" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.36" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_qr.37" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.38" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div_qr.39" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="123"/></proof> + </goal> + <goal name="VC div_qr.40" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.41" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC div_qr.42" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.43" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.43.0" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.43.1" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="48"/></proof> + </goal> + <goal name="VC div_qr.43.2" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="48"/></proof> + </goal> + <goal name="VC div_qr.43.3" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="50"/></proof> + </goal> + <goal name="VC div_qr.43.4" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="51"/></proof> + </goal> + <goal name="VC div_qr.43.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_qr.43.6" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="118"/></proof> + </goal> + <goal name="VC div_qr.43.7" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.43.8" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.43.9" expl="VC for div_qr" proved="true"> + <proof prover="1" timelimit="20"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC div_qr.43.10" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.43.11" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.43.12" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="132"/></proof> + </goal> + <goal name="VC div_qr.43.13" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="136"/></proof> + </goal> + <goal name="VC div_qr.43.14" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.43.15" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.43.16" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.43.17" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.16" steps="138"/></proof> + </goal> + <goal name="VC div_qr.43.18" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.43.19" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="66"/></proof> + </goal> + <goal name="VC div_qr.43.20" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.43.21" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.43.22" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="155"/></proof> + </goal> + <goal name="VC div_qr.43.23" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.44" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.45" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.46" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.46.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.47" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.47.0" expl="VC for div_qr" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.02" steps="46"/></proof> + </goal> + <goal name="VC div_qr.47.1" expl="VC for div_qr" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.08" steps="46"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.48" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.04" steps="83"/></proof> + </goal> + <goal name="VC div_qr.49" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_qr.50" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.08" steps="49"/></proof> + </goal> + <goal name="VC div_qr.51" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="86"/></proof> + </goal> + <goal name="VC div_qr.52" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.52.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.53" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.71"/></proof> + </goal> + <goal name="VC div_qr.54" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.55" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.09" steps="95"/></proof> + </goal> + <goal name="VC div_qr.56" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.57" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.57.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.57.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.57.0.0.0" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.57.0.0.1" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.57.0.0.2" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.57.0.0.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.57.0.0.4" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.57.0.0.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.58" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.59" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.60" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.55"/></proof> + </goal> + <goal name="VC div_qr.61" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.61.0" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.62" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.62.0" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.63" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.64" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="77"/></proof> + </goal> + <goal name="VC div_qr.65" expl="precondition" proved="true"> + <proof prover="4" timelimit="10"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.66" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.66.0" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="82"/></proof> + </goal> + <goal name="VC div_qr.66.1" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.66.2" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.66.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.66.4" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.76"/></proof> + </goal> + <goal name="VC div_qr.66.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.66.6" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_qr.66.7" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.58"/></proof> + </goal> + <goal name="VC div_qr.66.8" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.66.9" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC div_qr.66.10" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.66.11" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.66.12" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC div_qr.66.13" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.66.14" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.66.15" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="83"/></proof> + </goal> + <goal name="VC div_qr.66.16" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div_qr.66.17" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_qr.66.18" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.66.19" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.66.20" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.66.21" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.66.22" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.66.23" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.66.24" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.66.25" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.66.26" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.66.27" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.67" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.67.0" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="83"/></proof> + </goal> + <goal name="VC div_qr.67.1" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.67.2" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="85"/></proof> + </goal> + <goal name="VC div_qr.67.3" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="85"/></proof> + </goal> + <goal name="VC div_qr.67.4" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="87"/></proof> + </goal> + <goal name="VC div_qr.67.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.68" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.69" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.69.0" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.69.1" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.69.2" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.69.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="1.00"/></proof> + </goal> + <goal name="VC div_qr.69.4" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.69.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_qr.69.6" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC div_qr.69.7" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC div_qr.69.8" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div_qr.69.9" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.69.10" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC div_qr.69.11" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_qr.69.12" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.69.13" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC div_qr.69.14" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_qr.69.15" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.37"/></proof> + </goal> + <goal name="VC div_qr.69.16" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.69.17" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.68"/></proof> + </goal> + <goal name="VC div_qr.69.18" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.69.19" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.11"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.70" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.71" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_qr.72" expl="integer overflow" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.72.0" expl="integer overflow" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.72.0.0" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.72.0.0.0" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.72.0.0.1" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.73" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="61"/></proof> + </goal> + <goal name="VC div_qr.74" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_qr.75" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="62"/></proof> + </goal> + <goal name="VC div_qr.76" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.77" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="63"/></proof> + </goal> + <goal name="VC div_qr.78" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.78.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="33"/></proof> + </goal> + <goal name="VC div_qr.78.1" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="33"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.79" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.79.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.79.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.79.0.0.0" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.79.0.0.1" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_qr.79.0.0.2" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_qr.79.0.0.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.79.0.0.4" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.79.0.0.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.80" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.81" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.81.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.81.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.81.0.0.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.82" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.82.0" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.11" steps="46"/></proof> + </goal> + <goal name="VC div_qr.82.1" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.83" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="77"/></proof> + </goal> + <goal name="VC div_qr.84" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="132"/></proof> + </goal> + <goal name="VC div_qr.85" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.85.0" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.85.1" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="213"/></proof> + </goal> + <goal name="VC div_qr.85.2" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.85.3" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="122"/></proof> + </goal> + <goal name="VC div_qr.85.4" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.85.5" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="129"/></proof> + </goal> + <goal name="VC div_qr.85.6" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="128"/></proof> + </goal> + <goal name="VC div_qr.85.7" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="58"/></proof> + </goal> + <goal name="VC div_qr.85.8" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.14" steps="139"/></proof> + </goal> + <goal name="VC div_qr.85.9" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.85.10" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.63"/></proof> + </goal> + <goal name="VC div_qr.85.11" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.85.12" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="123"/></proof> + </goal> + <goal name="VC div_qr.85.13" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.46" steps="339"/></proof> + </goal> + <goal name="VC div_qr.85.14" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="60"/></proof> + </goal> + <goal name="VC div_qr.85.15" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="128"/></proof> + </goal> + <goal name="VC div_qr.85.16" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC div_qr.85.17" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.85.18" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.86" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.08" steps="130"/></proof> + </goal> + <goal name="VC div_qr.87" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.87.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.87.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.87.0.0.0" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.87.0.0.1" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="126"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.88" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.88.0" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.96"/></proof> + </goal> + <goal name="VC div_qr.88.1" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.08" steps="147"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.89" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.89.0" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.89.1" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.90" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.90.0" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.05" steps="60"/></proof> + </goal> + <goal name="VC div_qr.90.1" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.10" steps="171"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.91" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="173"/></proof> + </goal> + <goal name="VC div_qr.92" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_qr.93" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.94" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.94.0" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.25" steps="243"/></proof> + </goal> + <goal name="VC div_qr.94.1" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="2.01"/></proof> + </goal> + <goal name="VC div_qr.94.2" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_qr.94.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.94.4" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="79"/></proof> + </goal> + <goal name="VC div_qr.94.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC div_qr.94.6" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC div_qr.94.7" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.94.8" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="83"/></proof> + </goal> + <goal name="VC div_qr.94.9" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.94.10" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="83"/></proof> + </goal> + <goal name="VC div_qr.94.11" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="85"/></proof> + </goal> + <goal name="VC div_qr.94.12" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.94.13" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.94.14" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="81"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.95" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.95.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.95.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.95.0.0.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.96" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.96.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.96.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.96.0.0.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.97" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.15" steps="111"/></proof> + </goal> + <goal name="VC div_qr.98" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.17" steps="111"/></proof> + </goal> + <goal name="VC div_qr.99" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.99.0" expl="precondition" proved="true"> + <proof prover="5" timelimit="20" memlimit="2000"><result status="valid" time="0.08" steps="79"/></proof> + </goal> + <goal name="VC div_qr.99.1" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.10" steps="87"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.100" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="4.57"/></proof> + </goal> + <goal name="VC div_qr.101" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="144"/></proof> + </goal> + <goal name="VC div_qr.102" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="82"/></proof> + </goal> + <goal name="VC div_qr.103" expl="postcondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_qr.104" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.104.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="40"/></proof> + </goal> + <goal name="VC div_qr.104.1" expl="precondition" proved="true"> + <proof prover="5" timelimit="20" memlimit="2000"><result status="valid" time="0.07" steps="40"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.105" expl="precondition" proved="true"> + <proof prover="5" timelimit="20" memlimit="2000"><result status="valid" time="0.05" steps="39"/></proof> + </goal> + <goal name="VC div_qr.106" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.107" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.108" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.108.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.108.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.108.0.0.0" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.109" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="127"/></proof> + </goal> + <goal name="VC div_qr.110" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.111" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.112" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.112.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.112.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.112.0.0.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.113" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.113.0" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.113.1" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="50"/></proof> + </goal> + <goal name="VC div_qr.113.2" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="50"/></proof> + </goal> + <goal name="VC div_qr.113.3" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="52"/></proof> + </goal> + <goal name="VC div_qr.113.4" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="53"/></proof> + </goal> + <goal name="VC div_qr.113.5" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.35"/></proof> + </goal> + <goal name="VC div_qr.113.6" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="120"/></proof> + </goal> + <goal name="VC div_qr.113.7" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.113.8" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.113.9" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.113.10" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.113.11" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.113.12" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.113.13" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC div_qr.113.14" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="54"/></proof> + </goal> + <goal name="VC div_qr.113.15" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.113.16" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.113.17" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="135"/></proof> + </goal> + <goal name="VC div_qr.113.18" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.113.19" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.113.20" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.113.21" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_qr.113.22" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.113.23" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.14" steps="63"/></proof> + </goal> + <goal name="VC div_qr.113.24" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.113.25" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.113.26" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC div_qr.113.27" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.114" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_qr.115" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.116" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.116.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.116.1" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.117" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.05" steps="48"/></proof> + </goal> + <goal name="VC div_qr.118" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.118.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.118.0.0" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.07" steps="86"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.119" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.119.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_qr.119.1" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.120" expl="precondition" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC div_qr.120.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.18"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.121" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_qr.122" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.123" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.60"/></proof> + </goal> + <goal name="VC div_qr.124" expl="assertion" proved="true"> + <proof prover="5" timelimit="20" memlimit="2000"><result status="valid" time="0.04" steps="132"/></proof> + </goal> + <goal name="VC div_qr.125" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.125.0" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="64"/></proof> + </goal> + <goal name="VC div_qr.125.1" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.125.2" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.16" steps="147"/></proof> + </goal> + <goal name="VC div_qr.125.3" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="136"/></proof> + </goal> + <goal name="VC div_qr.125.4" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.125.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.125.6" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.125.7" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.125.8" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="147"/></proof> + </goal> + <goal name="VC div_qr.125.9" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.125.10" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_qr.125.11" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.125.12" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.60"/></proof> + </goal> + <goal name="VC div_qr.125.13" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.54"/></proof> + </goal> + <goal name="VC div_qr.125.14" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.125.15" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.125.16" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.125.17" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="144"/></proof> + </goal> + <goal name="VC div_qr.125.18" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.125.19" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="74"/></proof> + </goal> + <goal name="VC div_qr.125.20" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.79"/></proof> + </goal> + <goal name="VC div_qr.125.21" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.125.22" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_qr.125.23" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.126" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="4.75"/></proof> + </goal> + <goal name="VC div_qr.127" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.127.0" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC div_qr.127.1" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.127.2" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.127.3" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="134"/></proof> + </goal> + <goal name="VC div_qr.127.4" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.72"/></proof> + </goal> + <goal name="VC div_qr.127.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.57"/></proof> + </goal> + <goal name="VC div_qr.127.6" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="142"/></proof> + </goal> + <goal name="VC div_qr.127.7" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="141"/></proof> + </goal> + <goal name="VC div_qr.127.8" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="67"/></proof> + </goal> + <goal name="VC div_qr.127.9" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.127.10" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="2.48"/></proof> + </goal> + <goal name="VC div_qr.127.11" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div_qr.127.12" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="135"/></proof> + </goal> + <goal name="VC div_qr.127.13" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.41"/></proof> + </goal> + <goal name="VC div_qr.127.14" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.83"/></proof> + </goal> + <goal name="VC div_qr.127.15" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="69"/></proof> + </goal> + <goal name="VC div_qr.127.16" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.12" steps="141"/></proof> + </goal> + <goal name="VC div_qr.127.17" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.42"/></proof> + </goal> + <goal name="VC div_qr.127.18" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.127.19" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.128" expl="integer overflow" proved="true"> + <proof prover="0"><result status="valid" time="2.55"/></proof> + <proof prover="1"><result status="valid" time="0.85"/></proof> + </goal> + <goal name="VC div_qr.129" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="133"/></proof> + </goal> + <goal name="VC div_qr.130" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.54"/></proof> + </goal> + <goal name="VC div_qr.131" expl="precondition" proved="true"> + <proof prover="5" timelimit="5" memlimit="2000"><result status="valid" time="0.08" steps="68"/></proof> + </goal> + <goal name="VC div_qr.132" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.11" steps="193"/></proof> + </goal> + <goal name="VC div_qr.133" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.134" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.134.0" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.134.1" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.135" expl="precondition" proved="true"> + <proof prover="5" timelimit="20" memlimit="2000"><result status="valid" time="0.18" steps="178"/></proof> + </goal> + <goal name="VC div_qr.136" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.136.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.136.0.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.136.0.0.0" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.136.0.0.1" expl="VC for div_qr" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC div_qr.136.0.0.2" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.136.0.0.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.136.0.0.4" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.136.0.0.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.137" expl="precondition" proved="true"> + <proof prover="5" timelimit="20" memlimit="2000"><result status="valid" time="0.06" steps="80"/></proof> + </goal> + <goal name="VC div_qr.138" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.138.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.138.0.0" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.22" steps="82"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.139" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.139.0" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="85"/></proof> + </goal> + <goal name="VC div_qr.139.1" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.139.2" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.139.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.139.4" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.92"/></proof> + </goal> + <goal name="VC div_qr.139.5" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.139.6" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.139.7" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.74"/></proof> + </goal> + <goal name="VC div_qr.139.8" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.139.9" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC div_qr.139.10" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC div_qr.139.11" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.139.12" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC div_qr.139.13" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.139.14" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_qr.139.15" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="86"/></proof> + </goal> + <goal name="VC div_qr.139.16" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.59"/></proof> + </goal> + <goal name="VC div_qr.139.17" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC div_qr.139.18" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.139.19" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.139.20" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.139.21" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.139.22" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.139.23" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.139.24" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.139.25" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.139.26" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC div_qr.139.27" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.140" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC div_qr.140.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC div_qr.140.0.0" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.140.0.0.0" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.23" steps="86"/></proof> + </goal> + <goal name="VC div_qr.140.0.0.1" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.140.0.0.2" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.29" steps="88"/></proof> + </goal> + <goal name="VC div_qr.140.0.0.3" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.26" steps="88"/></proof> + </goal> + <goal name="VC div_qr.140.0.0.4" expl="VC for div_qr" proved="true"> + <proof prover="5"><result status="valid" time="0.52" steps="188"/></proof> + </goal> + <goal name="VC div_qr.140.0.0.5" expl="VC for div_qr" proved="true"> + <proof prover="4"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC div_qr.141" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC div_qr.142" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.142.0" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.142.1" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_qr.142.2" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.142.3" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.142.4" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC div_qr.142.5" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.90"/></proof> + </goal> + <goal name="VC div_qr.142.6" expl="VC for div_qr" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.94"/></proof> + </goal> + <goal name="VC div_qr.142.7" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.142.8" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="1.14"/></proof> + </goal> + <goal name="VC div_qr.142.9" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.142.10" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC div_qr.142.11" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC div_qr.142.12" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.142.13" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC div_qr.142.14" expl="VC for div_qr" proved="true"> + <proof prover="0"><result status="valid" time="0.97"/></proof> + </goal> + <goal name="VC div_qr.142.15" expl="VC for div_qr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.142.16" expl="VC for div_qr" proved="true"> + <proof prover="1"><result status="valid" time="0.17"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.143" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.143.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.143.1" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.144" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.145" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC div_qr.146" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC div_qr.147" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.147.0" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC div_qr.147.1" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="4.72"/></proof> + </goal> + </transf> + </goal> + <goal name="VC div_qr.148" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="4.43"/></proof> + </goal> + <goal name="VC div_qr.149" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.150" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC div_qr.151" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC div_qr.152" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC div_qr.152.0" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.54"/></proof> + </goal> + <goal name="VC div_qr.152.1" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.74"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC tdiv_qr" expl="VC for tdiv_qr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC tdiv_qr.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.06" steps="38"/></proof> + </goal> + <goal name="VC tdiv_qr.1" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="16"/></proof> + </goal> + <goal name="VC tdiv_qr.2" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="40"/></proof> + </goal> + <goal name="VC tdiv_qr.3" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC tdiv_qr.4" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="24"/></proof> + </goal> + <goal name="VC tdiv_qr.5" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC tdiv_qr.6" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="31"/></proof> + </goal> + <goal name="VC tdiv_qr.7" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="31"/></proof> + </goal> + <goal name="VC tdiv_qr.8" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="31"/></proof> + </goal> + <goal name="VC tdiv_qr.9" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="31"/></proof> + </goal> + <goal name="VC tdiv_qr.10" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="31"/></proof> + </goal> + <goal name="VC tdiv_qr.11" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.21"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="99"/></proof> + </goal> + <goal name="VC tdiv_qr.12" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="97"/></proof> + </goal> + <goal name="VC tdiv_qr.13" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="33"/></proof> + </goal> + <goal name="VC tdiv_qr.14" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="53"/></proof> + </goal> + <goal name="VC tdiv_qr.15" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="54"/></proof> + </goal> + <goal name="VC tdiv_qr.16" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC tdiv_qr.17" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.04" steps="53"/></proof> + </goal> + <goal name="VC tdiv_qr.18" expl="precondition" proved="true"> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="54"/></proof> + </goal> + <goal name="VC tdiv_qr.19" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC tdiv_qr.20" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.03" steps="53"/></proof> + </goal> + <goal name="VC tdiv_qr.21" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + <proof prover="5" timelimit="5"><result status="valid" time="0.05" steps="53"/></proof> + </goal> + </transf> + </goal> +</theory> +</file> +</why3session> diff --git a/examples/multiprecision/div/why3shapes.gz b/examples/multiprecision/div/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..0f30d444872710aa0a6ddcdb2a636438b0ca460b GIT binary patch literal 118256 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பJB9;Z2sR9QU}szE(!}fy=?8}m+|)V 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%0Dv<Hvt({eA1 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 Q>zhyVNw&?Kn6r5p0Q6V<aR2}S literal 0 HcmV?d00001 diff --git a/examples/multiprecision/lemmas.mlw b/examples/multiprecision/lemmas.mlw new file mode 100644 index 0000000000..f2abb6ebbb --- /dev/null +++ b/examples/multiprecision/lemmas.mlw @@ -0,0 +1,207 @@ +module Lemmas + + use import array.Array + use import map.Map + use map.MapEq + use map.Const + use import int.Int + + (** {3 complements to map standard library} *) + + predicate map_eq_sub_shift (x y:map int 'a) (xi yi sz:int) = + forall i. 0 <= i < sz -> x[xi+i] = y[yi+i] + + let lemma map_eq_shift (x y:map int 'a) (xi yi sz k:int) + requires { map_eq_sub_shift x y xi yi sz } + requires { 0 <= k < sz } + ensures { x[xi+k] = y[yi+k] } + = () + + let rec lemma map_eq_shift_zero (x y: map int 'a) (n m: int) + requires { map_eq_sub_shift x y n n (m-n) } + variant { m - n } + ensures { MapEq.map_eq_sub x y n m } + = + if n < m then + begin + assert { forall i. 0 <= i < m-n -> x[n+i] = y[n+i] }; + assert { forall i. n <= i < m -> + let j = i - n in 0 <= j < m-n -> + x[n+j] = y[n+j] -> x[i] = y[i]}; + map_eq_shift_zero x y (n+1) m; + end + else () + + use import mach.int.Int32 + use import ref.Ref + use import mach.int.UInt64GMP as Limb + use import int.Int + use import int.Power + use import mach.c.C + use import types.Types + + meta compute_max_steps 0x100000 + + (** {3 Long integers as arrays of libs} *) + + lemma limb_max_bound: 1 <= max_uint64 + + function l2i (x:limb) : int = Limb.to_int x + + function p2i (i:int32) : int = int32'int i + + let lemma prod_compat_strict_r (a b c:int) + requires { 0 <= a < b } + 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 } + = () + + (** {3 Integer value of a natural number} *) + + (** [value_sub x n m] denotes the integer represented by + the digits x[n..m-1] with lsb at index n *) + let rec ghost function value_sub (x:map int limb) (n:int) (m:int) : int + variant {m - n} + = + if n < m then + l2i x[n] + radix * value_sub x (n+1) m + else 0 + + let rec lemma value_sub_frame (x y:map int limb) (n m:int) + requires { MapEq.map_eq_sub x y n m } + variant { m - n } + ensures { value_sub x n m = value_sub y n m } + = + if n < m then value_sub_frame x y (n+1) m else () + + let rec lemma value_sub_frame_shift (x y:map int limb) (xi yi sz:int) + requires { map_eq_sub_shift x y xi yi sz } + variant { sz } + ensures { value_sub x xi (xi+sz) = value_sub y yi (yi+sz) } + = + if sz>0 + then begin + map_eq_shift x y xi yi sz 0; + assert { forall i. 0 <= i < sz-1 -> + let j = 1+i in x[xi+j] = y[yi+j] }; + value_sub_frame_shift x y (xi+1) (yi+1) (sz-1) + end + else assert { 1+2 = 3 } + + let rec lemma value_sub_tail (x:map int limb) (n m:int) + requires { n <= m } + variant { m - n } + ensures { + value_sub x n (m+1) = + value_sub x n m + (Map.get x m) * power radix (m-n) } + = [@vc:sp] if n < m then value_sub_tail x (n+1) m else ()(*assert { 1+2=3 }*) + + let rec lemma value_sub_concat (x:map int limb) (n m l:int) + requires { n <= m <= l} + variant { m - n } + ensures { + value_sub x n l = + value_sub x n m + value_sub x m l * power radix (m-n) } + = + if n < m then + begin + assert {n<m}; + value_sub_concat x (n+1) m l + end + else () + + let lemma value_sub_head (x:map int limb) (n m:int) + requires { n < m } + ensures { value_sub x n m = x[n] + radix * value_sub x (n+1) m } + = value_sub_concat x n (n+1) m + + let lemma value_sub_update (x:map int limb) (i n m:int) (v:limb) + requires { n <= i < m } + ensures { + value_sub (Map.set x i v) n m = + value_sub x n m + power radix (i - n) * (v -(Map.get x i)) + } + = assert { MapEq.map_eq_sub x (Map.set x i v) n i }; + assert { MapEq.map_eq_sub x (Map.set x i v) (i+1) m }; + value_sub_concat x n i m; + value_sub_concat (Map.set x i v) n i m; + value_sub_head x i m; + value_sub_head (Map.set x i v) i m + + let rec lemma value_zero (x:map int limb) (n m:int) + requires { MapEq.map_eq_sub x (Const.const Limb.zero_unsigned) n m } + variant { m - n } + ensures { value_sub x n m = 0 } + = if n < m then value_zero x (n+1) m else () + + let lemma value_sub_update_no_change (x: map int limb) (i n m: int) (v:limb) + requires { n <= m } + requires { i < n \/ m <= i } + ensures { value_sub x n m = value_sub (Map.set x i v) n m } + = value_sub_frame x (Map.set x i v) n m + + let lemma value_sub_shift_no_change (x:map int limb) (ofs i sz:int) (v:limb) + requires { i < 0 \/ sz <= i } + requires { 0 <= sz } + ensures { value_sub x ofs (ofs + sz) = + value_sub (Map.set x (ofs+i) v) ofs (ofs+sz) } + = value_sub_frame_shift x (Map.set x (ofs+i) v) ofs ofs sz + + (** {3 Comparisons} *) + + let rec lemma value_sub_lower_bound (x:map int limb) (x1 x2:int) + variant { x2 - x1 } + ensures { 0 <= value_sub x x1 x2 } + = if x2 <= x1 then () else + begin + value_sub_head x x1 x2; + value_sub_lower_bound x (x1+1) x2 + end + + let rec lemma value_sub_upper_bound (x:map int limb) (x1 x2:int) + requires { x1 <= x2 } + variant { x2 - x1 } + ensures { value_sub x x1 x2 < power radix (x2 - x1) } + = if x1 = x2 then () else + begin + value_sub_tail x x1 (x2-1); + assert { value_sub x x1 x2 + <= value_sub x x1 (x2-1) + power radix (x2-x1-1) * (radix - 1) }; + value_sub_upper_bound x x1 (x2-1) + end + + let lemma value_sub_lower_bound_tight (x:map int limb) (x1 x2:int) + requires { x1 < x2 } + ensures { power radix (x2-x1-1) * l2i (Map.get x (x2-1)) <= value_sub x x1 x2 } + = assert { value_sub x x1 x2 = value_sub x x1 (x2-1) + + power radix (x2-x1-1) * l2i (Map.get x (x2-1)) } + + let lemma value_sub_upper_bound_tight (x:map int limb) (x1 x2:int) + requires { x1 < x2 } + ensures { value_sub x x1 x2 < power radix (x2-x1-1) * (l2i (Map.get x (x2-1)) + 1) } + = value_sub_upper_bound x x1 (x2-1) + + function value (x:t) (sz:int) : int = + value_sub (pelts x) x.offset (x.offset + sz) + + let lemma value_tail (x:t) (sz:int32) + requires { 0 <= sz } + ensures { value x (sz+1) = value x sz + (pelts x)[x.offset + sz] * power radix sz } + = value_sub_tail (pelts x) x.offset (x.offset + p2i sz) + + meta remove_prop axiom value_tail + + let lemma value_concat (x:t) (n m:int32) + requires { 0 <= n <= m } + ensures { value x m + = value x n + power radix n + * value_sub (pelts x) (x.offset + n) (x.offset + m) } + + = value_sub_concat (pelts x) x.offset (x.offset + p2i n) (x.offset + p2i m) + +end \ No newline at end of file diff --git a/examples/multiprecision/lemmas/why3session.xml b/examples/multiprecision/lemmas/why3session.xml new file mode 100644 index 0000000000..bf5b3d8e0e --- /dev/null +++ b/examples/multiprecision/lemmas/why3session.xml @@ -0,0 +1,272 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<prover id="0" name="Eprover" version="1.9.1-001" timelimit="5" steplimit="0" memlimit="2000"/> +<prover id="1" name="CVC3" version="2.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="2" name="CVC4" version="1.4" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="3" name="Z3" version="4.5.0" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="4" name="Z3" version="4.4.1" 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"> + <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"> + <proof prover="5"><result status="valid" time="0.03" steps="5"/></proof> + </goal> + </transf> + </goal> + <goal name="VC map_eq_shift_zero" expl="VC for map_eq_shift_zero" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC map_eq_shift_zero.0" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="6"/></proof> + </goal> + <goal name="VC map_eq_shift_zero.1" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="8"/></proof> + </goal> + <goal name="VC map_eq_shift_zero.2" expl="variant decrease" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="3"/></proof> + </goal> + <goal name="VC map_eq_shift_zero.3" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC map_eq_shift_zero.3.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC map_eq_shift_zero.3.0.0" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.00" steps="10"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC map_eq_shift_zero.4" expl="postcondition" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC map_eq_shift_zero.4.0" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.00" steps="10"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="limb_max_bound" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="5"/></proof> + </goal> + <goal name="VC prod_compat_strict_r" expl="VC for prod_compat_strict_r" proved="true"> + <proof prover="1"><result status="valid" time="0.05"/></proof> + </goal> + <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 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"> + <proof prover="5"><result status="valid" time="0.03" steps="7"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_frame" expl="VC for value_sub_frame" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_frame.0" expl="variant decrease" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="8"/></proof> + </goal> + <goal name="VC value_sub_frame.1" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="23"/></proof> + </goal> + <goal name="VC value_sub_frame.2" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="34"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_frame_shift" expl="VC for value_sub_frame_shift" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_frame_shift.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="8"/></proof> + </goal> + <goal name="VC value_sub_frame_shift.1" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="8"/></proof> + </goal> + <goal name="VC value_sub_frame_shift.2" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="12"/></proof> + </goal> + <goal name="VC value_sub_frame_shift.3" expl="variant decrease" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="9"/></proof> + </goal> + <goal name="VC value_sub_frame_shift.4" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC value_sub_frame_shift.4.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC value_sub_frame_shift.4.0.0" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.17"/></proof> + <proof prover="3"><result status="valid" time="0.02"/></proof> + <proof prover="4" memlimit="2000"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC value_sub_frame_shift.5" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="8"/></proof> + </goal> + <goal name="VC value_sub_frame_shift.6" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_tail" expl="VC for value_sub_tail" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_tail.0" expl="variant decrease" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="8"/></proof> + </goal> + <goal name="VC value_sub_tail.1" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="8"/></proof> + </goal> + <goal name="VC value_sub_tail.2" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="34"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_concat" expl="VC for value_sub_concat" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_concat.0" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="9"/></proof> + </goal> + <goal name="VC value_sub_concat.1" expl="variant decrease" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="9"/></proof> + </goal> + <goal name="VC value_sub_concat.2" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="9"/></proof> + </goal> + <goal name="VC value_sub_concat.3" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_head" expl="VC for value_sub_head" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_head.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="7"/></proof> + </goal> + <goal name="VC value_sub_head.1" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="24"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_update" expl="VC for value_sub_update" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_update.0" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="12"/></proof> + </goal> + <goal name="VC value_sub_update.1" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="13"/></proof> + </goal> + <goal name="VC value_sub_update.2" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="10"/></proof> + </goal> + <goal name="VC value_sub_update.3" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="11"/></proof> + </goal> + <goal name="VC value_sub_update.4" expl="precondition" proved="true"> + <proof prover="5" timelimit="20" memlimit="2000"><result status="valid" time="0.02" steps="12"/></proof> + </goal> + <goal name="VC value_sub_update.5" expl="precondition" proved="true"> + <proof prover="5" timelimit="20" memlimit="2000"><result status="valid" time="0.02" steps="13"/></proof> + </goal> + <goal name="VC value_sub_update.6" expl="postcondition" proved="true"> + <proof prover="1" memlimit="2000"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_zero" expl="VC for value_zero" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_zero.0" expl="variant decrease" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="8"/></proof> + </goal> + <goal name="VC value_zero.1" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="25"/></proof> + </goal> + <goal name="VC value_zero.2" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_update_no_change" expl="VC for value_sub_update_no_change" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_update_no_change.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="31"/></proof> + </goal> + <goal name="VC value_sub_update_no_change.1" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="8"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_shift_no_change" expl="VC for value_sub_shift_no_change" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_shift_no_change.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="21"/></proof> + </goal> + <goal name="VC value_sub_shift_no_change.1" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="8"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_lower_bound" expl="VC for value_sub_lower_bound" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_lower_bound.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="7"/></proof> + </goal> + <goal name="VC value_sub_lower_bound.1" expl="variant decrease" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="8"/></proof> + </goal> + <goal name="VC value_sub_lower_bound.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_upper_bound" expl="VC for value_sub_upper_bound" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_upper_bound.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="8"/></proof> + </goal> + <goal name="VC value_sub_upper_bound.1" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC value_sub_upper_bound.2" expl="variant decrease" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="10"/></proof> + </goal> + <goal name="VC value_sub_upper_bound.3" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="10"/></proof> + </goal> + <goal name="VC value_sub_upper_bound.4" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="33"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_lower_bound_tight" expl="VC for value_sub_lower_bound_tight" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_lower_bound_tight.0" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="13"/></proof> + </goal> + <goal name="VC value_sub_lower_bound_tight.1" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="9"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_sub_upper_bound_tight" expl="VC for value_sub_upper_bound_tight" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC value_sub_upper_bound_tight.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="7"/></proof> + </goal> + <goal name="VC value_sub_upper_bound_tight.1" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC value_tail" expl="VC for value_tail" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="9"/></proof> + </goal> + <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> +</theory> +</file> +</why3session> diff --git a/examples/multiprecision/lemmas/why3shapes.gz b/examples/multiprecision/lemmas/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..189729d2c747f463d41b1ca04c652c36daed6b81 GIT binary patch literal 3300 zcmb2|=3oGW|4*au=S%Mtth>MeP(JIsfP^-ge@u@SIWjUc@=Z72E7EGH(%#v4q%8OO ztk?1PBX3@N=e2uMj`~jTE{47>Q4@{j)1Uori?L*Anzklk(X3+E>zkf9D5~W5E}eYU z-tX4cvnSp6*-fvXe}CWpjPjbon|gNh=X^Teeg1EE{l9Eh{_AydGp9<&9zR>UyC`4o z-kzwPqI>IVilY*q#(jRwGXK+G743+Hd}-k&*LFI)#l_#fH+A*ts>1TZ(w}F~o{l*2 zds276H_deM)*E8cQKnaw&nH&=i{H6Zs`r=0z1eHCn;)`<fBQNoUt6kr%OdmhOb2`z zDk{E)mtOE$_#^eR;My}Ec%^!(OII~tyxFr>R=jAbhQr#K5{nYAFX~)b<YyQ>O?cnl zsk4>ECW_T8nCRMVcj0Eib+IRtkD5LfJh$u7fe62=EF0B!p5e9F#b9XFt@!lsvHzao zFDFRW9ptg+c_sh+Ro2o&aYb2y6B*eKrK|}((2;zs<dgLMm=90ydQL4;uF>vK?vaU% z+4k{kJexPyxm^ZF^BvxL|JcdAUH(B?@{YS=ch)VAm>9dTgUwmkptnf*(gXL8JkOr| za%*!klb&wU*s(8MLriIX_JpO&Lb3~&9?J>-v~Qs&o9l_0o8%S$o!S3+>c46Or~DnS zM4~nvY<r<yC9;iglX<JoaV{^#%ZlY|E*Z)@JkZ`+u;btFAHN=G^{CHpU`~(K;GL>k zv^2)jQH^7gs!?L!g7w>1y!qdw@QdNXl>m=TZ4TE`iw(ntC*HhuO7&SAcS`;L|M#!o zv)gx!Q@-cI%jfmhj~WVPW!Q=qH{Qw7nD2L?e7559>F2lQzi0ox_~73&Z<OyGE_nU; zs$T1YqlZJTq!=m*Mzw~hMqi#~&Z2&J)&jRP&p-Q%PcNTm<$h(!&3R3+ypcVZSq>y* zYu`+6bzfUlTO4}+^ws0p`>glx-Mv$z{JDAby}wJA9enY1*{?m93?!Ns@n3qY^TF45 zS(;|2N}@8G$;H;7&r2&`KVNghr@pG--{nrm<;7wW!4Y#-dMaxN7@z5!?P-|d6(y?D zFZSn{yq)L#Z0iuy6gCl=b?XwQZ7B#+46A5iWk308saOWfO_3#4{D-1uIF+h!tn)gQ zA@eSw;9lO3#W_i(#j)*|PnlHx4_NsuZ^>HeuYX$(-TP;CEp7dF?FTd5-Apq!%E^ZC zS_^&HcwyCp#{zp4ByaPG&F4xy!CI?%)Y;(U>r*pr+aw#V6<x4dzwuW_WbrYL&M5(_ zKC?}?_~dARWBIx8tyUb&)suz2-!3!=Ty<6aWQJs<#>x8%c48kmAI&uu(+y=lmmRcG zNlYqg>y2Hl2kyPfQ-9Wf%Fy@C=Gp!w8}G;D2s<B4>Y6KSoU>2Tr0#g~ue0iP4=!*0 zepuRiPvA0Li}TBxuV(tZn!6<|gmb09!VrPvEq+EUQ(q@7NwjlnUpM>yannDuXEAj5 zUfJc{cQK+}^q||+3YMc+vO1=+Pucn9&>XJUGgB^gy`TSt^V*UN?i<)woLzb4f_;`- zg4epR`+KZ+3C|5bT_$kIUVKit-(uI@;ePG2HZpxK7OiM{ywy}U^XT?x2X;={l4G)N zLBN#=FXL|4-1P7kwU6Z<A#JR44oNJ(DV8j){=c;Fm4VetiAAT1xbOXp*s@f2A6rOW z-%+`9y@kj6gv*rr>UmCBZ4~lebJM}NO;p20sCA|4)Hm05DF52pe)GrYqYUEz@9p3D zs!RRk8KEFeOZE)Oh|O1zNM&s>l)1mVH$5`r@v&lm>s@p0`eJ==t-PWYrtSI3&8ufC z$I8B>V^+cTYCRvGT~~JcsF?b-uI<RmUkP59D!ul<&2%_g&AC(7b-%q>eQ%E6Y(?wS znkoj94meNN_?s3h#(q|+<Kk((x7s)BXMD{yYh7NRWAL~0ef8@7FXHRe%d>Z^U;j_p zyyo!NN1u<K4(v9Xdsc4FS-bRY6AKP)EqKMUI`c~U@~K>E&F*K_olhOMm3)4<>sn4v z>~G`M8DD>;JX4%lutmAx*8a<30oFC)AqSOi`>YaFSr)d{e9bjWO$%*qzvZibUXbw= zZ7=7%uuxm-;!01m6@`qR)eEBfJQm0sE65qX-ZAl&oaSFO?ybiTcDT;(=}J9!aN6A~ zfjhX)cRvjbjC9G^ZC)W{v&DeXwvuU<!lx=37v+jCvFRHvbakgD`>u_6?rhj{YpZwa zg|_775B!x2wRO&>nCHkYIh7gG?0iMdCVNlVT*0j;mAHg<$X(2x6}bK9raLw{x!?Yt z3+6q*7%=(t>Y%Ozzx2!+gTyYCSqaHbJ<{H*sg`)nY)8_%i(A`j`<_p0y0m1~&kCQq z{|$!L4cAn!ruvw5ZokFve6DY8dZ^H?|Eb-H=KJq+UuRunmXs7zdF=Pu9UouZ`*!jA z@n!sCdgl%HyV<|Ja>#PU8w>VjzxDq{2uoOR3;nGqx^`)*JhSSlH(n}Fy^Nf^8TZy- z@#L9bnl!6z`SlwuEgKhfPHYx_T<thJ+E&YNzw(#wi4(aP7HXv>>O8vH?R~SLG%32- zYq#Lfm%BdQJ@anyv_r=y8*ZMEl9uv&&f4bl^|A|BJuPXEO5c3j|J3m}n||1yex!cd zC}ew|*V0Q{xI<%Vj^!*;^nbu0U??F~c&<V^hv@{%_m_e``#IO{UAO*$q=AXZ(@hg( zqH^yoaB-_HXj}O*e_l5G6#;`=93EErpQ6ska__vctS)H<_s#9bmnJdBpYk~p!;$ku ztmjif$U%|LlhrGw_7|<0xu2)_ochBeg~vHUkC>v@Z2q&_Y0{i5v2PPj1SKwho6)yd z?}Oih`c=tdlSI$u|KG)W{BG0Zy!nso)h2Acv(-c8#YwAZX6xM2rmvTxSe8DxY5XGm zdri@S?&hV>E8Ko8zP=<ouw&DTXJ_R$BpIK)aiga*B6pp4`hI&I(K83HN=_FQ%T1YU za(Y#9?u)NptGC&&X0lE__q8~U+s6LQySaL+TbP1FEo~<y$M)W~ewS|fzofGI<GY|& zE+V}xue;0n`26;SiA~!Sd`l<6!T4O{1P;GRQ`Y<mTl-gSw#@OFvt+w2JE}%^t&}_! zcGfqf+gJ5l@99g9_k`Z*Z};^2d}GQ@r)zOnw#h6y)MocR<@k&~;g#pP)+YP1WNa17 zxyo|ATPgRaO2C>q(u>QDcZ+_%_3_WAS9|t6KV9xVC(+;gq)}sz=&7~L+2#9RZ<>7c z^*P4-exI}MJepT}ia%6A<yHBr1Ia}@p9#$=d?M?1qxi({rpUFLUf%cGmRY#vD;-~! zzt(fXoOy49`>W=2J~meT91&8Sk)O?T<)4r6lsMCVixl1`Gv__}7kTGzqG8V8hwIW8 zpWk9U|K9Ec*FPWry2tWg%D0J+=S8ze%{XUU`Rk~k^nKo}Sf8UaoF;acib`c0Ctfg5 z5%7BLzLH-iZ|{v3ySL|ext&}lQyRGDo5|TI#`LWL?GGYue4e~5W&hJ%dv1KZV_%_q zb;$%Bfr^WI7UqJ|K}q()i{-1P7R_647kllZ$!*r}XAh-c?)qJI@2mcfl^@Cq>U`!h z=lA8$PrteEeP{;@ZwgB<r(*DyBgOwyW`|3~3!P3YUiIz9T!SBV(=V~7tUl{$(6jKl zX{PImlZH_bHtY=!EvN{8di1y1?YOMFs}+l1)~@}V$n`{Gp@dn+TJO*7E%*HezDn;g z`)0q2!>&>BOb&zBwSogY3)^PCJ?($}`fbn6$!{C~-hQip;f;8Psnv0l$Hm_tmt8$} z|L*k}J-RYXAOFp3np?Uqg!A5wRV$eutxfK25?J%f(xb34Jt^t0+7`d(=PqXDYB5jx zx{||K`Bs49kx9-^I~sPUE8G`paW1{9H}4Lw?nA%n=J!wCS{o`~@H%9}%4zz$#9jxx zrF$pczP`?FXV-y;lblyC<~n<&;XV7uK4FJ*QSIKL8?<K4*y5+I)D`x6dSp-NuejK{ zunDCH#n-;xxWwx(r?~axDDB3*?YAt>%V+<+keb(4X_acNyiwHb*6rxr-YIV<8#`T` zEaZAid&Rl;diVD3m#(qAw~7DRqq>i3^KuglXK3zc@z}hKXK(%Vq)^QZIZ0R6-E8@n z-l@S_Q?RdU-tVh-<ul&>eHp-;z}!Bm_K}y@--ty<F(0DBGZTd$onC)m*#E>nB?Uvy zirW`7k9zaY$X#&3{>B=o^Q+iyt!`KrxUXVgZI0DHoBYB^9nEeTtNIeF=lk89r~C_V z<@20<?8=6EwtXCKVPQ{g*<F6Sea(o`VQg+*)~n$#)x*q{eMzszPG#*k^6U@no*NvW zH8r$2J2ZHurLRJFD6`tquvIhL&b(V((5!L&|NAwO@0%Z+?Opr+R*jW=;o-^Cu77&? zuFT|3Xm<bEF9wIMTt54CXNZh#@Wu}dMBY{htWxG|l~D0iogZ>E$XhFW?qrR>=UJ9> zoVEREvhl7=>zStd#k@U>6K;Kem~->fU;p$pfmiD<AKUS<^ys?Z@~JNh*2_CEFaQAg C*MI5& literal 0 HcmV?d00001 diff --git a/examples/multiprecision/lineardecision.mlw b/examples/multiprecision/lineardecision.mlw new file mode 100644 index 0000000000..6dae622ca9 --- /dev/null +++ b/examples/multiprecision/lineardecision.mlw @@ -0,0 +1,2105 @@ +module LinearEquationsCoeffs + +type a +function (+) a a : a +function ( *) a a : a +function (-_) a : a +function azero: a +function aone: a +predicate ale a a + +clone algebra.OrderedUnitaryCommutativeRing as A with type t = a, function (+) = (+), function ( *) = ( *), function (-_) = (-_), constant zero = azero, constant one=aone, predicate (<=) = ale + +function (-) a a : a + +axiom sub_def: forall a1 a2. a1 - a2 = a1 + (- a2) + +type t +type vars = int -> a +type cvars +exception Unknown + +function interp t cvars : a + +val constant czero : t +val constant cone : t + +axiom zero_def: forall y. interp czero y = azero +axiom one_def: forall y. interp cone y = aone + +lemma neg_mul: + forall x y: a. (-x) * y = - (x*y) + +val add (a b: t) : t + ensures { forall v: cvars. interp result v = interp a v + interp b v } + raises { Unknown -> true } + +val mul (a b: t) : t + ensures { forall v: cvars. interp result v = interp a v * interp b v } + raises { Unknown -> true } + +val opp (a:t) : t + ensures { forall v: cvars. interp result v = - (interp a v) } + +val predicate eq (a b:t) + ensures { result -> forall y:cvars. interp a y = interp b y } + +val inv (a:t) : t + requires { not (eq a czero) } + (* ensures { forall v: cvars. interp result v * interp a v = aone } no proof needed, but had better be true *) + ensures { not (eq result czero) } + raises { Unknown -> true } + +end + +module LinearEquationsDecision + +use import int.Int +type coeff + +clone LinearEquationsCoeffs as C with type t = coeff +type vars = C.vars + +type expr = Term coeff int | Add expr expr | Cst coeff + +let rec predicate valid_expr (e:expr) + variant { e } += match e with + | Term _ i -> 0 <= i + | Cst _ -> true + | Add e1 e2 -> valid_expr e1 && valid_expr e2 + end + +let rec predicate expr_bound (e:expr) (b:int) + variant { e } += match e with + | Term _ i -> 0 <= i <= b + | Cst _ -> true + | Add e1 e2 -> expr_bound e1 b && expr_bound e2 b + end + +function interp (e:expr) (y:vars) (z:C.cvars) : C.a += match e with + | Term c v -> C.( *) (C.interp c z) (y v) + | Add e1 e2 -> C.(+) (interp e1 y z) (interp e2 y z) + | Cst c -> C.interp c z + end + +meta rewrite_def function interp + +use import bool.Bool +use import list.List + +type equality = (expr, expr) +type context = list equality + +let predicate valid_eq (eq:equality) += match eq with (e1,e2) -> valid_expr e1 && valid_expr e2 end + +let predicate eq_bound (eq:equality) (b:int) += match eq with (e1,e2) -> expr_bound e1 b && expr_bound e2 b end + +let rec predicate valid_ctx (ctx:context) += match ctx with Nil -> true | Cons eq t -> valid_eq eq && valid_ctx t end + +let rec predicate ctx_bound (ctx:context) (b:int) += match ctx with Nil -> true | Cons eq t -> eq_bound eq b && ctx_bound t b end + +let rec lemma expr_bound_w (e:expr) (b1 b2:int) + requires { b1 <= b2 } + requires { expr_bound e b1 } + ensures { expr_bound e b2 } + variant { e } += match e with + | Add e1 e2 -> expr_bound_w e1 b1 b2; expr_bound_w e2 b1 b2 + | Cst _ -> () + | Term _ _ -> () + end + +lemma eq_bound_w: forall e:equality, b1 b2:int. eq_bound e b1 -> b1 <= b2 -> eq_bound e b2 + +let rec lemma ctx_bound_w (l:context) (b1 b2:int) + requires { ctx_bound l b1 } + requires { b1 <= b2 } + ensures { ctx_bound l b2 } + variant { l } += match l with Nil -> () | Cons _ t -> ctx_bound_w t b1 b2 end + +function interp_eq (g:equality) (y:vars) (z:C.cvars) : bool + = match g with (g1, g2) -> interp g1 y z = interp g2 y z end + +meta rewrite_def function interp_eq + +function interp_ctx (l: context) (g: equality) (y: vars) (z:C.cvars) : bool += match l with + | Nil -> interp_eq g y z + | Cons h t -> (interp_eq h y z) -> (interp_ctx t g y z) + end + +meta rewrite_def function interp_ctx + +use import mach.int.Int63 +use import seq.Seq +use import mach.array.Array63 +use import mach.matrix.Matrix63 + +let apply_r (m: matrix coeff) (v: array coeff) : array coeff + requires { v.length = m.columns } + ensures { result.length = m.rows } + raises { C.Unknown -> true } += let r = Array63.make m.rows C.czero in + for i = 0 to m.rows - 1 do + for j = 0 to m.columns - 1 do + r[i] <- C.add r[i] (C.mul (get m i j) v[j]); + done + done; + r + +let apply_l (v: array coeff) (m: matrix coeff) : array coeff + requires { v.length = m.rows } + ensures { result.length = m.columns } + raises { C.Unknown -> true } += let r = Array63.make m.columns C.czero in + for j = 0 to m.columns - 1 do + for i = 0 to m.rows - 1 do + r[j] <- C.add r[j] (C.mul (get m i j) v[i]); + done + done; + r + +use import ref.Ref + +let sprod (a b: array coeff) : coeff + requires { a.length = b.length } + raises { C.Unknown -> true } += let r = ref C.czero in + for i = 0 to a.length - 1 do + r := C.add !r (C.mul a[i] b[i]); + done; + !r + +let m_append (m: matrix coeff) (v:array coeff) : matrix coeff + requires { m.rows = v.length } + requires { m.columns < int63'maxInt } + ensures { result.rows = m.rows } + ensures { result.columns = m.columns + 1 } + ensures { forall i j. 0 <= i < m.rows -> 0 <= j < m.columns -> + result.elts i j = m.elts i j } + ensures { forall i. 0 <= i < m.rows -> result.elts i m.columns = v[i] } += let r = Matrix63.make m.rows (m.columns + 1) C.czero in + for i = 0 to m.rows - 1 do + invariant { forall k j. 0 <= k < i -> 0 <= j < m.columns -> + r.elts k j = m.elts k j } + invariant { forall k. 0 <= k < i -> r.elts k m.columns = v[k] } + for j = 0 to m.columns - 1 do + invariant { forall k j. 0 <= k < i -> 0 <= j < m.columns -> + r.elts k j = m.elts k j } + invariant { forall k. 0 <= k < i -> r.elts k m.columns = v[k] } + invariant { forall l. 0 <= l < j -> r.elts i l = m.elts i l } + set r i j (get m i j) + done; + set r i m.columns v[i] + done; + r + +let v_append (v: array coeff) (c: coeff) : array coeff + requires { length v < int63'maxInt } + ensures { length result = length v + 1 } + ensures { forall k. 0 <= k < v.length -> result[k] = v[k] } + ensures { result[v.length] = c } += let r = Array63.make (v.length + 1) c in + for i = 0 to v.length - 1 do + invariant { forall k. 0 <= k < i -> r[k] = v[k] } + invariant { r[v.length] = c } + r[i] <- v[i] + done; + r + +let predicate (==) (a b: array coeff) + ensures { result = true -> length a = length b /\ + forall i. 0 <= i < length a -> C.eq a[i] b[i] } += + if length a <> length b then false + else + let r = ref true in + for i = 0 to length a - 1 do + invariant { !r = true -> forall j. 0 <= j < i -> C.eq a[j] b[j] } + if not (C.eq a[i] b[i]) then r := false; + done; + !r + +use import int.MinMax +use import list.Length + +let rec function max_var (e:expr) : int + variant { e } + requires { valid_expr e } + ensures { 0 <= result } + ensures { expr_bound e result } += match e with + | Term _ i -> i + | Cst _ -> 0 + | Add e1 e2 -> max (max_var e1) (max_var e2) + end + +let function max_var_e (e:equality) : int + requires { valid_eq e } + ensures { 0 <= result } + ensures { eq_bound e result } += match e with (e1,e2) -> max (max_var e1) (max_var e2) end + +let rec function max_var_ctx (l:context) : int + variant { l } + requires { valid_ctx l } + ensures { 0 <= result } + ensures { ctx_bound l result } += match l with + | Nil -> 0 + | Cons e t -> max (max_var_e e) (max_var_ctx t) + end + +let rec opp_expr (e:expr) : expr + ensures { forall y z. interp result y z = C.(-_) (interp e y z) } + ensures { valid_expr e -> valid_expr result } + ensures { forall b. expr_bound e b -> expr_bound result b } + variant { e } += match e with + | Cst c -> Cst (C.opp c) + | Term c j -> + let oc = C.opp c in + let r = Term oc j in + assert { forall y z. interp r y z = C.( *) (C.interp oc z) (y j) + = C.( *) (C.(-_) (C.interp c z)) (y j) + = C.(-_) (C.( *) (C.interp c z) (y j)) + = C.(-_) (interp e y z) }; + r + | Add e1 e2 -> + let e1' = opp_expr e1 in + let e2' = opp_expr e2 in + assert { forall a1 a2. C.(+) (C.(-_) a1) (C.(-_) a2) = C.(-_) (C.(+) a1 a2) }; + assert { forall y z. interp (Add e1' e2') y z = C.(-_) (interp e y z) by + interp (Add e1' e2') y z = C.(+) (interp e1' y z) (interp e2' y z) + = C.(+) (C.(-_) (interp e1 y z)) (C.(-_) (interp e2 y z)) + = C.(-_) (C.(+) (interp e1 y z) (interp e2 y z)) + = C.(-_) (interp e y z) }; + Add e1' e2' + end + +predicate atom (e:expr) += match e with + | Add _ _ -> false | _ -> true + end + +(*TODO put this back in norm_eq*) +let rec norm_eq_aux (ex acc_e:expr) (acc_c:coeff) : (expr, coeff) + returns { (rex, rc) -> forall y z. + C.(+) (interp rex y z) (interp (Cst rc) y z) + = C.(+) (interp ex y z) + (C.(+) (interp acc_e y z) (interp (Cst acc_c) y z)) } + returns { (rex, _) -> forall b:int. expr_bound ex b /\ expr_bound acc_e b + -> expr_bound rex b } + raises { C.Unknown -> true } + variant { ex } += match ex with + | Cst c -> acc_e, (C.add c acc_c) + | Term _ _ -> (Add acc_e ex, acc_c) + | Add e1 e2 -> let ae, ac = norm_eq_aux e1 acc_e acc_c in + norm_eq_aux e2 ae ac + end + +use import debug.Debug + +let norm_eq (e:equality) : (expr, coeff) + returns { (ex, c) -> forall y z. + interp_eq e y z <-> interp_eq (ex, Cst c) y z } + returns { (ex, _) -> forall b:int. eq_bound e b -> expr_bound ex b } + raises { C.Unknown -> true } += match e with + | (e1, e2) -> + let s = Add e1 (opp_expr e2) in + assert { forall b. eq_bound e b -> expr_bound s b }; + match norm_eq_aux s (Cst C.czero) C.czero with + (e, c) -> + let ec = C.opp c in + assert { forall a1 a2. C.(+) a1 a2 = C.azero -> a1 = C.(-_) a2 }; + assert { forall y z. interp_eq (e1,e2) y z -> interp_eq (e, Cst ec) y z + by interp_eq (s, Cst C.czero) y z so interp s y z = C.azero + so C.(+) (interp e y z) (interp (Cst c) y z) = C.azero + so interp e y z = C.(-_) (interp (Cst c) y z) + = interp (Cst ec) y z }; + e, ec + end + end + + +let rec lemma interp_ctx_impl (ctx: context) (g1 g2:equality) + requires { forall y z. interp_eq g1 y z -> interp_eq g2 y z } + ensures { forall y z. interp_ctx ctx g1 y z -> interp_ctx ctx g2 y z } + variant { ctx } += match ctx with Nil -> () | Cons _ t -> interp_ctx_impl t g1 g2 end + +let rec lemma interp_ctx_valid (ctx:context) (g:equality) + ensures { forall y z. interp_eq g y z -> interp_ctx ctx g y z } + variant { ctx } += match ctx with Nil -> () | Cons _ t -> interp_ctx_valid t g end + +use import list.Append + +let rec lemma interp_ctx_wr (ctx l:context) (g:equality) + ensures { forall y z. interp_ctx ctx g y z -> interp_ctx (ctx ++ l) g y z } + variant { ctx } += match ctx with + | Nil -> () + | Cons _ t -> interp_ctx_wr t l g end + +let rec lemma interp_ctx_wl (ctx l: context) (g:equality) + ensures { forall y z. interp_ctx ctx g y z -> interp_ctx (l ++ ctx) g y z } + variant { l } += match l with Nil -> () | Cons _ t -> interp_ctx_wl ctx t g end + +let rec mul_expr (e:expr) (c:coeff) : expr + ensures { forall y z. interp result y z + = C.( *) (C.interp c z) (interp e y z) } + ensures { valid_expr e -> valid_expr result } + variant { e } + raises { C.Unknown -> true } += if C.eq c C.czero then Cst C.czero + else match e with + | Cst c1 -> Cst (C.mul c c1) + | Term c1 v -> Term (C.mul c c1) v + | Add e1 e2 -> Add (mul_expr e1 c) (mul_expr e2 c) + end + +let rec add_expr (e1 e2: expr) : expr + ensures { forall y z. interp result y z + = C.(+) (interp e1 y z) (interp e2 y z) } + variant { e2 } + raises { C.Unknown -> true } += + let term_or_cst c i + ensures { forall y z. interp result y z = interp (Term c i) y z } + = if C.eq C.czero c then Cst C.czero else Term c i in + let rec add_atom (e a:expr) : (expr, bool) + requires { atom a } + returns { r,_ -> forall y z. interp r y z + = C.(+) (interp e y z) (interp a y z) } + variant { e } + raises { C.Unknown -> true } + = match (e,a) with + | Term ce ie, Term ca ia -> + if ie = ia then (term_or_cst (C.add ce ca) ie, True) + else if C.eq ce C.czero then (term_or_cst ca ia, True) + else if C.eq ca C.czero then (e,True) + else (Add e a, False) + | Cst ce, Cst ca -> Cst (C.add ce ca), True + | Cst ce, Term ca _ -> + if C.eq ca C.czero then (e, True) + else if C.eq ce C.czero then (a, True) + else (Add e a, False) + | Term ce _, Cst ca -> + if C.eq ce C.czero then (a, True) + else if C.eq ca C.czero then (e, True) + else (Add e a, False) + | Add e1 e2, _ -> + let r, b = add_atom e1 a in + if b + then + match r with + | Cst c -> + if C.eq c C.czero + then begin + assert { forall y z. C.(+) (interp e1 y z) (interp a y z) = C.azero }; + e2, True end + else Add r e2, True + | _ -> Add r e2, True + end + else + let r,b = add_atom e2 a in + match r with + | Cst c -> + if C.eq c C.czero + then begin + assert { forall y z. C.(+) (interp e2 y z) (interp a y z) = C.azero }; + e1, True end + else Add e1 r, b + | _ -> Add e1 r, b + end + | _, Add _ _ -> absurd + end + in + match e2 with + | Add e1' e2' -> add_expr (add_expr e1 e1') e2' + | _ -> let r,_= add_atom e1 e2 in r + end + +let mul_eq (eq:equality) (c:coeff) + ensures { forall y z. interp_eq eq y z -> interp_eq result y z } + raises { C.Unknown -> true } += match eq with (e1,e2) -> (mul_expr e1 c, mul_expr e2 c) end + +let add_eq (eq1 eq2:equality) + ensures { forall y z. interp_eq eq1 y z -> interp_eq eq2 y z + -> interp_eq result y z } + ensures { forall y z ctx. interp_ctx ctx eq1 y z -> interp_ctx ctx eq2 y z + -> interp_ctx ctx result y z } + raises { C.Unknown -> true } += match eq1, eq2 with ((a1,b1), (a2,b2)) -> + let a = add_expr a1 a2 in let b = add_expr b1 b2 in + let r = (a,b) in + let rec lemma aux (l:context) + ensures { forall y z. interp_ctx l eq1 y z -> interp_ctx l eq2 y z + -> interp_ctx l r y z } + variant { l } + = match l with Nil -> () | Cons _ t -> aux t end in + r + end + +let rec zero_expr (e:expr) : bool + ensures { result -> forall y z. interp e y z = C.azero } + variant { e } + raises { C.Unknown -> true } += + let rec all_zero (e:expr) : bool + ensures { result -> forall y z. interp e y z = C.azero } + variant { e } + = match e with + | Cst c -> C.eq c C.czero + | Term c _ -> C.eq c C.czero + | Add e1 e2 -> all_zero e1 && all_zero e2 + end + in + let e' = add_expr (Cst C.czero) e in (* simplifies expr *) + all_zero e' + +let sub_expr (e1 e2:expr) + ensures { forall y z. C.(+) (interp result y z) (interp e2 y z) + = interp e1 y z } + raises { C.Unknown -> true } += let r = add_expr e1 (mul_expr e2 (C.opp C.cone)) in + assert { forall y z. + let v1 = interp e1 y z in + let v2 = interp e2 y z in + let vr = interp r y z in + C.(+) vr v2 = v1 + by C.( *) v2 (C.(-_) C.aone) = C.(-_) v2 + so C.(+) vr v2 + = C.(+) (C.(+) v1 (C.( *) v2 (C.(-_) C.aone))) v2 + = C.(+) (C.(+) v1 (C.(-_) v2)) v2 = v1 }; + r + +let rec same_eq (eq1 eq2: equality) : bool + ensures { result -> forall y z. interp_eq eq1 y z -> interp_eq eq2 y z } + raises { C.Unknown -> true } += let (e1,c1) = norm_eq eq1 in + let (e2,c2) = norm_eq eq2 in + let e = sub_expr e1 e2 in + if zero_expr e && C.eq c1 c2 then true + else (print (add_expr (Cst C.czero) e); print c1; print c2; false) + +use import option.Option + +let rec norm_context (l:context) : context + ensures { forall g y z. interp_ctx result g y z -> interp_ctx l g y z } + raises { C.Unknown -> true } + variant { l } += match l with + | Nil -> Nil + | Cons h t -> + let ex, c = norm_eq h in + Cons (ex, Cst c) (norm_context t) + end + +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 () + else (print l; print v)); + print_lc t t2 + | _ -> () + end + +let check_combination (ctx:context) (g:equality) (v:list coeff) : bool + ensures { result = true -> forall y z. interp_ctx ctx g y z} + raises { C.Unknown -> true } += + (*let ctx = norm_context ctx in + let (g,c) = norm_eq g in*) + (* normalize before for fewer Unknown exceptions in computations ? *) + let rec aux (l:context) (ghost acc: context) (s:equality) (v:list coeff) : option equality + requires { forall y z. interp_ctx acc s y z } + requires { ctx = acc ++ l } + returns { Some r -> forall y z. interp_ctx ctx r y z | None -> true } + raises { C.Unknown -> true } + variant { l } + = match (l, v) with + | Nil, Nil -> Some s + | Cons eq te, Cons c tc -> + let ghost nacc = acc ++ (Cons eq Nil) in + if C.eq c C.czero then aux te nacc s tc + else begin + let ns = (add_eq s (mul_eq eq c)) in + interp_ctx_wr ctx (Cons eq Nil) s; + interp_ctx_wl ctx (Cons eq Nil) eq; + assert { forall y z. interp_ctx nacc ns y z + by interp_ctx nacc s y z /\ interp_ctx nacc eq y z }; + aux te nacc ns tc end + | _ -> None + end + in + match aux ctx Nil (Cst C.czero, Cst C.czero) v with + | Some sum -> if same_eq sum g then true else (print_lc ctx v; false) + | None -> false + end + +let transpose (m:matrix coeff) : matrix coeff + ensures { result.rows = m.columns /\ result.columns = m.rows } += + let r = Matrix63.make m.columns m.rows C.czero in + for i = 0 to m.rows - 1 do + for j = 0 to m.columns - 1 do + set r j i (get m i j) + done + done; + r + +let swap_rows (m:matrix coeff) (i1 i2: int63) : unit + requires { 0 <= i1 < m.rows /\ 0 <= i2 < m.rows } += for j = 0 to m.columns - 1 do + let c = get m i1 j in + set m i1 j (get m i2 j); + set m i2 j c + done + +let mul_row (m:matrix coeff) (i: int63) (c: coeff) : unit + requires { 0 <= i < m.rows } + requires { not (C.eq c C.czero) } + raises { C.Unknown -> true } += if C.eq c C.cone then () else + for j = 0 to m.columns - 1 do + set m i j (C.mul c (get m i j)) + done + +let addmul_row (m:matrix coeff) (src dst: int63) (c: coeff) : unit + requires { 0 <= src < m.rows /\ 0 <= dst < m.rows } + raises { C.Unknown -> true } += if C.eq c C.czero then () else + for j = 0 to m.columns - 1 do + set m dst j (C.add (get m dst j) (C.mul c (get m src j))) + done + +use import ref.Ref + +let gauss_jordan (a: matrix coeff) : option (array coeff) + (*AX=B, a=(A|B), result=X*) + returns { Some r -> Array63.length r = a.columns | None -> true } + requires { 1 <= a.rows /\ 1 <= a.columns } + raises { C.Unknown -> true } += + let n = a.rows in + let m = a.columns in + (* print n; print m; *) + let rec find_nonz (i j:int63) + requires { 0 <= i <= n } + requires { 0 <= j < m } + variant { n-i } + ensures { i <= result <= n } + ensures { result < n -> not (C.eq (a.elts result j) C.czero) } + = if i >= n then n + else + if C.eq (get a i j) C.czero + then find_nonz (i+1) j + else i in + let pivots = Array63.make n 0 in + let r = ref (-1) in + for j = 0 to m-2 do + invariant { -1 <= !r < n } + invariant { forall i. 0 <= i <= !r -> 0 <= pivots[i] } + invariant { forall i1 i2: int. 0 <= i1 < i2 <= !r -> pivots[i1] < pivots[i2] } + invariant { !r >= 0 -> pivots[!r] < j } + label Start in + let k = find_nonz (!r+1) j in + if k < n + then begin + r := !r + 1; + pivots[!r] <- j; + mul_row a k (C.inv(get a k j)); + if k <> !r then swap_rows a k !r; + for i = 0 to n-1 do + if i <> !r + then addmul_row a !r i (C.opp(get a i j)) + done; + end; + assert { forall i1 i2: int. 0 <= i1 < i2 <= !r -> pivots[i1] < pivots[i2] + by pivots[i1] = pivots[i1] at Start + so [@case_split] + ((i2 < !r so pivots[i2] = pivots[i2] at Start) + \/ (i2 = !r so pivots[i1] < j(* = pivots[i2])*))) }; + done; + if !r < 0 then None (* matrix is all zeroes *) + else begin + let v = Array63.make m(*(m-1)*) C.czero in + for i = 0 to !r do + v[pivots[i]] <- get a i (m-1) + done; + Some v (*pivots[!r] < m-1*) (*pivot on last column, no solution*) + end + +let rec function to_list (a: array 'a) (l u: int63) : list 'a + requires { l >= 0 /\ u <= Array63.length a } + variant { u - l } += if u <= l then Nil else Cons a[l] (to_list a (l+1) u) + +exception Failure + +let linear_decision (l: context) (g: equality) : bool + requires { valid_ctx l } + requires { valid_eq g } + requires { length l < 100000 } (* integer overflows *) + ensures { forall y z. result -> interp_ctx l g y z } + raises { C.Unknown -> true | Failure -> true } += + let nv = (max (max_var_e g) (max_var_ctx l)) in + begin ensures { nv < 100000 } + if nv >= 100000 then raise Failure + end; + let nv = Int63.of_int nv in + let ll = Int63.of_int (length l) in + let a = Matrix63.make ll (nv+1) C.czero in + let b = Array63.make ll C.czero in (* ax = b *) + let v = Array63.make (nv+1) C.czero in (* goal *) + let rec fill_expr (ex: expr) (i:int63): unit + variant { ex } + raises { C.Unknown -> true } + requires { 0 <= i < length l } + requires { expr_bound ex nv } + raises { Failure -> true } + = match ex with + | Cst c -> if C.eq c C.czero then () else raise Failure + | Term c j -> + let j = Int63.of_int j in + set a i j (C.add (get a i j) c) + | Add e1 e2 -> fill_expr e1 i; fill_expr e2 i + end in + let rec fill_ctx (ctx:context) (i:int63) : unit + requires { ctx_bound ctx nv } + variant { length l - i } + requires { length l - i = length ctx } + requires { 0 <= i <= length l } + raises { Failure -> true } + = match ctx with + | Nil -> () + | Cons e t -> + assert { i < length l }; + try + let ex, c = norm_eq e in + if (not (C.eq c C.czero)) then b[i] <- C.add b[i] c; + fill_expr ex i; + with C.Unknown -> () (* some equalities are in the context but cannot be normalized, typically they are useless, ignore them *) + end; + fill_ctx t (i+1) + end in + let rec fill_goal (ex:expr) : unit + requires { expr_bound ex nv } + variant { ex } + raises { C.Unknown -> true } + raises { Failure -> true } + = match ex with + | Cst c -> if C.eq c C.czero then () else raise Failure + | Term c j -> + let j = Int63.of_int j in + v[j] <- C.add v[j] c + | Add e1 e2 -> fill_goal e1; fill_goal e2 + end in + fill_ctx l 0; + let (ex, d) = norm_eq g in + fill_goal ex; + let ab = m_append a b in + let cd = v_append v d in + let ab' = transpose ab in + match gauss_jordan (m_append ab' cd) with + | Some r -> + check_combination l g (to_list r 0 ll) + | None -> false + end + +type expr' = | Sum expr' expr' | ProdL expr' cprod | ProdR cprod expr' | Diff expr' expr' + | Var int | Coeff coeff + +with cprod = | C coeff | Times cprod cprod + +function interp_c (e:cprod) (y:vars) (z:C.cvars) : C.a += match e with + | C c -> C.interp c z + | Times e1 e2 -> C.(*) (interp_c e1 y z) (interp_c e2 y z) + end + +meta rewrite_def function interp_c + +function interp' (e:expr') (y:vars) (z:C.cvars) : C.a += match e with + | Sum e1 e2 -> C.(+) (interp' e1 y z) (interp' e2 y z) + | ProdL e c -> C.(*) (interp' e y z) (interp_c c y z) + | ProdR c e -> C.(*) (interp_c c y z) (interp' e y z) + | Diff e1 e2 -> C.(-) (interp' e1 y z) (interp' e2 y z) + | Var n -> y n + | Coeff c -> C.interp c z + end + +meta rewrite_def function interp' + +(*exception NonLinear*) + +type equality' = (expr', expr') +type context' = list equality' + +function interp_eq' (g:equality') (y:vars) (z:C.cvars) : bool += match g with (g1, g2) -> interp' g1 y z = interp' g2 y z end + +meta rewrite_def function interp_eq' + +function interp_ctx' (l: context') (g: equality') (y: vars) (z:C.cvars) : bool += match l with + | Nil -> interp_eq' g y z + | Cons h t -> (interp_eq' h y z) -> (interp_ctx' t g y z) + end + +meta rewrite_def function interp_ctx' + +let rec predicate valid_expr' (e:expr') + variant { e } += match e with + | Var i -> 0 <= i + | Sum e1 e2 | Diff e1 e2 -> valid_expr' e1 && valid_expr' e2 + | Coeff _ -> true + | ProdL e _ | ProdR _ e -> valid_expr' e + end + +let predicate valid_eq' (eq:equality') += match eq with (e1,e2) -> valid_expr' e1 && valid_expr' e2 end + +let rec predicate valid_ctx' (ctx:context') += match ctx with Nil -> true | Cons eq t -> valid_eq' eq && valid_ctx' t end + +let rec simp (e:expr') : expr + ensures { forall y z. interp result y z = interp' e y z } + ensures { valid_expr' e -> valid_expr result } + raises { C.Unknown -> true } + variant { e } += + let rec simp_c (e:cprod) : coeff + ensures { forall y z. C.interp result z = interp_c e y z } + variant { e } + raises { C.Unknown -> true } + = + match e with + | C c -> c + | Times c1 c2 -> C.mul (simp_c c1) (simp_c c2) + end + in + match e with + | Sum e1 e2 -> Add (simp e1) (simp e2) + | Diff e1 e2 -> Add (simp e1) (opp_expr (simp e2)) + | Var n -> Term C.cone n + | Coeff c -> Cst c + | ProdL e c | ProdR c e -> + mul_expr (simp e) (simp_c c) + end + +let simp_eq (eq:equality') : equality + ensures { forall y z. interp_eq result y z = interp_eq' eq y z } + ensures { valid_eq' eq -> valid_eq result } + raises { (*NonLinear -> true | *)C.Unknown -> true } += match eq with (g1, g2) -> (simp g1, simp g2) end + +let rec simp_ctx (ctx: context') (g:equality') : (context, equality) + returns { (rc, rg) -> + (valid_ctx' ctx -> valid_eq' g -> valid_ctx rc /\ valid_eq rg) /\ + length rc = length ctx /\ + forall y z. interp_ctx rc rg y z = interp_ctx' ctx g y z } + raises { (*NonLinear -> true | *) C.Unknown -> true } + variant { ctx } += match ctx with + | Nil -> Nil, simp_eq g + | Cons eq t -> let rt, rg = simp_ctx t g in + Cons (simp_eq eq) rt, rg + end + +let decision (l:context') (g:equality') + requires { valid_ctx' l } + requires { valid_eq' g } + requires { length l < 100000 } + ensures { forall y z. result -> interp_ctx' l g y z } + raises { (* NonLinear -> true | *) C.Unknown -> true | Failure -> true } += let sl, sg = simp_ctx l g in + linear_decision sl sg + +end + +module RationalCoeffs + +use import int.Int +use import real.RealInfix +use import real.FromInt +use import int.Abs + +(*meta coercion function from_int*) + +type t = (int, int) +type rvars = int -> real + +exception QError + +let constant rzero = (0,1) +let constant rone = (1,1) + +function rinterp (t:t) (v:rvars) : real += match t with + | (n,d) -> from_int n /. from_int d + end + +meta rewrite_def function rinterp + +let lemma prod_compat_eq (a b c:real) + requires { c <> 0.0 } + requires { a *. c = b *. c } + ensures { a = b } += () + +let lemma cross_d (n1 d1 n2 d2:int) + requires { d1 <> 0 /\ d2 <> 0 } + requires { n1 * d2 = n2 * d1 } + ensures { forall v. rinterp (n1,d1) v = rinterp (n2,d2) v } += let d = from_int (d1 * d2) in + assert { forall v. rinterp (n1, d1) v = rinterp (n2, d2) v + by rinterp (n1, d1) v *. d = rinterp (n2,d2) v *. d } + +let lemma cross_ind (n1 d1 n2 d2:int) + requires { d1 <> 0 /\ d2 <> 0 } + requires { forall v. rinterp (n1,d1) v = rinterp (n2,d2) v } + ensures { n1 * d2 = n2 * d1 } += assert { from_int d1 <> 0.0 /\ from_int d2 <> 0.0 }; + assert { from_int n1 /. from_int d1 = from_int n2 /. from_int d2 }; + assert { from_int n1 *. from_int d2 = from_int n2 *. from_int d1 + by from_int n1 *. from_int d2 + = (from_int n1 /. from_int d1) *. from_int d1 *. from_int d2 + = (from_int n2 /. from_int d2) *. from_int d1 *. from_int d2 + = from_int n2 *. from_int d1 }; + assert { from_int (n1*d2) = from_int (n2 * d1) } + + +lemma cross: forall n1 d1 n2 d2: int. d1 <> 0 -> d2 <> 0 -> + n1 * d2 = n2 * d1 <-> + forall v. rinterp (n1,d1) v = rinterp (n2,d2) v + +use import int.ComputerDivision +use import ref.Ref +use import number.Gcd + +let gcd (x:int) (y:int) + requires { x > 0 /\ y > 0 } + ensures { result = gcd x y } + ensures { result > 0 } + = + let ghost ox = x in + let x = ref x in let y = ref y in + label Pre in + while (!y > 0) do + invariant { !x >= 0 /\ !y >= 0 } + invariant { gcd !x !y = gcd (!x at Pre) (!y at Pre) } + variant { !y } + invariant { ox > 0 -> !x > 0 } + let r = mod !x !y in let ghost q = div !x !y in + assert { r = !x - q * !y }; + x := !y; y := r; + done; + !x + +let simp (t:t) : t + ensures { forall v:rvars. rinterp result v = rinterp t v } += match t with + | (n,d) -> + if d = 0 then t + else if n = 0 then rzero + else + let g = gcd (abs n) (abs d) in + let n', d' = (div n g, div d g) in + assert { n = g * n' /\ d = g * d' }; + assert { n' * d = n * d' }; + (n', d') + end + +let radd (a b:t) + ensures { forall y. rinterp result y = rinterp a y +. rinterp b y } + raises { QError -> true } += match (a,b) with + | (n1,d1), (n2,d2) -> + if d1 = 0 || d2 = 0 then raise QError + else begin + let r = (n1*d2 + n2*d1, d1*d2) in + let ghost d = from_int d1 *. from_int d2 in + assert { forall y. + rinterp a y +. rinterp b y = rinterp r y + by rinterp a y *. d = from_int n1 *. from_int d2 + so rinterp b y *. d = from_int n2 *. from_int d1 + so (rinterp a y +. rinterp b y) *. d + = from_int (n1*d2 + n2*d1) + = rinterp r y *. d }; + simp r end + end + +let rmul (a b:t) + ensures { forall y. rinterp result y = rinterp a y *. rinterp b y } + raises { QError -> true } += match (a,b) with + | (n1,d1), (n2, d2) -> + if d1 = 0 || d2 = 0 then raise QError + else begin + let r = (n1*n2, d1*d2) in + assert { forall y. rinterp r y = rinterp a y *. rinterp b y + by rinterp r y = from_int (n1*n2) /. from_int(d1*d2) + = (from_int n1 *. from_int n2) /. (from_int d1 *. from_int d2) + = (from_int n1 /. from_int d1) *. (from_int n2 /. from_int d2) + = rinterp a y *. rinterp b y }; + r + end + end + +let ropp (a:t) + ensures { forall y. rinterp result y = -. rinterp a y } += match a with + | (n,d) -> (-n, d) + end + +let predicate req (a b:t) + ensures { result -> forall y. rinterp a y = rinterp b y } += match (a,b) with + | (n1,d1), (n2,d2) -> n1 = n2 && d1 = d2 || (d1 <> 0 && d2 <> 0 && n1 * d2 = n2 * d1) + end + +let rinv (a:t) + requires { not req a rzero } + ensures { not req result rzero } + ensures { forall y. rinterp result y *. rinterp a y = 1.0 } + raises { QError -> true } += match a with + | (n,d) -> if n = 0 || d = 0 then raise QError else (d,n) + end + +let is_zero (a:t) + ensures { result <-> req a rzero } += match a with + | (n,d) -> n = 0 && d <> 0 + end + +end + +module LinearDecisionRational + +use import RationalCoeffs +use import real.RealInfix +use import real.FromInt + +clone export LinearEquationsDecision with type C.a = real, function C.(+) = (+.), function C.( * ) = ( *. ), function C.(-_) = (-._), function C.(-) = (-.), type coeff = t, type C.cvars=int -> real, function C.interp=rinterp, exception C.Unknown = QError, constant C.azero = Real.zero, constant C.aone = Real.one, predicate C.ale = (<=.), val C.czero=rzero, val C.cone=rone, lemma C.sub_def, lemma C.zero_def, lemma C.one_def, val C.add=radd, val C.mul=rmul, val C.opp=ropp, val C.eq=req, val C.inv=rinv, goal C.A.ZeroLessOne, goal C.A.CompatOrderAdd, goal C.A.CompatOrderMult, goal C.A.Unitary, goal C.A.NonTrivialRing, goal C.A.Mul_distr_l, goal C.A.Mul_distr_r, goal C.A.Inv_def_l, goal C.A.Inv_def_r, goal C.A.MulAssoc.Assoc, goal C.A.Assoc, goal C.A.MulComm.Comm, goal C.A.Comm, goal C.A.Unit_def_l, goal C.A.Unit_def_r + +end + +module LinearDecisionInt + +use import int.Int + +type t' = IC int | Error + +function interp_id (t:t') (v:int -> int) : int += match t with + | IC i -> i + | Error -> 0 (* never created *) + end + +meta rewrite_def function interp_id + +let constant izero = IC 0 + +let constant ione = IC 1 + +let predicate ieq (a b:t') = false + +exception NError + +let iadd (a b:t') : t' + ensures { forall z. interp_id result z = interp_id a z + interp_id b z } + raises { NError -> true } += raise NError + +let imul (a b:t') : t' + ensures { forall z. interp_id result z = interp_id a z * interp_id b z } + raises { NError -> true } += raise NError + +let iopp (a:t') : t' + ensures { forall z. interp_id result z = - interp_id a z } + raises { NError -> true } += raise NError + +let iinv (t:t') : t' + (*ensures { forall v: int -> int. id result v * id t v = one }*) + ensures { not (ieq result izero) } + raises { NError -> true } += raise NError + +clone export LinearEquationsDecision with type C.a = int, function C.(+)=(+), function C.(*) = (*), function C.(-_) = (-_), function C.(-) = (-), type coeff = t', type C.cvars = int->int,function C.interp = interp_id, constant C.azero = zero, constant C.aone = one, predicate C.ale= (<=), val C.czero = izero, val C.cone = ione, lemma C.sub_def, lemma C.zero_def, lemma C.one_def, val C.add = iadd, val C.mul = imul, val C.opp = iopp, val C.eq = ieq, val C.inv = iinv, goal C.A.ZeroLessOne, goal C.A.CompatOrderAdd, goal C.A.CompatOrderMult, goal C.A.Unitary, goal C.A.NonTrivialRing, goal C.A.Mul_distr_l, goal C.A.Mul_distr_r, goal C.A.Inv_def_l, goal C.A.Inv_def_r, goal C.A.MulAssoc.Assoc, goal C.A.Assoc, goal C.A.MulComm.Comm, goal C.A.Comm, goal C.A.Unit_def_l, goal C.A.Unit_def_r + + +use import real.FromInt +use import RationalCoeffs +use LinearDecisionRational as R +use import list.List + +let ghost function m_y (y:int -> int): (int -> real) + ensures { forall i. result i = from_int (y i) } += fun i -> from_int (y i) + +meta rewrite_def function m_y + +let m (t:t') : (int, int) + ensures { forall z. rinterp result (m_y z) = from_int (interp_id t z) } + raises { NError -> true } += match t with + | IC x -> (x,1) + | _ -> raise NError + end + +let rec m_cprod (e:cprod) : R.cprod + ensures { forall y z. R.interp_c result (m_y y) (m_y z) + = from_int (interp_c e y z) } + raises { NError -> true } + variant { e } += match e with + | C c -> R.C (m c) + | Times c1 c2 -> R.Times (m_cprod c1) (m_cprod c2) + end + +let rec m_expr (e:expr') : R.expr' + ensures { forall y z. R.interp' result (m_y y) (m_y z) + = from_int (interp' e y z) } + ensures { valid_expr' e -> R.valid_expr' result } + raises { NError -> true } + variant { e } += match e with + | Var i -> R.Var i + | Coeff c -> R.Coeff (m c) + | Sum e1 e2 -> R.Sum (m_expr e1) (m_expr e2) + | Diff e1 e2 -> R.Diff (m_expr e1) (m_expr e2) + | ProdL e c -> R.ProdL (m_expr e) (m_cprod c) + | ProdR c e -> R.ProdR (m_cprod c) (m_expr e) + end + +use import list.Length +use import debug.Debug + +let m_eq (eq:equality') : R.equality' + ensures { forall y z. R.interp_eq' result (m_y y) (m_y z) + <-> interp_eq' eq y z } + ensures { valid_eq' eq -> R.valid_eq' result } + raises { NError -> true } += match eq with (e1,e2) -> (m_expr e1, m_expr e2) end + +let rec m_ctx (ctx:context') (g:equality') : (R.context', R.equality') + returns { c',g' -> forall y z. R.interp_ctx' c' g' (m_y y) (m_y z) <-> + interp_ctx' ctx g y z } + returns { c', _ -> valid_ctx' ctx -> R.valid_ctx' c' } + returns { c', _ -> length c' = length ctx } + returns { _, g' -> valid_eq' g -> R.valid_eq' g' } + raises { NError -> true } + variant { ctx } += match ctx with + | Nil -> Nil, m_eq g + | Cons h t -> + let c',g' = m_ctx t g in + (Cons (m_eq h) c',g') + end + +let int_decision (l: context') (g: equality') : bool + requires { valid_ctx' l } + requires { valid_eq' g } + requires { length l < 100000 } + ensures { forall y z. result -> interp_ctx' l g y z } + raises { R.Failure -> true | QError -> true | NError -> true } += let l',g' = m_ctx l g in + R.decision l' g' + +end + + +module Test + +use import RationalCoeffs +use import LinearDecisionRational +use import int.Int +use import real.RealInfix +use import real.FromInt + +meta "compute_max_steps" 0x10000 +meta coercion function from_int + +goal g: forall x y: real. + (from_int 3 /. from_int 1) *. x +. (from_int 2/. from_int 1) *. y = (from_int 21/. from_int 1) -> + (from_int 7 /. from_int 1) *. x +. (from_int 4/. from_int 1) *. y = (from_int 47/. from_int 1) -> + x = (from_int 5 /. from_int 1) +end + +module TestInt + +use import LinearDecisionInt +use import int.Int + +meta "compute_max_steps" 0x10000 + +goal g: forall x y:int. + 3 * x + 2 * y = 21 -> + 7 * x + 4 * y = 47 -> + x = 5 + +end + +module MP64Coeffs + +use mach.int.UInt64 as M +use import real.RealInfix +use import real.FromInt +use import real.PowerReal +use RationalCoeffs as Q +use import int.Int + +use import debug.Debug + +type evars = int -> int + + +type exp = Lit int | Var int | Plus exp exp | Minus exp | Sub exp exp +type t = (Q.t, exp) + +let constant mzero = (Q.rzero, Lit 0) +let constant mone = (Q.rone, Lit 0) + +constant rradix: real = from_int (M.radix) + +function qinterp (q:Q.t) : real += match q with (n,d) -> from_int n /. from_int d end + +meta rewrite_def function qinterp + +lemma qinterp_def: forall q v. qinterp q = Q.rinterp q v + +function interp_exp (e:exp) (y:evars) : int += match e with + | Lit n -> n + | Var v -> y v + | Plus e1 e2 -> interp_exp e1 y + interp_exp e2 y + | Sub e1 e2 -> interp_exp e1 y - interp_exp e2 y + | Minus e' -> - (interp_exp e' y) + end + +meta rewrite_def function interp_exp + +function minterp (t:t) (y:evars) : real += match t with + (q,e) -> + qinterp q *. pow rradix (from_int (interp_exp e y)) + end + +meta rewrite_def function minterp + +exception MPError + +let rec opp_exp (e:exp) + ensures { forall y. interp_exp result y = - interp_exp e y } + variant { e } += match e with + | Lit n -> Lit (-n) + | Minus e' -> e' + | Plus e1 e2 -> Plus (opp_exp e1) (opp_exp e2) + | Sub e1 e2 -> Sub e2 e1 + | Var _ -> Minus e + end + +let rec add_sub_exp (e1 e2:exp) (s:bool) : exp + ensures { forall y. + if s + then interp_exp result y = interp_exp e1 y + interp_exp e2 y + else interp_exp result y = interp_exp e1 y - interp_exp e2 y } + raises { MPError -> true } + variant { e2, e1 } += + let rec add_atom (e a:exp) (s:bool) : (exp, bool) + returns { r, _ -> forall y. + if s then interp_exp r y = interp_exp e y + interp_exp a y + else interp_exp r y = interp_exp e y - interp_exp a y } + raises { MPError -> true } + variant { e } + = match (e,a) with + | Lit n1, Lit n2 -> (if s then Lit (n1+n2) else Lit (n1-n2)), True + | Lit n, Var i + -> if n = 0 then (if s then Var i else Minus (Var i)), True + else (if s then Plus e a else Sub e a), False + | Var i, Lit n + -> if n = 0 then Var i, true + else (if s then Plus e a else Sub e a), False + | Lit n, Minus e' -> + if n = 0 then (if s then Minus e' else e'), True + else (if s then Plus e a else Sub e a), False + | Minus e', Lit n -> + if n = 0 then Minus e', True + else (if s then Plus e a else Sub e a), False + | Var i, Minus (Var j) | Minus (Var j), Var i -> + if s && (i = j) then (Lit 0, true) + else (if s then Plus e a else Sub e a), False + | Var i, Var j -> if s then Plus e a, False + else + if i = j then Lit 0, True + else Sub e a, False + | Minus (Var i), Minus (Var j) -> + if (not s) && (i=j) then Lit 0, true + else (if s then Plus e a else Sub e a), False + | Minus _, Minus _ -> (if s then Plus e a else Sub e a), False + | Plus e1 e2, _ -> + let r, b = add_atom e1 a s in + if b then + match r with + | Lit n -> if n = 0 then e2, True else Plus r e2, True + | _ -> Plus r e2, True + end + else let r, b = add_atom e2 a s in Plus e1 r, b + | Sub e1 e2, _ -> + let r, b = add_atom e1 a s in + if b then + match r with + | Lit n -> if n = 0 then opp_exp e2, True else Sub r e2, True + | _ -> Sub r e2, True + end + else let r, b = add_atom e2 a (not s) in + if b then Sub e1 r, True + else if s then Sub (Plus e1 a) e2, False + else Sub e1 (Plus e2 a), False + | _ -> raise MPError + end + in + match e2 with + | Plus e1' e2' -> + let r = add_sub_exp e1 e1' s in + match r with + | Lit n -> if n = 0 + then (if s then e2' else opp_exp e2') + else add_sub_exp r e2' s + | _ -> add_sub_exp r e2' s + end + | Sub e1' e2' -> + let r = add_sub_exp e1 e1' s in + match r with + | Lit n -> if n = 0 + then (if s then opp_exp e2' else e2') + else add_sub_exp r e2' (not s) + | _ -> add_sub_exp r e2' (not s) + end + | _ -> let r, _ = add_atom e1 e2 s in r + end + +let add_exp (e1 e2:exp) : exp + ensures { forall y. interp_exp result y = interp_exp e1 y + interp_exp e2 y } + raises { MPError -> True } += add_sub_exp e1 e2 True + + +let rec zero_exp (e:exp) : bool + ensures { result -> forall y. interp_exp e y = 0 } + variant { e } + raises { MPError -> true } += + let rec all_zero (e:exp) : bool + ensures { result -> forall y. interp_exp e y = 0 } + variant { e } + = match e with + | Lit n -> n = 0 + | Var _ -> false + | Minus e -> all_zero e + | Plus e1 e2 -> all_zero e1 && all_zero e2 + | Sub e1 e2 -> all_zero e1 && all_zero e2 + end + in + let e' = add_exp (Lit 0) e in (* simplifies exp *) + all_zero e' + +let rec same_exp (e1 e2: exp) + ensures { result -> forall y. interp_exp e1 y = interp_exp e2 y } + variant { e1, e2 } + raises { MPError -> true } += match e1, e2 with + | Lit n1, Lit n2 -> n1 = n2 + | Var v1, Var v2 -> v1 = v2 + | Minus e1', Minus e2' -> same_exp e1' e2' + | _ -> zero_exp (add_exp e1 (opp_exp e2)) + end + +let madd (a b:t) + ensures { forall y. minterp result y = minterp a y +. minterp b y } + raises { MPError -> true } + raises { Q.QError -> true } += match a, b with + | (q1, e1), (q2, e2) -> + if Q.is_zero q1 then b + else if Q.is_zero q2 then a + else if same_exp e1 e2 + then begin + let q = Q.radd q1 q2 in + assert { forall y. minterp (q, e1) y = minterp a y +. minterp b y + by let p = pow rradix (from_int (interp_exp e1 y)) in + minterp (q, e1) y = (qinterp q) *. p + = (qinterp q1 +. qinterp q2) *. p + = qinterp q1 *. p +. qinterp q2 *. p + = minterp a y +. minterp b y }; + (q,e1) end + else raise MPError + end + +let mmul (a b:t) + ensures { forall y. minterp result y = minterp a y *. minterp b y } + raises { Q.QError -> true } + raises { MPError -> true } += match a, b with + | (q1,e1), (q2,e2) -> + let q = Q.rmul q1 q2 in + if Q.is_zero q then mzero + else begin + let e = add_exp e1 e2 in + assert { forall y. minterp (q,e) y = minterp a y *. minterp b y + by let p1 = pow rradix (from_int (interp_exp e1 y)) in + let p2 = pow rradix (from_int (interp_exp e2 y)) in + let p = pow rradix (from_int (interp_exp e y)) in + interp_exp e y = interp_exp e1 y + interp_exp e2 y + so p = p1 *. p2 + so minterp (q,e) y = qinterp q *. p + = (qinterp q1 *. qinterp q2) *. p + = (qinterp q1 *. qinterp q2) *. p1 *. p2 + = minterp a y *. minterp b y }; + (q,e) + end + end + +let mopp (a:t) + ensures { forall y. minterp result y = -. minterp a y } += match a with (q,e) -> (Q.ropp q, e) end + +let rec predicate pure_same_exp (e1 e2: exp) + ensures { result -> forall y. interp_exp e1 y = interp_exp e2 y } + variant { e1, e2 } += match e1, e2 with + | Lit n1, Lit n2 -> n1 = n2 + | Var v1, Var v2 -> v1 = v2 + | Minus e1', Minus e2' -> pure_same_exp e1' e2' + | Plus a1 a2, Plus b1 b2 -> + (pure_same_exp a1 b1 && pure_same_exp a2 b2) || + (pure_same_exp a1 b2 && pure_same_exp a2 b1) + | _ -> false + end + +let predicate meq (a b:t) + ensures { result -> forall y. minterp a y = minterp b y } += match (a,b) with + | (q1,e1), (q2,e2) -> (Q.req q1 q2 && pure_same_exp e1 e2) || (Q.is_zero q1 && Q.is_zero q2) + end + +let minv (a:t) + requires { not meq a mzero } + ensures { not meq result mzero } +(* ensures { forall y. minterp result y *. minterp a y = 1.0 } no need to prove this*) + raises { Q.QError -> true } += match a with + | (q,e) -> (Q.rinv q, opp_exp e) + end + +end + +module LinearDecisionRationalMP + +use import MP64Coeffs +use import real.RealInfix + +type coeff = t + +clone export LinearEquationsDecision with type C.a = real, function C.(+) = (+.), function C.( *) = ( *.), function C.(-_) = (-._), function C.(-) = (-.), type coeff = t, type C.cvars=evars, function C.interp=minterp, exception C.Unknown = MPError, constant C.azero = Real.zero, constant C.aone = Real.one, predicate C.ale = (<=.), val C.czero=mzero, val C.cone=mone, lemma C.sub_def, lemma C.zero_def, lemma C.one_def, val C.add=madd, val C.mul=mmul, val C.opp=mopp, val C.eq=meq, val C.inv=minv, goal C.A.ZeroLessOne, goal C.A.CompatOrderAdd, goal C.A.CompatOrderMult, goal C.A.Unitary, goal C.A.NonTrivialRing, goal C.A.Mul_distr_l, goal C.A.Mul_distr_r, goal C.A.Inv_def_l, goal C.A.Inv_def_r, goal C.A.MulAssoc.Assoc, goal C.A.Assoc, goal C.A.MulComm.Comm, goal C.A.Comm, goal C.A.Unit_def_l, goal C.A.Unit_def_r + +end +module LinearDecisionIntMP + +use import int.Int +use import int.Power +use import MP64Coeffs + +type t = | I int | E exp | R + +let constant mpzero: t = I 0 +let constant mpone: t = I 1 + +function mpinterp (t:t) (y:evars) : int += match t with + | I n -> n + | E e -> power M.radix (interp_exp e y) + | R -> M.radix + end + +meta rewrite_def function mpinterp + +(* TODO restructure stuff so that expr, eq, ctx, valid_ can be imported without having to implement these *) + +let mpadd (a b:t) : t + ensures { forall y. mpinterp result y = mpinterp a y + mpinterp b y } + raises { MPError -> true } += raise MPError + +let mpmul (a b:t) : t + ensures { forall y. mpinterp result y = mpinterp a y * mpinterp b y } + raises { MPError -> true } += raise MPError + +let mpopp (a:t) : t + ensures { forall y. mpinterp result y = - mpinterp a y } + raises { MPError -> true } += raise MPError + +let predicate mpeq (a b:t) + ensures { result -> forall y. mpinterp a y = mpinterp b y } += false (*match a, b with + (n1, e1), (n2, e2) -> n1=n2 && (n1 = 0 || same_exp e1 e2) + end*) + +let mpinv (a:t) : t + ensures { not mpeq result mpzero } + raises { MPError -> true } += raise MPError + + +clone export LinearEquationsDecision with type C.a = int, function C.(+) = (+), function C.(*) = (*), function C.(-_) = (-_), function C.(-) = (-), type coeff = t, type C.cvars = int->int, function C.interp = mpinterp, constant C.azero = zero, constant C.aone = one, val C.czero = mpzero, val C.cone = mpone, predicate C.ale = (<=), lemma C.sub_def, lemma C.zero_def, lemma C.one_def, val C.add = mpadd, val C.mul = mpmul, val C.opp = mpopp, val C.eq = mpeq, val C.inv = mpinv, goal C.A.ZeroLessOne, goal C.A.CompatOrderAdd, goal C.A.CompatOrderMult, goal C.A.Unitary, goal C.A.NonTrivialRing, goal C.A.Mul_distr_l, goal C.A.Mul_distr_r, goal C.A.Inv_def_l, goal C.A.Inv_def_r, goal C.A.MulAssoc.Assoc, goal C.A.Assoc, goal C.A.MulComm.Comm, goal C.A.Comm, goal C.A.Unit_def_l, goal C.A.Unit_def_r + +use LinearDecisionRationalMP as R +use import real.FromInt +use import real.PowerReal +use import real.RealInfix +use import int.Int + +use import list.List + +predicate pos_exp (t:t) (y:evars) += match t with + | E e -> 0 <= interp_exp e y + | I _ | R -> true + end + +predicate pos_cprod (e:cprod) (y:evars) += match e with + | C c -> pos_exp c y + | Times c1 c2 -> pos_cprod c1 y && pos_cprod c2 y + end + +predicate pos_expr' (e:expr') (y:evars) += match e with + | Coeff c -> pos_exp c y + | Var _ -> true + | Sum e1 e2 | Diff e1 e2 + -> pos_expr' e1 y /\ pos_expr' e2 y + | ProdL e c | ProdR c e -> pos_expr' e y && pos_cprod c y + end + +predicate pos_eq' (eq:equality') (y:evars) += match eq with (e1, e2) -> pos_expr' e1 y /\ pos_expr' e2 y end + +predicate pos_ctx' (l:context') (y:evars) += match l with Nil -> true | Cons h t -> pos_eq' h y /\ pos_ctx' t y end + +let rec function m (t:t) : R.coeff + ensures { forall y. pos_exp t y -> minterp result y + = from_int (mpinterp t y) } += match t with + | I n -> ((n,1), Lit 0) + | E e -> ((1,1), e) + | R -> ((1,1), Lit 1) (* or ((radix, 1), Lit 0) ? *) + end + +meta rewrite_def function m + +let ghost function m_y (y:int->int): (int -> real) + ensures { forall i. result i = from_int (y i) } += fun i -> from_int (y i) + +let rec function m_cprod (e:cprod) : R.cprod + ensures { forall y z. pos_cprod e z -> R.interp_c result (m_y y) z + = from_int (interp_c e y z) } += match e with + | C c -> R.C (m c) + | Times c1 c2 -> R.Times (m_cprod c1) (m_cprod c2) + end + +meta rewrite_def function m_cprod + +let rec function m_expr (e:expr') : R.expr' + ensures { forall y z. pos_expr' e z -> R.interp' result (m_y y) z + = from_int (interp' e y z) } + ensures { valid_expr' e -> R.valid_expr' result} += match e with + | Var i -> R.Var i + | Coeff c -> R.Coeff (m c) + | Sum e1 e2 -> R.Sum (m_expr e1) (m_expr e2) + | Diff e1 e2 -> R.Diff (m_expr e1) (m_expr e2) + | ProdL e c -> R.ProdL (m_expr e) (m_cprod c) + | ProdR c e -> R.ProdR (m_cprod c) (m_expr e) + end + +meta rewrite_def function m_expr + +let function m_eq (eq:equality') : R.equality' + ensures { forall y z. pos_eq' eq z -> (R.interp_eq' result (m_y y) z + <-> interp_eq' eq y z) } + ensures { valid_eq' eq -> R.valid_eq' result } += match eq with (e1,e2) -> (m_expr e1, m_expr e2) end + +meta rewrite_def function m_eq + +use import list.Length + +let rec function m_ctx (ctx:context') : R.context' + ensures { forall y z g. pos_ctx' ctx z -> pos_eq' g z -> + (R.interp_ctx' result (m_eq g) (m_y y) z + <-> interp_ctx' ctx g y z) } + ensures { length result = length ctx } + ensures { valid_ctx' ctx -> R.valid_ctx' result } + variant { ctx } += match ctx with + | Nil -> Nil + | Cons h t -> + let r = Cons (m_eq h) (m_ctx t) in + r + end + +meta rewrite_def function m_ctx + +let mp_decision (l: context') (g: equality') : bool + requires { valid_ctx' l } + requires { valid_eq' g } + requires { length l < 100000 } + ensures { forall y z. result -> pos_ctx' l z -> pos_eq' g z + -> interp_ctx' l g y z } + raises { R.Failure -> true | MPError -> true | Q.QError -> true } += + R.decision (m_ctx l) (m_eq g) + +end + +module EqPropMP + +use import int.Int +use import LinearDecisionIntMP +use import array.Array +use import int.MinMax +use import option.Option +use import list.List +use import list.Append + + +use MP64Coeffs as E + +let rec predicate expr_bound' (e:expr') (b:int) + variant { e } += match e with + | Sum e1 e2 | Diff e1 e2 -> expr_bound' e1 b && expr_bound' e2 b + | ProdL e _ | ProdR _ e -> expr_bound' e b + | Var n -> 0 <= n <= b + | Coeff _ -> true + end + +let predicate eq_bound' (eq:equality') (b:int) += match eq with (e1,e2) -> expr_bound' e1 b && expr_bound' e2 b end + +let rec predicate ctx_bound' (ctx:context') (b:int) += match ctx with Nil -> true | Cons eq t -> eq_bound' eq b && ctx_bound' t b end + +let rec lemma expr_bound_w' (e:expr') (b1 b2:int) + requires { b1 <= b2 } + requires { expr_bound' e b1 } + ensures { expr_bound' e b2 } + variant { e } += match e with + | Sum e1 e2 | Diff e1 e2 -> + expr_bound_w' e1 b1 b2; expr_bound_w' e2 b1 b2 + | ProdL e _ | ProdR _ e -> expr_bound_w' e b1 b2 + | _ -> () + end + +lemma eq_bound_w': forall e:equality', b1 b2:int. eq_bound' e b1 -> b1 <= b2 -> eq_bound' e b2 + +let rec lemma ctx_bound_w' (l:context') (b1 b2:int) + requires { ctx_bound' l b1 } + requires { b1 <= b2 } + ensures { ctx_bound' l b2 } + variant { l } += match l with Nil -> () | Cons _ t -> ctx_bound_w' t b1 b2 end + +let rec function max_var' (e:expr') : int + variant { e } + requires { valid_expr' e } + ensures { 0 <= result } + ensures { expr_bound' e result } += match e with + | Var i -> i + | Coeff _ -> 0 + | Sum e1 e2 | Diff e1 e2 -> max (max_var' e1) (max_var' e2) + | ProdL e _ | ProdR _ e -> max_var' e + end + +let function max_var_e' (e:equality') : int + requires { valid_eq' e } + ensures { 0 <= result } + ensures { eq_bound' e result } += match e with (e1,e2) -> max (max_var' e1) (max_var' e2) end + +let rec function max_var_ctx' (l:context') : int + variant { l } + requires { valid_ctx' l } + ensures { 0 <= result } + ensures { ctx_bound' l result } += match l with + | Nil -> 0 + | Cons e t -> max (max_var_e' e) (max_var_ctx' t) + end + +let rec lemma interp_ctx_valid' (ctx:context') (g:equality') + ensures { forall y z. interp_eq' g y z -> interp_ctx' ctx g y z } + variant { ctx } += match ctx with Nil -> () | Cons _ t -> interp_ctx_valid' t g end + +let rec lemma interp_ctx_wr' (ctx l:context') (g:equality') + ensures { forall y z. interp_ctx' ctx g y z -> interp_ctx' (ctx ++ l) g y z } + variant { ctx } += match ctx with + | Nil -> () + | Cons _ t -> interp_ctx_wr' t l g end + +let rec lemma interp_ctx_wl' (ctx l: context') (g:equality') + ensures { forall y z. interp_ctx' ctx g y z -> interp_ctx' (l ++ ctx) g y z } + variant { l } += match l with Nil -> () | Cons _ t -> interp_ctx_wl' ctx t g end + + +let lemma interp_ctx_cons' (e:equality') (l:context') (g:equality') + requires { forall y z. (interp_eq' e y z -> interp_ctx' l g y z) } + ensures { forall y z. interp_ctx' (Cons e l) g y z } += () + +predicate ctx_impl_ctx' (c1 c2: context') += match c2 with + | Nil -> true + | Cons eq t -> ctx_impl_ctx' c1 t /\ forall y z. y=z -> interp_ctx' c1 eq y z + end + +predicate ctx_holds' (c: context') (y z:vars) += match c with + | Nil -> true + | Cons h t -> interp_eq' h y z /\ ctx_holds' t y z + end + +let rec lemma holds_interp_ctx' (l:context') (g:equality') (y z:vars) + requires { ctx_holds' l y z -> interp_eq' g y z } + ensures { interp_ctx' l g y z } + variant { l } += match l with + | Nil -> () + | Cons h t -> + if interp_eq' h y z then holds_interp_ctx' t g y z + end + +let rec lemma interp_holds' (l:context') (g:equality') (y z:vars) + requires { interp_ctx' l g y z } + requires { ctx_holds' l y z } + ensures { interp_eq' g y z } + variant { l } += match l with + | Nil -> () + | Cons _ t -> interp_holds' t g y z + end + +let rec lemma impl_holds' (c1 c2: context') (y z: vars) + requires { ctx_impl_ctx' c1 c2 } + requires { y=z } + requires { ctx_holds' c1 y z } + ensures { ctx_holds' c2 y z } + variant { c2 } += match c2 with + | Nil -> () + | Cons h t -> interp_holds' c1 h y z; impl_holds' c1 t y z + end + +let rec lemma ctx_impl' (c1 c2: context') (g:equality') (y z: vars) + requires { ctx_impl_ctx' c1 c2 } + requires { y=z } + requires { interp_ctx' c2 g y z } + ensures { interp_ctx' c1 g y z } + variant { c2 } += if ctx_holds' c1 y z + then begin + impl_holds' c1 c2 y z; + interp_holds' c2 g y z; + holds_interp_ctx' c1 g y z + end + +let rec lemma interp_ctx_impl' (ctx: context') (g1 g2:equality') + requires { forall y z. interp_eq' g1 y z -> interp_eq' g2 y z } + ensures { forall y z. interp_ctx' ctx g1 y z -> interp_ctx' ctx g2 y z } + variant { ctx } += match ctx with Nil -> () | Cons _ t -> interp_ctx_impl' t g1 g2 end + +let lemma impl_cons (c1 c2:context') (e:equality') (y z:vars) + requires { ctx_impl_ctx' c1 c2 } + requires { forall y z. interp_ctx' c1 e y z } + ensures { ctx_impl_ctx' c1 (Cons e c2) } += () + +let rec lemma impl_wl' (c1 c2:context') (e:equality') + requires { ctx_impl_ctx' c1 c2 } + ensures { ctx_impl_ctx' (Cons e c1) c2 } + variant { c2 } += match c2 with + | Nil -> () + | Cons h t -> interp_ctx_wl' c1 (Cons e Nil) h; impl_wl' c1 t e + end + +let rec lemma impl_self (c:context') + ensures { ctx_impl_ctx' c c } + variant { c } += match c with + | Nil -> () + | Cons h t -> (impl_self t; impl_wl' c t h) + end + +predicate is_eq_tbl (a:array (option E.exp)) (l:context') += forall i. 0 <= i < length a -> + match a[i] with + | None -> true + | Some e -> forall y z. y=z -> ctx_holds' l y z + -> E.interp_exp (E.Var i) z = E.interp_exp e z + end +use import int.NumOf +use import array.NumOfEq +use import list.Length + +let prop_ctx (l:context') (g:equality') : (context', equality') + requires { valid_ctx' l } + requires { valid_eq' g } + returns { rl, _ -> length rl = length l } + returns { rl, rg -> valid_ctx' rl /\ valid_eq' rg + /\ forall y z. y=z -> interp_ctx' rl rg y z + -> interp_ctx' l g y z } + returns { rl, rg -> forall y z. y=z -> ctx_holds' l y z + -> pos_ctx' l z -> pos_eq' g z + -> (pos_ctx' rl z /\ pos_eq' rg z) } + raises { OutOfBounds -> true } += + let m = max (max_var_ctx' l) (max_var_e' g) in + let a : array (option E.exp) = Array.make (m+1) None in + let rec exp_of_expr' (e:expr') : option E.exp + returns { | None -> true + | Some ex -> forall y z. y=z -> interp' e y z = E.interp_exp ex z } + variant { e } + = match e with + | Var i -> Some (E.Var i) + | Sum e1 e2 -> + let r1,r2 = (exp_of_expr' e1, exp_of_expr' e2) in + match r1,r2 with + | Some ex1, Some ex2 -> Some (E.Plus ex1 ex2) + | _ -> None + end + | Diff e1 e2 -> + let r1,r2 = (exp_of_expr' e1, exp_of_expr' e2) in + match r1,r2 with + | Some ex1, Some ex2 -> Some (E.Sub ex1 ex2) + | _ -> None + end + | Coeff (I n) -> Some (E.Lit n) + | _ -> None + end + in + let fill_tbl_eq (eq:equality') : unit + requires { eq_bound' eq m } + ensures { forall l. is_eq_tbl (old a) l -> + is_eq_tbl a (Cons eq l) } + = match eq with + | Var i, e | e, Var i -> + let r = exp_of_expr' e in + match r with + | None -> () + | Some ex -> + assert { forall l y z. y=z -> ctx_holds' (Cons eq l) y z -> + E.interp_exp ex z = interp' e y z + = interp' (Var i) y z = y i }; + a[i] <- Some ex + end + | _ -> () + end + in + let rec fill_tbl_ctx (l:context') : unit + requires { is_eq_tbl a Nil } + ensures { is_eq_tbl a l } + requires { ctx_bound' l m } + variant { l } + = match l with + | Nil -> () + | Cons eq l -> fill_tbl_ctx l; fill_tbl_eq eq + end + in + fill_tbl_ctx l; + (* a contains equalities, let us propagate them so that + only a single pass on the context is needed *) + let seen = Array.make (m+1) false in + let rec propagate_in_tbl (i:int) : unit + requires { is_eq_tbl a l } + ensures { is_eq_tbl a l } + raises { OutOfBounds -> true } + variant { numof seen false 0 (m+1) } + requires { seen[i] = false } + ensures { seen[i] = true } + ensures { forall j. old seen[j] -> seen[j] } + = + label Start in + let rec prop (e:E.exp) : E.exp + requires { is_eq_tbl a l } + ensures { is_eq_tbl a l } + ensures { forall y z. y=z -> ctx_holds' l y z -> + E.interp_exp e z = E.interp_exp result z } + ensures { forall j. old seen[j] -> seen[j] } + raises { OutOfBounds -> true } + requires { numof seen false 0 (m+1) < numof (seen at Start) false 0 (m+1) } + variant { e } + = match e with + | E.Lit _ -> e + | E.Var j -> + if (not (defensive_get seen j)) then propagate_in_tbl j; + match (defensive_get a j) with + | None -> e + | Some e' -> e' + end + | E.Plus e1 e2 -> E.Plus (prop e1) (prop e2) + | E.Sub e1 e2 -> E.Sub (prop e1) (prop e2) + | E.Minus e -> E.Minus (prop e) + end + in + defensive_set seen i true; + assert { numof seen false 0 (m+1) < numof (old seen) false 0 (m+1) + by forall j. 0 <= j < m+1 -> (old seen)[j] -> seen[j] + so not (old seen)[i] so seen[i] }; + match a[i] with + | None -> () + | Some e -> a[i] <- Some (prop e) + end; + in + for i = 0 to m do + invariant { is_eq_tbl a l } + if not seen[i] then propagate_in_tbl i; + done; + let rec propagate_exp (e:E.exp) + ensures { forall y z. y=z -> ctx_holds' l y z -> + E.interp_exp e z = E.interp_exp result z } + variant { e } + raises { OutOfBounds -> true } + = match e with + | E.Lit _ -> e + | E.Var i -> match (defensive_get a i) with Some e' -> e' | None -> e end + | E.Plus e1 e2 -> E.Plus (propagate_exp e1) (propagate_exp e2) + | E.Sub e1 e2 -> E.Sub (propagate_exp e1) (propagate_exp e2) + | E.Minus e -> E.Minus (propagate_exp e) + end + in + let propagate_coeff (c:t) + ensures { forall y z. y=z -> ctx_holds' l y z -> + interp_eq' (Coeff c, Coeff result) y z } + ensures { forall y z. y = z -> ctx_holds' l y z -> + pos_exp c z -> pos_exp result z } + raises { OutOfBounds -> true } + = match c with + | I _ -> c + | E e -> E (propagate_exp e) + | R -> R + end + in + let rec propagate_c (c:cprod) + ensures { forall y z. y=z -> ctx_holds' l y z -> + interp_c c y z = interp_c result y z } + variant { c } + raises { OutOfBounds -> true } + ensures { forall y z. y = z -> ctx_holds' l y z -> + pos_cprod c z -> pos_cprod result z } + = match c with + | C c -> C (propagate_coeff c) + | Times c1 c2 -> Times (propagate_c c1) (propagate_c c2) + end + in + let rec propagate_e (e:expr') + requires { expr_bound' e m } + ensures { expr_bound' result m } + ensures { forall y z. y=z -> ctx_holds' l y z -> interp_eq' (e,result) y z } + variant { e } + raises { OutOfBounds -> true } + requires { valid_expr' e } + ensures { valid_expr' result } + ensures { forall y z. y = z -> ctx_holds' l y z + -> pos_expr' e z -> pos_expr' result z } + = match e with + | Var _ -> e + | ProdL e c -> ProdL (propagate_e e) (propagate_c c) + | ProdR c e -> ProdR (propagate_c c) (propagate_e e) + | Sum e1 e2 -> Sum (propagate_e e1) (propagate_e e2) + | Diff e1 e2 -> Diff (propagate_e e1) (propagate_e e2) + | Coeff c -> Coeff (propagate_coeff c) + end + in + let rec propagate_eq (eq:equality') + requires { eq_bound' eq m } + ensures { eq_bound' result m } + ensures { forall y z. y=z -> interp_ctx' l eq y z <-> interp_ctx' l result y z } + raises { OutOfBounds -> true } + requires { valid_eq' eq } + ensures { valid_eq' result } + ensures { forall y z. y = z -> ctx_holds' l y z + -> pos_eq' eq z -> pos_eq' result z } + = match eq with (a,b) -> (propagate_e a, propagate_e b) end + in + let rec propagate (acc:context') : context' + requires { ctx_bound' acc m } + ensures { ctx_bound' result m } + requires { ctx_impl_ctx' l acc } + ensures { ctx_impl_ctx' l result } + ensures { length result = length acc } + variant { acc } + requires { valid_ctx' acc } + ensures { valid_ctx' result } + ensures { forall y z. y = z -> ctx_holds' l y z + -> pos_ctx' acc z -> pos_ctx' result z } + raises { OutOfBounds -> true } + = match acc with + | Nil -> Nil + | Cons h t -> + let h' = propagate_eq h in + let t' = propagate t in + Cons h' t' + end + in + propagate l, propagate_eq g + + use LinearDecisionRationalMP as R + + let prop_mp_decision (l:context') (g:equality') : bool + requires { valid_ctx' l } + requires { valid_eq' g } + requires { length l < 100000 } + ensures { forall y z. result -> pos_ctx' l z -> pos_eq' g z + -> y = z -> interp_ctx' l g y z } + raises { | OutOfBounds -> true | E.MPError -> true + | E.Q.QError -> true | R.Failure -> true} + = let l', g' = prop_ctx l g in + mp_decision l' g' + +end + +module TestMP + +use import EqPropMP +use import mach.int.UInt64 +use import int.Int +use import int.Power + +meta "compute_max_steps" 0x10000 + +goal g: forall i x c r: int. + 0 <= i -> + x + (2 * (power radix i) * c) = r -> + radix * x + (2 * (power radix (i+1)) * c) = radix * r + +goal g': forall a b i j: int. + 0 <= i -> 0 <= j -> + (power radix i) * a = b -> + i+1 = j -> + (power radix j) * a = radix*b + +goal g'': forall r r' i c x x' y l: int. + 0 <= i -> + c = 0 -> + r + power radix i * c = x + y -> + r' = r + power radix i * l -> + x' = x + power radix i * l -> + r' + power radix (i+1) * c = x' + y + +(*tries to add power radix i and power radix (i+1), fails + -> cst propagation ? *) + +end + +module Test2 + +use import int.Int +use import LinearDecisionInt + +meta "compute_max_steps" 0x10000 + +goal g: forall x y z: int. + x + y = 0 -> + y - z = 0 -> + x = 0 + +end + +module Fmla + +use import map.Map +use import int.Int + +type value +constant dummy : value +predicate foo value +function add value value : value + +type term = Val int | Add term term +type fmla = Forall fmla | Foo term + +function interp_term (t:term) (b:int->value) : value = + match t with + | Val n -> b n + | Add t1 t2 -> add (interp_term t1 b) (interp_term t2 b) + end + +meta rewrite_def function interp_term + +function interp_fmla (f:fmla) (l:int) (b:int->value) : bool = + match f with + | Foo t -> foo (interp_term t b) + | Forall f -> forall v. interp_fmla f (l-1) b[l <- v] + end + +meta rewrite_def function interp_fmla + +function interp (f:fmla) (b: int -> value) : bool = + interp_fmla f (-1) b + +meta rewrite_def function interp + +let f (f:fmla) : bool + ensures { result -> forall b. interp f b } += false +end + +module TestFmla + +use import Fmla + +meta "compute_max_steps" 0x10000 + +goal g: + forall a: value. + ((forall x. forall y. foo (add x (add (add a dummy) y))) = True) + +end \ No newline at end of file diff --git a/examples/multiprecision/lineardecision/why3session.xml b/examples/multiprecision/lineardecision/why3session.xml new file mode 100644 index 0000000000..204df7ae52 --- /dev/null +++ b/examples/multiprecision/lineardecision/why3session.xml @@ -0,0 +1,4352 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<prover id="0" name="Alt-Ergo" version="1.30" timelimit="1" 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.5.0" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="3" name="Eprover" version="1.9.1-001" timelimit="5" steplimit="0" memlimit="2000"/> +<file name="../lineardecision.mlw"> +<theory name="LinearEquationsCoeffs" proved="true"> + <goal name="VC czero" expl="VC for czero" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC cone" expl="VC for cone" proved="true"> + <transf name="split_goal_right" proved="true" > + </transf> + </goal> + <goal name="neg_mul" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> +</theory> +<theory name="LinearEquationsDecision" proved="true"> + <goal name="VC valid_expr" expl="VC for valid_expr" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC expr_bound" expl="VC for expr_bound" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC valid_eq" expl="VC for valid_eq" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC eq_bound" expl="VC for eq_bound" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC valid_ctx" expl="VC for valid_ctx" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC ctx_bound" expl="VC for ctx_bound" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC expr_bound_w" expl="VC for expr_bound_w" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC expr_bound_w.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC expr_bound_w.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC expr_bound_w.2" expl="precondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="12"/></proof> + </goal> + <goal name="VC expr_bound_w.3" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC expr_bound_w.4" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC expr_bound_w.5" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="13"/></proof> + </goal> + <goal name="VC expr_bound_w.6" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="34"/></proof> + </goal> + </transf> + </goal> + <goal name="eq_bound_w" proved="true"> + <proof prover="0"><result status="valid" time="0.00" steps="18"/></proof> + </goal> + <goal name="VC ctx_bound_w" expl="VC for ctx_bound_w" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC ctx_bound_w.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC ctx_bound_w.1" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="12"/></proof> + </goal> + <goal name="VC ctx_bound_w.2" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC ctx_bound_w.3" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="31"/></proof> + </goal> + </transf> + </goal> + <goal name="VC apply_r" expl="VC for apply_r" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC apply_r.0" expl="array creation size" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="17"/></proof> + </goal> + <goal name="VC apply_r.1" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC apply_r.2" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC apply_r.3" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="22"/></proof> + </goal> + <goal name="VC apply_r.4" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="23"/></proof> + </goal> + <goal name="VC apply_r.5" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="22"/></proof> + </goal> + <goal name="VC apply_r.6" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="22"/></proof> + </goal> + <goal name="VC apply_r.7" expl="exceptional postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="10"/></proof> + </goal> + <goal name="VC apply_r.8" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC apply_r.9" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="15"/></proof> + </goal> + <goal name="VC apply_r.10" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC apply_l" expl="VC for apply_l" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC apply_l.0" expl="array creation size" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="10"/></proof> + </goal> + <goal name="VC apply_l.1" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC apply_l.2" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC apply_l.3" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="22"/></proof> + </goal> + <goal name="VC apply_l.4" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="23"/></proof> + </goal> + <goal name="VC apply_l.5" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="22"/></proof> + </goal> + <goal name="VC apply_l.6" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="22"/></proof> + </goal> + <goal name="VC apply_l.7" expl="exceptional postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="10"/></proof> + </goal> + <goal name="VC apply_l.8" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC apply_l.9" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="15"/></proof> + </goal> + <goal name="VC apply_l.10" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sprod" expl="VC for sprod" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sprod.0" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sprod.1" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="15"/></proof> + </goal> + <goal name="VC sprod.2" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="15"/></proof> + </goal> + <goal name="VC sprod.3" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC sprod.4" expl="exceptional postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC m_append" expl="VC for m_append" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC m_append.0" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC m_append.1" expl="precondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="59"/></proof> + </goal> + <goal name="VC m_append.2" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC m_append.3" expl="loop invariant init" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="17"/></proof> + </goal> + <goal name="VC m_append.4" expl="loop invariant init" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="17"/></proof> + </goal> + <goal name="VC m_append.5" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC m_append.6" expl="loop invariant init" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="30"/></proof> + </goal> + <goal name="VC m_append.7" expl="loop invariant init" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="27"/></proof> + </goal> + <goal name="VC m_append.8" expl="loop invariant init" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="23"/></proof> + </goal> + <goal name="VC m_append.9" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="28"/></proof> + </goal> + <goal name="VC m_append.10" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="28"/></proof> + </goal> + <goal name="VC m_append.11" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="39"/></proof> + </goal> + <goal name="VC m_append.12" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="36"/></proof> + </goal> + <goal name="VC m_append.13" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="36"/></proof> + </goal> + <goal name="VC m_append.14" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="25"/></proof> + </goal> + <goal name="VC m_append.15" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="26"/></proof> + </goal> + <goal name="VC m_append.16" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="95"/></proof> + </goal> + <goal name="VC m_append.17" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="33"/></proof> + </goal> + <goal name="VC m_append.18" expl="out of loop bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="39"/></proof> + </goal> + <goal name="VC m_append.19" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="19"/></proof> + </goal> + <goal name="VC m_append.20" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="20"/></proof> + </goal> + <goal name="VC m_append.21" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="28"/></proof> + </goal> + <goal name="VC m_append.22" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="25"/></proof> + </goal> + <goal name="VC m_append.23" expl="out of loop bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="20"/></proof> + </goal> + </transf> + </goal> + <goal name="VC v_append" expl="VC for v_append" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC v_append.0" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC v_append.1" expl="array creation size" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="12"/></proof> + </goal> + <goal name="VC v_append.2" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC v_append.3" expl="loop invariant init" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="15"/></proof> + </goal> + <goal name="VC v_append.4" expl="loop invariant init" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="17"/></proof> + </goal> + <goal name="VC v_append.5" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="19"/></proof> + </goal> + <goal name="VC v_append.6" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="19"/></proof> + </goal> + <goal name="VC v_append.7" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="193"/></proof> + </goal> + <goal name="VC v_append.8" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="101"/></proof> + </goal> + <goal name="VC v_append.9" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="17"/></proof> + </goal> + <goal name="VC v_append.10" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="21"/></proof> + </goal> + <goal name="VC v_append.11" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="18"/></proof> + </goal> + <goal name="VC v_append.12" expl="out of loop bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="24"/></proof> + </goal> + </transf> + </goal> + <goal name="VC infix ==" expl="VC for infix ==" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC infix ==.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC infix ==.1" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC infix ==.2" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC infix ==.3" expl="index in array bounds" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC infix ==.4" expl="index in array bounds" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC infix ==.5" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="18"/></proof> + </goal> + <goal name="VC infix ==.6" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="21"/></proof> + </goal> + <goal name="VC infix ==.7" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC infix ==.8" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC max_var" expl="VC for max_var" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="393"/></proof> + </goal> + <goal name="VC max_var_e" expl="VC for max_var_e" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC max_var_ctx" expl="VC for max_var_ctx" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="258"/></proof> + </goal> + <goal name="VC opp_expr" expl="VC for opp_expr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC opp_expr.0" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC opp_expr.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="11"/></proof> + </goal> + <goal name="VC opp_expr.0.1" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="11"/></proof> + </goal> + <goal name="VC opp_expr.0.2" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC opp_expr.0.2.0" expl="assertion" proved="true"> + <transf name="apply" proved="true" arg1="neg_mul"> + </transf> + </goal> + </transf> + </goal> + <goal name="VC opp_expr.0.3" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="11"/></proof> + </goal> + </transf> + </goal> + <goal name="VC opp_expr.1" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC opp_expr.2" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC opp_expr.3" expl="assertion" proved="true"> + <proof prover="3" memlimit="1000"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC opp_expr.4" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC opp_expr.4.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="11"/></proof> + </goal> + <goal name="VC opp_expr.4.1" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC opp_expr.4.2" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC opp_expr.4.3" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="11"/></proof> + </goal> + <goal name="VC opp_expr.4.4" expl="VC for opp_expr" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC opp_expr.5" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC opp_expr.5.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="16"/></proof> + </goal> + <goal name="VC opp_expr.5.1" expl="postcondition" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC opp_expr.5.1.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="27"/></proof> + </goal> + </transf> + </goal> + <goal name="VC opp_expr.5.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC opp_expr.6" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="213"/></proof> + </goal> + <goal name="VC opp_expr.7" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="147"/></proof> + </goal> + </transf> + </goal> + <goal name="VC norm_eq_aux" expl="VC for norm_eq_aux" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC norm_eq_aux.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="26"/></proof> + </goal> + <goal name="VC norm_eq_aux.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="12"/></proof> + </goal> + <goal name="VC norm_eq_aux.2" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC norm_eq_aux.3" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="11"/></proof> + </goal> + <goal name="VC norm_eq_aux.4" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="16"/></proof> + </goal> + <goal name="VC norm_eq_aux.5" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC norm_eq_aux.6" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC norm_eq_aux.7" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="27"/></proof> + </goal> + <goal name="VC norm_eq_aux.8" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="73"/></proof> + </goal> + <goal name="VC norm_eq_aux.9" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC norm_eq_aux.10" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC norm_eq" expl="VC for norm_eq" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC norm_eq.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="55"/></proof> + </goal> + <goal name="VC norm_eq.1" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC norm_eq.2" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC norm_eq.2.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="64"/></proof> + </goal> + <goal name="VC norm_eq.2.1" expl="VC for norm_eq" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="40"/></proof> + </goal> + <goal name="VC norm_eq.2.2" expl="VC for norm_eq" proved="true"> + <proof prover="1"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC norm_eq.2.3" expl="VC for norm_eq" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="46"/></proof> + </goal> + <goal name="VC norm_eq.2.4" expl="VC for norm_eq" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="21"/></proof> + </goal> + <goal name="VC norm_eq.2.5" expl="VC for norm_eq" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="16"/></proof> + </goal> + </transf> + </goal> + <goal name="VC norm_eq.3" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC norm_eq.3.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="34"/></proof> + </goal> + <goal name="VC norm_eq.3.1" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.60"/></proof> + </goal> + </transf> + </goal> + <goal name="VC norm_eq.4" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="41"/></proof> + </goal> + <goal name="VC norm_eq.5" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC interp_ctx_impl" expl="VC for interp_ctx_impl" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC interp_ctx_impl.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC interp_ctx_impl.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC interp_ctx_impl.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC interp_ctx_valid" expl="VC for interp_ctx_valid" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC interp_ctx_valid.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC interp_ctx_valid.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC interp_ctx_wr" expl="VC for interp_ctx_wr" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="172"/></proof> + </goal> + <goal name="VC interp_ctx_wl" expl="VC for interp_ctx_wl" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="139"/></proof> + </goal> + <goal name="VC mul_expr" expl="VC for mul_expr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_expr.0" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC mul_expr.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="12"/></proof> + </goal> + <goal name="VC mul_expr.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="18"/></proof> + </goal> + <goal name="VC mul_expr.3" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="13"/></proof> + </goal> + <goal name="VC mul_expr.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul_expr.5" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="20"/></proof> + </goal> + <goal name="VC mul_expr.6" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="34"/></proof> + </goal> + <goal name="VC mul_expr.7" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mul_expr.8" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="60"/></proof> + </goal> + <goal name="VC mul_expr.9" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="63"/></proof> + </goal> + <goal name="VC mul_expr.10" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="22"/></proof> + </goal> + <goal name="VC mul_expr.11" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="100"/></proof> + </goal> + <goal name="VC mul_expr.12" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul_expr.13" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_expr" expl="VC for add_expr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_expr.0" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC add_expr.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="19"/></proof> + </goal> + <goal name="VC add_expr.2" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.3" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_expr.3.0" expl="postcondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add_expr.3.0.0" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.73"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_expr.3.1" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_expr.4" expl="postcondition" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC add_expr.4.0" expl="postcondition" proved="true"> + <proof prover="3" memlimit="1000"><result status="valid" time="0.67"/></proof> + </goal> + <goal name="VC add_expr.4.1" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.39"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_expr.5" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.6" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.7" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="69"/></proof> + </goal> + <goal name="VC add_expr.8" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.38" steps="273"/></proof> + </goal> + <goal name="VC add_expr.9" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.10" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.11" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="69"/></proof> + </goal> + <goal name="VC add_expr.12" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.50" steps="502"/></proof> + </goal> + <goal name="VC add_expr.13" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.14" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.15" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="21"/></proof> + </goal> + <goal name="VC add_expr.16" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.17" expl="postcondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC add_expr.17.0" expl="postcondition" proved="true"> + <transf name="revert" proved="true" arg1="H"> + <goal name="VC add_expr.17.0.0" expl="postcondition" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC add_expr.17.0.0.0" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC add_expr.17.0.0.1" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.38"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add_expr.18" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.19" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.20" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="66"/></proof> + </goal> + <goal name="VC add_expr.21" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.34" steps="261"/></proof> + </goal> + <goal name="VC add_expr.22" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.23" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.24" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="66"/></proof> + </goal> + <goal name="VC add_expr.25" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.35" steps="479"/></proof> + </goal> + <goal name="VC add_expr.26" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.27" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.28" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.29" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.30" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="20"/></proof> + </goal> + <goal name="VC add_expr.31" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_expr.31.0" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_expr.31.0.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="22"/></proof> + </goal> + <goal name="VC add_expr.31.0.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="23"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_expr.31.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="22"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_expr.32" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.33" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.34" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="20"/></proof> + </goal> + <goal name="VC add_expr.35" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="22"/></proof> + </goal> + <goal name="VC add_expr.36" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.37" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.38" expl="unreachable point" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.39" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.40" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.41" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="15"/></proof> + </goal> + <goal name="VC add_expr.42" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.43" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_expr.44" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_expr.45" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_expr.46" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_eq" expl="VC for mul_eq" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="33"/></proof> + </goal> + <goal name="VC add_eq" expl="VC for add_eq" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_eq.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_eq.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC add_eq.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_eq.3" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_eq.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_eq.5" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC zero_expr" expl="VC for zero_expr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC zero_expr.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero_expr.1" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC zero_expr.2" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC zero_expr.2.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="34"/></proof> + </goal> + <goal name="VC zero_expr.2.1" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC zero_expr.2.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="39"/></proof> + </goal> + </transf> + </goal> + <goal name="VC zero_expr.3" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC zero_expr.3.0" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC zero_expr.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_expr" expl="VC for sub_expr" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_expr.0" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_expr.0.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_expr.0.1" expl="VC for sub_expr" proved="true"> + <proof prover="1"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC sub_expr.0.2" expl="VC for sub_expr" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="10"/></proof> + </goal> + <goal name="VC sub_expr.0.3" expl="VC for sub_expr" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="42"/></proof> + </goal> + <goal name="VC sub_expr.0.4" expl="VC for sub_expr" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_expr.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="10"/></proof> + </goal> + <goal name="VC sub_expr.2" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC sub_expr.3" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC same_eq" expl="VC for same_eq" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC same_eq.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="63"/></proof> + </goal> + <goal name="VC same_eq.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="9"/></proof> + </goal> + <goal name="VC same_eq.2" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC same_eq.3" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC same_eq.4" expl="exceptional postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + </transf> + </goal> + <goal name="VC same_eq.5" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC same_eq.6" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC norm_context" expl="VC for norm_context" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC norm_context.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC norm_context.1" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC norm_context.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC norm_context.3" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC norm_context.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC print_lc" expl="VC for print_lc" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="46"/></proof> + </goal> + <goal name="VC check_combination" expl="VC for check_combination" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC check_combination.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC check_combination.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC check_combination.2" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="43"/></proof> + </goal> + <goal name="VC check_combination.3" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="25"/></proof> + </goal> + <goal name="VC check_combination.4" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="68"/></proof> + </goal> + <goal name="VC check_combination.5" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="87"/></proof> + </goal> + <goal name="VC check_combination.6" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC check_combination.7" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC check_combination.7.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="25"/></proof> + </goal> + <goal name="VC check_combination.7.1" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="64"/></proof> + </goal> + <goal name="VC check_combination.7.2" expl="VC for check_combination" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="78"/></proof> + </goal> + </transf> + </goal> + <goal name="VC check_combination.8" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="43"/></proof> + </goal> + <goal name="VC check_combination.9" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="14"/></proof> + </goal> + <goal name="VC check_combination.10" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="68"/></proof> + </goal> + <goal name="VC check_combination.11" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="87"/></proof> + </goal> + <goal name="VC check_combination.12" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC check_combination.13" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC check_combination.14" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC check_combination.15" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC check_combination.16" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC check_combination.17" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="10"/></proof> + </goal> + <goal name="VC check_combination.18" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="1.88"/></proof> + </goal> + <goal name="VC check_combination.19" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC check_combination.20" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC check_combination.21" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC check_combination.22" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC transpose" expl="VC for transpose" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC swap_rows" expl="VC for swap_rows" proved="true"> + <proof prover="2"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC mul_row" expl="VC for mul_row" proved="true"> + <proof prover="0"><result status="valid" time="0.00" steps="430"/></proof> + </goal> + <goal name="VC addmul_row" expl="VC for addmul_row" proved="true"> + <proof prover="0"><result status="valid" time="0.14" steps="843"/></proof> + </goal> + <goal name="VC gauss_jordan" expl="VC for gauss_jordan" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC gauss_jordan.0" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.02" steps="19"/></proof> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC gauss_jordan.1" expl="integer overflow" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="22"/></proof> + </goal> + <goal name="VC gauss_jordan.2" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="21"/></proof> + </goal> + <goal name="VC gauss_jordan.3" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="21"/></proof> + </goal> + <goal name="VC gauss_jordan.4" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="23"/></proof> + </goal> + <goal name="VC gauss_jordan.5" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="58"/></proof> + </goal> + <goal name="VC gauss_jordan.6" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="28"/></proof> + </goal> + <goal name="VC gauss_jordan.7" expl="array creation size" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.8" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.9" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.10" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC gauss_jordan.11" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.12" expl="loop invariant init" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="19"/></proof> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.13" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.14" expl="precondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="25"/></proof> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC gauss_jordan.15" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="27"/></proof> + </goal> + <goal name="VC gauss_jordan.16" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.17" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="31"/></proof> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC gauss_jordan.18" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="34"/></proof> + </goal> + <goal name="VC gauss_jordan.19" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="34"/></proof> + </goal> + <goal name="VC gauss_jordan.20" expl="precondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="34"/></proof> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC gauss_jordan.21" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.22" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="41"/></proof> + </goal> + <goal name="VC gauss_jordan.23" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC gauss_jordan.24" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="49"/></proof> + <proof prover="2"><result status="valid" time="0.66"/></proof> + </goal> + <goal name="VC gauss_jordan.25" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="51"/></proof> + </goal> + <goal name="VC gauss_jordan.26" expl="exceptional postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.00" steps="12"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC gauss_jordan.27" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC gauss_jordan.27.0" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC gauss_jordan.27.0.0" expl="VC for gauss_jordan" proved="true"> + <proof prover="1"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC gauss_jordan.27.0.1" expl="VC for gauss_jordan" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC gauss_jordan.27.0.2" expl="VC for gauss_jordan" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC gauss_jordan.27.0.3" expl="VC for gauss_jordan" proved="true"> + <transf name="revert" proved="true" arg1="H"> + <goal name="VC gauss_jordan.27.0.3.0" expl="VC for gauss_jordan" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC gauss_jordan.27.0.3.0.0" expl="VC for gauss_jordan" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="548"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC gauss_jordan.27.0.4" expl="VC for gauss_jordan" proved="true"> + <proof prover="1"><result status="valid" time="0.15"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC gauss_jordan.28" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="44"/></proof> + </goal> + <goal name="VC gauss_jordan.29" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.81"/></proof> + </goal> + <goal name="VC gauss_jordan.30" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="56"/></proof> + </goal> + <goal name="VC gauss_jordan.31" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.41"/></proof> + </goal> + <goal name="VC gauss_jordan.32" expl="out of loop bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="41"/></proof> + </goal> + <goal name="VC gauss_jordan.33" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC gauss_jordan.34" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="47"/></proof> + <proof prover="2"><result status="valid" time="0.61"/></proof> + </goal> + <goal name="VC gauss_jordan.35" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="49"/></proof> + </goal> + <goal name="VC gauss_jordan.36" expl="exceptional postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="12"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC gauss_jordan.37" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC gauss_jordan.37.0" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC gauss_jordan.37.1" expl="VC for gauss_jordan" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC gauss_jordan.37.2" expl="VC for gauss_jordan" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC gauss_jordan.37.3" expl="VC for gauss_jordan" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="538"/></proof> + </goal> + <goal name="VC gauss_jordan.37.4" expl="VC for gauss_jordan" proved="true"> + <proof prover="1"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + <goal name="VC gauss_jordan.38" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="42"/></proof> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.39" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.45"/></proof> + </goal> + <goal name="VC gauss_jordan.40" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="54"/></proof> + </goal> + <goal name="VC gauss_jordan.41" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC gauss_jordan.42" expl="out of loop bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="39"/></proof> + </goal> + <goal name="VC gauss_jordan.43" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC gauss_jordan.44" expl="exceptional postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="12"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC gauss_jordan.45" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC gauss_jordan.45.0" expl="VC for gauss_jordan" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC gauss_jordan.45.1" expl="VC for gauss_jordan" proved="true"> + <transf name="revert" proved="true" arg1="H"> + <goal name="VC gauss_jordan.45.1.0" expl="VC for gauss_jordan" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC gauss_jordan.45.1.0.0" expl="VC for gauss_jordan" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC gauss_jordan.45.2" expl="VC for gauss_jordan" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC gauss_jordan.46" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="28"/></proof> + </goal> + <goal name="VC gauss_jordan.47" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC gauss_jordan.48" expl="loop invariant preservation" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC gauss_jordan.48.0" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC gauss_jordan.49" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC gauss_jordan.50" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.51" expl="array creation size" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="23"/></proof> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.52" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC gauss_jordan.53" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="31"/></proof> + </goal> + <goal name="VC gauss_jordan.54" expl="index in array bounds" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC gauss_jordan.55" expl="index in array bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="61"/></proof> + <proof prover="2"><result status="valid" time="0.41"/></proof> + </goal> + <goal name="VC gauss_jordan.56" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gauss_jordan.57" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="24"/></proof> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC gauss_jordan.58" expl="out of loop bounds" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="17"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC to_list" expl="VC for to_list" proved="true"> + <proof prover="2"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC linear_decision" expl="VC for linear_decision" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC linear_decision.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.2" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.3" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.4" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.5" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.6" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC linear_decision.7" expl="precondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="97"/></proof> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC linear_decision.8" expl="array creation size" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC linear_decision.9" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.10" expl="array creation size" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC linear_decision.11" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.12" expl="integer overflow" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="190"/></proof> + </goal> + <goal name="VC linear_decision.13" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="213"/></proof> + </goal> + <goal name="VC linear_decision.14" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="213"/></proof> + </goal> + <goal name="VC linear_decision.15" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.16" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC linear_decision.17" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="32"/></proof> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC linear_decision.18" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="82"/></proof> + </goal> + <goal name="VC linear_decision.19" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.39"/></proof> + </goal> + <goal name="VC linear_decision.20" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="32"/></proof> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC linear_decision.21" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="82"/></proof> + </goal> + <goal name="VC linear_decision.22" expl="exceptional postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="10"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.23" expl="exceptional postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="10"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.24" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.25" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.26" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC linear_decision.27" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="34"/></proof> + </goal> + <goal name="VC linear_decision.28" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="34"/></proof> + </goal> + <goal name="VC linear_decision.29" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="36"/></proof> + </goal> + <goal name="VC linear_decision.30" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="92"/></proof> + </goal> + <goal name="VC linear_decision.31" expl="integer overflow" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="37"/></proof> + </goal> + <goal name="VC linear_decision.32" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="37"/></proof> + </goal> + <goal name="VC linear_decision.33" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="94"/></proof> + </goal> + <goal name="VC linear_decision.34" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="42"/></proof> + </goal> + <goal name="VC linear_decision.35" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="39"/></proof> + </goal> + <goal name="VC linear_decision.36" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.37" expl="integer overflow" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC linear_decision.38" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC linear_decision.39" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="94"/></proof> + </goal> + <goal name="VC linear_decision.40" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="42"/></proof> + </goal> + <goal name="VC linear_decision.41" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="39"/></proof> + </goal> + <goal name="VC linear_decision.42" expl="exceptional postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="10"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.43" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.44" expl="integer overflow" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="35"/></proof> + </goal> + <goal name="VC linear_decision.45" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="35"/></proof> + </goal> + <goal name="VC linear_decision.46" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="90"/></proof> + </goal> + <goal name="VC linear_decision.47" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="40"/></proof> + </goal> + <goal name="VC linear_decision.48" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC linear_decision.49" expl="exceptional postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="10"/></proof> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.50" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="34"/></proof> + </goal> + <goal name="VC linear_decision.51" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="88"/></proof> + </goal> + <goal name="VC linear_decision.52" expl="integer overflow" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="35"/></proof> + </goal> + <goal name="VC linear_decision.53" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="35"/></proof> + </goal> + <goal name="VC linear_decision.54" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="90"/></proof> + </goal> + <goal name="VC linear_decision.55" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="40"/></proof> + </goal> + <goal name="VC linear_decision.56" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC linear_decision.57" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.58" expl="integer overflow" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="35"/></proof> + </goal> + <goal name="VC linear_decision.59" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="35"/></proof> + </goal> + <goal name="VC linear_decision.60" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="90"/></proof> + </goal> + <goal name="VC linear_decision.61" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="40"/></proof> + </goal> + <goal name="VC linear_decision.62" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC linear_decision.63" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.64" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.65" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC linear_decision.66" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="34"/></proof> + </goal> + <goal name="VC linear_decision.67" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="89"/></proof> + </goal> + <goal name="VC linear_decision.68" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="39"/></proof> + </goal> + <goal name="VC linear_decision.69" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC linear_decision.70" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.71" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.72" expl="integer overflow" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="178"/></proof> + </goal> + <goal name="VC linear_decision.73" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="461"/></proof> + </goal> + <goal name="VC linear_decision.74" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="461"/></proof> + </goal> + <goal name="VC linear_decision.75" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.76" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.48"/></proof> + </goal> + <goal name="VC linear_decision.77" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="76"/></proof> + </goal> + <goal name="VC linear_decision.78" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC linear_decision.79" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="76"/></proof> + </goal> + <goal name="VC linear_decision.80" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.81" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC linear_decision.82" expl="exceptional postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="10"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.83" expl="exceptional postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="10"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.84" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.85" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.86" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.87" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="91"/></proof> + </goal> + <goal name="VC linear_decision.88" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC linear_decision.89" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.90" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC linear_decision.91" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="103"/></proof> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC linear_decision.92" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC linear_decision.93" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC linear_decision.94" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.95" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="43"/></proof> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC linear_decision.96" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.97" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.01" steps="10"/></proof> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.98" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.99" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC linear_decision.100" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.101" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC linear_decision.102" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC valid_expr'" expl="VC for valid_expr'" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC valid_eq'" expl="VC for valid_eq'" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC valid_ctx'" expl="VC for valid_ctx'" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp" expl="VC for simp" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC simp.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="12"/></proof> + </goal> + <goal name="VC simp.1" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC simp.2" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="38"/></proof> + </goal> + <goal name="VC simp.3" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="14"/></proof> + </goal> + <goal name="VC simp.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.5" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.6" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.7" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC simp.8" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC simp.9" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="21"/></proof> + </goal> + <goal name="VC simp.10" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC simp.11" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.12" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.13" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.31"/></proof> + </goal> + <goal name="VC simp.14" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.35"/></proof> + </goal> + <goal name="VC simp.15" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="22"/></proof> + </goal> + <goal name="VC simp.16" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC simp.17" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.18" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.19" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="43"/></proof> + </goal> + <goal name="VC simp.20" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC simp.21" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="12"/></proof> + </goal> + <goal name="VC simp.22" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC simp.23" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="142"/></proof> + </goal> + <goal name="VC simp.24" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="16"/></proof> + </goal> + <goal name="VC simp.25" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="34"/></proof> + </goal> + <goal name="VC simp.26" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.27" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.28" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.29" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="142"/></proof> + </goal> + <goal name="VC simp.30" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="16"/></proof> + </goal> + <goal name="VC simp.31" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="34"/></proof> + </goal> + <goal name="VC simp.32" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.33" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC simp.34" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC simp_eq" expl="VC for simp_eq" proved="true"> + <proof prover="2"><result status="valid" time="0.57"/></proof> + </goal> + <goal name="VC simp_ctx" expl="VC for simp_ctx" proved="true"> + <proof prover="0"><result status="valid" time="0.51" steps="1700"/></proof> + </goal> + <goal name="VC decision" expl="VC for decision" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC decision.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decision.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decision.2" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC decision.3" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC decision.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decision.5" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decision.6" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> +</theory> +<theory name="RationalCoeffs" proved="true"> + <goal name="VC rzero" expl="VC for rzero" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rone" expl="VC for rone" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prod_compat_eq" expl="VC for prod_compat_eq" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC cross_d" expl="VC for cross_d" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC cross_d.0" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC cross_d.0.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.90"/></proof> + </goal> + <goal name="VC cross_d.0.1" expl="VC for cross_d" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC cross_d.0.1.0" expl="VC for cross_d" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_eq" arg2="with" arg3="d"> + <goal name="VC cross_d.0.1.0.0" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC cross_d.0.1.0.1" proved="true"> + <proof prover="2"><result status="valid" time="0.32"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC cross_d.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.00"/></proof> + </goal> + </transf> + </goal> + <goal name="VC cross_ind" expl="VC for cross_ind" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC cross_ind.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC cross_ind.1" expl="assertion" proved="true"> + <proof prover="3" timelimit="10"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC cross_ind.2" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC cross_ind.2.0" expl="VC for cross_ind" proved="true"> + <proof prover="3" timelimit="10"><result status="valid" time="3.88"/></proof> + </goal> + <goal name="VC cross_ind.2.1" expl="VC for cross_ind" proved="true"> + <proof prover="0"><result status="valid" time="0.00" steps="8"/></proof> + </goal> + <goal name="VC cross_ind.2.2" expl="VC for cross_ind" proved="true"> + <proof prover="3" timelimit="10"><result status="valid" time="3.58"/></proof> + </goal> + <goal name="VC cross_ind.2.3" expl="VC for cross_ind" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC cross_ind.3" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC cross_ind.4" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="13"/></proof> + </goal> + </transf> + </goal> + <goal name="cross" proved="true"> + <proof prover="0"><result status="valid" time="0.00" steps="11"/></proof> + </goal> + <goal name="VC gcd" expl="VC for gcd" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + <transf name="split_goal_right" proved="true" > + <goal name="VC gcd.0" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gcd.1" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC gcd.2" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC gcd.3" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gcd.4" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gcd.5" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gcd.6" expl="loop variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC gcd.7" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gcd.8" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gcd.9" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gcd.10" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC gcd.11" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC simp" expl="VC for simp" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC simp.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC simp.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC simp.2" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC simp.3" expl="assertion" proved="true"> + <proof prover="1"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC simp.4" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.00" steps="8"/></proof> + </goal> + <goal name="VC simp.5" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC simp.5.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC simp.5.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC simp.5.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC radd" expl="VC for radd" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC radd.0" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC radd.1" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC radd.1.0" expl="assertion" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC radd.1.0.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + </transf> + </goal> + <goal name="VC radd.1.1" expl="VC for radd" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC radd.1.1.0" expl="VC for radd" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC radd.1.1.0.0" expl="VC for radd" proved="true"> + <transf name="replace" proved="true" arg1="(from_int a1 * from_int b1)" arg2="(from_int b1 * from_int a1)"> + <goal name="VC radd.1.1.0.0.0" expl="VC for radd" proved="true"> + <transf name="cut" proved="true" arg1="(inv1 (from_int b1) * from_int b1 = one)"> + <goal name="VC radd.1.1.0.0.0.0" expl="VC for radd" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="7"/></proof> + </goal> + <goal name="VC radd.1.1.0.0.0.1" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC radd.1.1.0.0.1" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC radd.1.2" expl="VC for radd" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC radd.1.3" expl="VC for radd" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC radd.1.3.0" expl="VC for radd" proved="true"> + <proof prover="3" timelimit="10"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC radd.1.4" expl="VC for radd" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC radd.1.4.0" expl="VC for radd" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_eq" arg2="with" arg3="d"> + <goal name="VC radd.1.4.0.0" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC radd.1.4.0.1" proved="true"> + <proof prover="0"><result status="valid" time="0.05" steps="23"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC radd.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rmul" expl="VC for rmul" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rmul.0" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rmul.1" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rmul.1.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="6"/></proof> + </goal> + <goal name="VC rmul.1.1" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC rmul.1.2" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.70" steps="108"/></proof> + </goal> + <goal name="VC rmul.1.3" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="6"/></proof> + </goal> + <goal name="VC rmul.1.4" expl="VC for rmul" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rmul.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC ropp" expl="VC for ropp" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC ropp.0" expl="VC for ropp" proved="true"> + <proof prover="0"><result status="valid" time="0.00" steps="6"/></proof> + </goal> + </transf> + </goal> + <goal name="VC req" expl="VC for req" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC req.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC req.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC req.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rinv" expl="VC for rinv" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rinv.0" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC rinv.1" expl="postcondition" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC rinv.1.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rinv.2" expl="postcondition" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC rinv.2.0" expl="postcondition" proved="true"> + <proof prover="3" timelimit="10"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC is_zero" expl="VC for is_zero" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC is_zero.0" expl="postcondition" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC is_zero.0.0" expl="VC for is_zero" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC is_zero.0.0.0" expl="VC for is_zero" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC is_zero.0.0.0.0" expl="VC for is_zero" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC is_zero.0.1" expl="VC for is_zero" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC is_zero.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> +</theory> +<theory name="LinearDecisionRational" proved="true"> + <goal name="C.A.Assoc" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Unit_def_l" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Unit_def_r" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Inv_def_l" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Inv_def_r" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Comm" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.MulAssoc.Assoc" proved="true"> + <proof prover="2"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="C.A.Mul_distr_l" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Mul_distr_r" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.MulComm.Comm" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Unitary" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.NonTrivialRing" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.ZeroLessOne" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.CompatOrderAdd" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.CompatOrderMult" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.sub_def" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC czero" expl="VC for czero" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC cone" expl="VC for cone" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.zero_def" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="C.one_def" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="one_def.0" proved="true"> + <transf name="replace" proved="true" arg1="one" arg2="1.0"> + <goal name="one_def.0.0" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="one_def.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="C.VC add" expl="VC for add" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="C.VC mul" expl="VC for mul" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC opp" expl="VC for opp" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC eq" expl="VC for eq" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC inv" expl="VC for inv" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> +</theory> +<theory name="LinearDecisionInt" proved="true"> + <goal name="VC izero" expl="VC for izero" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC ione" expl="VC for ione" proved="true"> + <proof prover="2"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC ieq" expl="VC for ieq" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC iadd" expl="VC for iadd" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC imul" expl="VC for imul" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC iopp" expl="VC for iopp" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC iinv" expl="VC for iinv" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Assoc" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Unit_def_l" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Unit_def_r" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Inv_def_l" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Inv_def_r" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Comm" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.MulAssoc.Assoc" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Mul_distr_l" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Mul_distr_r" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.MulComm.Comm" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Unitary" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.NonTrivialRing" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.ZeroLessOne" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.CompatOrderAdd" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.CompatOrderMult" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.sub_def" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC czero" expl="VC for czero" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC cone" expl="VC for cone" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.zero_def" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="C.one_def" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC add" expl="VC for add" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC mul" expl="VC for mul" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC opp" expl="VC for opp" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC eq" expl="VC for eq" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC inv" expl="VC for inv" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC m_y" expl="VC for m_y" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC m" expl="VC for m" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="114"/></proof> + </goal> + <goal name="VC m_cprod" expl="VC for m_cprod" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="201"/></proof> + </goal> + <goal name="VC m_expr" expl="VC for m_expr" proved="true"> + <proof prover="0"><result status="valid" time="0.69" steps="2866"/></proof> + </goal> + <goal name="VC m_eq" expl="VC for m_eq" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="169"/></proof> + </goal> + <goal name="VC m_ctx" expl="VC for m_ctx" proved="true"> + <proof prover="0"><result status="valid" time="0.31" steps="938"/></proof> + </goal> + <goal name="VC int_decision" expl="VC for int_decision" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC int_decision.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC int_decision.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC int_decision.2" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC int_decision.3" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC int_decision.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC int_decision.5" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC int_decision.6" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> +</theory> +<theory name="Test" proved="true"> + <goal name="g" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="g.0" proved="true"> + <transf name="reflection_f" proved="true" arg1="decision"> + <goal name="g.0.0" expl="reification check" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> +</theory> +<theory name="TestInt" proved="true"> + <goal name="g" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="g.0" proved="true"> + <transf name="reflection_f" proved="true" arg1="int_decision"> + <goal name="g.0.0" expl="reification check" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> +</theory> +<theory name="MP64Coeffs" proved="true"> + <goal name="VC mzero" expl="VC for mzero" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mone" expl="VC for mone" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="qinterp_def" proved="true"> + <transf name="compute_in_goal" proved="true" > + </transf> + </goal> + <goal name="VC opp_exp" expl="VC for opp_exp" proved="true"> + <proof prover="0"><result status="valid" time="0.05" steps="182"/></proof> + </goal> + <goal name="VC add_sub_exp" expl="VC for add_sub_exp" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_sub_exp.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="35"/></proof> + </goal> + <goal name="VC add_sub_exp.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="22"/></proof> + </goal> + <goal name="VC add_sub_exp.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="22"/></proof> + </goal> + <goal name="VC add_sub_exp.3" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.4" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="337"/></proof> + </goal> + <goal name="VC add_sub_exp.5" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.6" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="61"/></proof> + </goal> + <goal name="VC add_sub_exp.7" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.8" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.9" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.10" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="344"/></proof> + </goal> + <goal name="VC add_sub_exp.11" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC add_sub_exp.12" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="119"/></proof> + </goal> + <goal name="VC add_sub_exp.13" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.14" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.15" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="49"/></proof> + </goal> + <goal name="VC add_sub_exp.16" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="47"/></proof> + </goal> + <goal name="VC add_sub_exp.17" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.18" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="39"/></proof> + </goal> + <goal name="VC add_sub_exp.19" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.20" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="341"/></proof> + </goal> + <goal name="VC add_sub_exp.21" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.22" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="61"/></proof> + </goal> + <goal name="VC add_sub_exp.23" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.24" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.25" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.26" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_sub_exp.26.0" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_sub_exp.26.0.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="37"/></proof> + </goal> + <goal name="VC add_sub_exp.26.0.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC add_sub_exp.26.0.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="102"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_sub_exp.26.1" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_sub_exp.26.1.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="34"/></proof> + </goal> + <goal name="VC add_sub_exp.26.1.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC add_sub_exp.26.1.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add_sub_exp.27" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.28" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="119"/></proof> + </goal> + <goal name="VC add_sub_exp.29" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.30" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.31" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="29"/></proof> + </goal> + <goal name="VC add_sub_exp.32" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="49"/></proof> + </goal> + <goal name="VC add_sub_exp.33" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="52"/></proof> + </goal> + <goal name="VC add_sub_exp.34" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="18"/></proof> + </goal> + <goal name="VC add_sub_exp.35" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.36" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="386"/></proof> + </goal> + <goal name="VC add_sub_exp.37" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.38" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="67"/></proof> + </goal> + <goal name="VC add_sub_exp.39" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.40" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_sub_exp.41" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.42" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.05" steps="393"/></proof> + </goal> + <goal name="VC add_sub_exp.43" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.44" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="132"/></proof> + </goal> + <goal name="VC add_sub_exp.45" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.46" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.47" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="29"/></proof> + </goal> + <goal name="VC add_sub_exp.48" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="17"/></proof> + </goal> + <goal name="VC add_sub_exp.49" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.50" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.20" steps="1600"/></proof> + </goal> + <goal name="VC add_sub_exp.51" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.52" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="148"/></proof> + </goal> + <goal name="VC add_sub_exp.53" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.54" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.55" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.56" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.19" steps="1703"/></proof> + </goal> + <goal name="VC add_sub_exp.57" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.58" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="418"/></proof> + </goal> + <goal name="VC add_sub_exp.59" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.60" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_sub_exp.61" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_sub_exp.62" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.63" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="333"/></proof> + </goal> + <goal name="VC add_sub_exp.64" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.65" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="94"/></proof> + </goal> + <goal name="VC add_sub_exp.66" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC add_sub_exp.67" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.68" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.69" expl="postcondition" proved="true"> + <transf name="eliminate_if" proved="true" > + <goal name="VC add_sub_exp.69.0" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_sub_exp.69.0.0" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_sub_exp.69.0.0.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC add_sub_exp.69.0.0.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="17"/></proof> + </goal> + <goal name="VC add_sub_exp.69.0.0.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="15"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_sub_exp.69.0.1" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_sub_exp.69.0.1.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="19"/></proof> + </goal> + <goal name="VC add_sub_exp.69.0.1.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="17"/></proof> + </goal> + <goal name="VC add_sub_exp.69.0.1.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="15"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC add_sub_exp.70" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.71" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.05" steps="206"/></proof> + </goal> + <goal name="VC add_sub_exp.72" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.73" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.74" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.75" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.76" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="36"/></proof> + </goal> + <goal name="VC add_sub_exp.77" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.78" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="18"/></proof> + </goal> + <goal name="VC add_sub_exp.79" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC add_sub_exp.80" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.81" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="16"/></proof> + </goal> + <goal name="VC add_sub_exp.82" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.83" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.84" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.85" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="36"/></proof> + </goal> + <goal name="VC add_sub_exp.86" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.87" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="18"/></proof> + </goal> + <goal name="VC add_sub_exp.88" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.89" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC add_sub_exp.90" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="16"/></proof> + </goal> + <goal name="VC add_sub_exp.91" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.92" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC add_sub_exp.93" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC add_sub_exp.94" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC add_exp" expl="VC for add_exp" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + <transf name="split_goal_right" proved="true" > + <goal name="VC add_exp.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="7"/></proof> + </goal> + <goal name="VC add_exp.1" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC zero_exp" expl="VC for zero_exp" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC zero_exp.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC zero_exp.1" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC zero_exp.2" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC zero_exp.3" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero_exp.4" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero_exp.5" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="46"/></proof> + </goal> + <goal name="VC zero_exp.6" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="9"/></proof> + </goal> + <goal name="VC zero_exp.7" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC same_exp" expl="VC for same_exp" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC same_exp.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="9"/></proof> + </goal> + <goal name="VC same_exp.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC same_exp.2" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC same_exp.3" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC same_exp.4" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC same_exp.5" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC same_exp.6" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC same_exp.7" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC same_exp.8" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC same_exp.9" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="12"/></proof> + </goal> + <goal name="VC same_exp.10" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC same_exp.11" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC same_exp.12" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC same_exp.13" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC same_exp.14" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC same_exp.15" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC same_exp.16" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC madd" expl="VC for madd" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC madd.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.64" steps="161"/></proof> + </goal> + <goal name="VC madd.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC madd.2" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC madd.2.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC madd.2.1" expl="assertion" proved="true"> + <proof prover="3" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC madd.2.2" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC madd.2.3" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="14"/></proof> + </goal> + <goal name="VC madd.2.4" expl="VC for madd" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC madd.3" expl="postcondition" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC madd.3.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC madd.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC madd.5" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC madd.6" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mmul" expl="VC for mmul" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mmul.0" expl="postcondition" proved="true"> + <proof prover="3" timelimit="10"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC mmul.1" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mmul.1.0" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mmul.1.1" expl="VC for mmul" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="13"/></proof> + </goal> + <goal name="VC mmul.1.2" expl="VC for mmul" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="12"/></proof> + </goal> + <goal name="VC mmul.1.3" expl="VC for mmul" proved="true"> + <proof prover="3" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mmul.1.4" expl="VC for mmul" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="9"/></proof> + </goal> + <goal name="VC mmul.1.5" expl="VC for mmul" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="12"/></proof> + </goal> + <goal name="VC mmul.1.6" expl="VC for mmul" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mmul.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mmul.3" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mmul.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mopp" expl="VC for mopp" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC mopp.0" expl="VC for mopp" proved="true"> + <proof prover="0"><result status="valid" time="0.03" steps="10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC pure_same_exp" expl="VC for pure_same_exp" proved="true"> + <proof prover="0"><result status="valid" time="0.24" steps="756"/></proof> + </goal> + <goal name="VC meq" expl="VC for meq" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC meq.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.67" steps="226"/></proof> + </goal> + <goal name="VC meq.1" expl="postcondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC meq.1.0" expl="postcondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC meq.1.0.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC minv" expl="VC for minv" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC minv.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC minv.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC minv.2" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> +</theory> +<theory name="LinearDecisionRationalMP" proved="true"> + <goal name="C.A.Assoc" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Unit_def_l" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Unit_def_r" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Inv_def_l" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Inv_def_r" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Comm" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.MulAssoc.Assoc" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Mul_distr_l" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Mul_distr_r" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.MulComm.Comm" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Unitary" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.NonTrivialRing" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.ZeroLessOne" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.CompatOrderAdd" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.CompatOrderMult" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.sub_def" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC czero" expl="VC for czero" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC cone" expl="VC for cone" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.zero_def" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.one_def" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="17"/></proof> + </goal> + <goal name="C.VC add" expl="VC for add" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC mul" expl="VC for mul" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC opp" expl="VC for opp" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC eq" expl="VC for eq" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC inv" expl="VC for inv" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> +</theory> +<theory name="LinearDecisionIntMP" proved="true"> + <goal name="VC mpzero" expl="VC for mpzero" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mpone" expl="VC for mpone" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mpadd" expl="VC for mpadd" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mpmul" expl="VC for mpmul" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mpopp" expl="VC for mpopp" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mpeq" expl="VC for mpeq" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC mpinv" expl="VC for mpinv" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Assoc" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.Unit_def_l" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Unit_def_r" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Inv_def_l" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Inv_def_r" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Comm" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.MulAssoc.Assoc" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Mul_distr_l" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Mul_distr_r" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.MulComm.Comm" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.Unitary" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.NonTrivialRing" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.A.ZeroLessOne" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.CompatOrderAdd" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.A.CompatOrderMult" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.sub_def" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="C.VC czero" expl="VC for czero" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC cone" expl="VC for cone" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.zero_def" proved="true"> + <transf name="compute_in_goal" proved="true" > + </transf> + </goal> + <goal name="C.one_def" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="11"/></proof> + </goal> + <goal name="C.VC add" expl="VC for add" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC mul" expl="VC for mul" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC opp" expl="VC for opp" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC eq" expl="VC for eq" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="C.VC inv" expl="VC for inv" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC m" expl="VC for m" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC m.0" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC m.0.0" expl="postcondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC m.0.0.0" expl="postcondition" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC m.0.0.0.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="81"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC m.1" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC m.1.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="116"/></proof> + </goal> + </transf> + </goal> + <goal name="VC m.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="118"/></proof> + </goal> + </transf> + </goal> + <goal name="VC m_y" expl="VC for m_y" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC m_cprod" expl="VC for m_cprod" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC m_cprod.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="61"/></proof> + </goal> + <goal name="VC m_cprod.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="67"/></proof> + </goal> + </transf> + </goal> + <goal name="VC m_expr" expl="VC for m_expr" proved="true"> + <proof prover="0"><result status="valid" time="0.30" steps="1321"/></proof> + </goal> + <goal name="VC m_eq" expl="VC for m_eq" proved="true"> + <proof prover="1"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC m_ctx" expl="VC for m_ctx" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="719"/></proof> + </goal> + <goal name="VC mp_decision" expl="VC for mp_decision" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC mp_decision.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mp_decision.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mp_decision.2" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC mp_decision.3" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC mp_decision.4" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mp_decision.5" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mp_decision.6" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> +</theory> +<theory name="EqPropMP" proved="true"> + <goal name="VC expr_bound'" expl="VC for expr_bound'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC expr_bound'.0" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="200"/></proof> + </goal> + <goal name="VC expr_bound'.1" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="201"/></proof> + </goal> + <goal name="VC expr_bound'.2" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="200"/></proof> + </goal> + <goal name="VC expr_bound'.3" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="201"/></proof> + </goal> + <goal name="VC expr_bound'.4" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="200"/></proof> + </goal> + <goal name="VC expr_bound'.5" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="200"/></proof> + </goal> + </transf> + </goal> + <goal name="VC eq_bound'" expl="VC for eq_bound'" proved="true"> + <transf name="split_goal_right" proved="true" > + </transf> + </goal> + <goal name="VC ctx_bound'" expl="VC for ctx_bound'" proved="true"> + <transf name="split_goal_right" proved="true" > + </transf> + </goal> + <goal name="VC expr_bound_w'" expl="VC for expr_bound_w'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC expr_bound_w'.0" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="213"/></proof> + </goal> + <goal name="VC expr_bound_w'.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC expr_bound_w'.2" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.05" steps="51"/></proof> + </goal> + <goal name="VC expr_bound_w'.3" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="214"/></proof> + </goal> + <goal name="VC expr_bound_w'.4" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC expr_bound_w'.5" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="52"/></proof> + </goal> + <goal name="VC expr_bound_w'.6" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="213"/></proof> + </goal> + <goal name="VC expr_bound_w'.7" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC expr_bound_w'.8" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="51"/></proof> + </goal> + <goal name="VC expr_bound_w'.9" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="214"/></proof> + </goal> + <goal name="VC expr_bound_w'.10" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC expr_bound_w'.11" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="52"/></proof> + </goal> + <goal name="VC expr_bound_w'.12" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="208"/></proof> + </goal> + <goal name="VC expr_bound_w'.13" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC expr_bound_w'.14" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="51"/></proof> + </goal> + <goal name="VC expr_bound_w'.15" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="208"/></proof> + </goal> + <goal name="VC expr_bound_w'.16" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC expr_bound_w'.17" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="51"/></proof> + </goal> + <goal name="VC expr_bound_w'.18" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.11" steps="337"/></proof> + </goal> + </transf> + </goal> + <goal name="eq_bound_w'" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="112"/></proof> + </goal> + <goal name="VC ctx_bound_w'" expl="VC for ctx_bound_w'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC ctx_bound_w'.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC ctx_bound_w'.1" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="52"/></proof> + </goal> + <goal name="VC ctx_bound_w'.2" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC ctx_bound_w'.3" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="106"/></proof> + </goal> + </transf> + </goal> + <goal name="VC max_var'" expl="VC for max_var'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC max_var'.0" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="211"/></proof> + </goal> + <goal name="VC max_var'.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC max_var'.2" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="213"/></proof> + </goal> + <goal name="VC max_var'.3" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC max_var'.4" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="211"/></proof> + </goal> + <goal name="VC max_var'.5" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC max_var'.6" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="213"/></proof> + </goal> + <goal name="VC max_var'.7" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC max_var'.8" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="206"/></proof> + </goal> + <goal name="VC max_var'.9" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC max_var'.10" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="206"/></proof> + </goal> + <goal name="VC max_var'.11" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC max_var'.12" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="170"/></proof> + </goal> + <goal name="VC max_var'.13" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.15" steps="430"/></proof> + </goal> + </transf> + </goal> + <goal name="VC max_var_e'" expl="VC for max_var_e'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC max_var_e'.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC max_var_e'.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC max_var_e'.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC max_var_e'.3" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="107"/></proof> + </goal> + </transf> + </goal> + <goal name="VC max_var_ctx'" expl="VC for max_var_ctx'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC max_var_ctx'.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC max_var_ctx'.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC max_var_ctx'.2" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC max_var_ctx'.3" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="63"/></proof> + </goal> + <goal name="VC max_var_ctx'.4" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.11" steps="166"/></proof> + </goal> + </transf> + </goal> + <goal name="VC interp_ctx_valid'" expl="VC for interp_ctx_valid'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC interp_ctx_valid'.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC interp_ctx_valid'.1" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + </transf> + </goal> + <goal name="VC interp_ctx_wr'" expl="VC for interp_ctx_wr'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC interp_ctx_wr'.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC interp_ctx_wr'.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="178"/></proof> + </goal> + </transf> + </goal> + <goal name="VC interp_ctx_wl'" expl="VC for interp_ctx_wl'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC interp_ctx_wl'.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC interp_ctx_wl'.1" expl="postcondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC interp_ctx_wl'.1.0" expl="postcondition" proved="true"> + <transf name="compute_in_goal" proved="true" > + <goal name="VC interp_ctx_wl'.1.0.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.22" steps="688"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC interp_ctx_cons'" expl="VC for interp_ctx_cons'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC interp_ctx_cons'.0" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + </transf> + </goal> + <goal name="VC holds_interp_ctx'" expl="VC for holds_interp_ctx'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC holds_interp_ctx'.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC holds_interp_ctx'.1" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="61"/></proof> + </goal> + <goal name="VC holds_interp_ctx'.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="60"/></proof> + </goal> + </transf> + </goal> + <goal name="VC interp_holds'" expl="VC for interp_holds'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC interp_holds'.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC interp_holds'.1" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="78"/></proof> + </goal> + <goal name="VC interp_holds'.2" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="54"/></proof> + </goal> + <goal name="VC interp_holds'.3" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + </transf> + </goal> + <goal name="VC impl_holds'" expl="VC for impl_holds'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC impl_holds'.0" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="75"/></proof> + </goal> + <goal name="VC impl_holds'.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC impl_holds'.2" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC impl_holds'.3" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="55"/></proof> + </goal> + <goal name="VC impl_holds'.4" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC impl_holds'.5" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC impl_holds'.6" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="89"/></proof> + </goal> + </transf> + </goal> + <goal name="VC ctx_impl'" expl="VC for ctx_impl'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC ctx_impl'.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC ctx_impl'.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC ctx_impl'.2" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC ctx_impl'.3" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC ctx_impl'.4" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC ctx_impl'.5" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC ctx_impl'.6" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.21"/></proof> + </goal> + </transf> + </goal> + <goal name="VC interp_ctx_impl'" expl="VC for interp_ctx_impl'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC interp_ctx_impl'.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC interp_ctx_impl'.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC interp_ctx_impl'.2" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + </transf> + </goal> + <goal name="VC impl_cons" expl="VC for impl_cons" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC impl_cons.0" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="30"/></proof> + </goal> + </transf> + </goal> + <goal name="VC impl_wl'" expl="VC for impl_wl'" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC impl_wl'.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC impl_wl'.1" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="52"/></proof> + </goal> + <goal name="VC impl_wl'.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="149"/></proof> + </goal> + </transf> + </goal> + <goal name="VC impl_self" expl="VC for impl_self" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC impl_self.0" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC impl_self.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC impl_self.2" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="155"/></proof> + </goal> + </transf> + </goal> + <goal name="VC prop_ctx" expl="VC for prop_ctx" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC prop_ctx.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC prop_ctx.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC prop_ctx.2" expl="array creation size" proved="true"> + <proof prover="2"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC prop_ctx.3" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.13" steps="248"/></proof> + </goal> + <goal name="VC prop_ctx.4" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.11" steps="254"/></proof> + </goal> + <goal name="VC prop_ctx.5" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.13" steps="248"/></proof> + </goal> + <goal name="VC prop_ctx.6" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.14" steps="254"/></proof> + </goal> + <goal name="VC prop_ctx.7" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.30" steps="956"/></proof> + </goal> + <goal name="VC prop_ctx.8" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.13" steps="167"/></proof> + </goal> + <goal name="VC prop_ctx.9" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.18" steps="498"/></proof> + </goal> + <goal name="VC prop_ctx.10" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.15" steps="455"/></proof> + </goal> + <goal name="VC prop_ctx.11" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.33" steps="491"/></proof> + </goal> + <goal name="VC prop_ctx.12" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.14" steps="162"/></proof> + </goal> + <goal name="VC prop_ctx.13" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.24" steps="474"/></proof> + </goal> + <goal name="VC prop_ctx.14" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.18" steps="439"/></proof> + </goal> + <goal name="VC prop_ctx.15" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="3.42" steps="4075"/></proof> + </goal> + <goal name="VC prop_ctx.16" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.11" steps="162"/></proof> + </goal> + <goal name="VC prop_ctx.17" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.20" steps="474"/></proof> + </goal> + <goal name="VC prop_ctx.18" expl="index in array bounds" proved="true"> + <proof prover="0"><result status="valid" time="0.24" steps="439"/></proof> + </goal> + <goal name="VC prop_ctx.19" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="3.17" steps="3992"/></proof> + </goal> + <goal name="VC prop_ctx.20" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.15" steps="257"/></proof> + </goal> + <goal name="VC prop_ctx.21" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.13" steps="30"/></proof> + </goal> + <goal name="VC prop_ctx.22" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC prop_ctx.23" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC prop_ctx.24" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="69"/></proof> + </goal> + <goal name="VC prop_ctx.25" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="75"/></proof> + </goal> + <goal name="VC prop_ctx.26" expl="postcondition" proved="true"> + <proof prover="0" timelimit="5" memlimit="2000"><result status="valid" time="0.10" steps="100"/></proof> + </goal> + <goal name="VC prop_ctx.27" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC prop_ctx.28" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC prop_ctx.29" expl="array creation size" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC prop_ctx.30" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC prop_ctx.31" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.32" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.33" expl="variant decrease" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC prop_ctx.33.0" expl="VC for prop_ctx" proved="true"> + <proof prover="2"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC prop_ctx.33.1" expl="VC for prop_ctx" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC prop_ctx.34" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC prop_ctx.35" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC prop_ctx.36" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC prop_ctx.37" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="1.42" steps="602"/></proof> + </goal> + <goal name="VC prop_ctx.38" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC prop_ctx.39" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.40" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.41" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC prop_ctx.42" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.82" steps="473"/></proof> + </goal> + <goal name="VC prop_ctx.43" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.44" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.45" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.46" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.20" steps="352"/></proof> + </goal> + <goal name="VC prop_ctx.47" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC prop_ctx.48" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC prop_ctx.49" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.15" steps="365"/></proof> + </goal> + <goal name="VC prop_ctx.50" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC prop_ctx.51" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC prop_ctx.52" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC prop_ctx.53" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="112"/></proof> + </goal> + <goal name="VC prop_ctx.54" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC prop_ctx.55" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC prop_ctx.56" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.57" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="352"/></proof> + </goal> + <goal name="VC prop_ctx.58" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC prop_ctx.59" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC prop_ctx.60" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.19" steps="365"/></proof> + </goal> + <goal name="VC prop_ctx.61" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC prop_ctx.62" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.33"/></proof> + </goal> + <goal name="VC prop_ctx.63" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC prop_ctx.64" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="114"/></proof> + </goal> + <goal name="VC prop_ctx.65" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.34"/></proof> + </goal> + <goal name="VC prop_ctx.66" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.67" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.68" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="347"/></proof> + </goal> + <goal name="VC prop_ctx.69" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.70" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.71" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC prop_ctx.72" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="107"/></proof> + </goal> + <goal name="VC prop_ctx.73" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC prop_ctx.74" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC prop_ctx.75" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC prop_ctx.75.0" expl="VC for prop_ctx" proved="true"> + <proof prover="0"><result status="valid" time="0.05" steps="90"/></proof> + </goal> + <goal name="VC prop_ctx.75.1" expl="VC for prop_ctx" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.75.2" expl="VC for prop_ctx" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="44"/></proof> + </goal> + <goal name="VC prop_ctx.75.3" expl="VC for prop_ctx" proved="true"> + <transf name="unfold" proved="true" arg1="numof"> + <goal name="VC prop_ctx.75.3.0" expl="VC for prop_ctx" proved="true"> + <transf name="split_all_full" proved="true" > + <goal name="VC prop_ctx.75.3.0.0" expl="VC for prop_ctx" proved="true"> + <proof prover="1" timelimit="10" memlimit="4000"><result status="valid" time="10.72"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC prop_ctx.76" expl="index in array bounds" proved="true"> + <proof prover="2"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC prop_ctx.77" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.14" steps="39"/></proof> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC prop_ctx.78" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="44"/></proof> + </goal> + <goal name="VC prop_ctx.79" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="104"/></proof> + </goal> + <goal name="VC prop_ctx.80" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC prop_ctx.81" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC prop_ctx.82" expl="index in array bounds" proved="true"> + <proof prover="2"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC prop_ctx.83" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.31" steps="445"/></proof> + </goal> + <goal name="VC prop_ctx.84" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.11" steps="158"/></proof> + </goal> + <goal name="VC prop_ctx.85" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="181"/></proof> + </goal> + <goal name="VC prop_ctx.86" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.87" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.88" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC prop_ctx.89" expl="index in array bounds" proved="true"> + <proof prover="2"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC prop_ctx.90" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC prop_ctx.91" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.92" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.93" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.94" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC prop_ctx.95" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.96" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.19" steps="154"/></proof> + </goal> + <goal name="VC prop_ctx.97" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.98" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="225"/></proof> + </goal> + <goal name="VC prop_ctx.99" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="225"/></proof> + </goal> + <goal name="VC prop_ctx.100" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="85"/></proof> + </goal> + <goal name="VC prop_ctx.101" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.102" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.103" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="225"/></proof> + </goal> + <goal name="VC prop_ctx.104" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.11" steps="225"/></proof> + </goal> + <goal name="VC prop_ctx.105" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="87"/></proof> + </goal> + <goal name="VC prop_ctx.106" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.107" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.108" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="221"/></proof> + </goal> + <goal name="VC prop_ctx.109" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="85"/></proof> + </goal> + <goal name="VC prop_ctx.110" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.111" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="40"/></proof> + <proof prover="2"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC prop_ctx.112" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.113" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="125"/></proof> + </goal> + <goal name="VC prop_ctx.114" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="98"/></proof> + </goal> + <goal name="VC prop_ctx.115" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.116" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.117" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="37"/></proof> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.118" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.18" steps="167"/></proof> + </goal> + <goal name="VC prop_ctx.119" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="91"/></proof> + </goal> + <goal name="VC prop_ctx.120" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.121" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="83"/></proof> + </goal> + <goal name="VC prop_ctx.122" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="83"/></proof> + </goal> + <goal name="VC prop_ctx.123" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.11" steps="91"/></proof> + </goal> + <goal name="VC prop_ctx.124" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.11" steps="190"/></proof> + </goal> + <goal name="VC prop_ctx.125" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.126" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.127" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC prop_ctx.128" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="39"/></proof> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC prop_ctx.129" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC prop_ctx.130" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="19"/></proof> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC prop_ctx.131" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.14" steps="293"/></proof> + </goal> + <goal name="VC prop_ctx.132" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.07" steps="77"/></proof> + </goal> + <goal name="VC prop_ctx.133" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.134" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="42"/></proof> + </goal> + <goal name="VC prop_ctx.135" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.27" steps="142"/></proof> + </goal> + <goal name="VC prop_ctx.136" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC prop_ctx.137" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="217"/></proof> + </goal> + <goal name="VC prop_ctx.138" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.139" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.140" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.14" steps="293"/></proof> + </goal> + <goal name="VC prop_ctx.141" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="77"/></proof> + </goal> + <goal name="VC prop_ctx.142" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.143" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="42"/></proof> + </goal> + <goal name="VC prop_ctx.144" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.29" steps="142"/></proof> + </goal> + <goal name="VC prop_ctx.145" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC prop_ctx.146" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="217"/></proof> + </goal> + <goal name="VC prop_ctx.147" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.148" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.149" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.11" steps="303"/></proof> + </goal> + <goal name="VC prop_ctx.150" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="77"/></proof> + </goal> + <goal name="VC prop_ctx.151" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC prop_ctx.152" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.18" steps="310"/></proof> + </goal> + <goal name="VC prop_ctx.153" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="79"/></proof> + </goal> + <goal name="VC prop_ctx.154" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC prop_ctx.155" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="44"/></proof> + </goal> + <goal name="VC prop_ctx.156" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="146"/></proof> + </goal> + <goal name="VC prop_ctx.157" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.158" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="228"/></proof> + </goal> + <goal name="VC prop_ctx.159" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.160" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC prop_ctx.161" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.13" steps="303"/></proof> + </goal> + <goal name="VC prop_ctx.162" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="77"/></proof> + </goal> + <goal name="VC prop_ctx.163" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC prop_ctx.164" expl="variant decrease" proved="true"> + <proof prover="0"><result status="valid" time="0.14" steps="310"/></proof> + </goal> + <goal name="VC prop_ctx.165" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="79"/></proof> + </goal> + <goal name="VC prop_ctx.166" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC prop_ctx.167" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="44"/></proof> + </goal> + <goal name="VC prop_ctx.168" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.14" steps="150"/></proof> + </goal> + <goal name="VC prop_ctx.169" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC prop_ctx.170" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="228"/></proof> + </goal> + <goal name="VC prop_ctx.171" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.172" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.173" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="37"/></proof> + <proof prover="2"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC prop_ctx.174" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="95"/></proof> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.175" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC prop_ctx.176" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="99"/></proof> + </goal> + <goal name="VC prop_ctx.177" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.178" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="36"/></proof> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.179" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC prop_ctx.180" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="38"/></proof> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC prop_ctx.181" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC prop_ctx.182" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC prop_ctx.183" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.31" steps="330"/></proof> + </goal> + <goal name="VC prop_ctx.184" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC prop_ctx.185" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC prop_ctx.186" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.187" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC prop_ctx.188" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.14" steps="37"/></proof> + <proof prover="2"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC prop_ctx.189" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="38"/></proof> + <proof prover="2"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC prop_ctx.190" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC prop_ctx.191" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC prop_ctx.192" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC prop_ctx.193" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="82"/></proof> + </goal> + <goal name="VC prop_ctx.194" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC prop_ctx.195" expl="variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC prop_ctx.196" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="85"/></proof> + </goal> + <goal name="VC prop_ctx.197" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="86"/></proof> + </goal> + <goal name="VC prop_ctx.198" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC prop_ctx.199" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.09" steps="48"/></proof> + </goal> + <goal name="VC prop_ctx.200" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.12" steps="141"/></proof> + </goal> + <goal name="VC prop_ctx.201" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.05" steps="52"/></proof> + </goal> + <goal name="VC prop_ctx.202" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC prop_ctx.203" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="264"/></proof> + </goal> + <goal name="VC prop_ctx.204" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.205" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.206" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC prop_ctx.207" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC prop_ctx.208" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC prop_ctx.209" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC prop_ctx.210" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC prop_ctx.211" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC prop_ctx.212" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC prop_ctx.213" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC prop_ctx.214" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_ctx.215" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC prop_ctx.216" expl="out of loop bounds" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + </transf> + </goal> + <goal name="VC prop_mp_decision" expl="VC for prop_mp_decision" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC prop_mp_decision.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC prop_mp_decision.1" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC prop_mp_decision.2" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC prop_mp_decision.3" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC prop_mp_decision.4" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC prop_mp_decision.5" expl="postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC prop_mp_decision.6" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC prop_mp_decision.7" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC prop_mp_decision.8" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC prop_mp_decision.9" expl="exceptional postcondition" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> +</theory> +<theory name="TestMP" proved="true"> + <goal name="g" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="g.0" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="g.0.0" expl="reification check" proved="true"> + <proof prover="0"><result status="valid" time="0.04" steps="53"/></proof> + </goal> + <goal name="g.0.1" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="g.0.2" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="g'" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="g'.0" proved="true"> + <transf name="reflection_f" proved="true" arg1="prop_mp_decision"> + <goal name="g'.0.0" expl="reification check" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="49"/></proof> + </goal> + <goal name="g'.0.1" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="g'.0.2" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="g'.0.3" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + </transf> + <transf name="subst" proved="true" arg1="j"> + <goal name="g'.0.0" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="g'.0.0.0" expl="reification check" proved="true"> + <proof prover="0"><result status="valid" time="0.08" steps="47"/></proof> + </goal> + <goal name="g'.0.0.1" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="g'.0.0.2" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="g''" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="g''.0" proved="true"> + <transf name="replace" proved="true" arg1="c" arg2="0"> + <goal name="g''.0.0" proved="true"> + <transf name="replace" proved="true" arg1="c" arg2="0" arg3="in" arg4="H2"> + <goal name="g''.0.0.0" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="g''.0.0.0.0" expl="reification check" proved="true"> + <proof prover="0"><result status="valid" time="0.05" steps="49"/></proof> + </goal> + <goal name="g''.0.0.0.1" proved="true"> + <proof prover="2"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="g''.0.0.0.2" proved="true"> + <proof prover="2"><result status="valid" time="0.26"/></proof> + </goal> + </transf> + </goal> + <goal name="g''.0.0.1" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="g''.0.1" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> +</theory> +<theory name="Test2"> + <goal name="g"> + <transf name="introduce_premises" > + <goal name="g.0"> + <transf name="reflection_f" arg1="int_decision"> + <goal name="g.0.0" expl="reification check" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="g.0.1"> + </goal> + </transf> + </goal> + </transf> + </goal> +</theory> +<theory name="Fmla" proved="true"> + <goal name="VC f" expl="VC for f" proved="true"> + <proof prover="2"><result status="valid" time="0.02"/></proof> + </goal> +</theory> +<theory name="TestFmla"> + <goal name="g"> + <transf name="introduce_premises" > + <goal name="g.0"> + <transf name="reflection_f" arg1="f"> + <goal name="g.0.0" expl="reification check" proved="true"> + <proof prover="2"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="g.0.1"> + </goal> + </transf> + </goal> + </transf> + </goal> +</theory> +</file> +</why3session> diff --git a/examples/multiprecision/lineardecision/why3shapes.gz b/examples/multiprecision/lineardecision/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..d69103c28b5533853f1c0ed2f1e49a28e3635a05 GIT binary patch literal 55540 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 Jb#oaD0|24Y(a`_^ literal 0 HcmV?d00001 diff --git a/examples/multiprecision/logical.mlw b/examples/multiprecision/logical.mlw new file mode 100644 index 0000000000..f13301d839 --- /dev/null +++ b/examples/multiprecision/logical.mlw @@ -0,0 +1,389 @@ +module Logical + + use import int.Int + use import mach.int.Int32 + use import mach.int.UInt64GMP as Limb + use import int.Power + use import ref.Ref + use import mach.c.C + use import array.Array + use import map.Map + use import types.Types + use import lemmas.Lemmas + use import int.EuclideanDivision + + let lemma pow2_64 () + ensures { power 2 64 = radix } + = + assert { power 2 2 = 4 }; + assert { power 2 4 = (power 2 2)*(power 2 2) }; + assert { power 2 8 = (power 2 4)*(power 2 4) }; + assert { power 2 16 = (power 2 8)*(power 2 8) }; + assert { power 2 32 = (power 2 16)*(power 2 16) }; + assert { power 2 64 = (power 2 32)*(power 2 32) = radix} + + (* is a logical lemma in ComputerDivision*) + let lemma mod_mult (x y z:int) + requires { x > 0 } + ensures { mod (x * y + z) x = mod z x } + = + () + + let lsld_ext (x cnt:limb) : (limb,limb) + requires { 0 <= cnt < Limb.length } + returns { (r,d) -> uint64'int r + radix * uint64'int d = (power 2 cnt) * x } + returns { (r,_d) -> mod (l2i r) (power 2 cnt) = 0 } + returns { (r,_d) -> l2i r <= radix - (power 2 cnt) } + returns { (_r,d) -> l2i d < power 2 cnt } + = + let uzero = Limb.of_int 0 in + if (Limb.(=) cnt uzero) then (x, uzero) + else + begin + let (r:limb,d:limb) = lsld x cnt in + let ghost p = power 2 (l2i cnt) in + let ghost q = power 2 (Limb.length - l2i cnt) in + assert { p > 0 /\ q > 0 }; + assert { radix = p * q by + radix = power 2 Limb.length = power 2 (cnt + (Limb.length - cnt)) + = p*q }; + assert { mod radix p = 0 + by mod radix p + = mod (p * q + 0) p + = mod 0 p + = 0 }; + assert { r < radix }; + mod_mult p (q*l2i d) (l2i r); + mod_mult p (l2i x) 0; + assert { mod (r) p = 0 + by + mod (r) p = mod (p * (q * d) + r) p + so p * (q * d) = radix * d + so mod (r) p = mod (radix * d + r) p + = mod (p * x) p + = mod 0 p + = 0 }; + assert { r <= radix - p + by + r = p * (div (r) p) + (mod (r) p) + = p * (div (r) p) + so + radix = p * q + so + r < radix + so (div (r) p >= q -> (r = p * div (r) p >= p*q = radix) + -> false) + so div (r) p <= q-1 + so r = p * div (r) p <= p * (q-1) = p*q - p = radix - p }; + assert { d < p + by + r + radix * d = p * x + so + radix * d <= p * x + so + x < radix /\ p > 0 + so p * x < p * radix + so radix * d < p * radix + so d < p + }; + (r,d) + end + + let clz_ext (x:limb) : int32 + requires { x > 0 } + ensures { power 2 result * x < radix } + ensures { 2 * power 2 result * x >= radix } + ensures { 0 <= result < Limb.length } + ensures { power 2 result * x <= radix - power 2 result } + = + let r = count_leading_zeros x in + let ghost p = power 2 (p2i r) in + let ghost q = power 2 (Limb.length - p2i r) in + assert { p * x <= radix - p + by + p * q = radix + so p > 0 so q > 0 + so mod radix p = mod (q * p) p = 0 + so mod (p * x) p = 0 + so p * x < p * q + so (x < q by p > 0) + so radix - p = p * (q - 1) + so x <= q - 1 + so p * x <= p * (q - 1) + }; + r + + (** [lshift r x sz cnt] shifts [(x,sz)] [cnt] bits to the left and + writes the result in [(r, sz)]. Returns the [cnt] most significant + bits of [(x, sz)]. Corresponds to [mpn_lshift]. *) + (*TODO overlapping allowed if r >= x*) + let lshift (r x:t) (sz:int32) (cnt:limb) : limb + requires { 0 < cnt < Limb.length } + requires { valid r sz } + requires { valid x sz } + requires { 0 < sz } + ensures { value r sz + (power radix sz) * result = + value x sz * (power 2 (cnt)) } + = + let limb_zero = Limb.of_int 0 in + let zero = Int32.of_int 0 in + let one = Int32.of_int 1 in + let msb = Int32.(-) sz one in + let xp = ref (C.incr x msb) in + let rp = ref (C.incr r msb) in + let high = ref limb_zero in + let low = ref (C.get !xp) in + let i = ref msb in + let l, retval = lsld_ext !low cnt in + high := l; + while (Int32.(>) !i zero) do + variant { p2i !i } + invariant { 0 <= !i < sz } + invariant { radix * value_sub (pelts r) (r.offset + 1 + !i) (r.offset + sz) + + (power radix (sz - !i)) * retval + !high + = value !xp (sz - !i) + * (power 2 (cnt)) } + invariant { (!rp).offset = r.offset + !i } + invariant { (!xp).offset = x.offset + !i } + invariant { plength !rp = plength r } + invariant { !rp.min = r.min } + invariant { !rp.max = r.max } + invariant { pelts !rp = pelts r } + invariant { plength !xp = plength x } + invariant { !xp.min = x.min } + invariant { !xp.max = x.max } + invariant { pelts !xp = pelts x } + invariant { !high <= radix - power 2 (cnt) } + label StartLoop in + xp.contents <- C.incr !xp (-1); + low := C.get !xp; + let l,h = lsld_ext !low cnt in + assert { !high + h < radix }; + let ghost v = Limb.(+) !high h in + value_sub_update_no_change (pelts r) (!rp).offset (r.offset + 1 + p2i !i) + (r.offset + p2i sz) v; + C.set !rp (Limb.(+) !high h); + rp.contents <- C.incr !rp (-1); + high := l; + let ghost k = p2i !i in + i := Int32.(-) !i one; + value_sub_head (pelts r) (r.offset + k) (r.offset + p2i sz); + value_sub_head (pelts !xp) (!xp).offset (x.offset + p2i sz); + assert { radix + * value_sub (pelts r) (r.offset + k) (r.offset + sz) + + (power radix (sz - !i)) * retval + !high + = value !xp (sz - !i) + * (power 2 (cnt)) + by + (pelts r)[r.offset + k] + = (pelts r)[(!rp.offset at StartLoop)] + = (!high at StartLoop) + h + so + power radix (sz - !i) + = power radix (sz - (k - 1)) + = power radix ((sz - k) +1) + = radix * power radix (sz - k) + so + !low = (pelts x)[(!xp).offset] + so + radix * value_sub (pelts r) (r.offset + k) (r.offset + sz) + + (power radix (sz - !i)) * retval + !high + = radix * value_sub (pelts r) (r.offset + k) (r.offset + sz) + + radix * (power radix (sz - k)) * retval + !high + = radix * ( (pelts r)[r.offset + k] + + radix * (value_sub (pelts r) + (r.offset + 1 + k) (r.offset + sz))) + + radix * (power radix (sz - k)) * retval + !high + = radix * ( (!high at StartLoop) + h + + radix * (value_sub (pelts r) + (r.offset + 1 + k) (r.offset + sz))) + + radix * (power radix (sz - k)) * retval + !high + = radix * ( (!high at StartLoop) + + radix * (value_sub (pelts r) + (r.offset + 1 + k) (r.offset + sz))) + + radix * h + + radix * (power radix (sz - k)) * retval + !high + = radix * ( (!high at StartLoop) + + radix * (value_sub (pelts r) + (r.offset + 1 + k) (r.offset + sz))) + + radix * h + + radix * (power radix (sz - k)) * retval + l + = radix * ( (!high at StartLoop) + + radix * (value_sub (pelts r) + (r.offset + 1 + k) (r.offset + sz))) + + radix * (power radix (sz - k)) * retval + l + + radix * h + = radix * ( (!high at StartLoop) + + radix * (value_sub (pelts r) + (r.offset + 1 + k) (r.offset + sz))) + + radix * (power radix (sz - k)) * retval + + (power 2 (cnt)) * !low + = radix * ( (!high at StartLoop) + + radix * (value_sub (pelts r) + (r.offset + 1 + k) (r.offset + sz))) + + radix * (power radix (sz - k)) * retval + + (power 2 (cnt)) * (pelts x)[(!xp).offset] + = radix * ( (!high at StartLoop) + + radix * (value_sub (pelts r) + (r.offset + 1 + k) (r.offset + sz)) + + power radix (sz - k) * retval ) + + (power 2 (cnt)) * (pelts x)[(!xp).offset] + = radix * ( radix * (value_sub (pelts r) + (r.offset + 1 + k) (r.offset + sz)) + + power radix (sz - k) * retval + + (!high at StartLoop) ) + + (power 2 (cnt)) * (pelts x)[(!xp).offset] + = radix * value (!xp at StartLoop) (sz - k) + * (power 2 (cnt)) + + (power 2 (cnt)) * (pelts x)[(!xp).offset] + = (power 2 (cnt)) * + ((pelts x)[(!xp).offset] + + radix * value (!xp at StartLoop) (sz - k)) + = (power 2 (cnt)) * value !xp (sz - !i) + }; + done; + assert { !high + radix * value_sub (pelts r) (r.offset + 1) (r.offset + sz) + + (power radix sz) * retval + = value !xp sz + * (power 2 (cnt)) }; + value_sub_update_no_change (pelts r) r.offset (r.offset+1) + (r.offset + p2i sz) !high; + C.set r !high; + value_sub_head (pelts r) r.offset (r.offset + p2i sz); + retval + + (** [rshift r x sz cnt] shifts [(x,sz)] [cnt] bits to the right and + writes the result in [(r, sz)]. Returns the [cnt] least significant + bits of [(x, sz)]. Corresponds to [mpn_rshift]. *) + (*TODO overlapping allowed if r <= x*) + let rshift (r x:t) (sz:int32) (cnt:limb) : limb + requires { valid x sz } + requires { valid r sz } + requires { 0 < cnt < Limb.length } + requires { 0 < sz } + ensures { result + radix * value r sz + = value x sz * (power 2 (Limb.length - cnt)) } + = + let tnc = Limb.(-) (Limb.of_int Limb.length) cnt in + let zero = Int32.of_int 0 in + let one = Int32.of_int 1 in + let msb = Int32.(-) sz one in + let xp = ref (C.incr x zero) in + let rp = ref (C.incr r zero) in + let high = ref (C.get !xp) in + let retval, h = lsld_ext !high tnc in + let low = ref h in + let i = ref zero in + let ghost c = power 2 (l2i tnc) in + while (Int32.(<) !i msb) do + variant { sz - !i } + invariant { 0 <= !i <= msb } + invariant { retval + radix * (value r !i + + (power radix !i) * !low) + = value x (!i+1) * c } + invariant { (!rp).offset = r.offset + !i } + invariant { (!xp).offset = x.offset + !i } + invariant { plength !rp = plength r } + invariant { !rp.min = r.min } + invariant { !rp.max = r.max } + invariant { plength !xp = plength x } + invariant { !xp.min = x.min } + invariant { !xp.max = x.max } + invariant { pelts !rp = pelts r } + invariant { pelts !xp = pelts x } + invariant { !low < c} + label StartLoop in + xp.contents <- C.incr !xp one; + high := C.get !xp; + let l,h = lsld_ext !high tnc in + assert { !low + l < radix }; + let ghost v = Limb.(+) !low l in + value_sub_shift_no_change (pelts r) r.offset (p2i !i) (p2i !i) v; + C.set !rp (Limb.(+) !low l); + assert { value r !i = value (r at StartLoop) !i }; + value_tail r !i; + value_tail x (!i+1); + assert { (pelts r)[r.offset + !i] = !low + l }; + low := h; + assert { value x (!i+2) * c = value x (!i+1) * c + + power radix (!i+1) * l + power radix (!i+2) * h + by (pelts x)[offset x + !i + 1] = !high + so value x (!i+2) * c = + (value x (!i+1) + power radix (!i+1)* !high) * c + so !high * c = l + radix * h }; + (*nonlinear part*) + assert { retval + radix * (value r (!i+1) + + (power radix (!i+1)) * !low) + = value x (!i+2) * c + (* by + (pelts r)[r.offset + k] + = (pelts r)[(!rp.offset at StartLoop)] + = (!low at StartLoop) + l + so + !high = (pelts x)[(!xp).offset] + so + retval + radix * (value r !i + + (power radix !i) * !low) + = retval + radix * (value r k + + power radix k * (pelts r)[r.offset+k] + + power radix !i * !low) + = retval + radix * (value r k + + power radix k * ((!low at StartLoop) + l) + + power radix !i * !low) + = retval + radix * (value r k + + power radix k * (!low at StartLoop) + + power radix k * l + + power radix !i * !low) + = retval + radix * (value r k + + power radix k * (!low at StartLoop)) + + radix * (power radix k * l + + power radix !i * !low) + = value x (k+1) * power 2 (tnc) + + radix * (power radix k * l + + power radix !i * !low) + = value x !i * power 2 (tnc) + + radix * (power radix k * l + + power radix !i * !low) + = value x !i * power 2 (tnc) + + radix * (power radix k * l + + power radix k * radix * !low) + = value x !i * power 2 (tnc) + + radix * (power radix k * (l + radix * !low)) + = value x !i * power 2 (tnc) + + radix * (power radix k * !high * power 2 (tnc)) + = value x !i * power 2 (tnc) + + power radix !i * !high * power 2 (tnc) + = (value x !i + power radix !i * !high) + * power 2 (tnc) + = (value x !i + + power radix !i * (pelts x)[x.offset + !i]) + * power 2 (tnc) + = value x (1 + !i) * power 2 (tnc) *) + }; + i := Int32.(+) !i one; + rp.contents <- C.incr !rp one; + done; + label EndLoop in + assert { retval + radix * (value r msb + + (power radix msb) * !low) + = value x sz * c }; + value_sub_tail (pelts r) r.offset (r.offset + p2i msb); + assert { (!rp).offset = r.offset + msb }; + value_sub_shift_no_change (pelts r) r.offset + (r.offset + p2i msb) (r.offset + p2i msb) !low; + C.set !rp !low; + assert { pelts r = Map.set (pelts (r at EndLoop)) (r.offset + msb) !low}; + value_sub_tail (pelts r) r.offset (r.offset + p2i msb); + assert { value r sz + = value r msb + power radix msb * !low + by value r sz + = value r msb + power radix msb * (pelts r)[r.offset + msb] }; + assert { value r sz + = value (r at EndLoop) msb + + power radix msb * !low + by + value (r at EndLoop) msb = value r msb + }; + retval + +end \ No newline at end of file diff --git a/examples/multiprecision/logical/why3session.xml b/examples/multiprecision/logical/why3session.xml new file mode 100644 index 0000000000..486932016b --- /dev/null +++ b/examples/multiprecision/logical/why3session.xml @@ -0,0 +1,899 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<prover id="0" name="Eprover" version="1.9.1-001" timelimit="5" steplimit="0" memlimit="2000"/> +<prover id="1" name="CVC3" version="2.4.1" timelimit="5" steplimit="0" memlimit="2000"/> +<prover id="2" name="CVC4" version="1.4" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="3" name="Z3" version="4.5.0" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="4" name="Z3" version="4.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="5" name="Alt-Ergo" version="2.0.0" timelimit="5" steplimit="0" memlimit="1000"/> +<file name="../logical.mlw" proved="true"> +<theory name="Logical" proved="true"> + <goal name="VC pow2_64" expl="VC for pow2_64" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC pow2_64.0" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="10"/></proof> + </goal> + <goal name="VC pow2_64.1" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="10"/></proof> + </goal> + <goal name="VC pow2_64.2" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="11"/></proof> + </goal> + <goal name="VC pow2_64.3" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="12"/></proof> + </goal> + <goal name="VC pow2_64.4" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="13"/></proof> + </goal> + <goal name="VC pow2_64.5" expl="assertion" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="14"/></proof> + </goal> + <goal name="VC pow2_64.6" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="13"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mod_mult" expl="VC for mod_mult" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="9"/></proof> + </goal> + <goal name="VC lsld_ext" expl="VC for lsld_ext" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.0" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.0.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lsld_ext.1" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.03"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.04"/></proof> + <proof prover="2"><result status="valid" time="0.05"/></proof> + <proof prover="5"><result status="valid" time="0.01" steps="12"/></proof> + </goal> + <goal name="VC lsld_ext.2" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.2.0" expl="VC for lsld_ext" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lsld_ext.2.1" expl="VC for lsld_ext" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lsld_ext.3" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.36"/></proof> + </goal> + <goal name="VC lsld_ext.4" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.4.0" expl="VC for lsld_ext" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lsld_ext.4.1" expl="VC for lsld_ext" proved="true"> + <proof prover="0"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC lsld_ext.4.2" expl="VC for lsld_ext" proved="true"> + <proof prover="0"><result status="valid" time="0.08"/></proof> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lsld_ext.4.3" expl="VC for lsld_ext" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lsld_ext.5" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.5.0" expl="assertion" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lsld_ext.6" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.6.0" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lsld_ext.7" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="19"/></proof> + </goal> + <goal name="VC lsld_ext.8" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC lsld_ext.9" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.9.0" expl="VC for lsld_ext" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="22"/></proof> + </goal> + <goal name="VC lsld_ext.9.1" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lsld_ext.9.2" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lsld_ext.9.3" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lsld_ext.9.4" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lsld_ext.9.5" expl="VC for lsld_ext" proved="true"> + <proof prover="1"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lsld_ext.9.6" expl="VC for lsld_ext" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC lsld_ext.9.7" expl="VC for lsld_ext" proved="true"> + <proof prover="0"><result status="valid" time="0.67"/></proof> + </goal> + <goal name="VC lsld_ext.9.8" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lsld_ext.9.9" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lsld_ext.9.10" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lsld_ext.10" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.10.0" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lsld_ext.10.1" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lsld_ext.10.2" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lsld_ext.10.3" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lsld_ext.10.4" expl="VC for lsld_ext" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="29"/></proof> + </goal> + <goal name="VC lsld_ext.10.5" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lsld_ext.10.6" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lsld_ext.10.7" expl="VC for lsld_ext" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lsld_ext.11" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.11.0" expl="postcondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC lsld_ext.11.1" expl="postcondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.09"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lsld_ext.12" expl="postcondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC lsld_ext.13" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.36" steps="50"/></proof> + </goal> + <goal name="VC lsld_ext.14" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lsld_ext.14.0" expl="postcondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lsld_ext.14.1" expl="postcondition" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC lsld_ext.14.1.0" expl="postcondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC clz_ext" expl="VC for clz_ext" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC clz_ext.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC clz_ext.1" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC clz_ext.1.0" expl="VC for clz_ext" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="15"/></proof> + </goal> + <goal name="VC clz_ext.1.1" expl="VC for clz_ext" proved="true"> + <proof prover="1" timelimit="20"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC clz_ext.1.2" expl="VC for clz_ext" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="14"/></proof> + </goal> + <goal name="VC clz_ext.1.3" expl="VC for clz_ext" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="15"/></proof> + </goal> + <goal name="VC clz_ext.1.4" expl="VC for clz_ext" proved="true"> + <proof prover="1"><result status="valid" time="0.66"/></proof> + </goal> + <goal name="VC clz_ext.1.5" expl="VC for clz_ext" proved="true"> + <proof prover="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC clz_ext.1.6" expl="VC for clz_ext" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC clz_ext.1.7" expl="VC for clz_ext" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC clz_ext.1.8" expl="VC for clz_ext" proved="true"> + <proof prover="1"><result status="valid" time="0.04"/></proof> + <transf name="remove" proved="true" arg1="real,bool,tuple0,unit,tuple2,map,t,ref,zone,limb,zero,one,(>=),abs,div,div1,mod1,get,([]),const,map_eq_sub,max,to_int,in_bounds,zero_unsigned,radix,int32'maxInt,int32'minInt,min_int32,max_int32,in_bounds4,uint32'minInt,to_int1,zero_unsigned1,is_msb_set,(!),uint64'minInt,in_bounds2,zero_unsigned2,is_msb_set1,length1,([]),make,in_us_bounds,null_zone,data,offset,min,zone,plength,pelts,valid_ptr_shift,valid,is_not_null,map_eq_sub_shift,l2i,value_sub,value,Assoc,Unit_def_l,Unit_def_r,Inv_def_l,Inv_def_r,Comm,Assoc1,Mul_distr_l,Mul_distr_r,Comm1,Unitary,NonTrivialRing,Refl,Trans,Antisymm,Total,ZeroLessOne,CompatOrderAdd,CompatOrderMult,Abs_le,Abs_pos,Div_mod,Mod_bound,Div_unique,Div_bound,Mod_1,Div_1,Div_inf,Div_inf_neg,Mod_0,Div_1_left,Div_minus1_left,Mod_1_left,Mod_minus1_left,Div_mult,Mod_mult,Div_mod1,Div_bound1,Mod_bound1,Div_sign_pos,Div_sign_neg,Mod_sign_pos,Mod_sign_neg,Rounds_toward_zero,Div_11,Mod_11,Div_inf1,Mod_inf,Div_mult1,Mod_mult1,Power_0,Power_s,Power_s_alt,Power_1,Power_sum,Power_mult,Power_comm1,Power_comm2,Power_non_neg,Power_monotonic,to_int_in_bounds,extensionality,zero_unsigned_is_zero,radix_def,to_int_in_bounds3,extensionality3,to_int_in_bounds1,extensionality1,zero_unsigned_is_zero1,is_msb_set_spec,to_int_in_bounds2,extensionality2,zero_unsigned_is_zero2,is_msb_set_spec1,array'invariant,make_spec,valid_itv_to_shift,is_not_null_spec,map_eq_shift,map_eq_shift_zero,limb_max_bound,prod_compat_strict_r,prod_compat_r,value_sub_def,value_sub_frame,value_sub_frame_shift,value_sub_tail,value_sub_concat,value_sub_head,value_sub_update,value_zero,value_sub_update_no_change,value_sub_shift_no_change,value_sub_lower_bound,value_sub_upper_bound,value_sub_lower_bound_tight,value_sub_upper_bound_tight,value_tail,value_concat,pow2_64,mod_mult"> + <goal name="VC clz_ext.1.8.0" expl="VC for clz_ext" proved="true"> + <proof prover="1" timelimit="1"><result status="valid" time="0.02"/></proof> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC clz_ext.1.9" expl="VC for clz_ext" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="20"/></proof> + </goal> + <goal name="VC clz_ext.1.10" expl="VC for clz_ext" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="21"/></proof> + </goal> + <goal name="VC clz_ext.1.11" expl="VC for clz_ext" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC clz_ext.1.12" expl="VC for clz_ext" proved="true"> + <proof prover="1"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC clz_ext.2" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC clz_ext.3" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC clz_ext.4" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC clz_ext.5" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lshift" expl="VC for lshift" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lshift.0" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="23"/></proof> + </goal> + <goal name="VC lshift.1" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="24"/></proof> + </goal> + <goal name="VC lshift.2" expl="integer overflow" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.06"/></proof> + <proof prover="1" memlimit="1000"><result status="valid" time="0.06"/></proof> + <proof prover="2"><result status="valid" time="0.06"/></proof> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.03" steps="25"/></proof> + </goal> + <goal name="VC lshift.3" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.4" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="26"/></proof> + </goal> + <goal name="VC lshift.5" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="33"/></proof> + </goal> + <goal name="VC lshift.6" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="40"/></proof> + </goal> + <goal name="VC lshift.7" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.03" steps="30"/></proof> + </goal> + <goal name="VC lshift.8" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.9" expl="loop invariant init" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC lshift.9.0" expl="loop invariant init" proved="true"> + <transf name="replace" proved="true" arg1="(sz - msb)" arg2="1"> + <goal name="VC lshift.9.0.0" expl="loop invariant init" proved="true"> + <transf name="cut" proved="true" arg1="(value o3 1 = get (pelts o3) (offset o3))"> + <goal name="VC lshift.9.0.0.0" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="64"/></proof> + </goal> + <goal name="VC lshift.9.0.0.1" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.44"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lshift.9.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC lshift.10" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="38"/></proof> + </goal> + <goal name="VC lshift.11" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="38"/></proof> + </goal> + <goal name="VC lshift.12" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC lshift.13" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.14" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.15" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC lshift.16" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + <proof prover="5"><result status="valid" time="0.07" steps="38"/></proof> + </goal> + <goal name="VC lshift.17" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.18" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.19" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lshift.19.0" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="38"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lshift.20" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.21" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC lshift.22" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.05" steps="74"/></proof> + </goal> + <goal name="VC lshift.23" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC lshift.24" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC lshift.25" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC lshift.26" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lshift.26.0" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lshift.27" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.28" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.29" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC lshift.30" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC lshift.31" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lshift.32" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC lshift.33" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC lshift.34" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lshift.34.0" expl="VC for lshift" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.34.1" expl="VC for lshift" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC lshift.34.2" expl="VC for lshift" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC lshift.34.3" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lshift.34.4" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lshift.34.5" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lshift.34.6" expl="VC for lshift" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.34.7" expl="VC for lshift" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.34.8" expl="VC for lshift" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC lshift.34.9" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lshift.34.10" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.34.11" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.34.12" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.34.13" expl="VC for lshift" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC lshift.34.13.0" expl="VC for lshift" proved="true"> + <transf name="rewrite" proved="true" arg1="H"> + <goal name="VC lshift.34.13.0.0" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC lshift.34.14" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.34.15" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lshift.34.16" expl="VC for lshift" proved="true"> + <proof prover="1"><result status="valid" time="2.00"/></proof> + </goal> + <goal name="VC lshift.34.17" expl="VC for lshift" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lshift.34.18" expl="VC for lshift" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC lshift.34.18.0" expl="VC for lshift" proved="true"> + <proof prover="0"><result status="valid" time="0.16"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lshift.34.19" expl="VC for lshift" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lshift.35" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.36" expl="loop invariant preservation" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC lshift.37" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="2.54"/></proof> + </goal> + <goal name="VC lshift.38" expl="loop invariant preservation" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC lshift.39" expl="loop invariant preservation" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC lshift.40" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC lshift.41" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.42" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lshift.43" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC lshift.43.0" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lshift.44" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lshift.45" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.46" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.47" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lshift.48" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC lshift.49" expl="assertion" proved="true"> + <proof prover="1" timelimit="20" memlimit="3000"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC lshift.50" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC lshift.51" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC lshift.52" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC lshift.53" expl="precondition" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC lshift.53.0" expl="precondition" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC lshift.54" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="1.98"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rshift" expl="VC for rshift" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rshift.0" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC rshift.1" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC rshift.2" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.3" expl="integer overflow" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC rshift.3.0" expl="integer overflow" proved="true"> + <proof prover="1" memlimit="1000"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rshift.4" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC rshift.5" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rshift.6" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.7" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="41"/></proof> + </goal> + <goal name="VC rshift.8" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC rshift.9" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC rshift.10" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.11" steps="120"/></proof> + </goal> + <goal name="VC rshift.11" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC rshift.12" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.13" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.14" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rshift.15" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rshift.16" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rshift.17" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rshift.18" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rshift.19" expl="loop invariant init" proved="true"> + <proof prover="2"><result status="valid" time="0.05"/></proof> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC rshift.20" expl="loop invariant init" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC rshift.21" expl="loop invariant init" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.04"/></proof> + <proof prover="2"><result status="valid" time="0.05"/></proof> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC rshift.22" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC rshift.23" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC rshift.24" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rshift.24.0" expl="VC for rshift" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.24.1" expl="VC for rshift" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC rshift.24.1.0" expl="VC for rshift" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC rshift.24.1.0.0" expl="VC for rshift" proved="true"> + <proof prover="0"><result status="valid" time="4.17"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC rshift.25" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.26" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC rshift.27" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.03"/></proof> + <proof prover="2"><result status="valid" time="0.14"/></proof> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC rshift.28" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rshift.29" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.30" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC rshift.31" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC rshift.32" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rshift.33" expl="integer overflow" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + <proof prover="4"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC rshift.34" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC rshift.35" expl="assertion" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC rshift.36" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rshift.36.0" expl="VC for rshift" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.36.1" expl="VC for rshift" proved="true"> + <proof prover="1" timelimit="10"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC rshift.36.2" expl="VC for rshift" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.36.3" expl="VC for rshift" proved="true"> + <proof prover="1" timelimit="10"><result status="valid" time="1.00"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rshift.37" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC rshift.37.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC rshift.37.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC rshift.37.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC rshift.37.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC rshift.37.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.27"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC rshift.38" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC rshift.39" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.47"/></proof> + </goal> + <goal name="VC rshift.40" expl="loop variant decrease" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC rshift.41" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rshift.41.0" expl="VC for rshift" proved="true"> + <proof prover="0"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC rshift.41.1" expl="VC for rshift" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rshift.42" expl="loop invariant preservation" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC rshift.42.0" expl="loop invariant preservation" proved="true"> + <transf name="cut" proved="true" arg1="(i = i1+1)"> + <goal name="VC rshift.42.0.0" expl="loop invariant preservation" proved="true"> + <transf name="rewrite" proved="true" arg1="h"> + <goal name="VC rshift.42.0.0.0" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rshift.42.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC rshift.43" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="3.35"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="0.17"/></proof> + </goal> + <goal name="VC rshift.44" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC rshift.45" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.20"/></proof> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.46" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.47" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.48" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.12"/></proof> + <proof prover="2" memlimit="2000"><result status="valid" time="0.10"/></proof> + <proof prover="4" memlimit="2000"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.49" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC rshift.50" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.51" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC rshift.52" expl="loop invariant preservation" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.18"/></proof> + </goal> + <goal name="VC rshift.53" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC rshift.54" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rshift.54.0" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC rshift.54.0.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC rshift.54.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC rshift.55" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC rshift.56" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC rshift.57" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC rshift.58" expl="precondition" proved="true"> + <proof prover="2" memlimit="2000"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC rshift.59" expl="precondition" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.10"/></proof> + </goal> + <goal name="VC rshift.60" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rshift.60.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rshift.61" expl="precondition" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="1.94"/></proof> + <proof prover="2"><result status="valid" time="0.14"/></proof> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC rshift.62" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rshift.62.0" expl="VC for rshift" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC rshift.62.0.0" expl="VC for rshift" proved="true"> + <transf name="cut" proved="true" arg1="(sz = msb + 1)"> + <goal name="VC rshift.62.0.0.0" expl="VC for rshift" proved="true"> + <transf name="rewrite" proved="true" arg1="h"> + <goal name="VC rshift.62.0.0.0.0" expl="VC for rshift" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rshift.62.0.0.1" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC rshift.62.1" expl="VC for rshift" proved="true"> + <proof prover="2" timelimit="1"><result status="valid" time="0.37"/></proof> + </goal> + </transf> + </goal> + <goal name="VC rshift.63" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC rshift.63.0" expl="VC for rshift" proved="true"> + <proof prover="0"><result status="valid" time="0.41"/></proof> + </goal> + <goal name="VC rshift.63.1" expl="VC for rshift" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC rshift.63.1.0" expl="VC for rshift" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC rshift.63.1.0.0" expl="VC for rshift" proved="true"> + <proof prover="0"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC rshift.64" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> +</theory> +</file> +</why3session> diff --git a/examples/multiprecision/logical/why3shapes.gz b/examples/multiprecision/logical/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..aaa3eed43263f1cc131488e1f9cc8a8611bf413f GIT binary patch literal 10701 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 E0BDr*vj6}9 literal 0 HcmV?d00001 diff --git a/examples/multiprecision/mul.mlw b/examples/multiprecision/mul.mlw new file mode 100644 index 0000000000..39db51cca9 --- /dev/null +++ b/examples/multiprecision/mul.mlw @@ -0,0 +1,601 @@ +module Mul + + use import int.Int + use import mach.int.Int32 + use import mach.int.UInt64GMP as Limb + use import int.Power + use import ref.Ref + use import mach.c.C + use import array.Array + use import map.Map + use import types.Types + use import lemmas.Lemmas + use import util.Util + use import add.Add + + + (** [mul_limb r x y sz] multiplies [x[0..sz-1]] by the limb [y] and + writes the n least significant limbs in [r], and returns the most + significant limb. It corresponds to [mpn_mul_1]. *) + let mul_limb (r x:t) (y:limb) (sz:int32) : limb + requires { valid x sz } + requires { valid r sz } + ensures { value r sz + (power radix sz) * result + = value x sz * y } + ensures { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + writes { r.data.elts } + = + let limb_zero = Limb.of_int 0 in + let lx = ref limb_zero in + let c = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sz do + variant { sz - !i } + invariant { 0 <= !i <= sz } + invariant { value r !i + (power radix !i) * !c = + value x !i * y } + invariant { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + label StartLoop in + lx := get_ofs x !i; + let rl, rh = Limb.mul_double !lx y in + let res, carry = Limb.add_with_carry rl !c limb_zero in + label BeforeWrite in + value_sub_shift_no_change (pelts r) r.offset (p2i !i) (p2i !i) res; + set_ofs r !i res; + assert { value r !i + (power radix !i) * !c = + value x !i * y }; + assert { rh < radix - 1 + by + (!lx * y <= !lx * (radix-1) <= (radix-1)*(radix-1) + by + 0 <= !lx <= radix - 1 /\ 0 <= y <= radix -1) + /\ + (radix * rh <= !lx * y + by + rl + radix * rh = !lx * y) + so + radix * rh <= (radix -1) * (radix -1) + }; + c := Limb.(+) rh carry; + value_tail r !i; + value_tail x !i; + assert { value x (!i+1) * y + = value x !i * y + power radix !i * (!lx * y) }; + (*nonlinear, needed for reflection*) + assert { value r (!i+1) + (power radix (!i+1)) * !c = + value x (!i+1) * y + (* by + value r !i + !c * (power radix !i) + = value r k + res * (power radix k) + + (power radix !i) * !c + = value r k + (power radix k) * res + + (power radix k) * radix * !c + = value r k + (power radix k) * (res + radix * !c) + = value r k + (power radix k) * + (res + radix * (rh + carry)) + = value r k + (power radix k) * + (res + radix * carry + radix * rh) + = value r k + (power radix k) * + ((!c at StartLoop) + rl + radix*rh) + = value r k + (power radix k) * + ((!c at StartLoop) + !lx * y) + = value r k + (power radix k) * (!c at StartLoop) + + (power radix k) * !lx * y + = value x k * y + (power radix k) * !lx * y + = (value x k + (power radix k) * !lx) * y + = value x !i * y *) + }; + i := Int32.(+) !i (Int32.of_int 1); + done; + !c + + (** [addmul_limb r x y sz] multiplies [(x, sz)] by [y], adds the [sz] + least significant limbs to [(r, sz)] and writes the result in [(r,sz)]. + Returns the most significant limb of the product plus the carry + of the addition. Corresponds to [mpn_addmul_1].*) + let addmul_limb (r x:t) (y:limb) (sz:int32):limb + requires { valid x sz } + requires { valid r sz } + ensures { value r sz + (power radix sz) * result + = value (old r) sz + + value x sz * y } + writes { r.data.elts } + ensures { forall j. (j < r.offset \/ r.offset + sz <= j) -> + (pelts r)[j] = (pelts (old r))[j] } + = + let limb_zero = Limb.of_int 0 in + let lx = ref limb_zero in + let lr = ref limb_zero in + let c = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sz do + variant { sz - !i } + invariant { 0 <= !i <= sz } + invariant { value r !i + (power radix !i) * !c + = value (old r) !i + + value x !i * y } + invariant { forall j. !i <= j < sz -> + (pelts (old r)) [r.offset+j] = (pelts r)[r.offset + j] } + invariant { forall j. j < r.offset \/ r.offset + sz <= j -> + (pelts r)[j] = (pelts (old r))[j] } + label StartLoop in + lx := get_ofs x !i; + lr := get_ofs r !i; + assert { !lr = (pelts (old r))[r.offset + !i] }; + let rl, rh = Limb.mul_double !lx y in + let res, carry = Limb.add3 !lr rl !c in + value_tail r !i; + value_tail x !i; + assert { value (old r) (!i+1) = value (old r) !i + power radix !i * !lr }; + (* value_tail (old r) !i... *) + value_sub_update (pelts r) (r.offset + p2i !i) + r.offset (r.offset + p2i !i +1) res; + set_ofs r !i res; + assert { forall j. (!i + 1) <= j < sz -> + (pelts (old r))[r.offset+j] = (pelts r)[r.offset+j] + by + (pelts r)[r.offset+j] = ((pelts r) at StartLoop)[r.offset+j] + = (pelts (old r))[r.offset+j] }; + assert { value r (!i + 1) + = value (r at StartLoop) (!i + 1) + + (power radix !i) * (res - !lr) }; + assert { rl + radix * rh <= (radix-1)*(radix-1) + by + (!lx * y <= !lx * (radix-1) <= (radix-1)*(radix-1) + by + 0 <= !lx <= radix - 1 /\ 0 <= y <= radix -1) + /\ + rl + radix * rh = !lx * y }; + assert { rh < radix - 1 + by + rl + radix * rh <= (radix -1) * (radix -1) + so + radix * rh <= (radix -1) * (radix -1) }; + assert { rh = radix - 2 -> rl <= 1 + by + rl + radix * rh <= (radix-1)*(radix-1) }; + assert { rh = radix - 2 -> carry <= 1 + by rl <= 1 }; + c := Limb.(+) rh carry; + assert { value x (!i + 1) * y + = value x !i * y + (power radix !i) * (!lx * y) }; + (* nonlinear part *) + assert { value r (!i+1) + (power radix (!i+1)) * !c + = value (old r) (!i+1) + + value x (!i+1) * y + (* by + (value r !i + (power radix !i) * !c + = value (r at StartLoop) !i + + (power radix k) * (res - !lr) + + (power radix !i) * !c + = value (r at StartLoop) !i + + (power radix k) * (res - !lr) + + (power radix !i) * (rh + carry) + = value (r at StartLoop) !i + + (power radix k) * (res - !lr) + + (power radix k) * radix * (rh + carry) + = value (r at StartLoop) !i + + (power radix k) * (res - !lr + + radix * (rh + carry)) + = value (r at StartLoop) !i + + (power radix k) * (res + radix * carry + - !lr + radix * rh) + = value (r at StartLoop) !i + + (power radix k) * (rl + !lr + (!c at StartLoop) + - !lr + radix * rh) + = value (r at StartLoop) !i + + (power radix k) * (rl + radix * rh + (!c at StartLoop)) + = value (r at StartLoop) !i + + (power radix k) * (!lx * y + (!c at StartLoop)) + = value (r at StartLoop) k + + (power radix k) * !lr + + (power radix k) * (!lx * y + (!c at StartLoop)) + = value (r at StartLoop) k + + (power radix k) * (!c at StartLoop) + + (power radix k) * (!lx * y + !lr) + = value (old r) k + + value x k * y + + (power radix k) * (!lx * y + !lr) + = value (old r) k + + (power radix k) * !lr + + (value x k + (power radix k)* (!lx)) * y + = value (old r) !i + + (value x k + (power radix k)* (!lx)) * y + = value (old r) !i + + value x !i * y + by + value (old r) !i = value (old r) k + + (power radix k) * (!lr) + ) *) + }; + i := Int32.(+) !i (Int32.of_int 1); + done; + !c + + (** [mul_limbs r x y sz] multiplies [(x, sz)] and [(y, sz)] and + writes the result to [(r, 2*sz)]. [r] must not overlap with either + [x] or [y]. Corresponds to [mpn_mul_n]. *) + let mul_limbs (r x y:t) (sz:int32) : unit + requires { sz > 0 } + requires { valid x sz } + requires { valid y sz } + requires { valid r (sz + sz) } + writes { r.data.elts } + ensures { value r (sz + sz) + = value x sz * value y sz } + ensures { forall j. (j < offset r \/ offset r + (sz + sz) <= j) + -> (pelts r)[j] = old (pelts r)[j] } + = + zero r sz; + let limb_zero = Limb.of_int 0 in + let one = Int32.of_int 1 in + let rp = ref (C.incr r (Int32.of_int 0)) in + let ly = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sz do + invariant { 0 <= !i <= sz } + invariant { value r (!i + sz) = value x sz * value y !i } + invariant { (!rp).offset = r.offset + !i } + invariant { plength !rp = plength r } + invariant { !rp.min = r.min } + invariant { !rp.max = r.max } + invariant { pelts !rp = pelts r } + invariant { forall j. (j < offset r \/ offset r + (sz + sz) <= j) + -> (pelts r)[j] = old (pelts r)[j] } + variant { sz - !i } + label StartLoop in + value_concat r !i (!i + sz); + assert { value !rp sz + = value_sub (pelts r) (offset r + !i) (offset r + (!i + sz)) }; + ly := get_ofs y !i; + let c' = addmul_limb !rp x !ly sz in + assert { value !rp sz + power radix sz * c' + = value (!rp at StartLoop) sz + value x sz * !ly }; + assert { MapEq.map_eq_sub (pelts r) (pelts r at StartLoop) + r.offset (!rp).offset + by (!rp).offset = r.offset + !i + so forall j. r.offset <= j < (!rp).offset + -> + (j < (!rp).offset + so (pelts !rp)[j] = (pelts !rp at StartLoop)[j] + = (pelts r at StartLoop)[j]) }; + label BeforeCarry in + value_sub_update_no_change (pelts r) ((!rp).offset + p2i sz) + r.offset (r.offset + p2i !i) c'; + set_ofs !rp sz c'; + assert { (pelts !rp)[offset !rp + sz] = c' + = (pelts r)[offset r + (!i + sz)] }; + assert { value r !i = value (r at BeforeCarry) !i + = value (r at StartLoop) !i}; + value_tail r (!i + sz); + assert { value r (!i + sz + 1) = value r (!i + sz) + + power radix (!i + sz) * (pelts r)[offset r + (!i + sz)] }; + value_tail y !i; + value_concat r !i (!i + sz); + assert { value_sub (pelts r) (r.offset + !i) (r.offset + (!i + sz)) + = value !rp sz }; + assert { value !rp sz = value (!rp at BeforeCarry) sz }; + assert { value !rp sz + power radix sz * c' + = value (!rp at StartLoop) sz + value x sz * !ly }; + assert { value (r at StartLoop) !i + + (power radix !i) * value_sub (pelts r at StartLoop) + (r.offset + !i) (r.offset + (!i + sz)) + = value (r at StartLoop) (!i + sz) }; + assert { value x sz * value y (!i + 1) + = value x sz * value y !i + (power radix !i) * (value x sz * !ly) }; + (* nonlinear *) + assert { value r (!i + sz + 1) = value x sz * value y (!i+1) }; + i := Int32.(+) !i one; + rp.contents <- C.incr !rp one; + done + + let addmul_limbs (r x y:t) (sz:int32) : limb + requires { sz > 0 } + requires { valid x sz } + requires { valid y sz } + requires { valid r (sz + sz) } + writes { r.data.elts } + ensures { value r (sz + sz) + + power radix (sz + sz) * result + = value (old r) (sz + sz) + + value x sz * value y sz } + = + let limb_zero = Limb.of_int 0 in + let one = Int32.of_int 1 in + let rp = ref (C.incr r (Int32.of_int 0)) in + let ly = ref limb_zero in + let lr = ref limb_zero in + let c = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sz do + invariant { 0 <= !i <= sz } + invariant { value r (!i + sz) + + (power radix (!i + sz)) * !c + = value (old r) (!i + sz) + + value x sz * value y !i } + invariant { (!rp).offset = r.offset + !i } + invariant { !rp.min = r.min } + invariant { !rp.max = r.max } + invariant { r.data = (!rp).data } + invariant { 0 <= !c <= 1 } + invariant { forall j. (!rp).offset + sz <= j -> + (pelts (old r)) [j] = (pelts r)[j] } + variant { sz - !i } + label StartLoop in + value_concat r !i (!i+sz); + assert { value !rp sz + = value_sub (pelts r) (r.offset + !i) (r.offset + (!i + sz)) }; + ly := get_ofs y !i; + let c' = addmul_limb !rp x !ly sz in + assert { forall j. (!rp).offset + sz <= j -> + (pelts (old r)) [j] = (pelts r)[j] + by (pelts r)[j] + = (pelts !rp)[j] + = (pelts !rp)[j] at StartLoop + = (pelts (old r))[j]}; + assert { value !rp sz + power radix sz * c' + = value (!rp at StartLoop) sz + value x sz * !ly }; + assert { MapEq.map_eq_sub (pelts r) (pelts r at StartLoop) + r.offset (!rp).offset + by (!rp).offset = r.offset + !i + so forall j. r.offset <= j < (!rp).offset + -> + (j < (!rp).offset + so (pelts !rp)[j] = (pelts !rp at StartLoop)[j] + = (pelts r at StartLoop)[j]) }; + lr := get_ofs !rp sz; + assert { !lr = (pelts (old r))[(old r).offset + (!i + sz)] }; + let (res, carry) = add_with_carry c' !lr !c in + label BeforeCarry in + value_sub_update_no_change (pelts r) ((!rp).offset + p2i sz) + r.offset (r.offset + p2i !i) res; + set_ofs !rp sz res; + assert { value !rp sz = value (!rp at BeforeCarry) sz }; + c:= carry; + assert { value r !i = value (r at BeforeCarry) !i + = value (r at StartLoop) !i}; + value_tail r (!i+sz); + value_tail y !i; + assert { value (old r) ((!i+sz)+1) + = value (old r) (!i+sz) + power radix (!i+sz) * !lr }; + assert { (pelts r)[r.offset + (!i + sz)] = res }; + value_concat r !i (!i+sz); + assert { value_sub (pelts r) (r.offset + !i) (r.offset+(!i+sz)) + = value !rp sz }; + assert { value x sz * value y (!i+1) + = value x sz * value y !i + power radix !i * (value x sz * !ly) }; + (* nonlinear *) + assert { value r (!i + sz + 1) + + (power radix (!i + sz + 1)) * !c + = value (old r) (!i + sz + 1) + + value x sz + * value y (!i + 1) + (*by + power radix (k + sz) = power radix k * power radix sz + so + power radix (!i + sz) = power radix k * power radix sz * radix + so + value (r at StartLoop) k + + (power radix k) * value_sub (pelts r at StartLoop) + (r.offset + k) (r.offset + k + sz) + = value (r at StartLoop) (k + sz) + so (value (old r) (!i+sz) + = value (old r) (k+sz) + + power radix (k+sz) * !lr + by !lr = (pelts (old r))[r.offset + k + sz]) + so + value !rp sz + (power radix sz) * c' = + value (!rp at StartLoop) sz + + value x sz * !ly + so + value r (!i + sz) + + (power radix (!i + sz)) * !c + = value r (k + sz) + + (power radix (k + sz)) * res + + (power radix (!i + sz)) * !c + = value r k + + (power radix k) * value !rp sz + + (power radix (k + sz)) * res + + (power radix (!i + sz)) * !c + = value r k + + (power radix k) * value !rp sz + + (power radix k) * (power radix sz) * res + + (power radix (!i + sz)) * !c + = value r k + + (power radix k) * value !rp sz + + (power radix k) * (power radix sz) * res + + (power radix k) * (power radix sz) * radix * !c + = value r k + + (power radix k) * value !rp sz + + (power radix k) * (power radix sz) + * (res + radix * !c) + = value r k + + (power radix k) * value !rp sz + + (power radix k) * (power radix sz) + * (c' + (!c at StartLoop) + !lr) + = value r k + (power radix k) + * (value !rp sz + + power radix sz * (c'+ (!c at StartLoop) + !lr)) + = value r k + (power radix k) + * (value !rp sz + + power radix sz * c' + + power radix sz * ((!c at StartLoop) + !lr)) + = value r k + (power radix k) + * (value (!rp at StartLoop) sz + + value x sz * !ly + + (power radix sz) * ((!c at StartLoop) + !lr)) + = value r k + + power radix k * (value (!rp at StartLoop) sz) + + power radix k * (value x sz * !ly + + (power radix sz) * ((!c at StartLoop) + !lr)) + = value (r at StartLoop) k + + power radix k * (value (!rp at StartLoop) sz) + + power radix k * (value x sz * !ly + + (power radix sz) * ((!c at StartLoop) + !lr)) + = value (r at StartLoop) k + + power radix k * (value_sub (pelts r at StartLoop) (r.offset+k) + (r.offset+k+ sz)) + + power radix k * (value x sz * !ly + + (power radix sz) * ((!c at StartLoop) + !lr)) + = value (r at StartLoop) (k + sz) + + power radix k * (value x sz * !ly + + (power radix sz) * ((!c at StartLoop) + !lr)) + = value (r at StartLoop) (k + sz) + + power radix k * value x sz * !ly + + power radix k * power radix sz * ((!c at StartLoop) + !lr) + = value (r at StartLoop) (k + sz) + + power radix k * power radix sz * ((!c at StartLoop) + !lr) + + power radix k * value x sz * !ly + = value (r at StartLoop) (k + sz) + + power radix (k + sz) * ((!c at StartLoop) + !lr) + + power radix k * value x sz * !ly + = value (r at StartLoop) (k + sz) + + power radix (k + sz) * ((!c at StartLoop)) + + power radix (k + sz) * !lr + + power radix k * value x sz * !ly + = value (old r) (k+sz) + + value x sz * value y k + + power radix (k + sz) * !lr + + power radix k * value x sz * !ly + = value (old r) (k+sz) + + power radix (k + sz) * !lr + + value x sz * value y k + + power radix k * value x sz * !ly + = value (old r) (k+sz) + + power radix (k + sz) * !lr + + value x sz * (value y k + power radix k * !ly) + = value (old r) (k+sz) + + power radix (k + sz) * !lr + + value x sz * value y !i + = value (old r) (!i +sz) + + value x sz * value y !i *) + }; + i := Int32.(+) !i one; + rp.contents <- C.incr !rp one; + assert { forall j. (!rp).offset + sz <= j -> + (pelts (old r)) [j] = (pelts r)[j] }; + done; + !c + + (** [mul 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 mul (r x y:t) (sx sy:int32) : unit + requires { 0 < sy <= sx } + requires { valid x sx } + requires { valid y sy } + requires { valid r (sy + sx) } + writes { r.data.elts } + ensures { value r (sy + sx) = value x sx * value y sy } + ensures { forall j. (j < offset r \/ offset r + (sy + sx) <= j) + -> (pelts r)[j] = old (pelts r)[j] } + (*ensures { result = (pelts r)[r.offset + sx + sy - 1] }*) + = + let ly = ref (C.get y) in + let c = mul_limb r x !ly sx in + value_sub_update_no_change (pelts r) (r.offset + p2i sx) + r.offset (r.offset + p2i sx - 1) c; + set_ofs r sx c; + value_sub_tail (pelts r) r.offset (r.offset + p2i sx); + assert { value r (sx + 1) = value x sx * value y 1 + by value y 1 = !ly + so value r sx + power radix sx * c = value x sx * value y 1 }; + let one = Int32.of_int 1 in + let rp = ref (C.incr r (Int32.of_int 1)) in + let i = ref (Int32.of_int 1) in + while Int32.(<) !i sy do + invariant { 1 <= !i <= sy } + invariant { value r (!i + sx) = value x sx * value y !i } + invariant { (!rp).offset = r.offset + !i } + invariant { plength !rp = plength r } + invariant { !rp.min = r.min } + invariant { !rp.max = r.max } + invariant { pelts !rp = pelts r } + invariant { forall j. (j < offset r \/ offset r + (sy + sx) <= j) + -> (pelts r)[j] = old (pelts r)[j] } + variant { sy - !i } + label StartLoop in + value_concat r !i (!i + sx); + assert { value !rp sx = + value_sub (pelts r) (r.offset + !i) (r.offset + (!i + sx)) }; + ly := get_ofs y !i; + let res = addmul_limb !rp x !ly sx in + assert { value !rp sx + power radix sx * res + = value (!rp at StartLoop) sx + value x sx * !ly }; + assert { MapEq.map_eq_sub (pelts r) (pelts r at StartLoop) + r.offset (!rp).offset + by (!rp).offset = r.offset + !i + so forall j. r.offset <= j < (!rp).offset + -> + (j < (!rp).offset + so (pelts !rp)[j] = (pelts !rp at StartLoop)[j] + = (pelts r at StartLoop)[j]) }; + label BeforeCarry in + value_sub_update_no_change (pelts r) ((!rp).offset + p2i sx) + r.offset (r.offset + p2i !i) res; + set_ofs !rp sx res; + assert { value !rp sx = value (!rp at BeforeCarry) sx }; + assert { value r !i = value (r at BeforeCarry) !i + = value (r at StartLoop) !i }; + value_tail r (!i + sx); + value_tail y !i; + value_concat r !i (!i+sx); + assert { value_sub (pelts r) (r.offset + !i) (r.offset+(!i+sx)) + = value !rp sx }; + assert { (pelts r)[r.offset + (!i+sx)] = res }; + assert { value x sx * value y (!i+1) + = value x sx * value y !i + + power radix !i * (value x sx * !ly) }; + (*nonlinear*) + assert { value r (!i + sx + 1) = value x sx * value y (!i+1) + (*by (value !rp sx + power radix sx * res + = value (!rp at StartLoop) sx + value x sx * !ly + by value !rp sx = value (!rp at BeforeCarry) sx) + so power radix (k + sx) = power radix k * power radix sx + so + value (r at StartLoop) k + + (power radix k) * value_sub (pelts r at StartLoop) + (r.offset + k) (r.offset + k + sx) + = value (r at StartLoop) (k + sx) + so + value r (!i + sx) + = value r (k + sx) + + (power radix (k + sx)) * res + = value r k + + (power radix k) * value !rp sx + + (power radix (k + sx)) * res + = value r k + + (power radix k) * value !rp sx + + (power radix k) * (power radix sx) * res + = value r k + + (power radix k) * value !rp sx + + (power radix k) * (power radix sx) * res + = value r k + + (power radix k) * (value !rp sx + (power radix sx) * res) + = value r k + (power radix k) + * (value (!rp at StartLoop) sx + + value x sx * !ly) + = value r k + + power radix k * (value (!rp at StartLoop) sx) + + power radix k * (value x sx * !ly) + = value (r at StartLoop) k + + power radix k * (value (!rp at StartLoop) sx) + + power radix k * (value x sx * !ly) + = value (r at StartLoop) k + + power radix k * (value_sub (pelts r at StartLoop) (r.offset+k) + (r.offset+k+ sx)) + + power radix k * (value x sx * !ly) + = value (r at StartLoop) (k + sx) + + power radix k * (value x sx * !ly) + = value x sx * value y k + + power radix k * value x sx * !ly + = value x sx * + (value y k + power radix k * !ly) + = value x sx * value y !i *) }; + i := Int32.(+) !i one; + rp.contents <- C.incr !rp one; + done; + +end \ No newline at end of file diff --git a/examples/multiprecision/mul/why3session.xml b/examples/multiprecision/mul/why3session.xml new file mode 100644 index 0000000000..1c65994f5f --- /dev/null +++ b/examples/multiprecision/mul/why3session.xml @@ -0,0 +1,1471 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<prover id="0" name="Eprover" version="1.9.1-001" timelimit="5" steplimit="0" memlimit="2000"/> +<prover id="1" name="CVC3" version="2.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="2" name="CVC4" version="1.4" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="3" name="Z3" version="4.5.0" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="4" name="Z3" version="4.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="5" name="Alt-Ergo" version="2.0.0" timelimit="5" steplimit="0" memlimit="1000"/> +<file name="../mul.mlw" proved="true"> +<theory name="Mul" proved="true"> + <goal name="VC mul_limb" expl="VC for mul_limb" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limb.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul_limb.1" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limb.1.0" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="20"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limb.2" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="11"/></proof> + </goal> + <goal name="VC mul_limb.3" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="70"/></proof> + </goal> + <goal name="VC mul_limb.4" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mul_limb.5" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limb.5.0" expl="VC for mul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul_limb.5.1" expl="VC for mul_limb" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="20"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limb.6" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limb.7" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limb.7.0" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limb.8" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limb.9" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limb.9.0" expl="VC for mul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mul_limb.9.1" expl="VC for mul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limb.10" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.05" steps="56"/></proof> + </goal> + <goal name="VC mul_limb.11" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="56"/></proof> + </goal> + <goal name="VC mul_limb.12" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limb.13" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.05" steps="36"/></proof> + </goal> + <goal name="VC mul_limb.14" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limb.15" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.28" steps="38"/></proof> + </goal> + <goal name="VC mul_limb.16" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul_limb.16.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC mul_limb.16.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC mul_limb.16.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC mul_limb.16.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.32"/></proof> + </goal> + <goal name="VC mul_limb.16.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.20"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC mul_limb.17" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limb.18" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC mul_limb.19" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC mul_limb.20" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limb.21" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul_limb.22" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.15"/></proof> + </goal> + <goal name="VC mul_limb.23" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.01" steps="19"/></proof> + </goal> + <goal name="VC mul_limb.24" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb" expl="VC for addmul_limb" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limb.0" expl="integer overflow" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limb.0.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.1" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.2" expl="loop invariant init" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limb.3" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="69"/></proof> + </goal> + <goal name="VC addmul_limb.4" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.5" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limb.6" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.7" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limb.7.0" expl="VC for addmul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.7.1" expl="VC for addmul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.8" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limb.8.0" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="45"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.9" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.10" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limb.10.0" expl="precondition" proved="true"> + <proof prover="1" memlimit="2000"><result status="valid" time="0.07"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.11" expl="assertion" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="6.40"/></proof> + </goal> + <goal name="VC addmul_limb.12" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.09"/></proof> + </goal> + <goal name="VC addmul_limb.13" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limb.13.0" expl="VC for addmul_limb" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limb.13.0.0" expl="VC for addmul_limb" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC addmul_limb.13.0.0.0" expl="VC for addmul_limb" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="0.14"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.13.1" expl="VC for addmul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.14" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limb.14.0" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC addmul_limb.14.1" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.39"/></proof> + </goal> + <goal name="VC addmul_limb.14.2" expl="VC for addmul_limb" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.15" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="2.24"/></proof> + </goal> + <goal name="VC addmul_limb.16" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limb.16.0" expl="VC for addmul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.16.1" expl="VC for addmul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC addmul_limb.16.2" expl="VC for addmul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.16.3" expl="VC for addmul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.16.4" expl="VC for addmul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limb.16.5" expl="VC for addmul_limb" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limb.16.5.0" expl="VC for addmul_limb" proved="true"> + <transf name="apply" proved="true" arg1="prod_compat_r"> + <goal name="VC addmul_limb.16.5.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limb.16.5.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.16.6" expl="VC for addmul_limb" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.16.7" expl="VC for addmul_limb" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.17" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limb.18" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC addmul_limb.19" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limb.20" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC addmul_limb.21" expl="assertion" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limb.22" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limb.22.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC addmul_limb.22.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC addmul_limb.22.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.38"/></proof> + </goal> + <goal name="VC addmul_limb.22.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC addmul_limb.22.0.0.2" proved="true"> + <proof prover="2"><result status="valid" time="0.34"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limb.23" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC addmul_limb.24" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC addmul_limb.25" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limb.26" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC addmul_limb.27" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limb.28" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC addmul_limb.29" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC addmul_limb.30" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="19"/></proof> + </goal> + <goal name="VC addmul_limb.31" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs" expl="VC for mul_limbs" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limbs.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="27"/></proof> + </goal> + <goal name="VC mul_limbs.1" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="33"/></proof> + </goal> + <goal name="VC mul_limbs.2" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul_limbs.3" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="35"/></proof> + </goal> + <goal name="VC mul_limbs.4" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="35"/></proof> + </goal> + <goal name="VC mul_limbs.5" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limbs.6" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limbs.6.0" expl="VC for mul_limbs" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC mul_limbs.6.1" expl="VC for mul_limbs" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.7" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="107"/></proof> + </goal> + <goal name="VC mul_limbs.8" expl="loop invariant init" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="30"/></proof> + </goal> + <goal name="VC mul_limbs.9" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limbs.10" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul_limbs.11" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul_limbs.12" expl="loop invariant init" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul_limbs.12.0" expl="loop invariant init" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC mul_limbs.12.0.0" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limbs.12.0.0.0" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.13" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul_limbs.14" expl="integer overflow" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul_limbs.14.0" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.15" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limbs.16" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="76"/></proof> + </goal> + <goal name="VC mul_limbs.17" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limbs.17.0" expl="VC for mul_limbs" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="45"/></proof> + </goal> + <goal name="VC mul_limbs.17.1" expl="VC for mul_limbs" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.18" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limbs.19" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limbs.19.0" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul_limbs.19.0.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC mul_limbs.19.0.0.0" expl="precondition" proved="true"> + <proof prover="5" timelimit="20" memlimit="3000"><result status="valid" time="0.04" steps="89"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.20" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="57"/></proof> + </goal> + <goal name="VC mul_limbs.21" expl="assertion" proved="true"> + <proof prover="4"><result status="valid" time="4.10"/></proof> + </goal> + <goal name="VC mul_limbs.22" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="58"/></proof> + </goal> + <goal name="VC mul_limbs.23" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul_limbs.24" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="75"/></proof> + </goal> + <goal name="VC mul_limbs.25" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="110"/></proof> + </goal> + <goal name="VC mul_limbs.26" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limbs.26.0" expl="VC for mul_limbs" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.10" steps="112"/></proof> + </goal> + <goal name="VC mul_limbs.26.1" expl="VC for mul_limbs" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.27"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.27" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC mul_limbs.28" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limbs.29" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul_limbs.30" expl="precondition" proved="true"> + <proof prover="2" timelimit="5"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC mul_limbs.31" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul_limbs.32" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.10" steps="80"/></proof> + </goal> + <goal name="VC mul_limbs.33" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul_limbs.33.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC mul_limbs.33.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.34" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul_limbs.34.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.43"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.35" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limbs.35.0" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.09" steps="83"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.36" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.12" steps="84"/></proof> + </goal> + <goal name="VC mul_limbs.37" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.14" steps="85"/></proof> + </goal> + <goal name="VC mul_limbs.38" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul_limbs.38.0" expl="assertion" proved="true"> + <transf name="rewrite" proved="true" arg1="H6" arg2="in" arg3="H5"> + <goal name="VC mul_limbs.38.0.0" expl="assertion" proved="true"> + <transf name="rewrite" proved="true" arg1="H10" arg2="in" arg3="H9"> + <goal name="VC mul_limbs.38.0.0.0" expl="assertion" proved="true"> + <transf name="rewrite" proved="true" arg1="H57" arg2="in" arg3="H56"> + <goal name="VC mul_limbs.38.0.0.0.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC mul_limbs.38.0.0.0.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC mul_limbs.38.0.0.0.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.43"/></proof> + </goal> + <goal name="VC mul_limbs.38.0.0.0.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="1.31"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.39" expl="integer overflow" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul_limbs.39.0" expl="integer overflow" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC mul_limbs.39.0.0" expl="integer overflow" proved="true"> + <proof prover="0" memlimit="1000"><result status="valid" time="3.74"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.40" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC mul_limbs.41" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul_limbs.42" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limbs.43" expl="loop invariant preservation" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul_limbs.43.0" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.19"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.44" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC mul_limbs.45" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul_limbs.46" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limbs.47" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul_limbs.48" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul_limbs.48.0" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul_limbs.49" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.40"/></proof> + </goal> + <goal name="VC mul_limbs.50" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="41"/></proof> + </goal> + <goal name="VC mul_limbs.51" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs" expl="VC for addmul_limbs" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limbs.0" expl="integer overflow" proved="true"> + <proof prover="4" timelimit="10"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC addmul_limbs.1" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="28"/></proof> + </goal> + <goal name="VC addmul_limbs.2" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.02" steps="29"/></proof> + </goal> + <goal name="VC addmul_limbs.3" expl="precondition" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.12" steps="29"/></proof> + </goal> + <goal name="VC addmul_limbs.4" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.04" steps="37"/></proof> + </goal> + <goal name="VC addmul_limbs.5" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limbs.5.0" expl="VC for addmul_limbs" proved="true"> + <proof prover="1"><result status="valid" time="0.09"/></proof> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.5.0.0" expl="VC for addmul_limbs" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC addmul_limbs.5.0.0.0" expl="VC for addmul_limbs" proved="true"> + <proof prover="0" timelimit="20" memlimit="1000"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.5.1" expl="VC for addmul_limbs" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.6" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="106"/></proof> + </goal> + <goal name="VC addmul_limbs.7" expl="loop invariant init" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.7.0" expl="loop invariant init" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC addmul_limbs.7.0.0" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limbs.7.0.0.0" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.01" steps="24"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.8" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC addmul_limbs.9" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limbs.10" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC addmul_limbs.11" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.06" steps="25"/></proof> + </goal> + <goal name="VC addmul_limbs.12" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.05" steps="6"/></proof> + </goal> + <goal name="VC addmul_limbs.13" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limbs.14" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC addmul_limbs.15" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="86"/></proof> + </goal> + <goal name="VC addmul_limbs.16" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="55"/></proof> + </goal> + <goal name="VC addmul_limbs.17" expl="precondition" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.06" steps="40"/></proof> + </goal> + <goal name="VC addmul_limbs.18" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="85"/></proof> + </goal> + <goal name="VC addmul_limbs.19" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.19.0" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC addmul_limbs.19.0.0" expl="VC for addmul_limbs" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limbs.19.0.1" expl="VC for addmul_limbs" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC addmul_limbs.19.0.2" expl="VC for addmul_limbs" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC addmul_limbs.19.0.3" expl="VC for addmul_limbs" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.20" expl="assertion" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.02" steps="52"/></proof> + </goal> + <goal name="VC addmul_limbs.21" expl="assertion" proved="true"> + <proof prover="2"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC addmul_limbs.22" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="69"/></proof> + </goal> + <goal name="VC addmul_limbs.23" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.23.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC addmul_limbs.23.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.24" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="55"/></proof> + </goal> + <goal name="VC addmul_limbs.25" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limbs.25.0" expl="precondition" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.25.0.0" expl="precondition" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC addmul_limbs.25.0.0.0" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="58"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.26" expl="precondition" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.08" steps="59"/></proof> + </goal> + <goal name="VC addmul_limbs.27" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.05" steps="75"/></proof> + </goal> + <goal name="VC addmul_limbs.28" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.60"/></proof> + </goal> + <goal name="VC addmul_limbs.29" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC addmul_limbs.30" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC addmul_limbs.31" expl="precondition" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.05" steps="77"/></proof> + </goal> + <goal name="VC addmul_limbs.32" expl="precondition" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.06" steps="78"/></proof> + </goal> + <goal name="VC addmul_limbs.33" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="3.34"/></proof> + </goal> + <goal name="VC addmul_limbs.34" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.32" steps="117"/></proof> + </goal> + <goal name="VC addmul_limbs.35" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC addmul_limbs.36" expl="precondition" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.32" steps="82"/></proof> + </goal> + <goal name="VC addmul_limbs.37" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.37.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC addmul_limbs.37.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.05"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.38" expl="assertion" proved="true"> + <proof prover="5" timelimit="20"><result status="valid" time="0.45" steps="84"/></proof> + </goal> + <goal name="VC addmul_limbs.39" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.39.0" expl="assertion" proved="true"> + <transf name="rewrite" proved="true" arg1="H3" arg2="in" arg3="H2"> + <goal name="VC addmul_limbs.39.0.0" expl="assertion" proved="true"> + <transf name="rewrite" proved="true" arg1="H8" arg2="in" arg3="H7"> + <goal name="VC addmul_limbs.39.0.0.0" expl="assertion" proved="true"> + <transf name="rewrite" proved="true" arg1="H60" arg2="in" arg3="H59"> + <goal name="VC addmul_limbs.39.0.0.0.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC addmul_limbs.39.0.0.0.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC addmul_limbs.39.0.0.0.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC addmul_limbs.39.0.0.0.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC addmul_limbs.39.0.0.0.0.0.2" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.31"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.40" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC addmul_limbs.41" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC addmul_limbs.42" expl="assertion" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.86"/></proof> + </goal> + <goal name="VC addmul_limbs.43" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limbs.44" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC addmul_limbs.45" expl="loop invariant preservation" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.45.0" expl="loop invariant preservation" proved="true"> + <transf name="cut" proved="true" arg1="(i=i1+1)"> + <goal name="VC addmul_limbs.45.0.0" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC addmul_limbs.45.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.46" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC addmul_limbs.47" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limbs.48" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limbs.49" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC addmul_limbs.50" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC addmul_limbs.50.0" expl="VC for addmul_limbs" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC addmul_limbs.50.1" expl="VC for addmul_limbs" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.50.1.0" expl="VC for addmul_limbs" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.51" expl="loop invariant preservation" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC addmul_limbs.51.0" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC addmul_limbs.52" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="36"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul" expl="VC for mul" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul.0" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul.0.0" expl="VC for mul" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.0.1" expl="VC for mul" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul.1" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.01" steps="11"/></proof> + </goal> + <goal name="VC mul.2" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="30"/></proof> + </goal> + <goal name="VC mul.3" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.01" steps="17"/></proof> + </goal> + <goal name="VC mul.4" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="18"/></proof> + </goal> + <goal name="VC mul.5" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="36"/></proof> + </goal> + <goal name="VC mul.6" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="25"/></proof> + </goal> + <goal name="VC mul.7" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul.7.0" expl="VC for mul" proved="true"> + <proof prover="3"><result status="valid" time="0.29"/></proof> + </goal> + <goal name="VC mul.7.1" expl="VC for mul" proved="true"> + <proof prover="0"><result status="valid" time="0.41"/></proof> + </goal> + <goal name="VC mul.7.2" expl="VC for mul" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="72"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul.8" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="46"/></proof> + </goal> + <goal name="VC mul.9" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="47"/></proof> + </goal> + <goal name="VC mul.10" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="47"/></proof> + </goal> + <goal name="VC mul.11" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.07" steps="55"/></proof> + </goal> + <goal name="VC mul.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 mul.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 mul.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 mul.15" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul.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 mul.16" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.17" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.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 mul.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 mul.20" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.21" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="52"/></proof> + </goal> + <goal name="VC mul.22" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="90"/></proof> + </goal> + <goal name="VC mul.23" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="72"/></proof> + </goal> + <goal name="VC mul.24" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="55"/></proof> + </goal> + <goal name="VC mul.25" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.14" steps="108"/></proof> + </goal> + <goal name="VC mul.26" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.14" steps="67"/></proof> + </goal> + <goal name="VC mul.27" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.84" steps="137"/></proof> + </goal> + <goal name="VC mul.28" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.60"/></proof> + </goal> + <goal name="VC mul.29" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul.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 mul.30" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC mul.30.0" expl="VC for mul" proved="true"> + <proof prover="4" memlimit="2000"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC mul.30.1" expl="VC for mul" proved="true"> + <proof prover="2"><result status="valid" time="0.10"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul.31" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.62"/></proof> + </goal> + <goal name="VC mul.32" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC mul.33" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC mul.34" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.30" steps="86"/></proof> + </goal> + <goal name="VC mul.35" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.22" steps="87"/></proof> + </goal> + <goal name="VC mul.36" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul.37" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC mul.38" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul.38.0" expl="assertion" proved="true"> + <transf name="inline_goal" proved="true" > + <goal name="VC mul.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 mul.39" expl="assertion" proved="true"> + <proof prover="5" timelimit="10" memlimit="2000"><result status="valid" time="4.18" steps="134"/></proof> + </goal> + <goal name="VC mul.40" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="3.28" steps="92"/></proof> + </goal> + <goal name="VC mul.41" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC mul.41.0" expl="assertion" proved="true"> + <transf name="rewrite" proved="true" arg1="H4" arg2="in" arg3="H3"> + <goal name="VC mul.41.0.0" expl="assertion" proved="true"> + <transf name="rewrite" proved="true" arg1="H7" arg2="in" arg3="H6"> + <goal name="VC mul.41.0.0.0" expl="assertion" proved="true"> + <transf name="rewrite" proved="true" arg1="H54" arg2="in" arg3="H53"> + <goal name="VC mul.41.0.0.0.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC mul.41.0.0.0.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC mul.41.0.0.0.0.0.0" expl="assertion" proved="true"> + <transf name="apply" proved="true" arg1="HR"> + <goal name="VC mul.41.0.0.0.0.0.0.0" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.3" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.4" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.5" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.6" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.7" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.8" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.9" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.10" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.11" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.12" proved="true"> + <proof prover="3"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.13" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.14" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.15" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.16" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.17" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.18" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.19" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.20" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.21" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.22" proved="true"> + <proof prover="3"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.23" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.24" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.25" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.26" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.27" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.28" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC 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 mul.41.0.0.0.0.0.0.30" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.31" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.32" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.33" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.34" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.35" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.36" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.37" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.38" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.39" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.40" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.41" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.42" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.43" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.44" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.45" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.46" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.47" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.48" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.49" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.50" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.51" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.52" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.53" proved="true"> + <proof prover="3"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.54" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.55" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.56" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.57" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.58" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.59" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.60" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.61" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.62" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.63" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.64" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.65" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.66" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.67" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.68" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.69" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.70" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.71" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.72" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.73" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.74" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.75" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.76" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.77" proved="true"> + <proof prover="3"><result status="valid" time="0.26"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.78" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.79" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.80" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.81" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.82" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.83" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.84" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.85" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.86" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.87" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.88" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.89" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.90" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.91" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.92" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.93" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.94" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.95" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.96" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.97" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.98" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.99" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.100" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.101" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.102" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.103" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.104" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.105" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.106" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.107" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.108" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.109" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.110" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.111" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.112" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC mul.41.0.0.0.0.0.0.113" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC mul.41.0.0.0.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.31"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC mul.42" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC mul.43" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC mul.44" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul.45" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC mul.46" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="3.14"/></proof> + </goal> + <goal name="VC mul.47" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC mul.48" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC mul.49" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.50" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.51" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC mul.52" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.27"/></proof> + </goal> + <goal name="VC mul.53" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="51"/></proof> + </goal> + <goal name="VC mul.54" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> +</theory> +</file> +</why3session> diff --git a/examples/multiprecision/mul/why3shapes.gz b/examples/multiprecision/mul/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..0f7ec6398320949c58cfefe1efd929d44f0a17a3 GIT binary patch literal 15958 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 K?zpmskpTb;JCMWx literal 0 HcmV?d00001 diff --git a/examples/multiprecision/sub.mlw b/examples/multiprecision/sub.mlw new file mode 100644 index 0000000000..08ced6d0d6 --- /dev/null +++ b/examples/multiprecision/sub.mlw @@ -0,0 +1,546 @@ +module Sub + + use import int.Int + use import mach.int.Int32 + use import mach.int.UInt64GMP as Limb + use import int.Power + use import ref.Ref + use import mach.c.C + use import array.Array + use import map.Map + use import types.Types + use import lemmas.Lemmas + + + (** [sub_limb r x y sz] substracts [y] from [(x, sz)] and writes + the result to [(r, sz)]. Returns borrow, either 0 or + 1. Corresponds to [mpn_sub_1]. *) + let sub_limb (r x:t) (y:limb) (sz:int32) : limb + requires { valid x sz } + requires { valid r sz } + requires { 0 < sz } + ensures { value r sz - power radix sz * result + = value x sz - y } + ensures { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + ensures { 0 <= result <= 1 } + writes { r.data.elts } + = + let limb_zero = Limb.of_int 0 in + let b = ref y in + let lx = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sz && (not (Limb.(=) !b limb_zero)) do + invariant { 0 <= !i <= sz } + invariant { !i > 0 -> 0 <= !b <= 1 } + invariant { value r !i - power radix !i * !b + = value x !i - y } + invariant { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + variant { sz - !i } + label StartLoop in + lx := get_ofs x !i; + let (res, borrow) = sub_with_borrow !lx !b limb_zero in + set_ofs r !i res; + assert { value r !i - power radix !i * !b = + value x !i - y }; + b := borrow; + value_tail r !i; + value_tail x !i; + assert { value r (!i+1) - power radix (!i+1) * !b + = value x (!i+1) - y + (*by + value r !i - power radix !i * !b + = value r k + power radix k * res + - power radix !i * !b + = value r k + power radix k * res + - power radix k * radix * !b + = value r k + power radix k * (res - radix * !b) + = value r k + + (power radix k) * (!lx - (!b at StartLoop)) + = value r k - power radix k * (!b at StartLoop) + + power radix k * !lx + = value x k - y + power radix k * !lx + = value x !i - y*) + }; + i := Int32.(+) !i (Int32.of_int 1); + done; + if Int32.(=) !i sz then !b + else begin + while Int32.(<) !i sz do + invariant { !b = 0 } + invariant { 0 <= !i <= sz } + invariant { value r !i - power radix !i * !b + = value x !i - y } + invariant { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + variant { sz - !i } + lx := get_ofs x !i; + set_ofs r !i !lx; + assert { value r !i - power radix !i * !b + = value x !i - y }; + let ghost k = p2i !i in + i := Int32.(+) !i (Int32.of_int 1); + value_sub_tail (pelts r) r.offset (r.offset + k); + value_sub_tail (pelts x) x.offset (x.offset + k); + done; + !b + end + + (** [sub_limbs r x y sz] substracts [(y, sz)] from [(x, sz)] and + writes the result to [(r, sz)]. Returns borrow, either 0 or + 1. Corresponds to [mpn_sub_n]. *) + let sub_limbs (r x y:t) (sz:int32) : limb + requires { valid x sz } + requires { valid y sz } + requires { valid r sz } + ensures { 0 <= result <= 1 } + ensures { value r sz - power radix sz * result + = value x sz - value y sz } + ensures { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + writes { r.data.elts } + = + let limb_zero = Limb.of_int 0 in + let lx = ref limb_zero in + let ly = ref limb_zero in + let b = ref limb_zero in + let i = ref (Int32.of_int 0) in + while Int32.(<) !i sz do + variant { sz - !i } + invariant { 0 <= !i <= sz } + invariant { value r !i - (power radix !i) * !b + = value x !i - value y !i } + invariant { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + invariant { 0 <= !b <= 1 } + label StartLoop in + lx := get_ofs x !i; + ly := get_ofs y !i; + let res, borrow = sub_with_borrow !lx !ly !b in + set_ofs r !i res; + assert { value r !i - (power radix !i) * !b = + value x !i - value y !i }; + b := borrow; + value_tail r !i; + value_tail x !i; + value_tail y !i; + assert { value r (!i+1) - (power radix (!i+1)) * !b + = value x (!i+1) - value y (!i+1) + (*by + value r !i - power radix !i * !b + = value r k + power radix k * res + - power radix !i * !b + = value r k + power radix k * res + - power radix k * radix * !b + = value r k + + power radix k * (res - radix * !b) + = value r k + + power radix k * (!lx - !ly - (!b at StartLoop)) + = value r k - power radix k * (!b at StartLoop) + + power radix k * (!lx - !ly) + = value x k - value y k + + power radix k * (!lx - !ly) + = value x k - value y k + + power radix k * !lx - power radix k * !ly + = value x k + power radix k * !lx + - (value y k + power radix k * !ly) + = value x !i + - (value y k + power radix k * !ly) + = value x !i - value y !i*) + }; + i := Int32.(+) !i (Int32.of_int 1); + done; + !b + + (** [sub r x y sx sy] substracts [(y,sy)] from [(x, sx)] and writes the + result in [(r, sx)]. [sx] must be greater than or equal to + [sy]. Returns borrow, either 0 or 1. Corresponds to [mpn_sub]. *) + let sub (r x y:t) (sx sy:int32) : limb + requires { 0 <= sy <= sx } + requires { valid x sx } + requires { valid y sy } + requires { valid r sx } + ensures { value r sx - power radix sx * result + = value x sx - value y sy } + ensures { forall j. (j < offset r \/ offset r + sx <= j) + -> (pelts r)[j] = old (pelts r)[j] } + ensures { 0 <= result <= 1 } + writes { r.data.elts } + = + let limb_zero = Limb.of_int 0 in + let lx = ref limb_zero in + let ly = ref limb_zero in + let b = ref limb_zero in + let i = ref (Int32.of_int 0) in + let one = Int32.of_int 1 in + while Int32.(<) !i sy do + variant { sy - !i } + invariant { 0 <= !i <= sy } + invariant { value r !i - power radix !i * !b = + value x !i - value y !i } + invariant { forall j. (j < offset r \/ offset r + sx <= j) + -> (pelts r)[j] = old (pelts r)[j] } + invariant { 0 <= !b <= 1 } + label StartLoop in + lx := get_ofs x !i; + ly := get_ofs y !i; + let res, borrow = sub_with_borrow !lx !ly !b in + set_ofs r !i res; + assert { value r !i - power radix !i * !b = + value x !i - value y !i }; + b := borrow; + value_tail r !i; + value_tail x !i; + value_tail y !i; + assert { value r (!i+1) - power radix (!i+1) * !b = + value x (!i+1) - value y (!i+1) + (*by + value r !i - power radix !i * !b + = value r k + power radix k * res + - power radix !i * !b + = value r k + power radix k * res + - (power radix k) * radix * !b + = value r k + + power radix k * (res - radix * !b) + = value r k + + power radix k * (!lx - !ly - (!b at StartLoop)) + = value r k - (power radix k) * (!b at StartLoop) + + power radix k * (!lx - !ly) + = value x k - value y k + + power radix k * (!lx - !ly) + = value x k + power radix k * !lx + - value y k - power radix k * !ly + = value x !i + - (value y k + power radix k * !ly) + = value x !i - value y !i*) }; + i := Int32.(+) !i one; + done; + try + begin while Int32.(<) !i sx do + variant { sx - !i } + invariant { sy <= !i <= sx } + invariant { value r !i - power radix !i * !b = + value x !i - value y sy } + invariant { forall j. (j < offset r \/ offset r + sx <= j) + -> (pelts r)[j] = old (pelts r)[j] } + invariant { 0 <= !b <= 1 } + (if (Limb.(=) !b (Limb.of_int 0)) then raise Break); + label StartLoop2 in + lx := get_ofs x !i; + let res, borrow = sub_with_borrow !lx limb_zero !b in + set_ofs r !i res; + assert { value r !i - power radix !i * !b = + value x !i - value y sy }; + b := borrow; + value_tail r !i; + value_tail x !i; + assert { value r (!i+1) - power radix (!i+1) * !b = + value x (!i+1) - value y sy + (*by + value r !i - power radix !i * !b + = value r k + power radix k * res + - (power radix !i) * !b + = value r k + power radix k * res + - (power radix k) * radix * !b + = value r k + power radix k * (res - radix * !b) + = value r k + + power radix k * (!lx - 0 - (!b at StartLoop2)) + = value r k - (power radix k) * (!b at StartLoop2) + + (power radix k) * !lx + = value x k - value y sy + + (power radix k) * !lx + = value x !i + - value y sy*) }; + i := Int32.(+) !i one; + done; + assert { !i = sx } + end + with Break -> assert { !b = 0 } + end; + while Int32.(<) !i sx do + variant { sx - !i } + invariant { sy <= !i <= sx } + invariant { !i = sx \/ !b = 0 } + invariant { value r !i - power radix !i * !b = + value x !i - value y sy } + invariant { forall j. (j < offset r \/ offset r + sx <= j) + -> (pelts r)[j] = old (pelts r)[j] } + assert { !b = 0 by !i < sx }; + lx := get_ofs x !i; + set_ofs r !i !lx; + value_tail r !i; + value_tail x !i; + assert { value r !i = value x !i - value y sy }; + assert { value r (!i+1) - power radix (!i+1) * !b + = value x (!i+1) - value y sy + (*by + value r !i + power radix !i * !b + = value r !i + = value r k + power radix k * !lx + so value x !i + = value x k + power radix k * !lx + so value r k + = value r k + power radix k * !b + = value x k - value y sy*) + }; + i := Int32.(+) !i (Int32.of_int 1); + done; + !b + + let sub_in_place (x y:t) (sx sy:int32) : limb + requires { 0 <= sy <= sx } + requires { valid x sx } + requires { valid y sy } + ensures { value x sx - power radix sx * result + = value (old x) sx - value y sy } + ensures { 0 <= result <= 1 } + writes { x.data.elts } + ensures { forall j. j < x.offset \/ x.offset + sx <= j -> + (pelts x)[j] = (pelts (old x))[j] } + = + let ghost ox = { x } in + let limb_zero = Limb.of_int 0 in + let lx = ref limb_zero in + let ly = ref limb_zero in + let b = ref limb_zero in + let i = ref (Int32.of_int 0) in + let one = Int32.of_int 1 in + while Int32.(<) !i sy do + variant { sy - !i } + invariant { 0 <= !i <= sy } + invariant { value x !i - power radix !i * !b = + value ox !i - value y !i } + invariant { 0 <= !b <= 1 } + invariant { forall j. !i <= j < sx -> + (pelts x)[x.offset + j] = (pelts ox)[x.offset + j] } + invariant { forall j. j < x.offset \/ x.offset + sx <= j -> + (pelts x)[j] = (pelts (old x))[j] } + label StartLoop in + lx := get_ofs x !i; + assert { !lx = (pelts ox)[ox.offset + !i] }; + ly := get_ofs y !i; + let res, borrow = sub_with_borrow !lx !ly !b in + set_ofs x !i res; + assert { forall j. !i < j < sx -> + (pelts x)[x.offset + j] + = (pelts ox)[x.offset + j] + by (pelts x)[x.offset + j] + = (pelts (x at StartLoop))[x.offset + j] + = (pelts ox)[x.offset + j]}; + assert { value x !i - power radix !i * !b = value ox !i - value y !i }; + b := borrow; + value_tail ox !i; + value_tail x !i; + value_tail y !i; + assert { value x (!i+1) - power radix (!i+1) * !b = + value ox (!i+1) - value y (!i+1) + (*by value x !i - power radix !i * !b + = value x k + power radix k * res + - power radix !i * !b + = value x k + power radix k * res + - (power radix k) * radix * !b + = value x k + + power radix k * (res - radix * !b) + = value x k + + power radix k * (!lx - !ly - (!b at StartLoop)) + = value x k - (power radix k) * (!b at StartLoop) + + power radix k * (!lx - !ly) + = value ox k - value y k + + power radix k * (!lx - !ly) + = value ox k + power radix k * !lx + - value y k - power radix k * !ly + = value ox !i + - (value y k + power radix k * !ly) + = value ox !i - value y !i*) }; + i := Int32.(+) !i one; + done; + try + begin while Int32.(<) !i sx do + variant { sx - !i } + invariant { sy <= !i <= sx } + invariant { value x !i - power radix !i * !b = + value ox !i - value y sy } + invariant { 0 <= !b <= 1 } + invariant { forall j. !i <= j < sx -> + (pelts x)[x.offset + j] = (pelts ox) [x.offset + j] } + invariant { forall j. j < x.offset \/ x.offset + sx <= j -> + (pelts x)[j] = (pelts (old x))[j] } + (if (Limb.(=) !b limb_zero) then raise ReturnLimb limb_zero); + label StartLoop2 in + lx := get_ofs x !i; + assert { !lx = (pelts ox)[ox.offset + !i] }; + let res, borrow = sub_with_borrow !lx limb_zero !b in + value_sub_update_no_change (pelts x) (x.offset + p2i !i) + (x.offset + p2i !i + 1) + (x.offset + p2i sx) res; + set_ofs x !i res; + assert { value x !i - power radix !i * !b = value ox !i - value y sy }; + b := borrow; + assert { forall j. !i < j < sx -> + (pelts x)[x.offset + j] = (pelts ox) [x.offset + j] }; + value_tail ox !i; + value_tail x !i; + assert { value x (!i+1) - power radix (!i+1) * !b = + value ox (!i+1) - value y sy + (*by + value x !i - power radix !i * !b + = value x k + power radix k * res + - (power radix !i) * !b + = value x k + power radix k * res + - (power radix k) * radix * !b + = value x k + power radix k * (res - radix * !b) + = value x k + + power radix k * (!lx - 0 - (!b at StartLoop2)) + = value x k - (power radix k) * (!b at StartLoop2) + + (power radix k) * !lx + = value ox k - value y sy + + (power radix k) * !lx + = value ox !i + - value y sy*) }; + i := Int32.(+) !i one; + done; + assert { !i = sx }; + !b + end + with ReturnLimb n -> begin + assert { n = 0 = !b }; + assert { forall j. x.offset + !i <= j < x.offset + sx + -> (pelts x)[j] = (pelts ox)[j] + by !i <= j - x.offset < sx + so (pelts x)[x.offset + (j - x.offset)] + = (pelts ox)[x.offset + (j - x.offset)] }; + value_sub_frame (pelts x) (pelts ox) (x.offset + p2i !i) (x.offset + p2i sx); + value_sub_concat (pelts x) x.offset (x.offset + p2i !i) (x.offset + p2i sx); + value_sub_concat (pelts ox) x.offset (x.offset + p2i !i) (x.offset + p2i sx); + assert { value x sx = value (old x) sx - value y sy }; + n + end + end + + (** [decr x y sz] subtracts from [x] the value of the limb [y] in place. + [x] has size [sz]. The subtraction must not overflow. This corresponds + to [mpn_decr] *) + let decr (x:t) (y:limb) (ghost sz:int32) : unit + requires { valid x sz } + requires { sz > 0 } + requires { 0 <= value x sz - y } + ensures { value x sz = value (old x) sz - y } + ensures { forall j. j < x.offset \/ x.offset + sz <= j -> + (pelts x)[j] = (pelts (old x))[j] } + writes { x.data.elts } + = + let ghost ox = { x } in + let b = ref y in + let lx : ref limb = ref 0 in + let i : ref int32 = ref 0 in + while not (Limb.(=) !b 0) do + invariant { 0 <= !i <= sz } + invariant { !i = sz -> !b = 0 } + invariant { !i > 0 -> 0 <= !b <= 1 } + invariant { value x !i - (power radix !i) * !b + = value ox !i - y } + invariant { forall j. !i <= j < sz -> + (pelts x)[x.offset + j] = (pelts ox)[x.offset + j] } + invariant { forall j. j < x.offset \/ x.offset + sz <= j -> + (pelts x)[j] = (pelts ox)[j] } + variant { sz - !i } + label StartLoop in + lx := get_ofs x !i; + assert { !lx = (pelts ox)[ox.offset + !i] }; + let (res, borrow) = sub_with_borrow !lx !b 0 in (*TODO*) + assert { res - radix * borrow = !lx - !b }; (* TODO remove this *) + value_sub_update_no_change (pelts x) (x.offset + p2i !i) + (x.offset + p2i !i + 1) + (x.offset + p2i sz) res; + set_ofs x !i res; + assert { forall j. !i < j < sz -> + (pelts x)[x.offset + j] + = (pelts ox)[x.offset + j] }; + assert { value x !i - (power radix !i) * !b = value ox !i - y }; + b := borrow; + value_tail x !i; + value_tail ox !i; + assert { value x (!i+1) - power radix (!i+1) * !b = + value ox (!i+1) - y }; + i := Int32.(+) !i 1; + assert { !i = sz -> !b = 0 + by value x sz - power radix sz * !b = value ox sz - y + so 0 <= value ox sz - y + so value x sz < power radix sz + so value x sz - power radix sz * 1 < 0 + so (!b=0 \/ !b=1) }; + done; + value_concat x !i sz; + value_concat ox !i sz; + assert { forall j. x.offset + !i <= j < x.offset + sz -> + (pelts x)[j] = (pelts ox)[j] + by let k = j - x.offset in + !i <= k < sz + so (pelts x)[x.offset + k] = (pelts ox)[x.offset + k]}; + value_sub_frame (pelts x) (pelts ox) (x.offset + p2i !i) (x.offset + p2i sz) + + (** [incr_1 x sz] subtracts 1 from [x] in place. + [x] has size [sz]. The subtraction must not overflow. + This corresponds to [mpn_decr] *) + let decr_1 (x:t) (ghost sz:int32) : unit + requires { valid x sz } + requires { sz > 0 } + requires { 0 <= value x sz - 1 } + ensures { value x sz = value (old x) sz - 1 } + ensures { forall j. j < x.offset \/ x.offset + sz <= j -> + (pelts x)[j] = (pelts (old x))[j] } + writes { x.data.elts } + = + let ghost ox = { x } in + let ghost b : ref limb = ref 1 in + let lx : ref limb = ref 0 in + let i : ref int32 = ref 0 in + while (Limb.(=) !lx 0) do + invariant { 0 <= !i <= sz } + invariant { !i = sz -> !lx <> 0 } + invariant { !lx <> 0 <-> !b = 0 } + invariant { 0 <= !b <= 1 } + invariant { value x !i - (power radix !i) * !b + = value ox !i - 1 } + invariant { forall j. !i <= j < sz -> + (pelts x)[x.offset + j] = (pelts ox)[x.offset + j] } + invariant { forall j. j < x.offset \/ x.offset + sz <= j -> + (pelts x)[j] = (pelts ox)[j] } + variant { sz - !i } + label StartLoop in + lx := get_ofs x !i; + assert { !lx = (pelts ox)[ox.offset + !i] }; + let res = sub_mod !lx 1 in + ghost (if Limb.(=) !lx 0 then b := 1 else b := 0); + assert { res - radix * !b = !lx - 1 }; + value_sub_update_no_change (pelts x) (x.offset + p2i !i) + (x.offset + p2i !i + 1) + (x.offset + p2i sz) res; + set_ofs x !i res; + assert { forall j. !i < j < sz -> + (pelts x)[x.offset + j] + = (pelts ox)[x.offset + j] }; + assert { value x !i - (power radix !i) * (!b at StartLoop) = value ox !i - 1 }; + value_tail x !i; + value_tail ox !i; + assert { value x (!i+1) - power radix (!i+1) * !b = + value ox (!i+1) - 1 }; + i := Int32.(+) !i 1; + assert { !i = sz -> !b = 0 + by value x sz - power radix sz * !b = value ox sz - 1 + so 0 <= value ox sz - 1 + so value x sz < power radix sz + so value x sz - power radix sz * 1 < 0 + so (!b=0 \/ !b=1) }; + done; + value_concat x !i sz; + value_concat ox !i sz; + assert { forall j. x.offset + !i <= j < x.offset + sz -> + (pelts x)[j] = (pelts ox)[j] + by let k = j - x.offset in + !i <= k < sz + so (pelts x)[x.offset + k] = (pelts ox)[x.offset + k]}; + value_sub_frame (pelts x) (pelts ox) (x.offset + p2i !i) (x.offset + p2i sz) + +end \ No newline at end of file diff --git a/examples/multiprecision/sub/why3session.xml b/examples/multiprecision/sub/why3session.xml new file mode 100644 index 0000000000..714d8d0156 --- /dev/null +++ b/examples/multiprecision/sub/why3session.xml @@ -0,0 +1,1261 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<prover id="0" name="Eprover" version="1.9.1-001" timelimit="5" steplimit="0" memlimit="2000"/> +<prover id="1" name="CVC3" version="2.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="2" name="CVC4" version="1.4" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="3" name="Z3" version="4.5.0" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="4" name="Z3" version="4.4.1" timelimit="5" steplimit="0" memlimit="1000"/> +<prover id="5" name="Alt-Ergo" version="2.0.0" timelimit="5" steplimit="0" memlimit="1000"/> +<file name="../sub.mlw" proved="true"> +<theory name="Sub" proved="true"> + <goal name="VC sub_limb" expl="VC for sub_limb" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_limb.0" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.06" steps="20"/></proof> + </goal> + <goal name="VC sub_limb.1" expl="integer overflow" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="21"/></proof> + </goal> + <goal name="VC sub_limb.2" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.3" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limb.4" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.05" steps="70"/></proof> + </goal> + <goal name="VC sub_limb.5" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC sub_limb.6" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="1.07"/></proof> + </goal> + <goal name="VC sub_limb.7" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_limb.7.0" expl="VC for sub_limb" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC sub_limb.7.1" expl="VC for sub_limb" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="21"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_limb.8" expl="precondition" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="53"/></proof> + </goal> + <goal name="VC sub_limb.9" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.50"/></proof> + </goal> + <goal name="VC sub_limb.10" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC sub_limb.11" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC sub_limb.12" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC sub_limb.12.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC sub_limb.12.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC sub_limb.12.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC sub_limb.12.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.30"/></proof> + </goal> + <goal name="VC sub_limb.12.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.20"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC sub_limb.13" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.14" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_limb.15" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.16" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limb.17" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_limb.18" expl="loop invariant preservation" proved="true"> + <proof prover="0" timelimit="10"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.19" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC sub_limb.20" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_limb.20.0" expl="postcondition" proved="true"> + <transf name="inline_all" proved="true" > + <goal name="VC sub_limb.20.0.0" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="17"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_limb.20.1" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.04"/></proof> + <proof prover="5" memlimit="2000"><result status="valid" time="0.09" steps="25"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_limb.21" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.22" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="25"/></proof> + </goal> + <goal name="VC sub_limb.23" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.24" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.25" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limb.26" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.27" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="42"/></proof> + </goal> + <goal name="VC sub_limb.28" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="43"/></proof> + </goal> + <goal name="VC sub_limb.29" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="123"/></proof> + </goal> + <goal name="VC sub_limb.30" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.07" steps="52"/></proof> + </goal> + <goal name="VC sub_limb.31" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.03" steps="54"/></proof> + </goal> + <goal name="VC sub_limb.32" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.33" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limb.34" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.05"/></proof> + </goal> + <goal name="VC sub_limb.35" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limb.36" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_limb.37" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.08" steps="87"/></proof> + </goal> + <goal name="VC sub_limb.38" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="79"/></proof> + </goal> + <goal name="VC sub_limb.39" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="32"/></proof> + </goal> + <goal name="VC sub_limb.40" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limb.41" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_limbs" expl="VC for sub_limbs" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_limbs.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limbs.1" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.08" steps="25"/></proof> + </goal> + <goal name="VC sub_limbs.2" expl="loop invariant init" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limbs.3" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="77"/></proof> + </goal> + <goal name="VC sub_limbs.4" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC sub_limbs.5" expl="loop invariant init" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limbs.6" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_limbs.7" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limbs.8" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limbs.9" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_limbs.9.0" expl="VC for sub_limbs" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="28"/></proof> + </goal> + <goal name="VC sub_limbs.9.1" expl="VC for sub_limbs" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_limbs.10" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.44"/></proof> + </goal> + <goal name="VC sub_limbs.11" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_limbs.12" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC sub_limbs.13" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_limbs.14" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC sub_limbs.14.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC sub_limbs.14.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC sub_limbs.14.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="4.20"/></proof> + </goal> + <goal name="VC sub_limbs.14.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC sub_limbs.14.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.22"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC sub_limbs.15" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC sub_limbs.16" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limbs.17" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limbs.18" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limbs.19" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub_limbs.20" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.14"/></proof> + </goal> + <goal name="VC sub_limbs.21" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_limbs.22" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_limbs.23" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="22"/></proof> + </goal> + <goal name="VC sub_limbs.24" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub" expl="VC for sub" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub.0" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub.1" expl="integer overflow" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.2" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.09" steps="29"/></proof> + </goal> + <goal name="VC sub.3" expl="loop invariant init" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub.3.0" expl="VC for sub" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.3.1" expl="VC for sub" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub.4" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="88"/></proof> + </goal> + <goal name="VC sub.5" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC sub.6" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="17"/></proof> + </goal> + <goal name="VC sub.7" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.8" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC sub.9" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.10" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="45"/></proof> + </goal> + <goal name="VC sub.11" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.50"/></proof> + </goal> + <goal name="VC sub.12" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="39"/></proof> + </goal> + <goal name="VC sub.13" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub.14" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="41"/></proof> + </goal> + <goal name="VC sub.15" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC sub.15.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC sub.15.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC sub.15.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="4.29"/></proof> + </goal> + <goal name="VC sub.15.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.22"/></proof> + </goal> + <goal name="VC sub.15.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.23"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC sub.16" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub.17" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.18" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub.19" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.20" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC sub.21" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub.22" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="25"/></proof> + </goal> + <goal name="VC sub.23" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="27"/></proof> + </goal> + <goal name="VC sub.24" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.25" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="28"/></proof> + </goal> + <goal name="VC sub.26" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="52"/></proof> + </goal> + <goal name="VC sub.27" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="39"/></proof> + </goal> + <goal name="VC sub.28" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="40"/></proof> + </goal> + <goal name="VC sub.29" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="40"/></proof> + </goal> + <goal name="VC sub.30" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="40"/></proof> + </goal> + <goal name="VC sub.31" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.32" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub.32.0" expl="VC for sub" proved="true"> + <proof prover="0" timelimit="20" memlimit="3000"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC sub.32.1" expl="VC for sub" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.11" steps="49"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub.33" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="64"/></proof> + </goal> + <goal name="VC sub.34" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="65"/></proof> + </goal> + <goal name="VC sub.35" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="57"/></proof> + </goal> + <goal name="VC sub.36" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub.37" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.59"/></proof> + </goal> + <goal name="VC sub.38" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC sub.38.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC sub.38.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC sub.38.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC sub.38.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC sub.38.0.0.2" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.26" steps="190"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC sub.39" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="77"/></proof> + </goal> + <goal name="VC sub.40" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="79"/></proof> + </goal> + <goal name="VC sub.41" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub.42" expl="loop invariant preservation" proved="true"> + <proof prover="5"><result status="valid" time="0.07" steps="64"/></proof> + </goal> + <goal name="VC sub.43" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub.43.0" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.05" steps="66"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub.44" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.45" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.07" steps="107"/></proof> + </goal> + <goal name="VC sub.46" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="49"/></proof> + </goal> + <goal name="VC sub.47" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.48" expl="postcondition" proved="true"> + <proof prover="5"><result status="valid" time="0.04" steps="50"/></proof> + </goal> + <goal name="VC sub.49" expl="precondition" proved="true"> + <proof prover="4"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC sub.50" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub.50.0" expl="VC for sub" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC sub.50.1" expl="VC for sub" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.08" steps="40"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub.51" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="58"/></proof> + </goal> + <goal name="VC sub.52" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.24" steps="160"/></proof> + </goal> + <goal name="VC sub.53" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="52"/></proof> + </goal> + <goal name="VC sub.54" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.07" steps="53"/></proof> + </goal> + <goal name="VC sub.55" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC sub.55.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC sub.55.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC sub.55.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="4.01"/></proof> + </goal> + <goal name="VC sub.55.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.25"/></proof> + </goal> + <goal name="VC sub.55.0.0.2" proved="true"> + <proof prover="2"><result status="valid" time="0.20"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC sub.56" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.64" steps="72"/></proof> + </goal> + <goal name="VC sub.57" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub.58" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub.59" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub.60" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.13"/></proof> + </goal> + <goal name="VC sub.61" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub.62" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="113"/></proof> + </goal> + <goal name="VC sub.63" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="37"/></proof> + </goal> + <goal name="VC sub.64" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="37"/></proof> + </goal> + <goal name="VC sub.65" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="37"/></proof> + </goal> + <goal name="VC sub.66" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub.67" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub.67.0" expl="VC for sub" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="46"/></proof> + </goal> + <goal name="VC sub.67.1" expl="VC for sub" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.10" steps="47"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub.68" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.07" steps="62"/></proof> + </goal> + <goal name="VC sub.69" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="63"/></proof> + </goal> + <goal name="VC sub.70" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="55"/></proof> + </goal> + <goal name="VC sub.71" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="56"/></proof> + </goal> + <goal name="VC sub.72" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.54"/></proof> + </goal> + <goal name="VC sub.73" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC sub.73.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC sub.73.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC sub.73.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC sub.73.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.19"/></proof> + </goal> + <goal name="VC sub.73.0.0.2" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.36" steps="188"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC sub.74" expl="integer overflow" proved="true"> + <proof prover="5"><result status="valid" time="0.02" steps="75"/></proof> + </goal> + <goal name="VC sub.75" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="77"/></proof> + </goal> + <goal name="VC sub.76" expl="loop variant decrease" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub.77" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub.78" expl="loop invariant preservation" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC sub.79" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub.80" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.10" steps="105"/></proof> + </goal> + <goal name="VC sub.81" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="46"/></proof> + </goal> + <goal name="VC sub.82" expl="postcondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub.83" expl="postcondition" proved="true"> + <proof prover="4"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_in_place" expl="VC for sub_in_place" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_in_place.0" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="22"/></proof> + </goal> + <goal name="VC sub_in_place.1" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="23"/></proof> + </goal> + <goal name="VC sub_in_place.2" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="24"/></proof> + </goal> + <goal name="VC sub_in_place.3" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="13"/></proof> + </goal> + <goal name="VC sub_in_place.4" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="74"/></proof> + </goal> + <goal name="VC sub_in_place.5" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="16"/></proof> + </goal> + <goal name="VC sub_in_place.6" expl="loop invariant init" proved="true"> + <proof prover="0"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC sub_in_place.7" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="6"/></proof> + </goal> + <goal name="VC sub_in_place.8" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="35"/></proof> + </goal> + <goal name="VC sub_in_place.9" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="51"/></proof> + </goal> + <goal name="VC sub_in_place.10" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.08" steps="37"/></proof> + </goal> + <goal name="VC sub_in_place.11" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_in_place.11.0" expl="VC for sub_in_place" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC sub_in_place.11.1" expl="VC for sub_in_place" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="27"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_in_place.12" expl="precondition" proved="true"> + <proof prover="2"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC sub_in_place.13" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="63"/></proof> + </goal> + <goal name="VC sub_in_place.14" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.48"/></proof> + </goal> + <goal name="VC sub_in_place.15" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.10" steps="39"/></proof> + </goal> + <goal name="VC sub_in_place.16" expl="precondition" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC sub_in_place.17" expl="precondition" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC sub_in_place.18" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC sub_in_place.18.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC sub_in_place.18.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC sub_in_place.18.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="3.86"/></proof> + </goal> + <goal name="VC sub_in_place.18.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.24"/></proof> + </goal> + <goal name="VC sub_in_place.18.0.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.19"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC sub_in_place.19" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_in_place.20" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_in_place.21" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_in_place.22" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_in_place.23" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_in_place.24" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.47"/></proof> + </goal> + <goal name="VC sub_in_place.25" expl="loop invariant preservation" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_in_place.25.0" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_in_place.26" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.01" steps="24"/></proof> + </goal> + <goal name="VC sub_in_place.27" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="26"/></proof> + </goal> + <goal name="VC sub_in_place.28" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_in_place.29" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="54"/></proof> + </goal> + <goal name="VC sub_in_place.30" expl="loop invariant init" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="52"/></proof> + </goal> + <goal name="VC sub_in_place.31" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="37"/></proof> + </goal> + <goal name="VC sub_in_place.32" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_in_place.32.0" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_in_place.32.1" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_in_place.32.2" expl="VC for sub_in_place" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="67"/></proof> + </goal> + <goal name="VC sub_in_place.32.3" expl="VC for sub_in_place" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_in_place.33" expl="precondition" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.07"/></proof> + </goal> + <goal name="VC sub_in_place.34" expl="precondition" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC sub_in_place.35" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="40"/></proof> + </goal> + <goal name="VC sub_in_place.36" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="70"/></proof> + </goal> + <goal name="VC sub_in_place.37" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="42"/></proof> + </goal> + <goal name="VC sub_in_place.38" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.06" steps="43"/></proof> + </goal> + <goal name="VC sub_in_place.39" expl="postcondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_in_place.39.0" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="68"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_in_place.40" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="48"/></proof> + </goal> + <goal name="VC sub_in_place.41" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.03" steps="64"/></proof> + </goal> + <goal name="VC sub_in_place.42" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="39"/></proof> + </goal> + <goal name="VC sub_in_place.43" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="42"/></proof> + </goal> + <goal name="VC sub_in_place.44" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="43"/></proof> + </goal> + <goal name="VC sub_in_place.45" expl="precondition" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_in_place.45.0" expl="VC for sub_in_place" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="44"/></proof> + </goal> + <goal name="VC sub_in_place.45.1" expl="VC for sub_in_place" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_in_place.46" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.27" steps="153"/></proof> + </goal> + <goal name="VC sub_in_place.47" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="82"/></proof> + </goal> + <goal name="VC sub_in_place.48" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC sub_in_place.49" expl="precondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="53"/></proof> + </goal> + <goal name="VC sub_in_place.50" expl="assertion" proved="true"> + <transf name="introduce_premises" proved="true" > + <goal name="VC sub_in_place.50.0" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC sub_in_place.50.0.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC sub_in_place.50.0.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC sub_in_place.50.0.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.23"/></proof> + </goal> + <goal name="VC sub_in_place.50.0.0.2" proved="true"> + <proof prover="2"><result status="valid" time="0.19"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC sub_in_place.51" expl="integer overflow" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.17" steps="68"/></proof> + </goal> + <goal name="VC sub_in_place.52" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_in_place.53" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_in_place.54" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC sub_in_place.55" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC sub_in_place.56" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.51"/></proof> + </goal> + <goal name="VC sub_in_place.57" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.11"/></proof> + </goal> + <goal name="VC sub_in_place.58" expl="assertion" proved="true"> + <transf name="split_goal_right" proved="true" > + <goal name="VC sub_in_place.58.0" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.04" steps="103"/></proof> + </goal> + </transf> + </goal> + <goal name="VC sub_in_place.59" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.07" steps="36"/></proof> + </goal> + <goal name="VC sub_in_place.60" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="37"/></proof> + </goal> + <goal name="VC sub_in_place.61" expl="postcondition" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.05" steps="62"/></proof> + </goal> + </transf> + </goal> + <goal name="VC decr" expl="VC for decr" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC decr.0" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.1" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.2" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr.3" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="26"/></proof> + </goal> + <goal name="VC decr.4" expl="loop invariant init" proved="true"> + <proof prover="2" timelimit="5" memlimit="2000"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC decr.5" expl="loop invariant init" proved="true"> + <transf name="split_vc" proved="true" > + </transf> + </goal> + <goal name="VC decr.6" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="98"/></proof> + </goal> + <goal name="VC decr.7" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="38"/></proof> + </goal> + <goal name="VC decr.8" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.9" expl="assertion" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC decr.10" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.11" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr.12" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="129"/></proof> + </goal> + <goal name="VC decr.13" expl="assertion" proved="true"> + <proof prover="5" memlimit="2000"><result status="valid" time="0.02" steps="51"/></proof> + </goal> + <goal name="VC decr.14" expl="assertion" proved="true"> + <transf name="split_all_full" proved="true" > + <goal name="VC decr.14.0" expl="assertion" proved="true"> + <proof prover="5" timelimit="10" memlimit="4000"><result status="valid" time="3.00" steps="241"/></proof> + </goal> + </transf> + </goal> + <goal name="VC decr.15" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr.16" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr.17" expl="assertion" proved="true"> + <transf name="use_th" proved="true" arg1="lineardecision.LinearDecisionIntMP"> + <goal name="VC decr.17.0" expl="assertion" proved="true"> + <transf name="reflection_f" proved="true" arg1="mp_decision"> + <goal name="VC decr.17.0.0" expl="assertion" proved="true"> + <proof prover="0"><result status="valid" time="0.21"/></proof> + </goal> + <goal name="VC decr.17.0.1" proved="true"> + <proof prover="3"><result status="valid" time="0.28"/></proof> + </goal> + <goal name="VC decr.17.0.2" proved="true"> + <proof prover="3"><result status="valid" time="0.23"/></proof> + </goal> + </transf> + </goal> + </transf> + </goal> + <goal name="VC decr.18" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC decr.19" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC decr.19.0" expl="VC for decr" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.19.1" expl="VC for decr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.19.2" expl="VC for decr" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC decr.19.3" expl="VC for decr" proved="true"> + <proof prover="3"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC decr.19.4" expl="VC for decr" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr.19.5" expl="VC for decr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC decr.20" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.21" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.08"/></proof> + </goal> + <goal name="VC decr.22" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.23" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.24" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.25" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.52"/></proof> + </goal> + <goal name="VC decr.26" expl="loop invariant preservation" proved="true"> + <proof prover="2"><result status="valid" time="0.06"/></proof> + </goal> + <goal name="VC decr.27" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr.28" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr.29" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC decr.29.0" expl="VC for decr" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr.29.1" expl="VC for decr" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr.29.2" expl="VC for decr" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="40"/></proof> + </goal> + <goal name="VC decr.29.3" expl="VC for decr" proved="true"> + <proof prover="3"><result status="valid" time="0.00"/></proof> + </goal> + </transf> + </goal> + <goal name="VC decr.30" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr.31" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="22"/></proof> + </goal> + <goal name="VC decr.32" expl="postcondition" proved="true"> + <proof prover="0"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC decr_1" expl="VC for decr_1" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC decr_1.0" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.1" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.2" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.3" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.4" expl="loop invariant init" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC decr_1.5" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="20"/></proof> + </goal> + <goal name="VC decr_1.6" expl="loop invariant init" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="18"/></proof> + </goal> + <goal name="VC decr_1.7" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="90"/></proof> + </goal> + <goal name="VC decr_1.8" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.01" steps="40"/></proof> + </goal> + <goal name="VC decr_1.9" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="29"/></proof> + </goal> + <goal name="VC decr_1.10" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr_1.11" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr_1.12" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="130"/></proof> + </goal> + <goal name="VC decr_1.13" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="54"/></proof> + </goal> + <goal name="VC decr_1.14" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.09" steps="114"/></proof> + </goal> + <goal name="VC decr_1.15" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr_1.16" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr_1.17" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="54"/></proof> + </goal> + <goal name="VC decr_1.18" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.16"/></proof> + </goal> + <goal name="VC decr_1.19" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC decr_1.19.0" expl="VC for decr_1" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="46"/></proof> + </goal> + <goal name="VC decr_1.19.1" expl="VC for decr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr_1.19.2" expl="VC for decr_1" proved="true"> + <proof prover="2"><result status="valid" time="0.12"/></proof> + </goal> + <goal name="VC decr_1.19.3" expl="VC for decr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.19.4" expl="VC for decr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.19.5" expl="VC for decr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> + <goal name="VC decr_1.20" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr_1.21" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.08" steps="122"/></proof> + </goal> + <goal name="VC decr_1.22" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr_1.23" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr_1.24" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.25" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="50"/></proof> + </goal> + <goal name="VC decr_1.26" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="66"/></proof> + </goal> + <goal name="VC decr_1.27" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="69"/></proof> + </goal> + <goal name="VC decr_1.28" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="52"/></proof> + </goal> + <goal name="VC decr_1.29" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC decr_1.30" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr_1.31" expl="precondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="131"/></proof> + </goal> + <goal name="VC decr_1.32" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="55"/></proof> + </goal> + <goal name="VC decr_1.33" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.08" steps="112"/></proof> + </goal> + <goal name="VC decr_1.34" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.35" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC decr_1.36" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="42"/></proof> + </goal> + <goal name="VC decr_1.37" expl="integer overflow" proved="true"> + <proof prover="3"><result status="valid" time="0.20"/></proof> + </goal> + <goal name="VC decr_1.38" expl="assertion" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="47"/></proof> + </goal> + <goal name="VC decr_1.39" expl="loop variant decrease" proved="true"> + <proof prover="3"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC decr_1.40" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="122"/></proof> + </goal> + <goal name="VC decr_1.41" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr_1.42" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr_1.43" expl="loop invariant preservation" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.44" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="50"/></proof> + </goal> + <goal name="VC decr_1.45" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.04" steps="66"/></proof> + </goal> + <goal name="VC decr_1.46" expl="loop invariant preservation" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="69"/></proof> + </goal> + <goal name="VC decr_1.47" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.48" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.49" expl="assertion" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC decr_1.49.0" expl="VC for decr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr_1.49.1" expl="VC for decr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC decr_1.49.2" expl="VC for decr_1" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.02" steps="44"/></proof> + </goal> + <goal name="VC decr_1.49.3" expl="VC for decr_1" proved="true"> + <proof prover="3"><result status="valid" time="0.01"/></proof> + </goal> + </transf> + </goal> + <goal name="VC decr_1.50" expl="precondition" proved="true"> + <proof prover="3"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC decr_1.51" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.03" steps="26"/></proof> + </goal> + <goal name="VC decr_1.52" expl="postcondition" proved="true"> + <proof prover="5" timelimit="1"><result status="valid" time="0.06" steps="40"/></proof> + </goal> + </transf> + </goal> +</theory> +</file> +</why3session> diff --git a/examples/multiprecision/sub/why3shapes.gz b/examples/multiprecision/sub/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..aa513548f81ba913ac166ef6c298afc98a0311fd GIT binary patch literal 14208 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 literal 0 HcmV?d00001 diff --git a/examples/multiprecision/types.mlw b/examples/multiprecision/types.mlw new file mode 100644 index 0000000000..ef7a27fdcf --- /dev/null +++ b/examples/multiprecision/types.mlw @@ -0,0 +1,14 @@ +module Types + + use import mach.c.C + use import mach.int.Int32 + use import mach.int.UInt64GMP as Limb + + type limb = uint64 + type t = ptr limb + + exception Break + exception Return32 int32 + exception ReturnLimb limb + +end \ No newline at end of file diff --git a/examples/multiprecision/types/why3session.xml b/examples/multiprecision/types/why3session.xml new file mode 100644 index 0000000000..8d26478429 --- /dev/null +++ b/examples/multiprecision/types/why3session.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<file name="../types.mlw" proved="true"> +</file> +</why3session> diff --git a/examples/multiprecision/types/why3shapes.gz b/examples/multiprecision/types/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..0239669d57f6148035ad2dc4a6d54ae7db678e85 GIT binary patch literal 20 Scmb2|=3oGW|IA<tL;wI7bOE&h literal 0 HcmV?d00001 diff --git a/examples/multiprecision/util.mlw b/examples/multiprecision/util.mlw new file mode 100644 index 0000000000..c899342e3f --- /dev/null +++ b/examples/multiprecision/util.mlw @@ -0,0 +1,65 @@ +module Util + + use import int.Int + use import mach.int.Int32 + use import mach.int.UInt64GMP as Limb + use import int.Power + use import ref.Ref + use import mach.c.C + use import map.Map + use import types.Types + use import lemmas.Lemmas + + let copy (r x:t) (sz:int32) : unit + requires { valid x sz } + requires { valid r sz } + ensures { map_eq_sub_shift (pelts r) (pelts x) r.offset x.offset sz } + ensures { forall j. (j < offset r \/ offset r + sz <= j) -> + (pelts r)[j] = old (pelts r)[j] } + = + let zero = Int32.of_int 0 in + let one = Int32.of_int 1 in + let i = ref zero in + let xp = ref (C.incr x zero) in + let rp = ref (C.incr r zero) in + while (Int32.(<) !i sz) do + variant { p2i sz - p2i !i } + invariant { 0 <= !i <= sz } + invariant { map_eq_sub_shift (pelts r) (pelts x) r.offset x.offset !i } + invariant { pelts !xp = pelts x } + invariant { pelts !rp = pelts r } + invariant { !xp.min = min x } + invariant { !xp.max = x.max } + invariant { !rp.min = r.min } + invariant { !rp.max = r.max } + invariant { !xp.offset = x.offset + !i } + invariant { !rp.offset = r.offset + !i } + invariant { forall j. (j < offset r \/ offset r + sz <= j) -> + (pelts r)[j] = old (pelts r)[j] } + C.set !rp (C.get !xp); + rp.contents <- C.incr !rp one; + xp.contents <- C.incr !xp one; + i := Int32.(+) !i one; + done + + (** [zero r sz] sets [(r,sz)] to zero. Corresponds to [mpn_zero]. *) + let zero (r:t) (sz:int32) : unit + requires { valid r sz } + ensures { value r sz = 0 } + ensures { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + = + let i = ref (Int32.of_int 0) in + let lzero = Limb.of_int 0 in + while Int32.(<) !i sz do + invariant { 0 <= !i <= sz } + variant { sz - !i } + invariant { value r !i = 0 } + invariant { forall j. (j < offset r \/ offset r + sz <= j) + -> (pelts r)[j] = old (pelts r)[j] } + set_ofs r !i lzero; + value_sub_tail (pelts r) r.offset (r.offset + p2i !i); + i := Int32.(+) !i (Int32.of_int 1); + done + +end \ No newline at end of file diff --git a/examples/multiprecision/util/why3session.xml b/examples/multiprecision/util/why3session.xml new file mode 100644 index 0000000000..13d81b38ae --- /dev/null +++ b/examples/multiprecision/util/why3session.xml @@ -0,0 +1,172 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<prover id="0" name="Alt-Ergo" version="2.0.0" timelimit="1" steplimit="0" memlimit="1000"/> +<prover id="1" name="Z3" version="4.5.0" timelimit="1" steplimit="0" memlimit="1000"/> +<file name="../util.mlw" proved="true"> +<theory name="Util" proved="true"> + <goal name="VC copy" expl="VC for copy" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC copy.0" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.1" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.2" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC copy.3" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.4" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.5" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC copy.6" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.00"/></proof> + </goal> + <goal name="VC copy.7" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC copy.8" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC copy.9" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC copy.10" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC copy.11" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC copy.12" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC copy.13" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC copy.14" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC copy.15" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.16" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.17" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC copy.18" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC copy.19" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.20" expl="loop variant decrease" proved="true"> + <proof prover="1"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC copy.21" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.04"/></proof> + </goal> + <goal name="VC copy.22" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.06" steps="213"/></proof> + <proof prover="1"><result status="timeout" time="1.00"/></proof> + </goal> + <goal name="VC copy.23" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC copy.24" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.05" steps="101"/></proof> + <proof prover="1"><result status="timeout" time="1.00"/></proof> + </goal> + <goal name="VC copy.25" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.26" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.27" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC copy.28" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC copy.29" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC copy.30" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC copy.31" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="108"/></proof> + <proof prover="1"><result status="timeout" time="1.00"/></proof> + </goal> + <goal name="VC copy.32" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC copy.33" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + </transf> + </goal> + <goal name="VC zero" expl="VC for zero" proved="true"> + <transf name="split_vc" proved="true" > + <goal name="VC zero.0" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero.1" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero.2" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC zero.3" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero.4" expl="loop invariant init" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC zero.5" expl="precondition" proved="true"> + <proof prover="0"><result status="valid" time="0.01" steps="24"/></proof> + <proof prover="1"><result status="timeout" time="1.00"/></proof> + </goal> + <goal name="VC zero.6" expl="precondition" proved="true"> + <proof prover="1"><result status="valid" time="0.01"/></proof> + </goal> + <goal name="VC zero.7" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + <goal name="VC zero.8" expl="integer overflow" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero.9" expl="loop variant decrease" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero.10" expl="loop invariant preservation" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero.11" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.10" steps="110"/></proof> + <proof prover="1"><result status="timeout" time="1.00"/></proof> + </goal> + <goal name="VC zero.12" expl="loop invariant preservation" proved="true"> + <proof prover="0"><result status="valid" time="0.02" steps="51"/></proof> + <proof prover="1"><result status="timeout" time="1.00"/></proof> + </goal> + <goal name="VC zero.13" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.03"/></proof> + </goal> + <goal name="VC zero.14" expl="postcondition" proved="true"> + <proof prover="1"><result status="valid" time="0.02"/></proof> + </goal> + </transf> + </goal> +</theory> +</file> +</why3session> diff --git a/examples/multiprecision/util/why3shapes.gz b/examples/multiprecision/util/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..6239efc4c94f3abea733c1eb69df93c94af07f37 GIT binary patch literal 1708 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 literal 0 HcmV?d00001 diff --git a/examples/multiprecision/wmpn.mlw b/examples/multiprecision/wmpn.mlw new file mode 100644 index 0000000000..e0650b7504 --- /dev/null +++ b/examples/multiprecision/wmpn.mlw @@ -0,0 +1,13 @@ +module Wmpn + + use export types.Types + use export lemmas.Lemmas + use export util.Util + use export compare.Compare + use export add.Add + use export sub.Sub + use export logical.Logical + use export mul.Mul + use export div.Div + +end \ No newline at end of file diff --git a/examples/multiprecision/wmpn/why3session.xml b/examples/multiprecision/wmpn/why3session.xml new file mode 100644 index 0000000000..8c6d53ba4d --- /dev/null +++ b/examples/multiprecision/wmpn/why3session.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE why3session PUBLIC "-//Why3//proof session v5//EN" +"http://why3.lri.fr/why3session.dtd"> +<why3session shape_version="4"> +<file name="../wmpn.mlw" proved="true"> +</file> +</why3session> diff --git a/examples/multiprecision/wmpn/why3shapes.gz b/examples/multiprecision/wmpn/why3shapes.gz new file mode 100644 index 0000000000000000000000000000000000000000..0239669d57f6148035ad2dc4a6d54ae7db678e85 GIT binary patch literal 20 Scmb2|=3oGW|IA<tL;wI7bOE&h literal 0 HcmV?d00001 -- GitLab