(* This program is free software; you can redistribute it and/or      *)
(* modify it under the terms of the GNU Lesser General Public License *)
(* as published by the Free Software Foundation; either version 2.1   *)
(* of the License, or (at your option) any later version.             *)
(*                                                                    *)
(* This program is distributed in the hope that it will be useful,    *)
(* but WITHOUT ANY WARRANTY; without even the implied warranty of     *)
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the      *)
(* GNU General Public License for more details.                       *)
(*                                                                    *)
(* You should have received a copy of the GNU Lesser General Public   *)
(* License along with this program; if not, write to the Free         *)
(* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *)
(* 02110-1301 USA                                                     *)
Set Implicit Arguments.
Unset Strict Implicit.
Require Export Sub_group.
Require Export Group_util.
(** Title "Quotient of a group by a normal sub-group." *)
Section Def.
Variable G : GROUP.
Variable H : subgroup G.
Definition normal :=
forall x y : G,
in_part y H ->
in_part (sgroup_law _ x (sgroup_law _ y (group_inverse _ x))) H.
Hypothesis Hnormal : normal.
Definition group_quo_eq (x y : G) :=
in_part (sgroup_law _ x (group_inverse _ y)) H.
Definition group_quo_eqrel : Relation G.
apply (Build_Relation (E:=G) (Rel_fun:=group_quo_eq)).
red in |- *.
unfold app_rel, group_quo_eq in |- *.
intros x x' y y' H' H'0 H'1; try assumption.
apply in_part_comp_l with (sgroup_law G x (group_inverse G y));
auto with algebra.
Defined.

Lemma group_quo_eqrel_equiv : equivalence group_quo_eqrel.
red in Hnormal.