(** Detection of constants *)

Ltac isUint63cst t :=
  match eval lazy delta [add] in (t + 1)%uint63 with
  | add _ _ => constr:(false)
  | _ => constr:(true)
  end.Ltac Uint63cst t :=
  match eval lazy delta [add] in (t + 1)%uint63 with
  | add _ _ => constr:(NotConstant)
  | _ => constr:(t)
  end.(** The generic ring structure inferred from the Cyclic structure *)

Module Uint63ring := CyclicRing Uint63Cyclic.

Lemma Uint63_canonic : forall x y, to_Z x = to_Z y -> x = y.