Notation int := int (only parsing).Notation lsl := lsl (only parsing).Notation lsr := lsr (only parsing).Notation land := land (only parsing).Notation lor := lor (only parsing).Notation lxor := lxor (only parsing).Notation add := add (only parsing).Notation sub := sub (only parsing).Notation mul := mul (only parsing).Notation mulc := mulc (only parsing).Notation div := div (only parsing).Notation mod := mod (only parsing).Notation eqb := eqb (only parsing).Notation ltb := ltb (only parsing).Notation leb := leb (only parsing).Notation size := Uint63Axioms.size (only parsing).Notation digits := Uint63Axioms.digits (only parsing).Notation max_int := Uint63Axioms.max_int (only parsing).Notation get_digit := Uint63Axioms.get_digit (only parsing).Notation set_digit := Uint63Axioms.set_digit (only parsing).Notation is_zero := Uint63Axioms.is_zero (only parsing).Notation is_even := Uint63Axioms.is_even (only parsing).Notation bit := Uint63Axioms.bit (only parsing).Notation addcarry := Uint63Axioms.addcarry (only parsing).Notation to_Z := Uint63Axioms.to_Z (only parsing).Notation of_pos := Uint63Axioms.of_pos (only parsing).Notation of_Z := Uint63Axioms.of_Z (only parsing).Notation wB := Uint63Axioms.wB (only parsing).Notation of_to_Z := Uint63Axioms.of_to_Z (only parsing).Notation lsl_spec := Uint63Axioms.lsl_spec (only parsing).Notation lsr_spec := Uint63Axioms.lsr_spec (only parsing).Notation land_spec := Uint63Axioms.land_spec (only parsing).Notation lor_spec := Uint63Axioms.lor_spec (only parsing).Notation lxor_spec := Uint63Axioms.lxor_spec (only parsing).Notation add_spec := Uint63Axioms.add_spec (only parsing).Notation sub_spec := Uint63Axioms.sub_spec (only parsing).Notation mul_spec := Uint63Axioms.mul_spec (only parsing).Notation mulc_spec := Uint63Axioms.mulc_spec (only parsing).Notation div_spec := Uint63Axioms.div_spec (only parsing).Notation mod_spec := Uint63Axioms.mod_spec (only parsing).Notation eqb_correct := Uint63Axioms.eqb_correct (only parsing).Notation eqb_refl := Uint63Axioms.eqb_refl (only parsing).Notation ltb_spec := Uint63Axioms.ltb_spec (only parsing).Notation leb_spec := Uint63Axioms.leb_spec (only parsing).Notation compare_def_spec := Uint63Axioms.compare_def_spec (only parsing).Notation head0_spec := Uint63Axioms.head0_spec (only parsing).Notation tail0_spec := Uint63Axioms.tail0_spec (only parsing).Notation addc_def_spec := Uint63Axioms.addc_def_spec (only parsing).Notation addcarryc_def_spec := Uint63Axioms.addcarryc_def_spec (only parsing).Notation subc_def_spec := Uint63Axioms.subc_def_spec (only parsing).Notation subcarryc_def_spec := Uint63Axioms.subcarryc_def_spec (only parsing).Notation diveucl_def_spec := Uint63Axioms.diveucl_def_spec (only parsing).Notation diveucl_21_spec := Uint63Axioms.diveucl_21_spec (only parsing).Notation addmuldiv_def_spec := Uint63Axioms.addmuldiv_def_spec (only parsing).Infix "<<" := lsl (at level 30, no associativity) : uint63_scope.Infix ">>" := lsr (at level 30, no associativity) : uint63_scope.Infix "land" := land (at level 40, left associativity) : uint63_scope.Infix "lor" := lor (at level 40, left associativity) : uint63_scope.Infix "lxor" := lxor (at level 40, left associativity) : uint63_scope.Infix "+" := add : uint63_scope.Infix "-" := sub : uint63_scope.Infix "*" := mul : uint63_scope.Infix "/" := div : uint63_scope.Infix "mod" := mod (at level 40, no associativity) : uint63_scope.Infix "=?" := eqb (at level 70, no associativity) : uint63_scope.Infix "<?" := ltb (at level 70, no associativity) : uint63_scope.Infix "<=?" := leb (at level 70, no associativity) : uint63_scope.Infix "≤?" := leb (at level 70, no associativity) : uint63_scope.(* Register bit as PrimInline. *)

(** Extra modulo operations *)
Definition opp (i:int) := 0 - i.Definition oppcarry i := max_int - i.Definition succ i := i + 1.Definition pred i := i - 1.Definition subcarry i j := i - j - 1.(** Exact arithmetic operations *)

Notation addc := addc (only parsing).Notation addcarryc := addcarryc (only parsing).Notation subc := subc (only parsing).Notation subcarryc := subcarryc (only parsing).Notation diveucl := diveucl (only parsing).Notation diveucl_21 := diveucl_21 (only parsing).Notation addmuldiv := addmuldiv (only parsing).Notation "- x" := (opp x) : uint63_scope.Notation "n '+c' m" := (addc n m) (at level 50, no associativity) : uint63_scope.Notation "n '-c' m" := (subc n m) (at level 50, no associativity) : uint63_scope.Definition oppc (i:int) := 0 -c i.Definition succc i := i +c 1.Definition predc i := i -c 1.Notation compare := compare (only parsing).Notation to_nat i := (Z.to_nat (to_Z i)).Notation of_nat n := (of_Z (Z.of_nat n)).Notation "n ?= m" := (compare n m) (at level 70, no associativity) : uint63_scope.Notation "'φ' x" := (to_Z x) (at level 0) : uint63_scope.Notation "'Φ' x" :=
   (zn2z_to_Z wB to_Z x) (at level 0) : uint63_scope.

(* Specifications: *)
Lemma to_Z_rec_bounded size : forall x, (0 <= to_Z_rec size x < 2 ^ Z.of_nat size)%Z.