Definition eqo i j :=
   (if i =? j as b return ((b = true -> i = j) -> option (i=j))
    then fun Heq : true = true -> i = j =>
             Some (Heq (eq_refl true))
     else fun _ : false = true -> i = j => None) (eqb_correct i j).

(* Specifications: *)
Lemma eqo_refl : forall i, eqo i i = Some (eq_refl i).
Lemma eqo_diff : forall i j, i =? j = false -> eqo i j = None.
Lemma eqbP x y : reflect (φ x = φ y ) (x =? y).
Lemma ltbP x y : reflect (φ x < φ y )%Z (x <? y).
Lemma compare_spec x y : compare x y = (φ x ?= φ y)%Z.
Lemma is_zero_spec x : is_zero x = true <-> x = 0%uint63.
Lemma diveucl_spec x y : let (q,r) := diveucl x y in (φ q , φ r ) = Z.div_eucl φ x φ y .
Lemma succ_spec x : φ (succ x) = (φ x + 1) mod wB.
Lemma addcarry_spec x y : φ (addcarry x y) = (φ x + φ y + 1) mod wB.
Lemma pred_spec x : φ (pred x) = (φ x - 1) mod wB.
Lemma opp_spec x : φ (- x) = - φ x mod wB.
Lemma oppcarry_spec x : φ (oppcarry x) = wB - φ x - 1.
Lemma subcarry_spec x y : φ (subcarry x y) = (φ x - φ y - 1) mod wB.
Lemma to_Z_gcd : forall i j, φ (gcd i j) = Zgcdn (2 * size) (φ j) (φ i).
Lemma gcd_spec a b : Zis_gcd (φ a) (φ b) (φ (gcd a b)).
Lemma head00_spec x : φ x = 0 -> φ (head0 x) = φ digits .
Lemma tail00_spec x : φ x = 0 -> φ (tail0 x) = φ digits.