From fdd385baf3adfbe737d5834650327839bf8bd88a Mon Sep 17 00:00:00 2001
From: Jean-Christophe Filliatre <Jean-Christophe.Filliatre@lri.fr>
Date: Fri, 25 May 2018 13:35:30 +0200
Subject: [PATCH] bitvectors: removed some Coq proofs

---
 examples/bitvectors/bitvector.why             |  12 +-
 .../bitvector_BitVector_to_nat_of_one_1.v     | 308 -----------------
 .../bitvector_BitVector_to_nat_of_zero_1.v    | 309 -----------------
 ...tvector_BitVector_to_nat_sub_footprint_1.v | 326 ------------------
 examples/bitvectors/bitvector/why3session.xml |  99 ++++--
 examples/bitvectors/bitvector/why3shapes.gz   | Bin 1556 -> 1982 bytes
 6 files changed, 71 insertions(+), 983 deletions(-)
 delete mode 100644 examples/bitvectors/bitvector/bitvector_BitVector_to_nat_of_one_1.v
 delete mode 100644 examples/bitvectors/bitvector/bitvector_BitVector_to_nat_of_zero_1.v
 delete mode 100644 examples/bitvectors/bitvector/bitvector_BitVector_to_nat_sub_footprint_1.v

diff --git a/examples/bitvectors/bitvector.why b/examples/bitvectors/bitvector.why
index 9e7e3155a6..31e36d2ae8 100644
--- a/examples/bitvectors/bitvector.why
+++ b/examples/bitvectors/bitvector.why
@@ -198,14 +198,16 @@ theory BitVector
 
 
   lemma to_nat_of_zero:
-    forall b:bv, i j:int. size > j /\ i >= 0 ->
+    forall b:bv, j i:int. size > j /\ i >= 0 ->
       (forall k:int. j >= k >= i -> nth b k = False) ->
       to_nat_sub b j i = 0
 
-  lemma to_nat_of_one:
-    forall b:bv, i j:int. size > j >= i >= 0 ->
-      (forall k:int. j >= k >= i -> nth b k = True) ->
-      to_nat_sub b j i = pow2 (j-i+1) - 1
+  let rec lemma to_nat_of_one (b: bv) i j
+    requires { size > j >= i >= 0 }
+    requires { forall k:int. j >= k >= i -> nth b k = True }
+    ensures  { to_nat_sub b j i = pow2 (j-i+1) - 1 }
+    variant  { j - i }
+  = if j > i then to_nat_of_one b i (j-1)
 
   lemma to_nat_sub_footprint: forall b1 b2:bv, j i:int. size > j /\ i >=0 ->
     (forall k:int. i <= k <= j -> nth b1 k = nth b2 k) ->
diff --git a/examples/bitvectors/bitvector/bitvector_BitVector_to_nat_of_one_1.v b/examples/bitvectors/bitvector/bitvector_BitVector_to_nat_of_one_1.v
deleted file mode 100644
index 35c16e9e10..0000000000
--- a/examples/bitvectors/bitvector/bitvector_BitVector_to_nat_of_one_1.v
+++ /dev/null
@@ -1,308 +0,0 @@
-(* This file is generated by Why3's Coq driver *)
-(* Beware! Only edit allowed sections below    *)
-Require Import BuiltIn.
-Require BuiltIn.
-Require bool.Bool.
-Require int.Int.
-Require int.Abs.
-Require int.EuclideanDivision.
-
-Parameter pow2: Z -> Z.
-
-Axiom Power_0 : ((pow2 0%Z) = 1%Z).
-
-Axiom Power_s : forall (n:Z), (0%Z <= n)%Z ->
-  ((pow2 (n + 1%Z)%Z) = (2%Z * (pow2 n))%Z).
-
-Axiom Power_1 : ((pow2 1%Z) = 2%Z).
-
-Axiom Power_sum : forall (n:Z) (m:Z), ((0%Z <= n)%Z /\ (0%Z <= m)%Z) ->
-  ((pow2 (n + m)%Z) = ((pow2 n) * (pow2 m))%Z).
-
-Axiom pow2pos : forall (i:Z), (0%Z <= i)%Z -> (0%Z < (pow2 i))%Z.
-
-Axiom pow2_0 : ((pow2 0%Z) = 1%Z).
-
-Axiom pow2_1 : ((pow2 1%Z) = 2%Z).
-
-Axiom pow2_2 : ((pow2 2%Z) = 4%Z).
-
-Axiom pow2_3 : ((pow2 3%Z) = 8%Z).
-
-Axiom pow2_4 : ((pow2 4%Z) = 16%Z).
-
-Axiom pow2_5 : ((pow2 5%Z) = 32%Z).
-
-Axiom pow2_6 : ((pow2 6%Z) = 64%Z).
-
-Axiom pow2_7 : ((pow2 7%Z) = 128%Z).
-
-Axiom pow2_8 : ((pow2 8%Z) = 256%Z).
-
-Axiom pow2_9 : ((pow2 9%Z) = 512%Z).
-
-Axiom pow2_10 : ((pow2 10%Z) = 1024%Z).
-
-Axiom pow2_11 : ((pow2 11%Z) = 2048%Z).
-
-Axiom pow2_12 : ((pow2 12%Z) = 4096%Z).
-
-Axiom pow2_13 : ((pow2 13%Z) = 8192%Z).
-
-Axiom pow2_14 : ((pow2 14%Z) = 16384%Z).
-
-Axiom pow2_15 : ((pow2 15%Z) = 32768%Z).
-
-Axiom pow2_16 : ((pow2 16%Z) = 65536%Z).
-
-Axiom pow2_17 : ((pow2 17%Z) = 131072%Z).
-
-Axiom pow2_18 : ((pow2 18%Z) = 262144%Z).
-
-Axiom pow2_19 : ((pow2 19%Z) = 524288%Z).
-
-Axiom pow2_20 : ((pow2 20%Z) = 1048576%Z).
-
-Axiom pow2_21 : ((pow2 21%Z) = 2097152%Z).
-
-Axiom pow2_22 : ((pow2 22%Z) = 4194304%Z).
-
-Axiom pow2_23 : ((pow2 23%Z) = 8388608%Z).
-
-Axiom pow2_24 : ((pow2 24%Z) = 16777216%Z).
-
-Axiom pow2_25 : ((pow2 25%Z) = 33554432%Z).
-
-Axiom pow2_26 : ((pow2 26%Z) = 67108864%Z).
-
-Axiom pow2_27 : ((pow2 27%Z) = 134217728%Z).
-
-Axiom pow2_28 : ((pow2 28%Z) = 268435456%Z).
-
-Axiom pow2_29 : ((pow2 29%Z) = 536870912%Z).
-
-Axiom pow2_30 : ((pow2 30%Z) = 1073741824%Z).
-
-Axiom pow2_31 : ((pow2 31%Z) = 2147483648%Z).
-
-Axiom pow2_32 : ((pow2 32%Z) = 4294967296%Z).
-
-Axiom pow2_33 : ((pow2 33%Z) = 8589934592%Z).
-
-Axiom pow2_34 : ((pow2 34%Z) = 17179869184%Z).
-
-Axiom pow2_35 : ((pow2 35%Z) = 34359738368%Z).
-
-Axiom pow2_36 : ((pow2 36%Z) = 68719476736%Z).
-
-Axiom pow2_37 : ((pow2 37%Z) = 137438953472%Z).
-
-Axiom pow2_38 : ((pow2 38%Z) = 274877906944%Z).
-
-Axiom pow2_39 : ((pow2 39%Z) = 549755813888%Z).
-
-Axiom pow2_40 : ((pow2 40%Z) = 1099511627776%Z).
-
-Axiom pow2_41 : ((pow2 41%Z) = 2199023255552%Z).
-
-Axiom pow2_42 : ((pow2 42%Z) = 4398046511104%Z).
-
-Axiom pow2_43 : ((pow2 43%Z) = 8796093022208%Z).
-
-Axiom pow2_44 : ((pow2 44%Z) = 17592186044416%Z).
-
-Axiom pow2_45 : ((pow2 45%Z) = 35184372088832%Z).
-
-Axiom pow2_46 : ((pow2 46%Z) = 70368744177664%Z).
-
-Axiom pow2_47 : ((pow2 47%Z) = 140737488355328%Z).
-
-Axiom pow2_48 : ((pow2 48%Z) = 281474976710656%Z).
-
-Axiom pow2_49 : ((pow2 49%Z) = 562949953421312%Z).
-
-Axiom pow2_50 : ((pow2 50%Z) = 1125899906842624%Z).
-
-Axiom pow2_51 : ((pow2 51%Z) = 2251799813685248%Z).
-
-Axiom pow2_52 : ((pow2 52%Z) = 4503599627370496%Z).
-
-Axiom pow2_53 : ((pow2 53%Z) = 9007199254740992%Z).
-
-Axiom pow2_54 : ((pow2 54%Z) = 18014398509481984%Z).
-
-Axiom pow2_55 : ((pow2 55%Z) = 36028797018963968%Z).
-
-Axiom pow2_56 : ((pow2 56%Z) = 72057594037927936%Z).
-
-Axiom pow2_57 : ((pow2 57%Z) = 144115188075855872%Z).
-
-Axiom pow2_58 : ((pow2 58%Z) = 288230376151711744%Z).
-
-Axiom pow2_59 : ((pow2 59%Z) = 576460752303423488%Z).
-
-Axiom pow2_60 : ((pow2 60%Z) = 1152921504606846976%Z).
-
-Axiom pow2_61 : ((pow2 61%Z) = 2305843009213693952%Z).
-
-Axiom pow2_62 : ((pow2 62%Z) = 4611686018427387904%Z).
-
-Axiom pow2_63 : ((pow2 63%Z) = 9223372036854775808%Z).
-
-Axiom Div_mult_inst : forall (x:Z) (z:Z), (0%Z < x)%Z ->
-  ((int.EuclideanDivision.div ((x * 1%Z)%Z + z)%Z
-  x) = (1%Z + (int.EuclideanDivision.div z x))%Z).
-
-Axiom Div_double : forall (x:Z) (y:Z), ((0%Z < y)%Z /\ ((y <= x)%Z /\
-  (x < (2%Z * y)%Z)%Z)) -> ((int.EuclideanDivision.div x y) = 1%Z).
-
-Axiom Div_pow : forall (x:Z) (i:Z), (0%Z < i)%Z ->
-  ((((pow2 (i - 1%Z)%Z) <= x)%Z /\ (x < (pow2 i))%Z) ->
-  ((int.EuclideanDivision.div x (pow2 (i - 1%Z)%Z)) = 1%Z)).
-
-Axiom Div_double_neg : forall (x:Z) (y:Z), ((((-2%Z)%Z * y)%Z <= x)%Z /\
-  ((x < (-y)%Z)%Z /\ ((-y)%Z < 0%Z)%Z)) -> ((int.EuclideanDivision.div x
-  y) = (-2%Z)%Z).
-
-Axiom Div_pow2 : forall (x:Z) (i:Z), (0%Z < i)%Z ->
-  ((((-(pow2 i))%Z <= x)%Z /\ (x < (-(pow2 (i - 1%Z)%Z))%Z)%Z) ->
-  ((int.EuclideanDivision.div x (pow2 (i - 1%Z)%Z)) = (-2%Z)%Z)).
-
-Axiom Mod_pow2_gen : forall (x:Z) (i:Z) (k:Z), ((0%Z <= k)%Z /\ (k < i)%Z) ->
-  ((int.EuclideanDivision.mod1 (int.EuclideanDivision.div (x + (pow2 i))%Z
-  (pow2 k)) 2%Z) = (int.EuclideanDivision.mod1 (int.EuclideanDivision.div x
-  (pow2 k)) 2%Z)).
-
-Parameter size: Z.
-
-Axiom size_positive : (1%Z < size)%Z.
-
-Axiom bv : Type.
-Parameter bv_WhyType : WhyType bv.
-Existing Instance bv_WhyType.
-
-Parameter nth: bv -> Z -> bool.
-
-Parameter bvzero: bv.
-
-Axiom Nth_zero : forall (n:Z), ((0%Z <= n)%Z /\ (n < size)%Z) -> ((nth bvzero
-  n) = false).
-
-Parameter bvone: bv.
-
-Axiom Nth_one : forall (n:Z), ((0%Z <= n)%Z /\ (n < size)%Z) -> ((nth bvone
-  n) = true).
-
-(* Why3 assumption *)
-Definition eq (v1:bv) (v2:bv): Prop := forall (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth v1 n) = (nth v2 n)).
-
-Axiom extensionality : forall (v1:bv) (v2:bv), (eq v1 v2) -> (v1 = v2).
-
-Parameter bw_and: bv -> bv -> bv.
-
-Axiom Nth_bw_and : forall (v1:bv) (v2:bv) (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth (bw_and v1 v2) n) = (Init.Datatypes.andb (nth v1
-  n) (nth v2 n))).
-
-Parameter bw_or: bv -> bv -> bv.
-
-Axiom Nth_bw_or : forall (v1:bv) (v2:bv) (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth (bw_or v1 v2) n) = (Init.Datatypes.orb (nth v1
-  n) (nth v2 n))).
-
-Parameter bw_xor: bv -> bv -> bv.
-
-Axiom Nth_bw_xor : forall (v1:bv) (v2:bv) (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth (bw_xor v1 v2) n) = (Init.Datatypes.xorb (nth v1
-  n) (nth v2 n))).
-
-Axiom Nth_bw_xor_v1true : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v1 n) = true)) -> ((nth (bw_xor v1 v2)
-  n) = (Init.Datatypes.negb (nth v2 n))).
-
-Axiom Nth_bw_xor_v1false : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v1 n) = false)) -> ((nth (bw_xor v1 v2) n) = (nth v2
-  n)).
-
-Axiom Nth_bw_xor_v2true : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v2 n) = true)) -> ((nth (bw_xor v1 v2)
-  n) = (Init.Datatypes.negb (nth v1 n))).
-
-Axiom Nth_bw_xor_v2false : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v2 n) = false)) -> ((nth (bw_xor v1 v2) n) = (nth v1
-  n)).
-
-Parameter bw_not: bv -> bv.
-
-Axiom Nth_bw_not : forall (v:bv) (n:Z), ((0%Z <= n)%Z /\ (n < size)%Z) ->
-  ((nth (bw_not v) n) = (Init.Datatypes.negb (nth v n))).
-
-Parameter lsr: bv -> Z -> bv.
-
-Axiom lsr_nth_low : forall (b:bv) (n:Z) (s:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ (((0%Z <= s)%Z /\ (s < size)%Z) /\
-  ((n + s)%Z < size)%Z)) -> ((nth (lsr b s) n) = (nth b (n + s)%Z)).
-
-Axiom lsr_nth_high : forall (b:bv) (n:Z) (s:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ (((0%Z <= s)%Z /\ (s < size)%Z) /\
-  (size <= (n + s)%Z)%Z)) -> ((nth (lsr b s) n) = false).
-
-Parameter asr: bv -> Z -> bv.
-
-Axiom asr_nth_low : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> (((n + s)%Z < size)%Z -> ((nth (asr b s)
-  n) = (nth b (n + s)%Z)))).
-
-Axiom asr_nth_high : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> ((size <= (n + s)%Z)%Z -> ((nth (asr b s)
-  n) = (nth b (size - 1%Z)%Z)))).
-
-Parameter lsl: bv -> Z -> bv.
-
-Axiom lsl_nth_high : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> ((0%Z <= (n - s)%Z)%Z -> ((nth (lsl b s)
-  n) = (nth b (n - s)%Z)))).
-
-Axiom lsl_nth_low : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> (((n - s)%Z < 0%Z)%Z -> ((nth (lsl b s)
-  n) = false))).
-
-Parameter to_nat_sub: bv -> Z -> Z -> Z.
-
-Axiom to_nat_sub_zero : forall (b:bv) (j:Z) (i:Z), ((0%Z <= i)%Z /\
-  ((i <= j)%Z /\ (j < size)%Z)) -> (((nth b j) = false) -> ((to_nat_sub b j
-  i) = (to_nat_sub b (j - 1%Z)%Z i))).
-
-Axiom to_nat_sub_one : forall (b:bv) (j:Z) (i:Z), ((0%Z <= i)%Z /\
-  ((i <= j)%Z /\ (j < size)%Z)) -> (((nth b j) = true) -> ((to_nat_sub b j
-  i) = ((pow2 (j - i)%Z) + (to_nat_sub b (j - 1%Z)%Z i))%Z)).
-
-Axiom to_nat_sub_high : forall (b:bv) (j:Z) (i:Z), (j < i)%Z ->
-  ((to_nat_sub b j i) = 0%Z).
-
-Axiom to_nat_of_zero2 : forall (b:bv) (i:Z) (j:Z), ((j < size)%Z /\
-  ((i <= j)%Z /\ (0%Z <= i)%Z)) -> ((forall (k:Z), ((k <= j)%Z /\
-  (i < k)%Z) -> ((nth b k) = false)) -> ((to_nat_sub b j 0%Z) = (to_nat_sub b
-  i 0%Z))).
-
-Axiom to_nat_of_zero : forall (b:bv) (i:Z) (j:Z), ((j < size)%Z /\
-  (0%Z <= i)%Z) -> ((forall (k:Z), ((k <= j)%Z /\ (i <= k)%Z) -> ((nth b
-  k) = false)) -> ((to_nat_sub b j i) = 0%Z)).
-
-Require Import Why3.
-Ltac cvc := why3 "CVC3,2.4.1," timelimit 5; admit.
-Open Scope Z_scope.
-
-(* Why3 goal *)
-Theorem to_nat_of_one : forall (b:bv) (i:Z) (j:Z), ((j < size)%Z /\
-  ((i <= j)%Z /\ (0%Z <= i)%Z)) -> ((forall (k:Z), ((k <= j)%Z /\
-  (i <= k)%Z) -> ((nth b k) = true)) -> ((to_nat_sub b j
-  i) = ((pow2 ((j - i)%Z + 1%Z)%Z) - 1%Z)%Z)).
-(* Why3 intros b i j (h1,(h2,h3)) h4. *)
-intros b i j (Hj,(Hij,Hi)).
-generalize Hij Hj.
-pattern j; apply Zlt_lower_bound_ind with (z:=i); auto.
-cvc.
-Admitted.
-
diff --git a/examples/bitvectors/bitvector/bitvector_BitVector_to_nat_of_zero_1.v b/examples/bitvectors/bitvector/bitvector_BitVector_to_nat_of_zero_1.v
deleted file mode 100644
index 66ceafa55f..0000000000
--- a/examples/bitvectors/bitvector/bitvector_BitVector_to_nat_of_zero_1.v
+++ /dev/null
@@ -1,309 +0,0 @@
-(* This file is generated by Why3's Coq driver *)
-(* Beware! Only edit allowed sections below    *)
-Require Import BuiltIn.
-Require BuiltIn.
-Require bool.Bool.
-Require int.Int.
-Require int.Abs.
-Require int.EuclideanDivision.
-
-Parameter pow2: Z -> Z.
-
-Axiom Power_0 : ((pow2 0%Z) = 1%Z).
-
-Axiom Power_s : forall (n:Z), (0%Z <= n)%Z ->
-  ((pow2 (n + 1%Z)%Z) = (2%Z * (pow2 n))%Z).
-
-Axiom Power_1 : ((pow2 1%Z) = 2%Z).
-
-Axiom Power_sum : forall (n:Z) (m:Z), ((0%Z <= n)%Z /\ (0%Z <= m)%Z) ->
-  ((pow2 (n + m)%Z) = ((pow2 n) * (pow2 m))%Z).
-
-Axiom pow2pos : forall (i:Z), (0%Z <= i)%Z -> (0%Z < (pow2 i))%Z.
-
-Axiom pow2_0 : ((pow2 0%Z) = 1%Z).
-
-Axiom pow2_1 : ((pow2 1%Z) = 2%Z).
-
-Axiom pow2_2 : ((pow2 2%Z) = 4%Z).
-
-Axiom pow2_3 : ((pow2 3%Z) = 8%Z).
-
-Axiom pow2_4 : ((pow2 4%Z) = 16%Z).
-
-Axiom pow2_5 : ((pow2 5%Z) = 32%Z).
-
-Axiom pow2_6 : ((pow2 6%Z) = 64%Z).
-
-Axiom pow2_7 : ((pow2 7%Z) = 128%Z).
-
-Axiom pow2_8 : ((pow2 8%Z) = 256%Z).
-
-Axiom pow2_9 : ((pow2 9%Z) = 512%Z).
-
-Axiom pow2_10 : ((pow2 10%Z) = 1024%Z).
-
-Axiom pow2_11 : ((pow2 11%Z) = 2048%Z).
-
-Axiom pow2_12 : ((pow2 12%Z) = 4096%Z).
-
-Axiom pow2_13 : ((pow2 13%Z) = 8192%Z).
-
-Axiom pow2_14 : ((pow2 14%Z) = 16384%Z).
-
-Axiom pow2_15 : ((pow2 15%Z) = 32768%Z).
-
-Axiom pow2_16 : ((pow2 16%Z) = 65536%Z).
-
-Axiom pow2_17 : ((pow2 17%Z) = 131072%Z).
-
-Axiom pow2_18 : ((pow2 18%Z) = 262144%Z).
-
-Axiom pow2_19 : ((pow2 19%Z) = 524288%Z).
-
-Axiom pow2_20 : ((pow2 20%Z) = 1048576%Z).
-
-Axiom pow2_21 : ((pow2 21%Z) = 2097152%Z).
-
-Axiom pow2_22 : ((pow2 22%Z) = 4194304%Z).
-
-Axiom pow2_23 : ((pow2 23%Z) = 8388608%Z).
-
-Axiom pow2_24 : ((pow2 24%Z) = 16777216%Z).
-
-Axiom pow2_25 : ((pow2 25%Z) = 33554432%Z).
-
-Axiom pow2_26 : ((pow2 26%Z) = 67108864%Z).
-
-Axiom pow2_27 : ((pow2 27%Z) = 134217728%Z).
-
-Axiom pow2_28 : ((pow2 28%Z) = 268435456%Z).
-
-Axiom pow2_29 : ((pow2 29%Z) = 536870912%Z).
-
-Axiom pow2_30 : ((pow2 30%Z) = 1073741824%Z).
-
-Axiom pow2_31 : ((pow2 31%Z) = 2147483648%Z).
-
-Axiom pow2_32 : ((pow2 32%Z) = 4294967296%Z).
-
-Axiom pow2_33 : ((pow2 33%Z) = 8589934592%Z).
-
-Axiom pow2_34 : ((pow2 34%Z) = 17179869184%Z).
-
-Axiom pow2_35 : ((pow2 35%Z) = 34359738368%Z).
-
-Axiom pow2_36 : ((pow2 36%Z) = 68719476736%Z).
-
-Axiom pow2_37 : ((pow2 37%Z) = 137438953472%Z).
-
-Axiom pow2_38 : ((pow2 38%Z) = 274877906944%Z).
-
-Axiom pow2_39 : ((pow2 39%Z) = 549755813888%Z).
-
-Axiom pow2_40 : ((pow2 40%Z) = 1099511627776%Z).
-
-Axiom pow2_41 : ((pow2 41%Z) = 2199023255552%Z).
-
-Axiom pow2_42 : ((pow2 42%Z) = 4398046511104%Z).
-
-Axiom pow2_43 : ((pow2 43%Z) = 8796093022208%Z).
-
-Axiom pow2_44 : ((pow2 44%Z) = 17592186044416%Z).
-
-Axiom pow2_45 : ((pow2 45%Z) = 35184372088832%Z).
-
-Axiom pow2_46 : ((pow2 46%Z) = 70368744177664%Z).
-
-Axiom pow2_47 : ((pow2 47%Z) = 140737488355328%Z).
-
-Axiom pow2_48 : ((pow2 48%Z) = 281474976710656%Z).
-
-Axiom pow2_49 : ((pow2 49%Z) = 562949953421312%Z).
-
-Axiom pow2_50 : ((pow2 50%Z) = 1125899906842624%Z).
-
-Axiom pow2_51 : ((pow2 51%Z) = 2251799813685248%Z).
-
-Axiom pow2_52 : ((pow2 52%Z) = 4503599627370496%Z).
-
-Axiom pow2_53 : ((pow2 53%Z) = 9007199254740992%Z).
-
-Axiom pow2_54 : ((pow2 54%Z) = 18014398509481984%Z).
-
-Axiom pow2_55 : ((pow2 55%Z) = 36028797018963968%Z).
-
-Axiom pow2_56 : ((pow2 56%Z) = 72057594037927936%Z).
-
-Axiom pow2_57 : ((pow2 57%Z) = 144115188075855872%Z).
-
-Axiom pow2_58 : ((pow2 58%Z) = 288230376151711744%Z).
-
-Axiom pow2_59 : ((pow2 59%Z) = 576460752303423488%Z).
-
-Axiom pow2_60 : ((pow2 60%Z) = 1152921504606846976%Z).
-
-Axiom pow2_61 : ((pow2 61%Z) = 2305843009213693952%Z).
-
-Axiom pow2_62 : ((pow2 62%Z) = 4611686018427387904%Z).
-
-Axiom pow2_63 : ((pow2 63%Z) = 9223372036854775808%Z).
-
-Axiom Div_mult_inst : forall (x:Z) (z:Z), (0%Z < x)%Z ->
-  ((int.EuclideanDivision.div ((x * 1%Z)%Z + z)%Z
-  x) = (1%Z + (int.EuclideanDivision.div z x))%Z).
-
-Axiom Div_double : forall (x:Z) (y:Z), ((0%Z < y)%Z /\ ((y <= x)%Z /\
-  (x < (2%Z * y)%Z)%Z)) -> ((int.EuclideanDivision.div x y) = 1%Z).
-
-Axiom Div_pow : forall (x:Z) (i:Z), (0%Z < i)%Z ->
-  ((((pow2 (i - 1%Z)%Z) <= x)%Z /\ (x < (pow2 i))%Z) ->
-  ((int.EuclideanDivision.div x (pow2 (i - 1%Z)%Z)) = 1%Z)).
-
-Axiom Div_double_neg : forall (x:Z) (y:Z), ((((-2%Z)%Z * y)%Z <= x)%Z /\
-  ((x < (-y)%Z)%Z /\ ((-y)%Z < 0%Z)%Z)) -> ((int.EuclideanDivision.div x
-  y) = (-2%Z)%Z).
-
-Axiom Div_pow2 : forall (x:Z) (i:Z), (0%Z < i)%Z ->
-  ((((-(pow2 i))%Z <= x)%Z /\ (x < (-(pow2 (i - 1%Z)%Z))%Z)%Z) ->
-  ((int.EuclideanDivision.div x (pow2 (i - 1%Z)%Z)) = (-2%Z)%Z)).
-
-Axiom Mod_pow2_gen : forall (x:Z) (i:Z) (k:Z), ((0%Z <= k)%Z /\ (k < i)%Z) ->
-  ((int.EuclideanDivision.mod1 (int.EuclideanDivision.div (x + (pow2 i))%Z
-  (pow2 k)) 2%Z) = (int.EuclideanDivision.mod1 (int.EuclideanDivision.div x
-  (pow2 k)) 2%Z)).
-
-Parameter size: Z.
-
-Axiom size_positive : (1%Z < size)%Z.
-
-Axiom bv : Type.
-Parameter bv_WhyType : WhyType bv.
-Existing Instance bv_WhyType.
-
-Parameter nth: bv -> Z -> bool.
-
-Parameter bvzero: bv.
-
-Axiom Nth_zero : forall (n:Z), ((0%Z <= n)%Z /\ (n < size)%Z) -> ((nth bvzero
-  n) = false).
-
-Parameter bvone: bv.
-
-Axiom Nth_one : forall (n:Z), ((0%Z <= n)%Z /\ (n < size)%Z) -> ((nth bvone
-  n) = true).
-
-(* Why3 assumption *)
-Definition eq (v1:bv) (v2:bv): Prop := forall (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth v1 n) = (nth v2 n)).
-
-Axiom extensionality : forall (v1:bv) (v2:bv), (eq v1 v2) -> (v1 = v2).
-
-Parameter bw_and: bv -> bv -> bv.
-
-Axiom Nth_bw_and : forall (v1:bv) (v2:bv) (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth (bw_and v1 v2) n) = (Init.Datatypes.andb (nth v1
-  n) (nth v2 n))).
-
-Parameter bw_or: bv -> bv -> bv.
-
-Axiom Nth_bw_or : forall (v1:bv) (v2:bv) (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth (bw_or v1 v2) n) = (Init.Datatypes.orb (nth v1
-  n) (nth v2 n))).
-
-Parameter bw_xor: bv -> bv -> bv.
-
-Axiom Nth_bw_xor : forall (v1:bv) (v2:bv) (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth (bw_xor v1 v2) n) = (Init.Datatypes.xorb (nth v1
-  n) (nth v2 n))).
-
-Axiom Nth_bw_xor_v1true : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v1 n) = true)) -> ((nth (bw_xor v1 v2)
-  n) = (Init.Datatypes.negb (nth v2 n))).
-
-Axiom Nth_bw_xor_v1false : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v1 n) = false)) -> ((nth (bw_xor v1 v2) n) = (nth v2
-  n)).
-
-Axiom Nth_bw_xor_v2true : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v2 n) = true)) -> ((nth (bw_xor v1 v2)
-  n) = (Init.Datatypes.negb (nth v1 n))).
-
-Axiom Nth_bw_xor_v2false : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v2 n) = false)) -> ((nth (bw_xor v1 v2) n) = (nth v1
-  n)).
-
-Parameter bw_not: bv -> bv.
-
-Axiom Nth_bw_not : forall (v:bv) (n:Z), ((0%Z <= n)%Z /\ (n < size)%Z) ->
-  ((nth (bw_not v) n) = (Init.Datatypes.negb (nth v n))).
-
-Parameter lsr: bv -> Z -> bv.
-
-Axiom lsr_nth_low : forall (b:bv) (n:Z) (s:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ (((0%Z <= s)%Z /\ (s < size)%Z) /\
-  ((n + s)%Z < size)%Z)) -> ((nth (lsr b s) n) = (nth b (n + s)%Z)).
-
-Axiom lsr_nth_high : forall (b:bv) (n:Z) (s:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ (((0%Z <= s)%Z /\ (s < size)%Z) /\
-  (size <= (n + s)%Z)%Z)) -> ((nth (lsr b s) n) = false).
-
-Parameter asr: bv -> Z -> bv.
-
-Axiom asr_nth_low : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> (((n + s)%Z < size)%Z -> ((nth (asr b s)
-  n) = (nth b (n + s)%Z)))).
-
-Axiom asr_nth_high : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> ((size <= (n + s)%Z)%Z -> ((nth (asr b s)
-  n) = (nth b (size - 1%Z)%Z)))).
-
-Parameter lsl: bv -> Z -> bv.
-
-Axiom lsl_nth_high : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> ((0%Z <= (n - s)%Z)%Z -> ((nth (lsl b s)
-  n) = (nth b (n - s)%Z)))).
-
-Axiom lsl_nth_low : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> (((n - s)%Z < 0%Z)%Z -> ((nth (lsl b s)
-  n) = false))).
-
-Parameter to_nat_sub: bv -> Z -> Z -> Z.
-
-Axiom to_nat_sub_zero : forall (b:bv) (j:Z) (i:Z), ((0%Z <= i)%Z /\
-  ((i <= j)%Z /\ (j < size)%Z)) -> (((nth b j) = false) -> ((to_nat_sub b j
-  i) = (to_nat_sub b (j - 1%Z)%Z i))).
-
-Axiom to_nat_sub_one : forall (b:bv) (j:Z) (i:Z), ((0%Z <= i)%Z /\
-  ((i <= j)%Z /\ (j < size)%Z)) -> (((nth b j) = true) -> ((to_nat_sub b j
-  i) = ((pow2 (j - i)%Z) + (to_nat_sub b (j - 1%Z)%Z i))%Z)).
-
-Axiom to_nat_sub_high : forall (b:bv) (j:Z) (i:Z), (j < i)%Z ->
-  ((to_nat_sub b j i) = 0%Z).
-
-Axiom to_nat_of_zero2 : forall (b:bv) (i:Z) (j:Z), ((j < size)%Z /\
-  ((i <= j)%Z /\ (0%Z <= i)%Z)) -> ((forall (k:Z), ((k <= j)%Z /\
-  (i < k)%Z) -> ((nth b k) = false)) -> ((to_nat_sub b j 0%Z) = (to_nat_sub b
-  i 0%Z))).
-
-Require Import Why3.
-Ltac ae := why3 "Alt-Ergo,0.99.1," timelimit 5; admit.
-Ltac cvc := why3 "CVC3,2.4.1," timelimit 5; admit.
-Open Scope Z_scope.
-
-
-(* Why3 goal *)
-Theorem to_nat_of_zero : forall (b:bv) (i:Z) (j:Z), ((j < size)%Z /\
-  (0%Z <= i)%Z) -> ((forall (k:Z), ((k <= j)%Z /\ (i <= k)%Z) -> ((nth b
-  k) = false)) -> ((to_nat_sub b j i) = 0%Z)).
-(* Why3 intros b i j (h1,h2) h3. *)
-(* intros b i j (h1,h2) h3. *)
-intros b i j (Hj & Hi).
-assert (h:(i>j)\/(i<=j)) by omega; destruct h.
-ae.
-generalize Hj.
-pattern j.
-apply Zlt_lower_bound_ind with (z:=i); auto.
-cvc.
-Admitted.
-
diff --git a/examples/bitvectors/bitvector/bitvector_BitVector_to_nat_sub_footprint_1.v b/examples/bitvectors/bitvector/bitvector_BitVector_to_nat_sub_footprint_1.v
deleted file mode 100644
index 756b069205..0000000000
--- a/examples/bitvectors/bitvector/bitvector_BitVector_to_nat_sub_footprint_1.v
+++ /dev/null
@@ -1,326 +0,0 @@
-(* This file is generated by Why3's Coq driver *)
-(* Beware! Only edit allowed sections below    *)
-Require Import BuiltIn.
-Require BuiltIn.
-Require bool.Bool.
-Require int.Int.
-Require int.Abs.
-Require int.EuclideanDivision.
-
-Parameter pow2: Z -> Z.
-
-Axiom Power_0 : ((pow2 0%Z) = 1%Z).
-
-Axiom Power_s : forall (n:Z), (0%Z <= n)%Z ->
-  ((pow2 (n + 1%Z)%Z) = (2%Z * (pow2 n))%Z).
-
-Axiom Power_1 : ((pow2 1%Z) = 2%Z).
-
-Axiom Power_sum : forall (n:Z) (m:Z), ((0%Z <= n)%Z /\ (0%Z <= m)%Z) ->
-  ((pow2 (n + m)%Z) = ((pow2 n) * (pow2 m))%Z).
-
-Axiom pow2pos : forall (i:Z), (0%Z <= i)%Z -> (0%Z < (pow2 i))%Z.
-
-Axiom pow2_0 : ((pow2 0%Z) = 1%Z).
-
-Axiom pow2_1 : ((pow2 1%Z) = 2%Z).
-
-Axiom pow2_2 : ((pow2 2%Z) = 4%Z).
-
-Axiom pow2_3 : ((pow2 3%Z) = 8%Z).
-
-Axiom pow2_4 : ((pow2 4%Z) = 16%Z).
-
-Axiom pow2_5 : ((pow2 5%Z) = 32%Z).
-
-Axiom pow2_6 : ((pow2 6%Z) = 64%Z).
-
-Axiom pow2_7 : ((pow2 7%Z) = 128%Z).
-
-Axiom pow2_8 : ((pow2 8%Z) = 256%Z).
-
-Axiom pow2_9 : ((pow2 9%Z) = 512%Z).
-
-Axiom pow2_10 : ((pow2 10%Z) = 1024%Z).
-
-Axiom pow2_11 : ((pow2 11%Z) = 2048%Z).
-
-Axiom pow2_12 : ((pow2 12%Z) = 4096%Z).
-
-Axiom pow2_13 : ((pow2 13%Z) = 8192%Z).
-
-Axiom pow2_14 : ((pow2 14%Z) = 16384%Z).
-
-Axiom pow2_15 : ((pow2 15%Z) = 32768%Z).
-
-Axiom pow2_16 : ((pow2 16%Z) = 65536%Z).
-
-Axiom pow2_17 : ((pow2 17%Z) = 131072%Z).
-
-Axiom pow2_18 : ((pow2 18%Z) = 262144%Z).
-
-Axiom pow2_19 : ((pow2 19%Z) = 524288%Z).
-
-Axiom pow2_20 : ((pow2 20%Z) = 1048576%Z).
-
-Axiom pow2_21 : ((pow2 21%Z) = 2097152%Z).
-
-Axiom pow2_22 : ((pow2 22%Z) = 4194304%Z).
-
-Axiom pow2_23 : ((pow2 23%Z) = 8388608%Z).
-
-Axiom pow2_24 : ((pow2 24%Z) = 16777216%Z).
-
-Axiom pow2_25 : ((pow2 25%Z) = 33554432%Z).
-
-Axiom pow2_26 : ((pow2 26%Z) = 67108864%Z).
-
-Axiom pow2_27 : ((pow2 27%Z) = 134217728%Z).
-
-Axiom pow2_28 : ((pow2 28%Z) = 268435456%Z).
-
-Axiom pow2_29 : ((pow2 29%Z) = 536870912%Z).
-
-Axiom pow2_30 : ((pow2 30%Z) = 1073741824%Z).
-
-Axiom pow2_31 : ((pow2 31%Z) = 2147483648%Z).
-
-Axiom pow2_32 : ((pow2 32%Z) = 4294967296%Z).
-
-Axiom pow2_33 : ((pow2 33%Z) = 8589934592%Z).
-
-Axiom pow2_34 : ((pow2 34%Z) = 17179869184%Z).
-
-Axiom pow2_35 : ((pow2 35%Z) = 34359738368%Z).
-
-Axiom pow2_36 : ((pow2 36%Z) = 68719476736%Z).
-
-Axiom pow2_37 : ((pow2 37%Z) = 137438953472%Z).
-
-Axiom pow2_38 : ((pow2 38%Z) = 274877906944%Z).
-
-Axiom pow2_39 : ((pow2 39%Z) = 549755813888%Z).
-
-Axiom pow2_40 : ((pow2 40%Z) = 1099511627776%Z).
-
-Axiom pow2_41 : ((pow2 41%Z) = 2199023255552%Z).
-
-Axiom pow2_42 : ((pow2 42%Z) = 4398046511104%Z).
-
-Axiom pow2_43 : ((pow2 43%Z) = 8796093022208%Z).
-
-Axiom pow2_44 : ((pow2 44%Z) = 17592186044416%Z).
-
-Axiom pow2_45 : ((pow2 45%Z) = 35184372088832%Z).
-
-Axiom pow2_46 : ((pow2 46%Z) = 70368744177664%Z).
-
-Axiom pow2_47 : ((pow2 47%Z) = 140737488355328%Z).
-
-Axiom pow2_48 : ((pow2 48%Z) = 281474976710656%Z).
-
-Axiom pow2_49 : ((pow2 49%Z) = 562949953421312%Z).
-
-Axiom pow2_50 : ((pow2 50%Z) = 1125899906842624%Z).
-
-Axiom pow2_51 : ((pow2 51%Z) = 2251799813685248%Z).
-
-Axiom pow2_52 : ((pow2 52%Z) = 4503599627370496%Z).
-
-Axiom pow2_53 : ((pow2 53%Z) = 9007199254740992%Z).
-
-Axiom pow2_54 : ((pow2 54%Z) = 18014398509481984%Z).
-
-Axiom pow2_55 : ((pow2 55%Z) = 36028797018963968%Z).
-
-Axiom pow2_56 : ((pow2 56%Z) = 72057594037927936%Z).
-
-Axiom pow2_57 : ((pow2 57%Z) = 144115188075855872%Z).
-
-Axiom pow2_58 : ((pow2 58%Z) = 288230376151711744%Z).
-
-Axiom pow2_59 : ((pow2 59%Z) = 576460752303423488%Z).
-
-Axiom pow2_60 : ((pow2 60%Z) = 1152921504606846976%Z).
-
-Axiom pow2_61 : ((pow2 61%Z) = 2305843009213693952%Z).
-
-Axiom pow2_62 : ((pow2 62%Z) = 4611686018427387904%Z).
-
-Axiom pow2_63 : ((pow2 63%Z) = 9223372036854775808%Z).
-
-Axiom Div_mult_inst : forall (x:Z) (z:Z), (0%Z < x)%Z ->
-  ((int.EuclideanDivision.div ((x * 1%Z)%Z + z)%Z
-  x) = (1%Z + (int.EuclideanDivision.div z x))%Z).
-
-Axiom Div_double : forall (x:Z) (y:Z), ((0%Z < y)%Z /\ ((y <= x)%Z /\
-  (x < (2%Z * y)%Z)%Z)) -> ((int.EuclideanDivision.div x y) = 1%Z).
-
-Axiom Div_pow : forall (x:Z) (i:Z), (0%Z < i)%Z ->
-  ((((pow2 (i - 1%Z)%Z) <= x)%Z /\ (x < (pow2 i))%Z) ->
-  ((int.EuclideanDivision.div x (pow2 (i - 1%Z)%Z)) = 1%Z)).
-
-Axiom Div_double_neg : forall (x:Z) (y:Z), ((((-2%Z)%Z * y)%Z <= x)%Z /\
-  ((x < (-y)%Z)%Z /\ ((-y)%Z < 0%Z)%Z)) -> ((int.EuclideanDivision.div x
-  y) = (-2%Z)%Z).
-
-Axiom Div_pow2 : forall (x:Z) (i:Z), (0%Z < i)%Z ->
-  ((((-(pow2 i))%Z <= x)%Z /\ (x < (-(pow2 (i - 1%Z)%Z))%Z)%Z) ->
-  ((int.EuclideanDivision.div x (pow2 (i - 1%Z)%Z)) = (-2%Z)%Z)).
-
-Axiom Mod_pow2_gen : forall (x:Z) (i:Z) (k:Z), ((0%Z <= k)%Z /\ (k < i)%Z) ->
-  ((int.EuclideanDivision.mod1 (int.EuclideanDivision.div (x + (pow2 i))%Z
-  (pow2 k)) 2%Z) = (int.EuclideanDivision.mod1 (int.EuclideanDivision.div x
-  (pow2 k)) 2%Z)).
-
-Parameter size: Z.
-
-Axiom size_positive : (1%Z < size)%Z.
-
-Axiom bv : Type.
-Parameter bv_WhyType : WhyType bv.
-Existing Instance bv_WhyType.
-
-Parameter nth: bv -> Z -> bool.
-
-Parameter bvzero: bv.
-
-Axiom Nth_zero : forall (n:Z), ((0%Z <= n)%Z /\ (n < size)%Z) -> ((nth bvzero
-  n) = false).
-
-Parameter bvone: bv.
-
-Axiom Nth_one : forall (n:Z), ((0%Z <= n)%Z /\ (n < size)%Z) -> ((nth bvone
-  n) = true).
-
-(* Why3 assumption *)
-Definition eq (v1:bv) (v2:bv): Prop := forall (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth v1 n) = (nth v2 n)).
-
-Axiom extensionality : forall (v1:bv) (v2:bv), (eq v1 v2) -> (v1 = v2).
-
-Parameter bw_and: bv -> bv -> bv.
-
-Axiom Nth_bw_and : forall (v1:bv) (v2:bv) (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth (bw_and v1 v2) n) = (Init.Datatypes.andb (nth v1
-  n) (nth v2 n))).
-
-Parameter bw_or: bv -> bv -> bv.
-
-Axiom Nth_bw_or : forall (v1:bv) (v2:bv) (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth (bw_or v1 v2) n) = (Init.Datatypes.orb (nth v1
-  n) (nth v2 n))).
-
-Parameter bw_xor: bv -> bv -> bv.
-
-Axiom Nth_bw_xor : forall (v1:bv) (v2:bv) (n:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((nth (bw_xor v1 v2) n) = (Init.Datatypes.xorb (nth v1
-  n) (nth v2 n))).
-
-Axiom Nth_bw_xor_v1true : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v1 n) = true)) -> ((nth (bw_xor v1 v2)
-  n) = (Init.Datatypes.negb (nth v2 n))).
-
-Axiom Nth_bw_xor_v1false : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v1 n) = false)) -> ((nth (bw_xor v1 v2) n) = (nth v2
-  n)).
-
-Axiom Nth_bw_xor_v2true : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v2 n) = true)) -> ((nth (bw_xor v1 v2)
-  n) = (Init.Datatypes.negb (nth v1 n))).
-
-Axiom Nth_bw_xor_v2false : forall (v1:bv) (v2:bv) (n:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ ((nth v2 n) = false)) -> ((nth (bw_xor v1 v2) n) = (nth v1
-  n)).
-
-Parameter bw_not: bv -> bv.
-
-Axiom Nth_bw_not : forall (v:bv) (n:Z), ((0%Z <= n)%Z /\ (n < size)%Z) ->
-  ((nth (bw_not v) n) = (Init.Datatypes.negb (nth v n))).
-
-Parameter lsr: bv -> Z -> bv.
-
-Axiom lsr_nth_low : forall (b:bv) (n:Z) (s:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ (((0%Z <= s)%Z /\ (s < size)%Z) /\
-  ((n + s)%Z < size)%Z)) -> ((nth (lsr b s) n) = (nth b (n + s)%Z)).
-
-Axiom lsr_nth_high : forall (b:bv) (n:Z) (s:Z), (((0%Z <= n)%Z /\
-  (n < size)%Z) /\ (((0%Z <= s)%Z /\ (s < size)%Z) /\
-  (size <= (n + s)%Z)%Z)) -> ((nth (lsr b s) n) = false).
-
-Parameter asr: bv -> Z -> bv.
-
-Axiom asr_nth_low : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> (((n + s)%Z < size)%Z -> ((nth (asr b s)
-  n) = (nth b (n + s)%Z)))).
-
-Axiom asr_nth_high : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> ((size <= (n + s)%Z)%Z -> ((nth (asr b s)
-  n) = (nth b (size - 1%Z)%Z)))).
-
-Parameter lsl: bv -> Z -> bv.
-
-Axiom lsl_nth_high : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> ((0%Z <= (n - s)%Z)%Z -> ((nth (lsl b s)
-  n) = (nth b (n - s)%Z)))).
-
-Axiom lsl_nth_low : forall (b:bv) (n:Z) (s:Z), ((0%Z <= n)%Z /\
-  (n < size)%Z) -> ((0%Z <= s)%Z -> (((n - s)%Z < 0%Z)%Z -> ((nth (lsl b s)
-  n) = false))).
-
-Parameter to_nat_sub: bv -> Z -> Z -> Z.
-
-Axiom to_nat_sub_zero : forall (b:bv) (j:Z) (i:Z), ((0%Z <= i)%Z /\
-  ((i <= j)%Z /\ (j < size)%Z)) -> (((nth b j) = false) -> ((to_nat_sub b j
-  i) = (to_nat_sub b (j - 1%Z)%Z i))).
-
-Axiom to_nat_sub_one : forall (b:bv) (j:Z) (i:Z), ((0%Z <= i)%Z /\
-  ((i <= j)%Z /\ (j < size)%Z)) -> (((nth b j) = true) -> ((to_nat_sub b j
-  i) = ((pow2 (j - i)%Z) + (to_nat_sub b (j - 1%Z)%Z i))%Z)).
-
-Axiom to_nat_sub_high : forall (b:bv) (j:Z) (i:Z), (j < i)%Z ->
-  ((to_nat_sub b j i) = 0%Z).
-
-Axiom to_nat_of_zero2 : forall (b:bv) (i:Z) (j:Z), ((j < size)%Z /\
-  ((i <= j)%Z /\ (0%Z <= i)%Z)) -> ((forall (k:Z), ((k <= j)%Z /\
-  (i < k)%Z) -> ((nth b k) = false)) -> ((to_nat_sub b j 0%Z) = (to_nat_sub b
-  i 0%Z))).
-
-Axiom to_nat_of_zero : forall (b:bv) (i:Z) (j:Z), ((j < size)%Z /\
-  (0%Z <= i)%Z) -> ((forall (k:Z), ((k <= j)%Z /\ (i <= k)%Z) -> ((nth b
-  k) = false)) -> ((to_nat_sub b j i) = 0%Z)).
-
-Axiom to_nat_of_one : forall (b:bv) (i:Z) (j:Z), ((j < size)%Z /\
-  ((i <= j)%Z /\ (0%Z <= i)%Z)) -> ((forall (k:Z), ((k <= j)%Z /\
-  (i <= k)%Z) -> ((nth b k) = true)) -> ((to_nat_sub b j
-  i) = ((pow2 ((j - i)%Z + 1%Z)%Z) - 1%Z)%Z)).
-
-Require Import Why3.
-Ltac ae := why3 "alt-ergo" timelimit 15; admit.
-Open Scope Z_scope.
-
-(* Why3 goal *)
-Theorem to_nat_sub_footprint : forall (b1:bv) (b2:bv) (j:Z) (i:Z),
-  ((j < size)%Z /\ (0%Z <= i)%Z) -> ((forall (k:Z), ((i <= k)%Z /\
-  (k <= j)%Z) -> ((nth b1 k) = (nth b2 k))) -> ((to_nat_sub b1 j
-  i) = (to_nat_sub b2 j i))).
-(* Why3 intros b1 b2 j i (h1,h2) h3. *)
-(* intros b1 b2 j i (h1,h2) h3. *)
-intros b1 b2 j i (Hij,Hipos).
-assert (h:(j < i \/ i <= j)) by omega; destruct h.
-ae.
-generalize Hij.
-pattern j; apply Zlt_lower_bound_ind with (z:=i); auto.
-clear j Hij H.
-intros j Hind Hij Hj Hfootprint.
-assert (h:i=j \/ i<j) by omega; destruct h.
-ae.
-assert (h : (nth b1 j = false \/ nth b1 j = true)).
- elim (nth b1 j); auto.
-destruct h.
-rewrite to_nat_sub_zero; auto with zarith.
-ae.
-rewrite to_nat_sub_one; auto with zarith.
-ae.
-Admitted.
-
diff --git a/examples/bitvectors/bitvector/why3session.xml b/examples/bitvectors/bitvector/why3session.xml
index ac493f61a7..28e0927c63 100644
--- a/examples/bitvectors/bitvector/why3session.xml
+++ b/examples/bitvectors/bitvector/why3session.xml
@@ -3,10 +3,9 @@
 "http://why3.lri.fr/why3session.dtd">
 <why3session shape_version="4">
 <prover id="0" name="Alt-Ergo" version="1.30" timelimit="5" steplimit="0" memlimit="1000"/>
-<prover id="1" name="Coq" version="8.7.1" timelimit="7" steplimit="0" memlimit="1000"/>
 <prover id="2" name="Alt-Ergo" version="0.99.1" timelimit="5" steplimit="0" memlimit="1000"/>
 <prover id="3" name="CVC3" version="2.4.1" timelimit="5" steplimit="0" memlimit="1000"/>
-<prover id="4" name="Alt-Ergo" version="2.0.0" timelimit="1" steplimit="0" memlimit="1000"/>
+<prover id="4" name="Alt-Ergo" version="2.0.0" timelimit="30" steplimit="0" memlimit="1000"/>
 <prover id="5" name="CVC4" version="1.5" timelimit="1" steplimit="0" memlimit="1000"/>
 <prover id="6" name="CVC4" version="1.4" timelimit="5" steplimit="0" memlimit="1000"/>
 <prover id="9" name="Z3" version="3.2" timelimit="3" steplimit="0" memlimit="1000"/>
@@ -48,13 +47,48 @@
  </transf>
  </goal>
  <goal name="to_nat_of_zero" proved="true">
- <proof prover="1" timelimit="30" edited="bitvector_BitVector_to_nat_of_zero_1.v"><result status="valid" time="1.01"/></proof>
+ <transf name="intros" proved="true" arg1="b,j">
+  <goal name="to_nat_of_zero.0" proved="true">
+  <transf name="induction" proved="true" arg1="j">
+   <goal name="to_nat_of_zero.0.0" expl="base case" proved="true">
+   <proof prover="5"><result status="valid" time="0.09"/></proof>
+   </goal>
+   <goal name="to_nat_of_zero.0.1" expl="recursive case" proved="true">
+   <proof prover="5"><result status="valid" time="0.15"/></proof>
+   </goal>
+  </transf>
+  </goal>
+ </transf>
  </goal>
- <goal name="to_nat_of_one" proved="true">
- <proof prover="1" timelimit="5" edited="bitvector_BitVector_to_nat_of_one_1.v"><result status="valid" time="0.96"/></proof>
+ <goal name="VC to_nat_of_one" expl="VC for to_nat_of_one" proved="true">
+ <transf name="split_vc" proved="true" >
+  <goal name="VC to_nat_of_one.0" expl="variant decrease" proved="true">
+  <proof prover="5"><result status="valid" time="0.02"/></proof>
+  </goal>
+  <goal name="VC to_nat_of_one.1" expl="precondition" proved="true">
+  <proof prover="5"><result status="valid" time="0.03"/></proof>
+  </goal>
+  <goal name="VC to_nat_of_one.2" expl="precondition" proved="true">
+  <proof prover="5"><result status="valid" time="0.06"/></proof>
+  </goal>
+  <goal name="VC to_nat_of_one.3" expl="postcondition" proved="true">
+  <proof prover="5"><result status="valid" time="0.16"/></proof>
+  </goal>
+ </transf>
  </goal>
  <goal name="to_nat_sub_footprint" proved="true">
- <proof prover="1" edited="bitvector_BitVector_to_nat_sub_footprint_1.v"><result status="valid" time="1.40"/></proof>
+ <transf name="intros" proved="true" arg1="b1,b2,j">
+  <goal name="to_nat_sub_footprint.0" proved="true">
+  <transf name="induction" proved="true" arg1="j">
+   <goal name="to_nat_sub_footprint.0.0" expl="base case" proved="true">
+   <proof prover="5"><result status="valid" time="0.13"/></proof>
+   </goal>
+   <goal name="to_nat_sub_footprint.0.1" expl="recursive case" proved="true">
+   <proof prover="5"><result status="valid" time="0.36"/></proof>
+   </goal>
+  </transf>
+  </goal>
+ </transf>
  </goal>
  <goal name="nth_from_int_low_even" proved="true">
  <proof prover="2"><result status="valid" time="0.02" steps="68"/></proof>
@@ -86,7 +120,7 @@
  <proof prover="3"><result status="valid" time="0.11"/></proof>
  </goal>
  <goal name="nth_from_int2c_plus_pow2" proved="true">
- <proof prover="4"><result status="valid" time="0.16" steps="118"/></proof>
+ <proof prover="4" timelimit="1"><result status="valid" time="0.16" steps="118"/></proof>
  </goal>
 </theory>
 <theory name="BV32" proved="true">
@@ -138,83 +172,78 @@
  <proof prover="2"><result status="valid" time="0.05" steps="70"/></proof>
  <proof prover="3" timelimit="3"><result status="valid" time="0.07"/></proof>
  <proof prover="6"><result status="valid" time="0.05"/></proof>
- <proof prover="9" timelimit="9"><result status="valid" time="2.52"/></proof>
+ <proof prover="9" timelimit="9"><result status="valid" time="2.90"/></proof>
  <proof prover="10"><result status="valid" time="0.53"/></proof>
  </goal>
  <goal name="to_nat_0x00000000" proved="true">
- <proof prover="2"><result status="valid" time="0.04" steps="78"/></proof>
- <proof prover="3" timelimit="3"><result status="valid" time="0.10"/></proof>
  <proof prover="6"><result status="valid" time="0.05"/></proof>
- <proof prover="9"><result status="valid" time="2.84"/></proof>
  <proof prover="10"><result status="valid" time="0.52"/></proof>
  </goal>
  <goal name="to_nat_0x00000001" proved="true">
- <proof prover="6" timelimit="120"><result status="valid" time="85.20"/></proof>
+ <proof prover="4"><result status="valid" time="8.30" steps="2706"/></proof>
  </goal>
  <goal name="to_nat_0x00000003" proved="true">
- <proof prover="6" timelimit="120"><result status="valid" time="64.88"/></proof>
+ <proof prover="6" timelimit="120"><result status="valid" time="83.02"/></proof>
  </goal>
  <goal name="to_nat_0x00000007" proved="true">
- <proof prover="6" timelimit="60" memlimit="4000"><result status="valid" time="54.54"/></proof>
+ <proof prover="4"><result status="valid" time="14.00" steps="2976"/></proof>
  </goal>
  <goal name="to_nat_0x0000000F" proved="true">
- <proof prover="6" timelimit="120"><result status="valid" time="42.60"/></proof>
+ <proof prover="4"><result status="valid" time="10.91" steps="2846"/></proof>
  </goal>
  <goal name="to_nat_0x0000001F" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="37.94"/></proof>
+ <proof prover="4"><result status="valid" time="9.80" steps="2687"/></proof>
  </goal>
  <goal name="to_nat_0x0000003F" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="31.43"/></proof>
+ <proof prover="4"><result status="valid" time="9.26" steps="2537"/></proof>
  </goal>
  <goal name="to_nat_0x0000007F" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="26.21"/></proof>
+ <proof prover="4"><result status="valid" time="8.38" steps="2389"/></proof>
  </goal>
  <goal name="to_nat_0x000000FF" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="21.03"/></proof>
+ <proof prover="4"><result status="valid" time="8.33" steps="2309"/></proof>
  </goal>
  <goal name="to_nat_0x000001FF" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="15.80"/></proof>
+ <proof prover="4"><result status="valid" time="7.41" steps="2187"/></proof>
  </goal>
  <goal name="to_nat_0x000003FF" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="13.72"/></proof>
+ <proof prover="4"><result status="valid" time="6.57" steps="2046"/></proof>
  </goal>
  <goal name="to_nat_0x000007FF" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="11.20"/></proof>
+ <proof prover="4"><result status="valid" time="5.61" steps="1914"/></proof>
  </goal>
  <goal name="to_nat_0x00000FFF" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="8.76"/></proof>
+ <proof prover="4"><result status="valid" time="5.33" steps="1784"/></proof>
  </goal>
  <goal name="to_nat_0x00001FFF" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="7.74"/></proof>
+ <proof prover="4"><result status="valid" time="5.03" steps="1718"/></proof>
  </goal>
  <goal name="to_nat_0x00003FFF" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="4.70"/></proof>
+ <proof prover="4"><result status="valid" time="4.23" steps="1603"/></proof>
  </goal>
  <goal name="to_nat_0x00007FFF" proved="true">
- <proof prover="6" timelimit="30" memlimit="4000"><result status="valid" time="4.44"/></proof>
+ <proof prover="4"><result status="valid" time="3.64" steps="1480"/></proof>
  </goal>
  <goal name="to_nat_0x0000FFFF" proved="true">
- <proof prover="6"><result status="valid" time="3.03"/></proof>
+ <proof prover="4"><result status="valid" time="3.14" steps="1364"/></proof>
  </goal>
  <goal name="to_nat_0x0001FFFF" proved="true">
- <proof prover="6"><result status="valid" time="2.38"/></proof>
+ <proof prover="4"><result status="valid" time="2.96" steps="1259"/></proof>
  </goal>
  <goal name="to_nat_0x0003FFFF" proved="true">
- <proof prover="6"><result status="valid" time="1.80"/></proof>
+ <proof prover="6" timelimit="30"><result status="valid" time="2.26"/></proof>
  </goal>
  <goal name="to_nat_0x0007FFFF" proved="true">
- <proof prover="6"><result status="valid" time="1.34"/></proof>
+ <proof prover="6" timelimit="30"><result status="valid" time="1.57"/></proof>
  </goal>
  <goal name="to_nat_0x000FFFFF" proved="true">
- <proof prover="6"><result status="valid" time="0.94"/></proof>
+ <proof prover="6" timelimit="30"><result status="valid" time="1.16"/></proof>
  </goal>
  <goal name="to_nat_0x00FFFFFF" proved="true">
- <proof prover="6"><result status="valid" time="0.28"/></proof>
+ <proof prover="4" timelimit="1"><result status="valid" time="0.92" steps="665"/></proof>
  </goal>
  <goal name="to_nat_0xFFFFFFFF" proved="true">
- <proof prover="2"><result status="valid" time="0.04" steps="78"/></proof>
- <proof prover="3" timelimit="3"><result status="valid" time="0.12"/></proof>
- <proof prover="6"><result status="valid" time="0.05"/></proof>
+ <proof prover="5"><result status="valid" time="0.10"/></proof>
  </goal>
 </theory>
 </file>
diff --git a/examples/bitvectors/bitvector/why3shapes.gz b/examples/bitvectors/bitvector/why3shapes.gz
index a28489978be6e586d8b23f3dbab27d7d08c66d06..e1a3048aa0bad9be2ecbb1bb366b9ee62ae59ed4 100644
GIT binary patch
literal 1982
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
N|EyZ0;WJSN1_1Mi-P`~G

literal 1556
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

-- 
GitLab