diff --git a/lib/isabelle/Why3_BV.thy.2015 b/lib/isabelle/Why3_BV.thy.2015
index 4f1d6a80329c8030a7c0384240d13fb98d90b2b5..7c5daba9811755f2103dd0abb92e9f547a2f2082 100644
--- a/lib/isabelle/Why3_BV.thy.2015
+++ b/lib/isabelle/Why3_BV.thy.2015
@@ -240,6 +240,10 @@ where "rotate_left_bv v n \<equiv> word_rotl (unat n) v"
 abbreviation (input) rotate_right_bv :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
 where "rotate_right_bv v n \<equiv> word_rotr (unat n) v"
 
+definition eq_sub_bv :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word \<Rightarrow> 'a word \<Rightarrow> bool" where
+  eq_sub_bv_defn: "eq_sub_bv a b i n =
+    (b AND (mask (unat n) << unat i) = a AND (mask (unat n) << unat i))"
+
 type_synonym word8 = "8 word"
 
 why3_open "bv/BV8.xml"
@@ -271,6 +275,7 @@ why3_open "bv/BV8.xml"
     to_uint=uint
     to_int=sint
     of_int=of_int
+    eq_sub_bv=eq_sub_bv
   types
     t=word8
 
@@ -347,6 +352,9 @@ why3_vc to_uint_of_int
   using assms
   by (simp add: uint_in_range_def word_of_int uint_word_of_int mod_pos_pos_trivial)
 
+why3_vc nth_bv_def
+  by (simp add: word_eq_iff word_ops_nth_size word_size nth_shiftr)
+
 why3_vc Nth_bv_is_nth
   by (simp add: bv_nth_def unat_def)
 
@@ -424,8 +432,10 @@ why3_vc Extensionality
   by (simp add: eq_sub_def bv_nth_def word_eq_iff all_nat)
 
 why3_vc eq_sub_equiv
-  by (simp add: eq_sub_equiv_aux eq_sub_def
-    eq_sub_bv_def [simplified of_int_1, folded mask_def] bv_nth_def)
+  by (simp add: eq_sub_equiv_aux eq_sub_def eq_sub_bv_defn bv_nth_def)
+
+why3_vc eq_sub_bv_def
+  by (simp add: eq_sub_bv_defn mask_def)
 
 why3_end
 
@@ -461,6 +471,7 @@ why3_open "bv/BV16.xml"
     to_uint=uint
     to_int=sint
     of_int=of_int
+    eq_sub_bv=eq_sub_bv
   types
     t=word16
 
@@ -537,6 +548,9 @@ why3_vc to_uint_of_int
   using assms
   by (simp add: uint_in_range_def word_of_int uint_word_of_int mod_pos_pos_trivial)
 
+why3_vc nth_bv_def
+  by (simp add: word_eq_iff word_ops_nth_size word_size nth_shiftr)
+
 why3_vc Nth_bv_is_nth
   by (simp add: bv_nth_def unat_def)
 
@@ -614,8 +628,10 @@ why3_vc Extensionality
   by (simp add: eq_sub_def bv_nth_def word_eq_iff all_nat)
 
 why3_vc eq_sub_equiv
-  by (simp add: eq_sub_equiv_aux eq_sub_def
-    eq_sub_bv_def [simplified of_int_1, folded mask_def] bv_nth_def)
+  by (simp add: eq_sub_equiv_aux eq_sub_def eq_sub_bv_defn bv_nth_def)
+
+why3_vc eq_sub_bv_def
+  by (simp add: eq_sub_bv_defn mask_def)
 
 why3_end
 
@@ -651,6 +667,7 @@ why3_open "bv/BV32.xml"
     to_uint=uint
     to_int=sint
     of_int=of_int
+    eq_sub_bv=eq_sub_bv
   types
     t=word32
 
@@ -727,6 +744,9 @@ why3_vc to_uint_of_int
   using assms
   by (simp add: uint_in_range_def word_of_int uint_word_of_int mod_pos_pos_trivial)
 
+why3_vc nth_bv_def
+  by (simp add: word_eq_iff word_ops_nth_size word_size nth_shiftr)
+
 why3_vc Nth_bv_is_nth
   by (simp add: bv_nth_def unat_def)
 
@@ -804,8 +824,10 @@ why3_vc Extensionality
   by (simp add: eq_sub_def bv_nth_def word_eq_iff all_nat)
 
 why3_vc eq_sub_equiv
-  by (simp add: eq_sub_equiv_aux eq_sub_def
-    eq_sub_bv_def [simplified of_int_1, folded mask_def] bv_nth_def)
+  by (simp add: eq_sub_equiv_aux eq_sub_def eq_sub_bv_defn bv_nth_def)
+
+why3_vc eq_sub_bv_def
+  by (simp add: eq_sub_bv_defn mask_def)
 
 why3_end
 
@@ -841,6 +863,7 @@ why3_open "bv/BV64.xml"
     to_uint=uint
     to_int=sint
     of_int=of_int
+    eq_sub_bv=eq_sub_bv
   types
     t=word64
 
@@ -917,6 +940,9 @@ why3_vc to_uint_of_int
   using assms
   by (simp add: uint_in_range_def word_of_int uint_word_of_int mod_pos_pos_trivial)
 
+why3_vc nth_bv_def
+  by (simp add: word_eq_iff word_ops_nth_size word_size nth_shiftr)
+
 why3_vc Nth_bv_is_nth
   by (simp add: bv_nth_def unat_def)
 
@@ -994,8 +1020,10 @@ why3_vc Extensionality
   by (simp add: eq_sub_def bv_nth_def word_eq_iff all_nat)
 
 why3_vc eq_sub_equiv
-  by (simp add: eq_sub_equiv_aux eq_sub_def
-    eq_sub_bv_def [simplified of_int_1, folded mask_def] bv_nth_def)
+  by (simp add: eq_sub_equiv_aux eq_sub_def eq_sub_bv_defn bv_nth_def)
+
+why3_vc eq_sub_bv_def
+  by (simp add: eq_sub_bv_defn mask_def)
 
 why3_end
 
diff --git a/lib/isabelle/Why3_BV.thy.2016 b/lib/isabelle/Why3_BV.thy.2016
index 4ccba9956ddc9d90e4652d763c85b088c1f99d5e..7c8a0bc9a112e44789fc8d3c6e1f1d8940d4a4dd 100644
--- a/lib/isabelle/Why3_BV.thy.2016
+++ b/lib/isabelle/Why3_BV.thy.2016
@@ -240,6 +240,10 @@ where "rotate_left_bv v n \<equiv> word_rotl (unat n) v"
 abbreviation (input) rotate_right_bv :: "'a::len0 word \<Rightarrow> 'a word \<Rightarrow> 'a word"
 where "rotate_right_bv v n \<equiv> word_rotr (unat n) v"
 
+definition eq_sub_bv :: "'a::len word \<Rightarrow> 'a word \<Rightarrow> 'a word \<Rightarrow> 'a word \<Rightarrow> bool" where
+  eq_sub_bv_defn: "eq_sub_bv a b i n =
+    (b AND (mask (unat n) << unat i) = a AND (mask (unat n) << unat i))"
+
 type_synonym word8 = "8 word"
 
 why3_open "bv/BV8.xml"
@@ -271,6 +275,7 @@ why3_open "bv/BV8.xml"
     to_uint=uint
     to_int=sint
     of_int=of_int
+    eq_sub_bv=eq_sub_bv
   types
     t=word8
 
@@ -347,6 +352,9 @@ why3_vc to_uint_of_int
   using assms
   by (simp add: uint_in_range_def word_of_int uint_word_of_int mod_pos_pos_trivial)
 
+why3_vc nth_bv_def
+  by (simp add: word_eq_iff word_ops_nth_size word_size nth_shiftr)
+
 why3_vc Nth_bv_is_nth
   by (simp add: bv_nth_def unat_def)
 
@@ -424,8 +432,10 @@ why3_vc Extensionality
   by (simp add: eq_sub_def bv_nth_def word_eq_iff all_nat)
 
 why3_vc eq_sub_equiv
-  by (simp add: eq_sub_equiv_aux eq_sub_def
-    eq_sub_bv_def [simplified of_int_1, folded mask_def] bv_nth_def)
+  by (simp add: eq_sub_equiv_aux eq_sub_def eq_sub_bv_defn bv_nth_def)
+
+why3_vc eq_sub_bv_def
+  by (simp add: eq_sub_bv_defn mask_def)
 
 why3_end
 
@@ -461,6 +471,7 @@ why3_open "bv/BV16.xml"
     to_uint=uint
     to_int=sint
     of_int=of_int
+    eq_sub_bv=eq_sub_bv
   types
     t=word16
 
@@ -537,6 +548,9 @@ why3_vc to_uint_of_int
   using assms
   by (simp add: uint_in_range_def word_of_int uint_word_of_int mod_pos_pos_trivial)
 
+why3_vc nth_bv_def
+  by (simp add: word_eq_iff word_ops_nth_size word_size nth_shiftr)
+
 why3_vc Nth_bv_is_nth
   by (simp add: bv_nth_def unat_def)
 
@@ -614,8 +628,10 @@ why3_vc Extensionality
   by (simp add: eq_sub_def bv_nth_def word_eq_iff all_nat)
 
 why3_vc eq_sub_equiv
-  by (simp add: eq_sub_equiv_aux eq_sub_def
-    eq_sub_bv_def [simplified of_int_1, folded mask_def] bv_nth_def)
+  by (simp add: eq_sub_equiv_aux eq_sub_def eq_sub_bv_defn bv_nth_def)
+
+why3_vc eq_sub_bv_def
+  by (simp add: eq_sub_bv_defn mask_def)
 
 why3_end
 
@@ -651,6 +667,7 @@ why3_open "bv/BV32.xml"
     to_uint=uint
     to_int=sint
     of_int=of_int
+    eq_sub_bv=eq_sub_bv
   types
     t=word32
 
@@ -727,6 +744,9 @@ why3_vc to_uint_of_int
   using assms
   by (simp add: uint_in_range_def word_of_int uint_word_of_int mod_pos_pos_trivial)
 
+why3_vc nth_bv_def
+  by (simp add: word_eq_iff word_ops_nth_size word_size nth_shiftr)
+
 why3_vc Nth_bv_is_nth
   by (simp add: bv_nth_def unat_def)
 
@@ -804,8 +824,10 @@ why3_vc Extensionality
   by (simp add: eq_sub_def bv_nth_def word_eq_iff all_nat)
 
 why3_vc eq_sub_equiv
-  by (simp add: eq_sub_equiv_aux eq_sub_def
-    eq_sub_bv_def [simplified of_int_1, folded mask_def] bv_nth_def)
+  by (simp add: eq_sub_equiv_aux eq_sub_def eq_sub_bv_defn bv_nth_def)
+
+why3_vc eq_sub_bv_def
+  by (simp add: eq_sub_bv_defn mask_def)
 
 why3_end
 
@@ -841,6 +863,7 @@ why3_open "bv/BV64.xml"
     to_uint=uint
     to_int=sint
     of_int=of_int
+    eq_sub_bv=eq_sub_bv
   types
     t=word64
 
@@ -917,6 +940,9 @@ why3_vc to_uint_of_int
   using assms
   by (simp add: uint_in_range_def word_of_int uint_word_of_int mod_pos_pos_trivial)
 
+why3_vc nth_bv_def
+  by (simp add: word_eq_iff word_ops_nth_size word_size nth_shiftr)
+
 why3_vc Nth_bv_is_nth
   by (simp add: bv_nth_def unat_def)
 
@@ -994,8 +1020,10 @@ why3_vc Extensionality
   by (simp add: eq_sub_def bv_nth_def word_eq_iff all_nat)
 
 why3_vc eq_sub_equiv
-  by (simp add: eq_sub_equiv_aux eq_sub_def
-    eq_sub_bv_def [simplified of_int_1, folded mask_def] bv_nth_def)
+  by (simp add: eq_sub_equiv_aux eq_sub_def eq_sub_bv_defn bv_nth_def)
+
+why3_vc eq_sub_bv_def
+  by (simp add: eq_sub_bv_defn mask_def)
 
 why3_end