Corollary wmsb_Zabs_pos:
  forall sz (w: word sz),
    wmsb w false = false -> Z.abs (wordToZ w) = wordToZ w.Corollary wmsb_Zabs_neg:
  forall sz (w: word sz),
    wmsb w false = true -> (Z.abs (wordToZ w) = - wordToZ w)%Z.

(* Specifications: *)
Lemma wordToN_combine: forall sz1 (w1: word sz1) sz2 (w2: word sz2), wordToN (combine w1 w2) = (wordToN w1 + Npow2 sz1 * wordToN w2)%N.
Lemma word_exists_bound: forall sz z, (- Z.of_nat (pow2 sz) <= z < Z.of_nat (pow2 sz))%Z -> exists w: word (S sz), wordToZ w = z.
Lemma sext_size: forall sz n (w: word (sz + n)), sz <> 0 -> (- Z.of_nat (pow2 (sz - 1)) <= wordToZ w < Z.of_nat (pow2 (sz - 1)))%Z -> exists sw, w = sext sw n.
Lemma wordToZ_combine_WO: forall sz (w: word sz), wordToZ (combine w WO) = wordToZ w.
Lemma combine_WO: forall sz (w: word sz), combine w WO = eq_rect _ word w _ (Nat.add_comm 0 sz).
Lemma zext_zero: forall sz (w: word sz), zext w 0 = eq_rect _ word w _ (Nat.add_comm 0 sz).
Lemma wmsb_false_wordToNat_eq: forall sz (w: word (S sz)), wmsb w false = false -> wordToNat w = wordToNat (split1 sz _ (eq_rect _ word w _ (Nat.add_comm 1 sz))).
Lemma wordToZ_bound_weakened: forall z n, (Z.abs z < n)%Z -> (- n <= z < n)%Z.
Lemma zext_size: forall sz n (w: word (sz + n)), (- Z.of_nat (pow2 sz) <= wordToZ w < Z.of_nat (pow2 sz))%Z -> wmsb w false = false -> exists sw, w = zext sw n.
Lemma zext_size_1: (* Note: not axiom free *) forall sz (w: word (sz + 1)), wmsb w false = false -> exists sw, w = zext sw 1.
Theorem test_wlt_f_example: forall x y z, test_wlt_f x y = 0 -> test_wlt_f x z = 0.
Lemma wordToNat_eq1: forall sz (a b: word sz), a = b -> wordToNat a = wordToNat b.
Lemma wordToNat_eq2: forall sz (a b: word sz), wordToNat a = wordToNat b -> a = b.
Lemma wordToNat_lt1: forall sz (a b: word sz), a < b -> (wordToNat a < wordToNat b)%nat.
Lemma wordToNat_lt2: forall sz (a b: word sz), (wordToNat a < wordToNat b)%nat -> a < b.
Lemma wordToNat_gt1: forall sz (a b: word sz), a > b -> (wordToNat a > wordToNat b)%nat.
Lemma wordToNat_gt2: forall sz (a b: word sz), (wordToNat a > wordToNat b)%nat -> a > b.
Lemma wordToNat_le1: forall sz (a b: word sz), a <= b -> (wordToNat a <= wordToNat b)%nat.
Lemma wordToNat_le2: forall sz (a b: word sz), (wordToNat a <= wordToNat b)%nat -> a <= b.
Lemma wordToNat_ge1: forall sz (a b: word sz), a >= b -> (wordToNat a >= wordToNat b)%nat.
Lemma wordToNat_ge2: forall sz (a b: word sz), (wordToNat a >= wordToNat b)%nat -> a >= b.
Lemma wordToNat_neq1: forall sz (a b: word sz), a <> b -> wordToNat a <> wordToNat b.
Lemma wordToNat_neq2: forall sz (a b: word sz), wordToNat a <> wordToNat b -> a <> b.
Lemma wordNotNot: forall sz (a b: word sz), (a <> b -> False) -> a = b.