(* Contribution to the Coq Library   V6.3 (July 1999)                    *)
(****************************************************************************)
(*                                                                          *)
(*                           Group Theory in Coq                            *)
(*                                                                          *)
(*                                                                          *)
(*                                Coq V5.10                                 *)
(*									    *)
(*			         Gilles Kahn 				    *)
(*									    *)
(*                                  INRIA                                   *)
(*                             Sophia-Antipolis                             *)
(*									    *)
(*				 January 1996				    *)
(*                                                                          *)
(****************************************************************************)
Parameter U : Type.
Parameter Gr : Group U.
Definition G : Ensemble U := G_ U Gr.
Definition star : U -> U -> U := star_ U Gr.
Definition inv : U -> U := inv_ U Gr.
Definition e : U := e_ U Gr.
Definition G0' : forall a b : U, In U G a -> In U G b -> In U G (star a b) :=
G0 U Gr.
Definition G1' : forall a b c : U, star a (star b c) = star (star a b) c :=
G1 U Gr.
Definition G2a' : In U G e := G2a U Gr.
Definition G2b' : forall a : U, star e a = a := G2b U Gr.
Definition G2c' : forall a : U, star a e = a := G2c U Gr.
Definition G3a' : forall a : U, In U G a -> In U G (inv a) := G3a U Gr.
Definition G3b' : forall a : U, star a (inv a) = e := G3b U Gr.
Definition G3c' : forall a : U, star (inv a) a = e := G3c U Gr.
Hint Resolve G1'.
Hint Resolve G2a' G2b' G2c'.
Hint Resolve G3a' G3b' G3c'.
Hint Resolve G0'.
Definition triv1' : forall a b : U, star (inv a) (star a b) = b := triv1 U Gr.
Definition triv2' : forall a b : U, star (star b a) (inv a) = b := triv2 U Gr.
Definition resolve' : forall a b : U, star b a = e -> b = inv a :=
resolve U Gr.
Definition self_inv' : e = inv e := self_inv U Gr.
Definition inv_star' :
forall a b : U, star (inv b) (inv a) = inv (star a b) :=
inv_star U Gr.
Definition cancellation' : forall a b : U, star a b = a -> b = e :=
cancellation U Gr.
Definition inv_involution' : forall a : U, a = inv (inv a) :=
inv_involution U Gr.
Hint Resolve triv1' triv2' inv_star' resolve' inv_involution'.
Section Elements.
Variable H : Group U.
Variable sub : subgroup U H Gr.

(* Specifications: *)
Lemma l1 : Included U (G_ U H) G.
Hint Resolve l1.
Lemma eH_in_G : In U G (e_ U H).
Hint Resolve eH_in_G.
Lemma starH_is_star : star_ U H = star.
Hint Resolve starH_is_star.
Lemma eh_is_e : e_ U H = e.
Hint Resolve eh_is_e.
Theorem invH_is_inv : forall a : U, In U (G_ U H) a -> inv_ U H a = inv a.
Theorem Subgroup_inhabited : Inhabited U (G_ U H).
Theorem star_endo : endo_operation U (G_ U H) star.
Theorem inv_endo : endo_function U (G_ U H) inv.
End Elements.