Section The_exercise_itself.
Variable E : Set.
Variable a : E.
Variable o : E -> E -> E.
Hypothesis o_assoc : associative o.
Hypothesis o_onto_r : forall x : E, onto (fun y : E => o x y).
Hypothesis o_onto_l : forall x : E, onto (fun y : E => o y x).
Hint Resolve o_assoc o_onto_r o_onto_l.
(********************************** Building the neutral element ... ************************************)
(*****************************)
(* A right neutral element *)
Definition e := let (e, _) := Ea in e.
(***********************************)
Hint Resolve r_neutral.
(*******************************)
Definition e' := let (e', _) := E'a in e'.
(**************************************)
Hint Resolve e'_l_neutral.
(*******************)
(*********************************)
Hint Resolve l_neutral.
(*********************************************************** we can now use the new element e to study the symmetrical ***********************************************************)
(*********************************)
Definition s (x : E) := let (y, _) return E := lsym x in y.
(*********************************)
Hint Resolve l_sym.
(*********************************)
(* provisional right symmetrical *)
Definition s' (x : E) := let (y, _) return E := rsym x in y.
(******************************)
(**********************************)
Hint Resolve r_sym.

(******************************)
Theorem E_is_a_group : group E.