(** 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 ring_theory_switch_eq : forall A (R R':A->A->Prop) zero one add mul sub opp, (forall x y : A, R x y -> R' x y) -> ring_theory zero one add mul sub opp R -> ring_theory zero one add mul sub opp R'.