From 748d716efb2f2f75946c8386e441ce1789806a39 Mon Sep 17 00:00:00 2001 From: Enrico Tassi Date: Wed, 22 May 2019 13:43:08 +0200 Subject: htmldoc regenerated --- docs/htmldoc/mathcomp.fingroup.fingroup.html | 1631 +++++++++++++------------- 1 file changed, 801 insertions(+), 830 deletions(-) (limited to 'docs/htmldoc/mathcomp.fingroup.fingroup.html') diff --git a/docs/htmldoc/mathcomp.fingroup.fingroup.html b/docs/htmldoc/mathcomp.fingroup.fingroup.html index c406f39..fcade98 100644 --- a/docs/htmldoc/mathcomp.fingroup.fingroup.html +++ b/docs/htmldoc/mathcomp.fingroup.fingroup.html @@ -21,7 +21,6 @@
(* (c) Copyright 2006-2016 Microsoft Corporation and Inria.                  
 Distributed under the terms of CeCILL-B.                                  *)

-Require Import mathcomp.ssreflect.ssreflect.

@@ -248,13 +247,13 @@
Record mixin_of (T : Type) : Type := BaseMixin {
-  mul : T T T;
+  mul : T T T;
  one : T;
-  inv : T T;
-  _ : associative mul;
-  _ : left_id one mul;
-  _ : involutive inv;
-  _ : {morph inv : x y / mul x y >-> mul y x}
+  inv : T T;
+  _ : associative mul;
+  _ : left_id one mul;
+  _ : involutive inv;
+  _ : {morph inv : x y / mul x y >-> mul y x}
}.

@@ -301,7 +300,7 @@
Structure type : Type := Pack {
  base : base_type;
-  _ : left_inverse (one (mixin base)) (inv (mixin base)) (mul (mixin base))
+  _ : left_inverse (one (mixin base)) (inv (mixin base)) (mul (mixin base))
}.

@@ -316,21 +315,21 @@ Section Mixin.

-Variables (T : Type) (one : T) (mul : T T T) (inv : T T).
+Variables (T : Type) (one : T) (mul : T T T) (inv : T T).

-Hypothesis mulA : associative mul.
-Hypothesis mul1 : left_id one mul.
-Hypothesis mulV : left_inverse one inv mul.
-Notation "1" := one.
-Infix "×" := mul.
-Notation "x ^-1" := (inv x).
+Hypothesis mulA : associative mul.
+Hypothesis mul1 : left_id one mul.
+Hypothesis mulV : left_inverse one inv mul.
+Notation "1" := one.
+Infix "×" := mul.
+Notation "x ^-1" := (inv x).

-Lemma mk_invgK : involutive inv.
+Lemma mk_invgK : involutive inv.

-Lemma mk_invMg : {morph inv : x y / x × y >-> y × x}.
+Lemma mk_invMg : {morph inv : x y / x × y >-> y × x}.

Definition Mixin := BaseMixin mulA mul1 mk_invgK mk_invMg.
@@ -340,17 +339,17 @@
Definition pack_base T m :=
-  fun c cT & phant_id (Finite.class cT) c ⇒ @PackBase T m c.
+  fun c cT & phant_id (Finite.class cT) c ⇒ @PackBase T m c.

Definition clone_base T :=
-  fun bT & sort bT T
-  fun m c (bT' := @PackBase T m c) & phant_id bT' bTbT'.
+  fun bT & sort bT T
+  fun m c (bT' := @PackBase T m c) & phant_id bT' bTbT'.

Definition clone T :=
-  fun bT gT & sort bT × sort (base gT) T × T
-  fun m (gT' := @Pack bT m) & phant_id gT' gTgT'.
+  fun bT gT & sort bT × sort (base gT) T × T
+  fun m (gT' := @Pack bT m) & phant_id gT' gTgT'.

Section InheritedClasses.
@@ -359,14 +358,14 @@ Variable bT : base_type.

-Canonical eqType := Equality.Pack class rT.
-Canonical choiceType := Choice.Pack class rT.
-Canonical countType := Countable.Pack class rT.
-Canonical finType := Finite.Pack class rT.
-Definition arg_eqType := Eval hnf in [eqType of T].
-Definition arg_choiceType := Eval hnf in [choiceType of T].
-Definition arg_countType := Eval hnf in [countType of T].
-Definition arg_finType := Eval hnf in [finType of T].
+Canonical eqType := Equality.Pack class.
+Canonical choiceType := Choice.Pack class.
+Canonical countType := Countable.Pack class.
+Canonical finType := Finite.Pack class.
+Definition arg_eqType := Eval hnf in [eqType of T].
+Definition arg_choiceType := Eval hnf in [choiceType of T].
+Definition arg_countType := Eval hnf in [countType of T].
+Definition arg_finType := Eval hnf in [finType of T].

End InheritedClasses.
@@ -400,11 +399,11 @@ Canonical arg_finType.
Notation baseFinGroupType := base_type.
Notation finGroupType := type.
-Notation BaseFinGroupType T m := (@pack_base T m _ _ id).
+Notation BaseFinGroupType T m := (@pack_base T m _ _ id).
Notation FinGroupType := Pack.
-Notation "[ 'baseFinGroupType' 'of' T ]" := (@clone_base T _ id _ _ id)
+Notation "[ 'baseFinGroupType' 'of' T ]" := (@clone_base T _ id _ _ id)
  (at level 0, format "[ 'baseFinGroupType' 'of' T ]") : form_scope.
-Notation "[ 'finGroupType' 'of' T ]" := (@clone T _ _ id _ id)
+Notation "[ 'finGroupType' 'of' T ]" := (@clone T _ _ id _ id)
  (at level 0, format "[ 'finGroupType' 'of' T ]") : form_scope.
End Exports.
@@ -421,22 +420,22 @@
Definition oneg : rT := FinGroup.one T.
-Definition mulg : T T rT := FinGroup.mul T.
-Definition invg : T rT := FinGroup.inv T.
+Definition mulg : T T rT := FinGroup.mul T.
+Definition invg : T rT := FinGroup.inv T.
Definition expgn_rec (x : T) n : rT := iterop n mulg x oneg.

End ElementOps.

-Definition expgn := nosimpl expgn_rec.
+Definition expgn := nosimpl expgn_rec.

-Notation "1" := (oneg _) : group_scope.
-Notation "x1 * x2" := (mulg x1 x2) : group_scope.
-Notation "x ^-1" := (invg x) : group_scope.
-Notation "x ^+ n" := (expgn x n) : group_scope.
-Notation "x ^- n" := (x ^+ n)^-1 : group_scope.
+Notation "1" := (oneg _) : group_scope.
+Notation "x1 * x2" := (mulg x1 x2) : group_scope.
+Notation "x ^-1" := (invg x) : group_scope.
+Notation "x ^+ n" := (expgn x n) : group_scope.
+Notation "x ^- n" := (x ^+ n)^-1 : group_scope.

@@ -447,41 +446,41 @@ {x^-1 * (y * z) | y \in A, x, z \in B}
-Definition conjg (T : finGroupType) (x y : T) := y^-1 × (x × y).
-Notation "x1 ^ x2" := (conjg x1 x2) : group_scope.
+Definition conjg (T : finGroupType) (x y : T) := y^-1 × (x × y).
+Notation "x1 ^ x2" := (conjg x1 x2) : group_scope.

-Definition commg (T : finGroupType) (x y : T) := x^-1 × x ^ y.
-Notation "[ ~ x1 , x2 , .. , xn ]" := (commg .. (commg x1 x2) .. xn)
+Definition commg (T : finGroupType) (x y : T) := x^-1 × x ^ y.
+Notation "[ ~ x1 , x2 , .. , xn ]" := (commg .. (commg x1 x2) .. xn)
  : group_scope.


-Notation "\prod_ ( i <- r | P ) F" :=
-  (\big[mulg/1]_(i <- r | P%B) F%g) : group_scope.
-Notation "\prod_ ( i <- r ) F" :=
-  (\big[mulg/1]_(i <- r) F%g) : group_scope.
-Notation "\prod_ ( m <= i < n | P ) F" :=
-  (\big[mulg/1]_(m i < n | P%B) F%g) : group_scope.
-Notation "\prod_ ( m <= i < n ) F" :=
-  (\big[mulg/1]_(m i < n) F%g) : group_scope.
-Notation "\prod_ ( i | P ) F" :=
-  (\big[mulg/1]_(i | P%B) F%g) : group_scope.
-Notation "\prod_ i F" :=
-  (\big[mulg/1]_i F%g) : group_scope.
-Notation "\prod_ ( i : t | P ) F" :=
-  (\big[mulg/1]_(i : t | P%B) F%g) (only parsing) : group_scope.
-Notation "\prod_ ( i : t ) F" :=
-  (\big[mulg/1]_(i : t) F%g) (only parsing) : group_scope.
-Notation "\prod_ ( i < n | P ) F" :=
-  (\big[mulg/1]_(i < n | P%B) F%g) : group_scope.
-Notation "\prod_ ( i < n ) F" :=
-  (\big[mulg/1]_(i < n) F%g) : group_scope.
-Notation "\prod_ ( i 'in' A | P ) F" :=
-  (\big[mulg/1]_(i in A | P%B) F%g) : group_scope.
-Notation "\prod_ ( i 'in' A ) F" :=
-  (\big[mulg/1]_(i in A) F%g) : group_scope.
+Notation "\prod_ ( i <- r | P ) F" :=
+  (\big[mulg/1]_(i <- r | P%B) F%g) : group_scope.
+Notation "\prod_ ( i <- r ) F" :=
+  (\big[mulg/1]_(i <- r) F%g) : group_scope.
+Notation "\prod_ ( m <= i < n | P ) F" :=
+  (\big[mulg/1]_(m i < n | P%B) F%g) : group_scope.
+Notation "\prod_ ( m <= i < n ) F" :=
+  (\big[mulg/1]_(m i < n) F%g) : group_scope.
+Notation "\prod_ ( i | P ) F" :=
+  (\big[mulg/1]_(i | P%B) F%g) : group_scope.
+Notation "\prod_ i F" :=
+  (\big[mulg/1]_i F%g) : group_scope.
+Notation "\prod_ ( i : t | P ) F" :=
+  (\big[mulg/1]_(i : t | P%B) F%g) (only parsing) : group_scope.
+Notation "\prod_ ( i : t ) F" :=
+  (\big[mulg/1]_(i : t) F%g) (only parsing) : group_scope.
+Notation "\prod_ ( i < n | P ) F" :=
+  (\big[mulg/1]_(i < n | P%B) F%g) : group_scope.
+Notation "\prod_ ( i < n ) F" :=
+  (\big[mulg/1]_(i < n) F%g) : group_scope.
+Notation "\prod_ ( i 'in' A | P ) F" :=
+  (\big[mulg/1]_(i in A | P%B) F%g) : group_scope.
+Notation "\prod_ ( i 'in' A ) F" :=
+  (\big[mulg/1]_(i in A) F%g) : group_scope.

Section PreGroupIdentities.
@@ -491,86 +490,86 @@ Implicit Types x y z : T.

-Lemma mulgA : associative mulgT.
-Lemma mul1g : left_id 1 mulgT.
-Lemma invgK : @involutive T invg.
-Lemma invMg x y : (x × y)^-1 = y^-1 × x^-1.
+Lemma mulgA : associative mulgT.
+Lemma mul1g : left_id 1 mulgT.
+Lemma invgK : @involutive T invg.
+Lemma invMg x y : (x × y)^-1 = y^-1 × x^-1.

-Lemma invg_inj : @injective T T invg.
+Lemma invg_inj : @injective T T invg.

-Lemma eq_invg_sym x y : (x^-1 == y) = (x == y^-1).
+Lemma eq_invg_sym x y : (x^-1 == y) = (x == y^-1).

-Lemma invg1 : 1^-1 = 1 :> T.
+Lemma invg1 : 1^-1 = 1 :> T.

-Lemma eq_invg1 x : (x^-1 == 1) = (x == 1).
+Lemma eq_invg1 x : (x^-1 == 1) = (x == 1).

-Lemma mulg1 : right_id 1 mulgT.
+Lemma mulg1 : right_id 1 mulgT.

Canonical finGroup_law := Monoid.Law mulgA mul1g mulg1.

-Lemma expgnE x n : x ^+ n = expgn_rec x n.
+Lemma expgnE x n : x ^+ n = expgn_rec x n.

-Lemma expg0 x : x ^+ 0 = 1.
-Lemma expg1 x : x ^+ 1 = x.
+Lemma expg0 x : x ^+ 0 = 1.
+Lemma expg1 x : x ^+ 1 = x.

-Lemma expgS x n : x ^+ n.+1 = x × x ^+ n.
+Lemma expgS x n : x ^+ n.+1 = x × x ^+ n.

-Lemma expg1n n : 1 ^+ n = 1 :> T.
+Lemma expg1n n : 1 ^+ n = 1 :> T.

-Lemma expgD x n m : x ^+ (n + m) = x ^+ n × x ^+ m.
+Lemma expgD x n m : x ^+ (n + m) = x ^+ n × x ^+ m.

-Lemma expgSr x n : x ^+ n.+1 = x ^+ n × x.
+Lemma expgSr x n : x ^+ n.+1 = x ^+ n × x.

-Lemma expgM x n m : x ^+ (n × m) = x ^+ n ^+ m.
+Lemma expgM x n m : x ^+ (n × m) = x ^+ n ^+ m.

-Lemma expgAC x m n : x ^+ m ^+ n = x ^+ n ^+ m.
+Lemma expgAC x m n : x ^+ m ^+ n = x ^+ n ^+ m.

-Definition commute x y := x × y = y × x.
+Definition commute x y := x × y = y × x.

Lemma commute_refl x : commute x x.

-Lemma commute_sym x y : commute x y commute y x.
+Lemma commute_sym x y : commute x y commute y x.

Lemma commute1 x : commute x 1.

-Lemma commuteM x y z : commute x y commute x z commute x (y × z).
+Lemma commuteM x y z : commute x y commute x z commute x (y × z).

-Lemma commuteX x y n : commute x y commute x (y ^+ n).
+Lemma commuteX x y n : commute x y commute x (y ^+ n).

-Lemma commuteX2 x y m n : commute x y commute (x ^+ m) (y ^+ n).
+Lemma commuteX2 x y m n : commute x y commute (x ^+ m) (y ^+ n).

-Lemma expgVn x n : x^-1 ^+ n = x ^- n.
+Lemma expgVn x n : x^-1 ^+ n = x ^- n.

-Lemma expgMn x y n : commute x y (x × y) ^+ n = x ^+ n × y ^+ n.
+Lemma expgMn x y n : commute x y (x × y) ^+ n = x ^+ n × y ^+ n.

End PreGroupIdentities.

-Hint Resolve commute1.
+Hint Resolve commute1 : core.

Section GroupIdentities.
@@ -580,131 +579,131 @@ Implicit Types x y z : T.

-Lemma mulVg : left_inverse 1 invg mulgT.
+Lemma mulVg : left_inverse 1 invg mulgT.

-Lemma mulgV : right_inverse 1 invg mulgT.
+Lemma mulgV : right_inverse 1 invg mulgT.

-Lemma mulKg : left_loop invg mulgT.
+Lemma mulKg : left_loop invg mulgT.

-Lemma mulKVg : rev_left_loop invg mulgT.
+Lemma mulKVg : rev_left_loop invg mulgT.

-Lemma mulgI : right_injective mulgT.
+Lemma mulgI : right_injective mulgT.

-Lemma mulgK : right_loop invg mulgT.
+Lemma mulgK : right_loop invg mulgT.

-Lemma mulgKV : rev_right_loop invg mulgT.
+Lemma mulgKV : rev_right_loop invg mulgT.

-Lemma mulIg : left_injective mulgT.
+Lemma mulIg : left_injective mulgT.

-Lemma eq_invg_mul x y : (x^-1 == y :> T) = (x × y == 1 :> T).
+Lemma eq_invg_mul x y : (x^-1 == y :> T) = (x × y == 1 :> T).

-Lemma eq_mulgV1 x y : (x == y) = (x × y^-1 == 1 :> T).
+Lemma eq_mulgV1 x y : (x == y) = (x × y^-1 == 1 :> T).

-Lemma eq_mulVg1 x y : (x == y) = (x^-1 × y == 1 :> T).
+Lemma eq_mulVg1 x y : (x == y) = (x^-1 × y == 1 :> T).

-Lemma commuteV x y : commute x y commute x y^-1.
+Lemma commuteV x y : commute x y commute x y^-1.

-Lemma conjgE x y : x ^ y = y^-1 × (x × y).
+Lemma conjgE x y : x ^ y = y^-1 × (x × y).

-Lemma conjgC x y : x × y = y × x ^ y.
+Lemma conjgC x y : x × y = y × x ^ y.

-Lemma conjgCV x y : x × y = y ^ x^-1 × x.
+Lemma conjgCV x y : x × y = y ^ x^-1 × x.

-Lemma conjg1 x : x ^ 1 = x.
+Lemma conjg1 x : x ^ 1 = x.

-Lemma conj1g x : 1 ^ x = 1.
+Lemma conj1g x : 1 ^ x = 1.

-Lemma conjMg x y z : (x × y) ^ z = x ^ z × y ^ z.
+Lemma conjMg x y z : (x × y) ^ z = x ^ z × y ^ z.

-Lemma conjgM x y z : x ^ (y × z) = (x ^ y) ^ z.
+Lemma conjgM x y z : x ^ (y × z) = (x ^ y) ^ z.

-Lemma conjVg x y : x^-1 ^ y = (x ^ y)^-1.
+Lemma conjVg x y : x^-1 ^ y = (x ^ y)^-1.

-Lemma conjJg x y z : (x ^ y) ^ z = (x ^ z) ^ y ^ z.
+Lemma conjJg x y z : (x ^ y) ^ z = (x ^ z) ^ y ^ z.

-Lemma conjXg x y n : (x ^+ n) ^ y = (x ^ y) ^+ n.
+Lemma conjXg x y n : (x ^+ n) ^ y = (x ^ y) ^+ n.

-Lemma conjgK : @right_loop T T invg conjg.
+Lemma conjgK : @right_loop T T invg conjg.

-Lemma conjgKV : @rev_right_loop T T invg conjg.
+Lemma conjgKV : @rev_right_loop T T invg conjg.

-Lemma conjg_inj : @left_injective T T T conjg.
+Lemma conjg_inj : @left_injective T T T conjg.

-Lemma conjg_eq1 x y : (x ^ y == 1) = (x == 1).
+Lemma conjg_eq1 x y : (x ^ y == 1) = (x == 1).

-Lemma conjg_prod I r (P : pred I) F z :
-  (\prod_(i <- r | P i) F i) ^ z = \prod_(i <- r | P i) (F i ^ z).
+Lemma conjg_prod I r (P : pred I) F z :
+  (\prod_(i <- r | P i) F i) ^ z = \prod_(i <- r | P i) (F i ^ z).

-Lemma commgEl x y : [~ x, y] = x^-1 × x ^ y.
+Lemma commgEl x y : [~ x, y] = x^-1 × x ^ y.

-Lemma commgEr x y : [~ x, y] = y^-1 ^ x × y.
+Lemma commgEr x y : [~ x, y] = y^-1 ^ x × y.

-Lemma commgC x y : x × y = y × x × [~ x, y].
+Lemma commgC x y : x × y = y × x × [~ x, y].

-Lemma commgCV x y : x × y = [~ x^-1, y^-1] × (y × x).
+Lemma commgCV x y : x × y = [~ x^-1, y^-1] × (y × x).

-Lemma conjRg x y z : [~ x, y] ^ z = [~ x ^ z, y ^ z].
+Lemma conjRg x y z : [~ x, y] ^ z = [~ x ^ z, y ^ z].

-Lemma invg_comm x y : [~ x, y]^-1 = [~ y, x].
+Lemma invg_comm x y : [~ x, y]^-1 = [~ y, x].

-Lemma commgP x y : reflect (commute x y) ([~ x, y] == 1 :> T).
+Lemma commgP x y : reflect (commute x y) ([~ x, y] == 1 :> T).

-Lemma conjg_fixP x y : reflect (x ^ y = x) ([~ x, y] == 1 :> T).
+Lemma conjg_fixP x y : reflect (x ^ y = x) ([~ x, y] == 1 :> T).

-Lemma commg1_sym x y : ([~ x, y] == 1 :> T) = ([~ y, x] == 1 :> T).
+Lemma commg1_sym x y : ([~ x, y] == 1 :> T) = ([~ y, x] == 1 :> T).

-Lemma commg1 x : [~ x, 1] = 1.
+Lemma commg1 x : [~ x, 1] = 1.

-Lemma comm1g x : [~ 1, x] = 1.
+Lemma comm1g x : [~ 1, x] = 1.

-Lemma commgg x : [~ x, x] = 1.
+Lemma commgg x : [~ x, x] = 1.

-Lemma commgXg x n : [~ x, x ^+ n] = 1.
+Lemma commgXg x n : [~ x, x ^+ n] = 1.

-Lemma commgVg x : [~ x, x^-1] = 1.
+Lemma commgVg x : [~ x, x^-1] = 1.

-Lemma commgXVg x n : [~ x, x ^- n] = 1.
+Lemma commgXVg x n : [~ x, x ^- n] = 1.

@@ -725,8 +724,8 @@ Ltac gsimpl := autorewrite with gsimpl; try done.

-Definition gsimp := (mulg1 , mul1g, (invg1, @invgK), (mulgV, mulVg)).
-Definition gnorm := (gsimp, (mulgK, mulgKV, (mulgA, invMg))).
+Definition gsimp := (mulg1 , mul1g, (invg1, @invgK), (mulgV, mulVg)).
+Definition gnorm := (gsimp, (mulgK, mulgKV, (mulgA, invMg))).

@@ -741,22 +740,22 @@
Variable gT : baseFinGroupType.
-Implicit Type A : {set gT}.
+Implicit Type A : {set gT}.

-Definition repr A := if 1 \in A then 1 else odflt 1 [pick x in A].
+Definition repr A := if 1 \in A then 1 else odflt 1 [pick x in A].

-Lemma mem_repr A x : x \in A repr A \in A.
+Lemma mem_repr A x : x \in A repr A \in A.

-Lemma card_mem_repr A : #|A| > 0 repr A \in A.
+Lemma card_mem_repr A : #|A| > 0 repr A \in A.

-Lemma repr_set1 x : repr [set x] = x.
+Lemma repr_set1 x : repr [set x] = x.

-Lemma repr_set0 : repr set0 = 1.
+Lemma repr_set0 : repr set0 = 1.

End Repr.
@@ -772,7 +771,7 @@
Variable gT : baseFinGroupType.
-Implicit Types A B : {set gT}.
+Implicit Types A B : {set gT}.

@@ -783,8 +782,8 @@

-Definition set_mulg A B := mulg @2: (A, B).
-Definition set_invg A := invg @^-1: A.
+Definition set_mulg A B := mulg @2: (A, B).
+Definition set_invg A := invg @^-1: A.

@@ -795,16 +794,16 @@

-Lemma set_mul1g : left_id [set 1] set_mulg.
+Lemma set_mul1g : left_id [set 1] set_mulg.

-Lemma set_mulgA : associative set_mulg.
+Lemma set_mulgA : associative set_mulg.

-Lemma set_invgK : involutive set_invg.
+Lemma set_invgK : involutive set_invg.

-Lemma set_invgM : {morph set_invg : A B / set_mulg A B >-> set_mulg B A}.
+Lemma set_invgM : {morph set_invg : A B / set_mulg A B >-> set_mulg B A}.

Definition group_set_baseGroupMixin : FinGroup.mixin_of (set_type gT) :=
@@ -816,7 +815,7 @@
Canonical group_set_of_baseGroupType :=
-  Eval hnf in [baseFinGroupType of {set gT}].
+  Eval hnf in [baseFinGroupType of {set gT}].

End BaseSetMulDef.
@@ -838,13 +837,13 @@
Module GroupSet.
-Definition sort (gT : baseFinGroupType) := {set gT}.
+Definition sort (gT : baseFinGroupType) := {set gT}.
End GroupSet.
Identity Coercion GroupSet_of_sort : GroupSet.sort >-> set_of.

Module Type GroupSetBaseGroupSig.
-Definition sort gT := group_set_of_baseGroupType gT : Type.
+Definition sort gT := group_set_of_baseGroupType gT : Type.
End GroupSetBaseGroupSig.

@@ -856,11 +855,11 @@ Module Export GroupSetBaseGroup := MakeGroupSetBaseGroup GroupSet.

-Canonical group_set_eqType gT := Eval hnf in [eqType of GroupSet.sort gT].
+Canonical group_set_eqType gT := Eval hnf in [eqType of GroupSet.sort gT].
Canonical group_set_choiceType gT :=
-  Eval hnf in [choiceType of GroupSet.sort gT].
-Canonical group_set_countType gT := Eval hnf in [countType of GroupSet.sort gT].
-Canonical group_set_finType gT := Eval hnf in [finType of GroupSet.sort gT].
+  Eval hnf in [choiceType of GroupSet.sort gT].
+Canonical group_set_countType gT := Eval hnf in [countType of GroupSet.sort gT].
+Canonical group_set_finType gT := Eval hnf in [finType of GroupSet.sort gT].

Section GroupSetMulDef.
@@ -873,25 +872,25 @@
Variable gT : finGroupType.
-Implicit Types A B : {set gT}.
+Implicit Types A B : {set gT}.
Implicit Type x y : gT.

-Definition lcoset A x := mulg x @: A.
-Definition rcoset A x := mulg^~ x @: A.
-Definition lcosets A B := lcoset A @: B.
-Definition rcosets A B := rcoset A @: B.
-Definition indexg B A := #|rcosets A B|.
+Definition lcoset A x := mulg x @: A.
+Definition rcoset A x := mulg^~ x @: A.
+Definition lcosets A B := lcoset A @: B.
+Definition rcosets A B := rcoset A @: B.
+Definition indexg B A := #|rcosets A B|.

-Definition conjugate A x := conjg^~ x @: A.
-Definition conjugates A B := conjugate A @: B.
-Definition class x B := conjg x @: B.
-Definition classes A := class^~ A @: A.
-Definition class_support A B := conjg @2: (A, B).
+Definition conjugate A x := conjg^~ x @: A.
+Definition conjugates A B := conjugate A @: B.
+Definition class x B := conjg x @: B.
+Definition classes A := class^~ A @: A.
+Definition class_support A B := conjg @2: (A, B).

-Definition commg_set A B := commg @2: (A, B).
+Definition commg_set A B := commg @2: (A, B).

@@ -901,10 +900,10 @@ keep all the Notation together.
-Definition normaliser A := [set x | conjugate A x \subset A].
-Definition centraliser A := \bigcap_(x in A) normaliser [set x].
-Definition abelian A := A \subset centraliser A.
-Definition normal A B := (A \subset B) && (B \subset normaliser A).
+Definition normaliser A := [set x | conjugate A x \subset A].
+Definition centraliser A := \bigcap_(x in A) normaliser [set x].
+Definition abelian A := A \subset centraliser A.
+Definition normal A B := (A \subset B) && (B \subset normaliser A).

@@ -914,8 +913,8 @@ the {in ...} form, as in abelian below.
-Definition normalised A := x, conjugate A x = A.
-Definition centralises x A := y, y \in A commute x y.
+Definition normalised A := x, conjugate A x = A.
+Definition centralises x A := y, y \in A commute x y.
Definition centralised A := x, centralises x A.

@@ -924,21 +923,21 @@

-Notation "[ 1 gT ]" := (1 : {set gT}) : group_scope.
-Notation "[ 1 ]" := [1 FinGroup.sort _] : group_scope.
+Notation "[ 1 gT ]" := (1 : {set gT}) : group_scope.
+Notation "[ 1 ]" := [1 FinGroup.sort _] : group_scope.

-Notation "A ^#" := (A :\ 1) : group_scope.
+Notation "A ^#" := (A :\ 1) : group_scope.

-Notation "x *: A" := ([set x%g] × A) : group_scope.
-Notation "A :* x" := (A × [set x%g]) : group_scope.
-Notation "A :^ x" := (conjugate A x) : group_scope.
-Notation "x ^: B" := (class x B) : group_scope.
-Notation "A :^: B" := (conjugates A B) : group_scope.
+Notation "x *: A" := ([set x%g] × A) : group_scope.
+Notation "A :* x" := (A × [set x%g]) : group_scope.
+Notation "A :^ x" := (conjugate A x) : group_scope.
+Notation "x ^: B" := (class x B) : group_scope.
+Notation "A :^: B" := (conjugates A B) : group_scope.

-Notation "#| B : A |" := (indexg B A) : group_scope.
+Notation "#| B : A |" := (indexg B A) : group_scope.

@@ -952,15 +951,15 @@

-Notation "''N' ( A )" := (normaliser A) : group_scope.
-Notation "''N_' G ( A )" := (G%g :&: 'N(A)) : group_scope.
-Notation "A <| B" := (normal A B) : group_scope.
-Notation "''C' ( A )" := (centraliser A) : group_scope.
-Notation "''C_' G ( A )" := (G%g :&: 'C(A)) : group_scope.
-Notation "''C_' ( G ) ( A )" := 'C_G(A) (only parsing) : group_scope.
-Notation "''C' [ x ]" := 'N([set x%g]) : group_scope.
-Notation "''C_' G [ x ]" := 'N_G([set x%g]) : group_scope.
-Notation "''C_' ( G ) [ x ]" := 'C_G[x] (only parsing) : group_scope.
+Notation "''N' ( A )" := (normaliser A) : group_scope.
+Notation "''N_' G ( A )" := (G%g :&: 'N(A)) : group_scope.
+Notation "A <| B" := (normal A B) : group_scope.
+Notation "''C' ( A )" := (centraliser A) : group_scope.
+Notation "''C_' G ( A )" := (G%g :&: 'C(A)) : group_scope.
+Notation "''C_' ( G ) ( A )" := 'C_G(A) (only parsing) : group_scope.
+Notation "''C' [ x ]" := 'N([set x%g]) : group_scope.
+Notation "''C_' G [ x ]" := 'N_G([set x%g]) : group_scope.
+Notation "''C_' ( G ) [ x ]" := 'C_G[x] (only parsing) : group_scope.

@@ -973,7 +972,7 @@
Variable gT : baseFinGroupType.
-Implicit Types A B C D : {set gT}.
+Implicit Types A B C D : {set gT}.
Implicit Type x y z : gT.

@@ -987,40 +986,40 @@
Lemma mulsgP A B x :
-  reflect (imset2_spec mulg (mem A) (fun _mem B) x) (x \in A × B).
+  reflect (imset2_spec mulg (mem A) (fun _mem B) x) (x \in A × B).

-Lemma mem_mulg A B x y : x \in A y \in B x × y \in A × B.
+Lemma mem_mulg A B x y : x \in A y \in B x × y \in A × B.

-Lemma prodsgP (I : finType) (P : pred I) (A : I {set gT}) x :
-  reflect (exists2 c, i, P i c i \in A i & x = \prod_(i | P i) c i)
-          (x \in \prod_(i | P i) A i).
+Lemma prodsgP (I : finType) (P : pred I) (A : I {set gT}) x :
+  reflect (exists2 c, i, P i c i \in A i & x = \prod_(i | P i) c i)
+          (x \in \prod_(i | P i) A i).

-Lemma mem_prodg (I : finType) (P : pred I) (A : I {set gT}) c :
-  ( i, P i c i \in A i) \prod_(i | P i) c i \in \prod_(i | P i) A i.
+Lemma mem_prodg (I : finType) (P : pred I) (A : I {set gT}) c :
+  ( i, P i c i \in A i) \prod_(i | P i) c i \in \prod_(i | P i) A i.

-Lemma mulSg A B C : A \subset B A × C \subset B × C.
+Lemma mulSg A B C : A \subset B A × C \subset B × C.

-Lemma mulgS A B C : B \subset C A × B \subset A × C.
+Lemma mulgS A B C : B \subset C A × B \subset A × C.

-Lemma mulgSS A B C D : A \subset B C \subset D A × C \subset B × D.
+Lemma mulgSS A B C D : A \subset B C \subset D A × C \subset B × D.

-Lemma mulg_subl A B : 1 \in B A \subset A × B.
+Lemma mulg_subl A B : 1 \in B A \subset A × B.

-Lemma mulg_subr A B : 1 \in A B \subset A × B.
+Lemma mulg_subr A B : 1 \in A B \subset A × B.

-Lemma mulUg A B C : (A :|: B) × C = (A × C) :|: (B × C).
+Lemma mulUg A B C : (A :|: B) × C = (A × C) :|: (B × C).

-Lemma mulgU A B C : A × (B :|: C) = (A × B) :|: (A × C).
+Lemma mulgU A B C : A × (B :|: C) = (A × B) :|: (A × C).

@@ -1031,28 +1030,28 @@

-Lemma invUg A B : (A :|: B)^-1 = A^-1 :|: B^-1.
+Lemma invUg A B : (A :|: B)^-1 = A^-1 :|: B^-1.

-Lemma invIg A B : (A :&: B)^-1 = A^-1 :&: B^-1.
+Lemma invIg A B : (A :&: B)^-1 = A^-1 :&: B^-1.

-Lemma invDg A B : (A :\: B)^-1 = A^-1 :\: B^-1.
+Lemma invDg A B : (A :\: B)^-1 = A^-1 :\: B^-1.

-Lemma invCg A : (~: A)^-1 = ~: A^-1.
+Lemma invCg A : (~: A)^-1 = ~: A^-1.

-Lemma invSg A B : (A^-1 \subset B^-1) = (A \subset B).
+Lemma invSg A B : (A^-1 \subset B^-1) = (A \subset B).

-Lemma mem_invg x A : (x \in A^-1) = (x^-1 \in A).
+Lemma mem_invg x A : (x \in A^-1) = (x^-1 \in A).

-Lemma memV_invg x A : (x^-1 \in A^-1) = (x \in A).
+Lemma memV_invg x A : (x^-1 \in A^-1) = (x \in A).

-Lemma card_invg A : #|A^-1| = #|A|.
+Lemma card_invg A : #|A^-1| = #|A|.

@@ -1063,16 +1062,16 @@

-Lemma set1gE : 1 = [set 1] :> {set gT}.
+Lemma set1gE : 1 = [set 1] :> {set gT}.

-Lemma set1gP x : reflect (x = 1) (x \in [1]).
+Lemma set1gP x : reflect (x = 1) (x \in [1]).

-Lemma mulg_set1 x y : [set x] :* y = [set x × y].
+Lemma mulg_set1 x y : [set x] :* y = [set x × y].

-Lemma invg_set1 x : [set x]^-1 = [set x^-1].
+Lemma invg_set1 x : [set x]^-1 = [set x^-1].

End BaseSetMulProp.
@@ -1088,7 +1087,7 @@
Variable gT : finGroupType.
-Implicit Types A B C D : {set gT}.
+Implicit Types A B C D : {set gT}.
Implicit Type x y z : gT.

@@ -1100,44 +1099,44 @@

-Lemma lcosetE A x : lcoset A x = x *: A.
+Lemma lcosetE A x : lcoset A x = x *: A.

-Lemma card_lcoset A x : #|x *: A| = #|A|.
+Lemma card_lcoset A x : #|x *: A| = #|A|.

-Lemma mem_lcoset A x y : (y \in x *: A) = (x^-1 × y \in A).
+Lemma mem_lcoset A x y : (y \in x *: A) = (x^-1 × y \in A).

-Lemma lcosetP A x y : reflect (exists2 a, a \in A & y = x × a) (y \in x *: A).
+Lemma lcosetP A x y : reflect (exists2 a, a \in A & y = x × a) (y \in x *: A).

Lemma lcosetsP A B C :
-  reflect (exists2 x, x \in B & C = x *: A) (C \in lcosets A B).
+  reflect (exists2 x, x \in B & C = x *: A) (C \in lcosets A B).

-Lemma lcosetM A x y : (x × y) *: A = x *: (y *: A).
+Lemma lcosetM A x y : (x × y) *: A = x *: (y *: A).

-Lemma lcoset1 A : 1 *: A = A.
+Lemma lcoset1 A : 1 *: A = A.

-Lemma lcosetK : left_loop invg (fun x Ax *: A).
+Lemma lcosetK : left_loop invg (fun x Ax *: A).

-Lemma lcosetKV : rev_left_loop invg (fun x Ax *: A).
+Lemma lcosetKV : rev_left_loop invg (fun x Ax *: A).

-Lemma lcoset_inj : right_injective (fun x Ax *: A).
+Lemma lcoset_inj : right_injective (fun x Ax *: A).

-Lemma lcosetS x A B : (x *: A \subset x *: B) = (A \subset B).
+Lemma lcosetS x A B : (x *: A \subset x *: B) = (A \subset B).

-Lemma sub_lcoset x A B : (A \subset x *: B) = (x^-1 *: A \subset B).
+Lemma sub_lcoset x A B : (A \subset x *: B) = (x^-1 *: A \subset B).

-Lemma sub_lcosetV x A B : (A \subset x^-1 *: B) = (x *: A \subset B).
+Lemma sub_lcosetV x A B : (A \subset x^-1 *: B) = (x *: A \subset B).

@@ -1148,44 +1147,44 @@

-Lemma rcosetE A x : rcoset A x = A :* x.
+Lemma rcosetE A x : rcoset A x = A :* x.

-Lemma card_rcoset A x : #|A :* x| = #|A|.
+Lemma card_rcoset A x : #|A :* x| = #|A|.

-Lemma mem_rcoset A x y : (y \in A :* x) = (y × x^-1 \in A).
+Lemma mem_rcoset A x y : (y \in A :* x) = (y × x^-1 \in A).

-Lemma rcosetP A x y : reflect (exists2 a, a \in A & y = a × x) (y \in A :* x).
+Lemma rcosetP A x y : reflect (exists2 a, a \in A & y = a × x) (y \in A :* x).

Lemma rcosetsP A B C :
-  reflect (exists2 x, x \in B & C = A :* x) (C \in rcosets A B).
+  reflect (exists2 x, x \in B & C = A :* x) (C \in rcosets A B).

-Lemma rcosetM A x y : A :* (x × y) = A :* x :* y.
+Lemma rcosetM A x y : A :* (x × y) = A :* x :* y.

-Lemma rcoset1 A : A :* 1 = A.
+Lemma rcoset1 A : A :* 1 = A.

-Lemma rcosetK : right_loop invg (fun A xA :* x).
+Lemma rcosetK : right_loop invg (fun A xA :* x).

-Lemma rcosetKV : rev_right_loop invg (fun A xA :* x).
+Lemma rcosetKV : rev_right_loop invg (fun A xA :* x).

-Lemma rcoset_inj : left_injective (fun A xA :* x).
+Lemma rcoset_inj : left_injective (fun A xA :* x).

-Lemma rcosetS x A B : (A :* x \subset B :* x) = (A \subset B).
+Lemma rcosetS x A B : (A :* x \subset B :* x) = (A \subset B).

-Lemma sub_rcoset x A B : (A \subset B :* x) = (A :* x ^-1 \subset B).
+Lemma sub_rcoset x A B : (A \subset B :* x) = (A :* x ^-1 \subset B).

-Lemma sub_rcosetV x A B : (A \subset B :* x^-1) = (A :* x \subset B).
+Lemma sub_rcosetV x A B : (A \subset B :* x^-1) = (A :* x \subset B).

@@ -1194,7 +1193,7 @@ Inverse maps lcosets to rcosets
-Lemma invg_lcosets A B : (lcosets A B)^-1 = rcosets A^-1 B^-1.
+Lemma invg_lcosets A B : (lcosets A B)^-1 = rcosets A^-1 B^-1.

@@ -1205,90 +1204,90 @@

-Lemma conjg_preim A x : A :^ x = (conjg^~ x^-1) @^-1: A.
+Lemma conjg_preim A x : A :^ x = (conjg^~ x^-1) @^-1: A.

-Lemma mem_conjg A x y : (y \in A :^ x) = (y ^ x^-1 \in A).
+Lemma mem_conjg A x y : (y \in A :^ x) = (y ^ x^-1 \in A).

-Lemma mem_conjgV A x y : (y \in A :^ x^-1) = (y ^ x \in A).
+Lemma mem_conjgV A x y : (y \in A :^ x^-1) = (y ^ x \in A).

-Lemma memJ_conjg A x y : (y ^ x \in A :^ x) = (y \in A).
+Lemma memJ_conjg A x y : (y ^ x \in A :^ x) = (y \in A).

-Lemma conjsgE A x : A :^ x = x^-1 *: (A :* x).
+Lemma conjsgE A x : A :^ x = x^-1 *: (A :* x).

-Lemma conjsg1 A : A :^ 1 = A.
+Lemma conjsg1 A : A :^ 1 = A.

-Lemma conjsgM A x y : A :^ (x × y) = (A :^ x) :^ y.
+Lemma conjsgM A x y : A :^ (x × y) = (A :^ x) :^ y.

-Lemma conjsgK : @right_loop _ gT invg conjugate.
+Lemma conjsgK : @right_loop _ gT invg conjugate.

-Lemma conjsgKV : @rev_right_loop _ gT invg conjugate.
+Lemma conjsgKV : @rev_right_loop _ gT invg conjugate.

-Lemma conjsg_inj : @left_injective _ gT _ conjugate.
+Lemma conjsg_inj : @left_injective _ gT _ conjugate.

-Lemma cardJg A x : #|A :^ x| = #|A|.
+Lemma cardJg A x : #|A :^ x| = #|A|.

-Lemma conjSg A B x : (A :^ x \subset B :^ x) = (A \subset B).
+Lemma conjSg A B x : (A :^ x \subset B :^ x) = (A \subset B).

-Lemma properJ A B x : (A :^ x \proper B :^ x) = (A \proper B).
+Lemma properJ A B x : (A :^ x \proper B :^ x) = (A \proper B).

-Lemma sub_conjg A B x : (A :^ x \subset B) = (A \subset B :^ x^-1).
+Lemma sub_conjg A B x : (A :^ x \subset B) = (A \subset B :^ x^-1).

-Lemma sub_conjgV A B x : (A :^ x^-1 \subset B) = (A \subset B :^ x).
+Lemma sub_conjgV A B x : (A :^ x^-1 \subset B) = (A \subset B :^ x).

-Lemma conjg_set1 x y : [set x] :^ y = [set x ^ y].
+Lemma conjg_set1 x y : [set x] :^ y = [set x ^ y].

-Lemma conjs1g x : 1 :^ x = 1.
+Lemma conjs1g x : 1 :^ x = 1.

-Lemma conjsg_eq1 A x : (A :^ x == 1%g) = (A == 1%g).
+Lemma conjsg_eq1 A x : (A :^ x == 1%g) = (A == 1%g).

-Lemma conjsMg A B x : (A × B) :^ x = A :^ x × B :^ x.
+Lemma conjsMg A B x : (A × B) :^ x = A :^ x × B :^ x.

-Lemma conjIg A B x : (A :&: B) :^ x = A :^ x :&: B :^ x.
+Lemma conjIg A B x : (A :&: B) :^ x = A :^ x :&: B :^ x.

-Lemma conj0g x : set0 :^ x = set0.
+Lemma conj0g x : set0 :^ x = set0.

-Lemma conjTg x : [set: gT] :^ x = [set: gT].
+Lemma conjTg x : [set: gT] :^ x = [set: gT].

-Lemma bigcapJ I r (P : pred I) (B : I {set gT}) x :
-  \bigcap_(i <- r | P i) (B i :^ x) = (\bigcap_(i <- r | P i) B i) :^ x.
+Lemma bigcapJ I r (P : pred I) (B : I {set gT}) x :
+  \bigcap_(i <- r | P i) (B i :^ x) = (\bigcap_(i <- r | P i) B i) :^ x.

-Lemma conjUg A B x : (A :|: B) :^ x = A :^ x :|: B :^ x.
+Lemma conjUg A B x : (A :|: B) :^ x = A :^ x :|: B :^ x.

-Lemma bigcupJ I r (P : pred I) (B : I {set gT}) x :
-  \bigcup_(i <- r | P i) (B i :^ x) = (\bigcup_(i <- r | P i) B i) :^ x.
+Lemma bigcupJ I r (P : pred I) (B : I {set gT}) x :
+  \bigcup_(i <- r | P i) (B i :^ x) = (\bigcup_(i <- r | P i) B i) :^ x.

-Lemma conjCg A x : (~: A) :^ x = ~: A :^ x.
+Lemma conjCg A x : (~: A) :^ x = ~: A :^ x.

-Lemma conjDg A B x : (A :\: B) :^ x = A :^ x :\: B :^ x.
+Lemma conjDg A B x : (A :\: B) :^ x = A :^ x :\: B :^ x.

-Lemma conjD1g A x : A^# :^ x = (A :^ x)^#.
+Lemma conjD1g A x : A^# :^ x = (A :^ x)^#.

@@ -1299,45 +1298,45 @@

-Lemma memJ_class x y A : y \in A x ^ y \in x ^: A.
+Lemma memJ_class x y A : y \in A x ^ y \in x ^: A.

-Lemma classS x A B : A \subset B x ^: A \subset x ^: B.
+Lemma classS x A B : A \subset B x ^: A \subset x ^: B.

-Lemma class_set1 x y : x ^: [set y] = [set x ^ y].
+Lemma class_set1 x y : x ^: [set y] = [set x ^ y].

-Lemma class1g x A : x \in A 1 ^: A = 1.
+Lemma class1g x A : x \in A 1 ^: A = 1.

-Lemma classVg x A : x^-1 ^: A = (x ^: A)^-1.
+Lemma classVg x A : x^-1 ^: A = (x ^: A)^-1.

-Lemma mem_classes x A : x \in A x ^: A \in classes A.
+Lemma mem_classes x A : x \in A x ^: A \in classes A.

Lemma memJ_class_support A B x y :
-   x \in A y \in B x ^ y \in class_support A B.
+   x \in A y \in B x ^ y \in class_support A B.

Lemma class_supportM A B C :
-  class_support A (B × C) = class_support (class_support A B) C.
+  class_support A (B × C) = class_support (class_support A B) C.

-Lemma class_support_set1l A x : class_support [set x] A = x ^: A.
+Lemma class_support_set1l A x : class_support [set x] A = x ^: A.

-Lemma class_support_set1r A x : class_support A [set x] = A :^ x.
+Lemma class_support_set1r A x : class_support A [set x] = A :^ x.

-Lemma classM x A B : x ^: (A × B) = class_support (x ^: A) B.
+Lemma classM x A B : x ^: (A × B) = class_support (x ^: A) B.

-Lemma class_lcoset x y A : x ^: (y *: A) = (x ^ y) ^: A.
+Lemma class_lcoset x y A : x ^: (y *: A) = (x ^ y) ^: A.

-Lemma class_rcoset x A y : x ^: (A :* y) = (x ^: A) :^ y.
+Lemma class_rcoset x A y : x ^: (A :* y) = (x ^: A) :^ y.

@@ -1348,13 +1347,13 @@

-Lemma conjugatesS A B C : B \subset C A :^: B \subset A :^: C.
+Lemma conjugatesS A B C : B \subset C A :^: B \subset A :^: C.

-Lemma conjugates_set1 A x : A :^: [set x] = [set A :^ x].
+Lemma conjugates_set1 A x : A :^: [set x] = [set A :^ x].

-Lemma conjugates_conj A x B : (A :^ x) :^: B = A :^: (x *: B).
+Lemma conjugates_conj A x B : (A :^ x) :^: B = A :^: (x *: B).

@@ -1365,10 +1364,10 @@

-Lemma class_supportEl A B : class_support A B = \bigcup_(x in A) x ^: B.
+Lemma class_supportEl A B : class_support A B = \bigcup_(x in A) x ^: B.

-Lemma class_supportEr A B : class_support A B = \bigcup_(x in B) A :^ x.
+Lemma class_supportEr A B : class_support A B = \bigcup_(x in B) A :^ x.

@@ -1379,11 +1378,11 @@

-Definition group_set A := (1 \in A) && (A × A \subset A).
+Definition group_set A := (1 \in A) && (A × A \subset A).

Lemma group_setP A :
-  reflect (1 \in A {in A & A, x y, x × y \in A}) (group_set A).
+  reflect (1 \in A {in A & A, x y, x × y \in A}) (group_set A).

Structure group_type : Type := Group {
@@ -1392,22 +1391,22 @@ }.

-Definition group_of of phant gT : predArgType := group_type.
+Definition group_of of phant gT : predArgType := group_type.
Identity Coercion type_of_group : group_of >-> group_type.

-Canonical group_subType := Eval hnf in [subType for gval].
-Definition group_eqMixin := Eval hnf in [eqMixin of group_type by <:].
+Canonical group_subType := Eval hnf in [subType for gval].
+Definition group_eqMixin := Eval hnf in [eqMixin of group_type by <:].
Canonical group_eqType := Eval hnf in EqType group_type group_eqMixin.
-Definition group_choiceMixin := [choiceMixin of group_type by <:].
+Definition group_choiceMixin := [choiceMixin of group_type by <:].
Canonical group_choiceType :=
  Eval hnf in ChoiceType group_type group_choiceMixin.
-Definition group_countMixin := [countMixin of group_type by <:].
+Definition group_countMixin := [countMixin of group_type by <:].
Canonical group_countType := Eval hnf in CountType group_type group_countMixin.
-Canonical group_subCountType := Eval hnf in [subCountType of group_type].
-Definition group_finMixin := [finMixin of group_type by <:].
+Canonical group_subCountType := Eval hnf in [subCountType of group_type].
+Definition group_finMixin := [finMixin of group_type by <:].
Canonical group_finType := Eval hnf in FinType group_type group_finMixin.
-Canonical group_subFinType := Eval hnf in [subFinType of group_type].
+Canonical group_subFinType := Eval hnf in [subFinType of group_type].

@@ -1419,40 +1418,40 @@

-Canonical group_of_subType := Eval hnf in [subType of groupT].
-Canonical group_of_eqType := Eval hnf in [eqType of groupT].
-Canonical group_of_choiceType := Eval hnf in [choiceType of groupT].
-Canonical group_of_countType := Eval hnf in [countType of groupT].
-Canonical group_of_subCountType := Eval hnf in [subCountType of groupT].
-Canonical group_of_finType := Eval hnf in [finType of groupT].
-Canonical group_of_subFinType := Eval hnf in [subFinType of groupT].
+Canonical group_of_subType := Eval hnf in [subType of groupT].
+Canonical group_of_eqType := Eval hnf in [eqType of groupT].
+Canonical group_of_choiceType := Eval hnf in [choiceType of groupT].
+Canonical group_of_countType := Eval hnf in [countType of groupT].
+Canonical group_of_subCountType := Eval hnf in [subCountType of groupT].
+Canonical group_of_finType := Eval hnf in [finType of groupT].
+Canonical group_of_subFinType := Eval hnf in [subFinType of groupT].

-Definition group (A : {set gT}) gA : groupT := @Group A gA.
+Definition group (A : {set gT}) gA : groupT := @Group A gA.

Definition clone_group G :=
-  let: Group _ gP := G return {type of Group for G} groupT in fun kk gP.
+  let: Group _ gP := G return {type of Group for G} groupT in fun kk gP.

-Lemma group_inj : injective gval.
+Lemma group_inj : injective gval.
Lemma groupP (G : groupT) : group_set G.

-Lemma congr_group (H K : groupT) : H = K H :=: K.
+Lemma congr_group (H K : groupT) : H = K H :=: K.

-Lemma isgroupP A : reflect ( G : groupT, A = G) (group_set A).
+Lemma isgroupP A : reflect ( G : groupT, A = G) (group_set A).

Lemma group_set_one : group_set 1.

Canonical one_group := group group_set_one.
-Canonical set1_group := @group [set 1] group_set_one.
+Canonical set1_group := @group [set 1] group_set_one.

-Lemma group_setT (phT : phant gT) : group_set (setTfor phT).
+Lemma group_setT (phT : phant gT) : group_set (setTfor phT).

Canonical setT_group phT := group (group_setT phT).
@@ -1464,12 +1463,12 @@ These definitions come early so we can establish the Notation.
-Definition generated A := \bigcap_(G : groupT | A \subset G) G.
-Definition gcore A B := \bigcap_(x in B) A :^ x.
-Definition joing A B := generated (A :|: B).
+Definition generated A := \bigcap_(G : groupT | A \subset G) G.
+Definition gcore A B := \bigcap_(x in B) A :^ x.
+Definition joing A B := generated (A :|: B).
Definition commutator A B := generated (commg_set A B).
-Definition cycle x := generated [set x].
-Definition order x := #|cycle x|.
+Definition cycle x := generated [set x].
+Definition order x := #|cycle x|.

End GroupSetMulProp.
@@ -1479,17 +1478,17 @@

-Notation "{ 'group' gT }" := (group_of (Phant gT))
+Notation "{ 'group' gT }" := (group_of (Phant gT))
  (at level 0, format "{ 'group' gT }") : type_scope.

-Notation "[ 'group' 'of' G ]" := (clone_group (@group _ G))
+Notation "[ 'group' 'of' G ]" := (clone_group (@group _ G))
  (at level 0, format "[ 'group' 'of' G ]") : form_scope.

-Notation "1" := (one_group _) : Group_scope.
-Notation "[ 1 gT ]" := (1%G : {group gT}) : Group_scope.
-Notation "[ 'set' : gT ]" := (setT_group (Phant gT)) : Group_scope.
+Notation "1" := (one_group _) : Group_scope.
+Notation "[ 1 gT ]" := (1%G : {group gT}) : Group_scope.
+Notation "[ 'set' : gT ]" := (setT_group (Phant gT)) : Group_scope.

@@ -1504,11 +1503,11 @@
Notation gsort gT := (FinGroup.arg_sort (FinGroup.base gT%type)) (only parsing).
-Notation "<< A >>" := (generated A) : group_scope.
-Notation "<[ x ] >" := (cycle x) : group_scope.
-Notation "#[ x ]" := (order x) : group_scope.
-Notation "A <*> B" := (joing A B) : group_scope.
-Notation "[ ~: A1 , A2 , .. , An ]" :=
+Notation "<< A >>" := (generated A) : group_scope.
+Notation "<[ x ] >" := (cycle x) : group_scope.
+Notation "#[ x ]" := (order x) : group_scope.
+Notation "A <*> B" := (joing A B) : group_scope.
+Notation "[ ~: A1 , A2 , .. , An ]" :=
  (commutator .. (commutator A1 A2) .. An) : group_scope.

@@ -1518,19 +1517,19 @@
Variable gT : finGroupType.
-Notation sT := {set gT}.
+Notation sT := {set gT}.
Implicit Types A B C D : sT.
Implicit Types x y z : gT.
-Implicit Types G H K : {group gT}.
+Implicit Types G H K : {group gT}.

Section OneGroup.

-Variable G : {group gT}.
+Variable G : {group gT}.

-Lemma valG : val G = G.
+Lemma valG : val G = G.

@@ -1541,88 +1540,58 @@

-Lemma group1 : 1 \in G.
-Hint Resolve group1.
+Lemma group1 : 1 \in G.
+Hint Resolve group1 : core.

-
- -
- Loads of silly variants to placate the incompleteness of trivial. - An alternative would be to upgrade done, pending better support - in the ssreflect ML code. -
-
-Notation gTr := (FinGroup.sort gT).
-Notation Gcl := (pred_of_set G : pred gTr).
-Lemma group1_class1 : (1 : gTr) \in G.
-Lemma group1_class2 : 1 \in Gcl.
-Lemma group1_class12 : (1 : gTr) \in Gcl.
-Lemma group1_eqType : (1 : gT : eqType) \in G.
-Lemma group1_finType : (1 : gT : finType) \in G.
- -
-Lemma group1_contra x : x \notin G x != 1.
+Lemma group1_contra x : x \notin G x != 1.

-Lemma sub1G : [1 gT] \subset G.
-Lemma subG1 : (G \subset [1]) = (G :==: 1).
+Lemma sub1G : [1 gT] \subset G.
+Lemma subG1 : (G \subset [1]) = (G :==: 1).

-Lemma setI1g : 1 :&: G = 1.
-Lemma setIg1 : G :&: 1 = 1.
+Lemma setI1g : 1 :&: G = 1.
+Lemma setIg1 : G :&: 1 = 1.

-Lemma subG1_contra H : G \subset H G :!=: 1 H :!=: 1.
+Lemma subG1_contra H : G \subset H G :!=: 1 H :!=: 1.

-Lemma repr_group : repr G = 1.
+Lemma repr_group : repr G = 1.

-Lemma cardG_gt0 : 0 < #|G|.
-
- -
- Workaround for the fact that the simple matching used by Trivial does not - always allow conversion. In particular cardG_gt0 always fails to apply to - subgoals that have been simplified (by /=) because type inference in the - notation #|G| introduces redexes of the form - Finite.sort (arg_finGroupType (FinGroup.base gT)) - which get collapsed to Fingroup.arg_sort (FinGroup.base gT). -
-
-Definition cardG_gt0_reduced : 0 < card (@mem gT (predPredType gT) G)
-  := cardG_gt0.
- +Lemma cardG_gt0 : 0 < #|G|.
+
-Lemma indexg_gt0 A : 0 < #|G : A|.
+Lemma indexg_gt0 A : 0 < #|G : A|.

-Lemma trivgP : reflect (G :=: 1) (G \subset [1]).
+Lemma trivgP : reflect (G :=: 1) (G \subset [1]).

-Lemma trivGP : reflect (G = 1%G) (G \subset [1]).
+Lemma trivGP : reflect (G = 1%G) (G \subset [1]).

-Lemma proper1G : ([1] \proper G) = (G :!=: 1).
+Lemma proper1G : ([1] \proper G) = (G :!=: 1).

-Lemma trivgPn : reflect (exists2 x, x \in G & x != 1) (G :!=: 1).
+Lemma trivgPn : reflect (exists2 x, x \in G & x != 1) (G :!=: 1).

-Lemma trivg_card_le1 : (G :==: 1) = (#|G| 1).
+Lemma trivg_card_le1 : (G :==: 1) = (#|G| 1).

-Lemma trivg_card1 : (G :==: 1) = (#|G| == 1%N).
+Lemma trivg_card1 : (G :==: 1) = (#|G| == 1%N).

-Lemma cardG_gt1 : (#|G| > 1) = (G :!=: 1).
+Lemma cardG_gt1 : (#|G| > 1) = (G :!=: 1).

-Lemma card_le1_trivg : #|G| 1 G :=: 1.
+Lemma card_le1_trivg : #|G| 1 G :=: 1.

-Lemma card1_trivg : #|G| = 1%N G :=: 1.
+Lemma card1_trivg : #|G| = 1%N G :=: 1.

@@ -1633,22 +1602,22 @@

-Lemma mulG_subl A : A \subset A × G.
+Lemma mulG_subl A : A \subset A × G.

-Lemma mulG_subr A : A \subset G × A.
+Lemma mulG_subr A : A \subset G × A.

-Lemma mulGid : G × G = G.
+Lemma mulGid : G × G = G.

-Lemma mulGS A B : (G × A \subset G × B) = (A \subset G × B).
+Lemma mulGS A B : (G × A \subset G × B) = (A \subset G × B).

-Lemma mulSG A B : (A × G \subset B × G) = (A \subset B × G).
+Lemma mulSG A B : (A × G \subset B × G) = (A \subset B × G).

-Lemma mul_subG A B : A \subset G B \subset G A × B \subset G.
+Lemma mul_subG A B : A \subset G B \subset G A × B \subset G.

@@ -1659,41 +1628,41 @@

-Lemma groupM x y : x \in G y \in G x × y \in G.
+Lemma groupM x y : x \in G y \in G x × y \in G.

-Lemma groupX x n : x \in G x ^+ n \in G.
+Lemma groupX x n : x \in G x ^+ n \in G.

-Lemma groupVr x : x \in G x^-1 \in G.
+Lemma groupVr x : x \in G x^-1 \in G.

-Lemma groupVl x : x^-1 \in G x \in G.
+Lemma groupVl x : x^-1 \in G x \in G.

-Lemma groupV x : (x^-1 \in G) = (x \in G).
+Lemma groupV x : (x^-1 \in G) = (x \in G).

-Lemma groupMl x y : x \in G (x × y \in G) = (y \in G).
+Lemma groupMl x y : x \in G (x × y \in G) = (y \in G).

-Lemma groupMr x y : x \in G (y × x \in G) = (y \in G).
+Lemma groupMr x y : x \in G (y × x \in G) = (y \in G).

-Definition in_group := (group1, groupV, (groupMl, groupX)).
+Definition in_group := (group1, groupV, (groupMl, groupX)).

-Lemma groupJ x y : x \in G y \in G x ^ y \in G.
+Lemma groupJ x y : x \in G y \in G x ^ y \in G.

-Lemma groupJr x y : y \in G (x ^ y \in G) = (x \in G).
+Lemma groupJr x y : y \in G (x ^ y \in G) = (x \in G).

-Lemma groupR x y : x \in G y \in G [~ x, y] \in G.
+Lemma groupR x y : x \in G y \in G [~ x, y] \in G.

-Lemma group_prod I r (P : pred I) F :
-  ( i, P i F i \in G) \prod_(i <- r | P i) F i \in G.
+Lemma group_prod I r (P : pred I) F :
+  ( i, P i F i \in G) \prod_(i <- r | P i) F i \in G.

@@ -1704,22 +1673,22 @@

-Lemma invGid : G^-1 = G.
+Lemma invGid : G^-1 = G.

-Lemma inv_subG A : (A^-1 \subset G) = (A \subset G).
+Lemma inv_subG A : (A^-1 \subset G) = (A \subset G).

-Lemma invg_lcoset x : (x *: G)^-1 = G :* x^-1.
+Lemma invg_lcoset x : (x *: G)^-1 = G :* x^-1.

-Lemma invg_rcoset x : (G :* x)^-1 = x^-1 *: G.
+Lemma invg_rcoset x : (G :* x)^-1 = x^-1 *: G.

-Lemma memV_lcosetV x y : (y^-1 \in x^-1 *: G) = (y \in G :* x).
+Lemma memV_lcosetV x y : (y^-1 \in x^-1 *: G) = (y \in G :* x).

-Lemma memV_rcosetV x y : (y^-1 \in G :* x^-1) = (y \in x *: G).
+Lemma memV_rcosetV x y : (y^-1 \in G :* x^-1) = (y \in x *: G).

@@ -1730,10 +1699,10 @@

-Lemma mulSgGid A x : x \in A A \subset G A × G = G.
+Lemma mulSgGid A x : x \in A A \subset G A × G = G.

-Lemma mulGSgid A x : x \in A A \subset G G × A = G.
+Lemma mulGSgid A x : x \in A A \subset G G × A = G.

@@ -1744,22 +1713,22 @@

-Lemma lcoset_refl x : x \in x *: G.
+Lemma lcoset_refl x : x \in x *: G.

-Lemma lcoset_sym x y : (x \in y *: G) = (y \in x *: G).
+Lemma lcoset_sym x y : (x \in y *: G) = (y \in x *: G).

-Lemma lcoset_eqP {x y} : reflect (x *: G = y *: G) (x \in y *: G).
+Lemma lcoset_eqP {x y} : reflect (x *: G = y *: G) (x \in y *: G).

-Lemma lcoset_transl x y z : x \in y *: G (x \in z *: G) = (y \in z *: G).
+Lemma lcoset_transl x y z : x \in y *: G (x \in z *: G) = (y \in z *: G).

-Lemma lcoset_trans x y z : x \in y *: G y \in z *: G x \in z *: G.
+Lemma lcoset_trans x y z : x \in y *: G y \in z *: G x \in z *: G.

-Lemma lcoset_id x : x \in G x *: G = G.
+Lemma lcoset_id x : x \in G x *: G = G.

@@ -1770,22 +1739,22 @@

-Lemma rcoset_refl x : x \in G :* x.
+Lemma rcoset_refl x : x \in G :* x.

-Lemma rcoset_sym x y : (x \in G :* y) = (y \in G :* x).
+Lemma rcoset_sym x y : (x \in G :* y) = (y \in G :* x).

-Lemma rcoset_eqP {x y} : reflect (G :* x = G :* y) (x \in G :* y).
+Lemma rcoset_eqP {x y} : reflect (G :* x = G :* y) (x \in G :* y).

-Lemma rcoset_transl x y z : x \in G :* y (x \in G :* z) = (y \in G :* z).
+Lemma rcoset_transl x y z : x \in G :* y (x \in G :* z) = (y \in G :* z).

-Lemma rcoset_trans x y z : x \in G :* y y \in G :* z x \in G :* z.
+Lemma rcoset_trans x y z : x \in G :* y y \in G :* z x \in G :* z.

-Lemma rcoset_id x : x \in G G :* x = G.
+Lemma rcoset_id x : x \in G G :* x = G.

@@ -1796,11 +1765,11 @@

-CoInductive rcoset_repr_spec x : gT Type :=
-  RcosetReprSpec g : g \in G rcoset_repr_spec x (g × x).
+Variant rcoset_repr_spec x : gT Type :=
+  RcosetReprSpec g : g \in G rcoset_repr_spec x (g × x).

-Lemma mem_repr_rcoset x : repr (G :* x) \in G :* x.
+Lemma mem_repr_rcoset x : repr (G :* x) \in G :* x.

@@ -1810,10 +1779,10 @@ (weaker) primitive Coq algorithm for general (co)inductive type families.
-Lemma repr_rcosetP x : rcoset_repr_spec x (repr (G :* x)).
+Lemma repr_rcosetP x : rcoset_repr_spec x (repr (G :* x)).

-Lemma rcoset_repr x : G :* (repr (G :* x)) = G :* x.
+Lemma rcoset_repr x : G :* (repr (G :* x)) = G :* x.

@@ -1824,10 +1793,10 @@

-Lemma mem_rcosets A x : (G :* x \in rcosets G A) = (x \in G × A).
+Lemma mem_rcosets A x : (G :* x \in rcosets G A) = (x \in G × A).

-Lemma mem_lcosets A x : (x *: G \in lcosets G A) = (x \in A × G).
+Lemma mem_lcosets A x : (x *: G \in lcosets G A) = (x \in A × G).

@@ -1838,19 +1807,19 @@

-Lemma group_setJ A x : group_set (A :^ x) = group_set A.
+Lemma group_setJ A x : group_set (A :^ x) = group_set A.

-Lemma group_set_conjG x : group_set (G :^ x).
+Lemma group_set_conjG x : group_set (G :^ x).

Canonical conjG_group x := group (group_set_conjG x).

-Lemma conjGid : {in G, normalised G}.
+Lemma conjGid : {in G, normalised G}.

-Lemma conj_subG x A : x \in G A \subset G A :^ x \subset G.
+Lemma conj_subG x A : x \in G A \subset G A :^ x \subset G.

@@ -1861,76 +1830,76 @@

-Lemma class1G : 1 ^: G = 1.
+Lemma class1G : 1 ^: G = 1.

-Lemma classes1 : [1] \in classes G.
+Lemma classes1 : [1] \in classes G.

-Lemma classGidl x y : y \in G (x ^ y) ^: G = x ^: G.
+Lemma classGidl x y : y \in G (x ^ y) ^: G = x ^: G.

-Lemma classGidr x : {in G, normalised (x ^: G)}.
+Lemma classGidr x : {in G, normalised (x ^: G)}.

-Lemma class_refl x : x \in x ^: G.
- Hint Resolve class_refl.
+Lemma class_refl x : x \in x ^: G.
+ Hint Resolve class_refl : core.

-Lemma class_eqP x y : reflect (x ^: G = y ^: G) (x \in y ^: G).
+Lemma class_eqP x y : reflect (x ^: G = y ^: G) (x \in y ^: G).

-Lemma class_sym x y : (x \in y ^: G) = (y \in x ^: G).
+Lemma class_sym x y : (x \in y ^: G) = (y \in x ^: G).

-Lemma class_transl x y z : x \in y ^: G (x \in z ^: G) = (y \in z ^: G).
+Lemma class_transl x y z : x \in y ^: G (x \in z ^: G) = (y \in z ^: G).

-Lemma class_trans x y z : x \in y ^: G y \in z ^: G x \in z ^: G.
+Lemma class_trans x y z : x \in y ^: G y \in z ^: G x \in z ^: G.

-Lemma repr_class x : {y | y \in G & repr (x ^: G) = x ^ y}.
+Lemma repr_class x : {y | y \in G & repr (x ^: G) = x ^ y}.

-Lemma classG_eq1 x : (x ^: G == 1) = (x == 1).
+Lemma classG_eq1 x : (x ^: G == 1) = (x == 1).

-Lemma class_subG x A : x \in G A \subset G x ^: A \subset G.
+Lemma class_subG x A : x \in G A \subset G x ^: A \subset G.

Lemma repr_classesP xG :
-  reflect (repr xG \in G xG = repr xG ^: G) (xG \in classes G).
+  reflect (repr xG \in G xG = repr xG ^: G) (xG \in classes G).

-Lemma mem_repr_classes xG : xG \in classes G repr xG \in xG.
+Lemma mem_repr_classes xG : xG \in classes G repr xG \in xG.

-Lemma classes_gt0 : 0 < #|classes G|.
+Lemma classes_gt0 : 0 < #|classes G|.

-Lemma classes_gt1 : (#|classes G| > 1) = (G :!=: 1).
+Lemma classes_gt1 : (#|classes G| > 1) = (G :!=: 1).

-Lemma mem_class_support A x : x \in A x \in class_support A G.
+Lemma mem_class_support A x : x \in A x \in class_support A G.

Lemma class_supportGidl A x :
-  x \in G class_support (A :^ x) G = class_support A G.
+  x \in G class_support (A :^ x) G = class_support A G.

-Lemma class_supportGidr A : {in G, normalised (class_support A G)}.
+Lemma class_supportGidr A : {in G, normalised (class_support A G)}.

-Lemma class_support_subG A : A \subset G class_support A G \subset G.
+Lemma class_support_subG A : A \subset G class_support A G \subset G.

-Lemma sub_class_support A : A \subset class_support A G.
+Lemma sub_class_support A : A \subset class_support A G.

-Lemma class_support_id : class_support G G = G.
+Lemma class_support_id : class_support G G = G.

-Lemma class_supportD1 A : (class_support A G)^# = cover (A^# :^: G).
+Lemma class_supportD1 A : (class_support A G)^# = cover (A^# :^: G).

@@ -1943,34 +1912,34 @@

-Inductive subg_of : predArgType := Subg x & x \in G.
+Inductive subg_of : predArgType := Subg x & x \in G.
Definition sgval u := let: Subg x _ := u in x.
-Canonical subg_subType := Eval hnf in [subType for sgval].
-Definition subg_eqMixin := Eval hnf in [eqMixin of subg_of by <:].
+Canonical subg_subType := Eval hnf in [subType for sgval].
+Definition subg_eqMixin := Eval hnf in [eqMixin of subg_of by <:].
Canonical subg_eqType := Eval hnf in EqType subg_of subg_eqMixin.
-Definition subg_choiceMixin := [choiceMixin of subg_of by <:].
+Definition subg_choiceMixin := [choiceMixin of subg_of by <:].
Canonical subg_choiceType := Eval hnf in ChoiceType subg_of subg_choiceMixin.
-Definition subg_countMixin := [countMixin of subg_of by <:].
+Definition subg_countMixin := [countMixin of subg_of by <:].
Canonical subg_countType := Eval hnf in CountType subg_of subg_countMixin.
-Canonical subg_subCountType := Eval hnf in [subCountType of subg_of].
-Definition subg_finMixin := [finMixin of subg_of by <:].
+Canonical subg_subCountType := Eval hnf in [subCountType of subg_of].
+Definition subg_finMixin := [finMixin of subg_of by <:].
Canonical subg_finType := Eval hnf in FinType subg_of subg_finMixin.
-Canonical subg_subFinType := Eval hnf in [subFinType of subg_of].
+Canonical subg_subFinType := Eval hnf in [subFinType of subg_of].

-Lemma subgP u : sgval u \in G.
- Lemma subg_inj : injective sgval.
- Lemma congr_subg u v : u = v sgval u = sgval v.
+Lemma subgP u : sgval u \in G.
+ Lemma subg_inj : injective sgval.
+ Lemma congr_subg u v : u = v sgval u = sgval v.

Definition subg_one := Subg group1.
Definition subg_inv u := Subg (groupVr (subgP u)).
Definition subg_mul u v := Subg (groupM (subgP u) (subgP v)).
-Lemma subg_oneP : left_id subg_one subg_mul.
+Lemma subg_oneP : left_id subg_one subg_mul.

-Lemma subg_invP : left_inverse subg_one subg_inv subg_mul.
- Lemma subg_mulP : associative subg_mul.
+Lemma subg_invP : left_inverse subg_one subg_inv subg_mul.
+ Lemma subg_mulP : associative subg_mul.

Definition subFinGroupMixin := FinGroup.Mixin subg_mulP subg_oneP subg_invP.
@@ -1979,45 +1948,45 @@ Canonical subFinGroupType := FinGroupType subg_invP.

-Lemma sgvalM : {in setT &, {morph sgval : x y / x × y}}.
-Lemma valgM : {in setT &, {morph val : x y / (x : subg_of) × y >-> x × y}}.
+Lemma sgvalM : {in setT &, {morph sgval : x y / x × y}}.
+Lemma valgM : {in setT &, {morph val : x y / (x : subg_of) × y >-> x × y}}.

-Definition subg : gT subg_of := insubd (1 : subg_of).
-Lemma subgK x : x \in G val (subg x) = x.
- Lemma sgvalK : cancel sgval subg.
- Lemma subg_default x : (x \in G) = false val (subg x) = 1.
- Lemma subgM : {in G &, {morph subg : x y / x × y}}.
+Definition subg : gT subg_of := insubd (1 : subg_of).
+Lemma subgK x : x \in G val (subg x) = x.
+ Lemma sgvalK : cancel sgval subg.
+ Lemma subg_default x : (x \in G) = false val (subg x) = 1.
+ Lemma subgM : {in G &, {morph subg : x y / x × y}}.

End OneGroup.

-Hint Resolve group1.
+Hint Resolve group1 : core.

-Lemma groupD1_inj G H : G^# = H^# G :=: H.
+Lemma groupD1_inj G H : G^# = H^# G :=: H.

-Lemma invMG G H : (G × H)^-1 = H × G.
+Lemma invMG G H : (G × H)^-1 = H × G.

-Lemma mulSGid G H : H \subset G H × G = G.
+Lemma mulSGid G H : H \subset G H × G = G.

-Lemma mulGSid G H : H \subset G G × H = G.
+Lemma mulGSid G H : H \subset G G × H = G.

-Lemma mulGidPl G H : reflect (G × H = G) (H \subset G).
+Lemma mulGidPl G H : reflect (G × H = G) (H \subset G).

-Lemma mulGidPr G H : reflect (G × H = H) (G \subset H).
+Lemma mulGidPr G H : reflect (G × H = H) (G \subset H).

-Lemma comm_group_setP G H : reflect (commute G H) (group_set (G × H)).
+Lemma comm_group_setP G H : reflect (commute G H) (group_set (G × H)).

-Lemma card_lcosets G H : #|lcosets H G| = #|G : H|.
+Lemma card_lcosets G H : #|lcosets H G| = #|G : H|.

@@ -2028,26 +1997,26 @@

-Lemma group_modl A B G : A \subset G A × (B :&: G) = A × B :&: G.
+Lemma group_modl A B G : A \subset G A × (B :&: G) = A × B :&: G.

-Lemma group_modr A B G : B \subset G (G :&: A) × B = G :&: A × B.
+Lemma group_modr A B G : B \subset G (G :&: A) × B = G :&: A × B.

End GroupProp.

-Hint Resolve group1 group1_class1 group1_class12 group1_class12.
-Hint Resolve group1_eqType group1_finType.
-Hint Resolve cardG_gt0 cardG_gt0_reduced indexg_gt0.
+Hint Extern 0 (is_true (1%g \in _)) ⇒ apply: group1 : core.
+Hint Extern 0 (is_true (0 < #|_|)) ⇒ apply: cardG_gt0 : core.
+Hint Extern 0 (is_true (0 < #|_ : _|)) ⇒ apply: indexg_gt0 : core.

-Notation "G :^ x" := (conjG_group G x) : Group_scope.
+Notation "G :^ x" := (conjG_group G x) : Group_scope.

-Notation "[ 'subg' G ]" := (subg_of G) : type_scope.
-Notation "[ 'subg' G ]" := [set: subg_of G] : group_scope.
-Notation "[ 'subg' G ]" := [set: subg_of G]%G : Group_scope.
+Notation "[ 'subg' G ]" := (subg_of G) : type_scope.
+Notation "[ 'subg' G ]" := [set: subg_of G] : group_scope.
+Notation "[ 'subg' G ]" := [set: subg_of G]%G : Group_scope.

@@ -2058,11 +2027,11 @@
Variable gT : finGroupType.
-Implicit Types A B : {set gT}.
-Implicit Types G H : {group gT}.
+Implicit Types A B : {set gT}.
+Implicit Types G H : {group gT}.

-Lemma group_setI G H : group_set (G :&: H).
+Lemma group_setI G H : group_set (G :&: H).

Canonical setI_group G H := group (group_setI G H).
@@ -2071,10 +2040,10 @@ Section Nary.

-Variables (I : finType) (P : pred I) (F : I {group gT}).
+Variables (I : finType) (P : pred I) (F : I {group gT}).

-Lemma group_set_bigcap : group_set (\bigcap_(i | P i) F i).
+Lemma group_set_bigcap : group_set (\bigcap_(i | P i) F i).

Canonical bigcap_group := group group_set_bigcap.
@@ -2083,189 +2052,189 @@ End Nary.

-Canonical generated_group A : {group _} := Eval hnf in [group of <<A>>].
-Canonical gcore_group G A : {group _} := Eval hnf in [group of gcore G A].
-Canonical commutator_group A B : {group _} := Eval hnf in [group of [~: A, B]].
-Canonical joing_group A B : {group _} := Eval hnf in [group of A <*> B].
-Canonical cycle_group x : {group _} := Eval hnf in [group of <[x]>].
+Canonical generated_group A : {group _} := Eval hnf in [group of <<A>>].
+Canonical gcore_group G A : {group _} := Eval hnf in [group of gcore G A].
+Canonical commutator_group A B : {group _} := Eval hnf in [group of [~: A, B]].
+Canonical joing_group A B : {group _} := Eval hnf in [group of A <*> B].
+Canonical cycle_group x : {group _} := Eval hnf in [group of <[x]>].

Definition joinG G H := joing_group G H.

-Definition subgroups A := [set G : {group gT} | G \subset A].
+Definition subgroups A := [set G : {group gT} | G \subset A].

-Lemma order_gt0 (x : gT) : 0 < #[x].
+Lemma order_gt0 (x : gT) : 0 < #[x].

End GroupInter.

-Hint Resolve order_gt0.
+Hint Resolve order_gt0 : core.


-Notation "G :&: H" := (setI_group G H) : Group_scope.
-Notation "<< A >>" := (generated_group A) : Group_scope.
-Notation "<[ x ] >" := (cycle_group x) : Group_scope.
-Notation "[ ~: A1 , A2 , .. , An ]" :=
+Notation "G :&: H" := (setI_group G H) : Group_scope.
+Notation "<< A >>" := (generated_group A) : Group_scope.
+Notation "<[ x ] >" := (cycle_group x) : Group_scope.
+Notation "[ ~: A1 , A2 , .. , An ]" :=
  (commutator_group .. (commutator_group A1 A2) .. An) : Group_scope.
-Notation "A <*> B" := (joing_group A B) : Group_scope.
-Notation "G * H" := (joinG G H) : Group_scope.
- -
-Notation "\prod_ ( i <- r | P ) F" :=
-  (\big[joinG/1%G]_(i <- r | P%B) F%G) : Group_scope.
-Notation "\prod_ ( i <- r ) F" :=
-  (\big[joinG/1%G]_(i <- r) F%G) : Group_scope.
-Notation "\prod_ ( m <= i < n | P ) F" :=
-  (\big[joinG/1%G]_(m i < n | P%B) F%G) : Group_scope.
-Notation "\prod_ ( m <= i < n ) F" :=
-  (\big[joinG/1%G]_(m i < n) F%G) : Group_scope.
-Notation "\prod_ ( i | P ) F" :=
-  (\big[joinG/1%G]_(i | P%B) F%G) : Group_scope.
-Notation "\prod_ i F" :=
-  (\big[joinG/1%G]_i F%G) : Group_scope.
-Notation "\prod_ ( i : t | P ) F" :=
-  (\big[joinG/1%G]_(i : t | P%B) F%G) (only parsing) : Group_scope.
-Notation "\prod_ ( i : t ) F" :=
-  (\big[joinG/1%G]_(i : t) F%G) (only parsing) : Group_scope.
-Notation "\prod_ ( i < n | P ) F" :=
-  (\big[joinG/1%G]_(i < n | P%B) F%G) : Group_scope.
-Notation "\prod_ ( i < n ) F" :=
-  (\big[joinG/1%G]_(i < n) F%G) : Group_scope.
-Notation "\prod_ ( i 'in' A | P ) F" :=
-  (\big[joinG/1%G]_(i in A | P%B) F%G) : Group_scope.
-Notation "\prod_ ( i 'in' A ) F" :=
-  (\big[joinG/1%G]_(i in A) F%G) : Group_scope.
+Notation "A <*> B" := (joing_group A B) : Group_scope.
+Notation "G * H" := (joinG G H) : Group_scope.
+ +
+Notation "\prod_ ( i <- r | P ) F" :=
+  (\big[joinG/1%G]_(i <- r | P%B) F%G) : Group_scope.
+Notation "\prod_ ( i <- r ) F" :=
+  (\big[joinG/1%G]_(i <- r) F%G) : Group_scope.
+Notation "\prod_ ( m <= i < n | P ) F" :=
+  (\big[joinG/1%G]_(m i < n | P%B) F%G) : Group_scope.
+Notation "\prod_ ( m <= i < n ) F" :=
+  (\big[joinG/1%G]_(m i < n) F%G) : Group_scope.
+Notation "\prod_ ( i | P ) F" :=
+  (\big[joinG/1%G]_(i | P%B) F%G) : Group_scope.
+Notation "\prod_ i F" :=
+  (\big[joinG/1%G]_i F%G) : Group_scope.
+Notation "\prod_ ( i : t | P ) F" :=
+  (\big[joinG/1%G]_(i : t | P%B) F%G) (only parsing) : Group_scope.
+Notation "\prod_ ( i : t ) F" :=
+  (\big[joinG/1%G]_(i : t) F%G) (only parsing) : Group_scope.
+Notation "\prod_ ( i < n | P ) F" :=
+  (\big[joinG/1%G]_(i < n | P%B) F%G) : Group_scope.
+Notation "\prod_ ( i < n ) F" :=
+  (\big[joinG/1%G]_(i < n) F%G) : Group_scope.
+Notation "\prod_ ( i 'in' A | P ) F" :=
+  (\big[joinG/1%G]_(i in A | P%B) F%G) : Group_scope.
+Notation "\prod_ ( i 'in' A ) F" :=
+  (\big[joinG/1%G]_(i in A) F%G) : Group_scope.

Section Lagrange.

Variable gT : finGroupType.
-Implicit Types G H K : {group gT}.
+Implicit Types G H K : {group gT}.

-Lemma LagrangeI G H : (#|G :&: H| × #|G : H|)%N = #|G|.
+Lemma LagrangeI G H : (#|G :&: H| × #|G : H|)%N = #|G|.

-Lemma divgI G H : #|G| %/ #|G :&: H| = #|G : H|.
+Lemma divgI G H : #|G| %/ #|G :&: H| = #|G : H|.

-Lemma divg_index G H : #|G| %/ #|G : H| = #|G :&: H|.
+Lemma divg_index G H : #|G| %/ #|G : H| = #|G :&: H|.

-Lemma dvdn_indexg G H : #|G : H| %| #|G|.
+Lemma dvdn_indexg G H : #|G : H| %| #|G|.

-Theorem Lagrange G H : H \subset G (#|H| × #|G : H|)%N = #|G|.
+Theorem Lagrange G H : H \subset G (#|H| × #|G : H|)%N = #|G|.

-Lemma cardSg G H : H \subset G #|H| %| #|G|.
+Lemma cardSg G H : H \subset G #|H| %| #|G|.

-Lemma lognSg p G H : G \subset H logn p #|G| logn p #|H|.
+Lemma lognSg p G H : G \subset H logn p #|G| logn p #|H|.

-Lemma piSg G H : G \subset H {subset \pi(gval G) \pi(gval H)}.
+Lemma piSg G H : G \subset H {subset \pi(gval G) \pi(gval H)}.

-Lemma divgS G H : H \subset G #|G| %/ #|H| = #|G : H|.
+Lemma divgS G H : H \subset G #|G| %/ #|H| = #|G : H|.

-Lemma divg_indexS G H : H \subset G #|G| %/ #|G : H| = #|H|.
+Lemma divg_indexS G H : H \subset G #|G| %/ #|G : H| = #|H|.

-Lemma coprimeSg G H p : H \subset G coprime #|G| p coprime #|H| p.
+Lemma coprimeSg G H p : H \subset G coprime #|G| p coprime #|H| p.

-Lemma coprimegS G H p : H \subset G coprime p #|G| coprime p #|H|.
+Lemma coprimegS G H p : H \subset G coprime p #|G| coprime p #|H|.

-Lemma indexJg G H x : #|G :^ x : H :^ x| = #|G : H|.
+Lemma indexJg G H x : #|G :^ x : H :^ x| = #|G : H|.

-Lemma indexgg G : #|G : G| = 1%N.
+Lemma indexgg G : #|G : G| = 1%N.

-Lemma rcosets_id G : rcosets G G = [set G : {set gT}].
+Lemma rcosets_id G : rcosets G G = [set G : {set gT}].

Lemma Lagrange_index G H K :
-  H \subset G K \subset H (#|G : H| × #|H : K|)%N = #|G : K|.
+  H \subset G K \subset H (#|G : H| × #|H : K|)%N = #|G : K|.

-Lemma indexgI G H : #|G : G :&: H| = #|G : H|.
+Lemma indexgI G H : #|G : G :&: H| = #|G : H|.

-Lemma indexgS G H K : H \subset K #|G : K| %| #|G : H|.
+Lemma indexgS G H K : H \subset K #|G : K| %| #|G : H|.

-Lemma indexSg G H K : H \subset K K \subset G #|K : H| %| #|G : H|.
+Lemma indexSg G H K : H \subset K K \subset G #|K : H| %| #|G : H|.

-Lemma indexg_eq1 G H : (#|G : H| == 1%N) = (G \subset H).
+Lemma indexg_eq1 G H : (#|G : H| == 1%N) = (G \subset H).

-Lemma indexg_gt1 G H : (#|G : H| > 1) = ~~ (G \subset H).
+Lemma indexg_gt1 G H : (#|G : H| > 1) = ~~ (G \subset H).

-Lemma index1g G H : H \subset G #|G : H| = 1%N H :=: G.
+Lemma index1g G H : H \subset G #|G : H| = 1%N H :=: G.

-Lemma indexg1 G : #|G : 1| = #|G|.
+Lemma indexg1 G : #|G : 1| = #|G|.

-Lemma indexMg G A : #|G × A : G| = #|A : G|.
+Lemma indexMg G A : #|G × A : G| = #|A : G|.

-Lemma rcosets_partition_mul G H : partition (rcosets H G) (H × G).
+Lemma rcosets_partition_mul G H : partition (rcosets H G) (H × G).

-Lemma rcosets_partition G H : H \subset G partition (rcosets H G) G.
+Lemma rcosets_partition G H : H \subset G partition (rcosets H G) G.

-Lemma LagrangeMl G H : (#|G| × #|H : G|)%N = #|G × H|.
+Lemma LagrangeMl G H : (#|G| × #|H : G|)%N = #|G × H|.

-Lemma LagrangeMr G H : (#|G : H| × #|H|)%N = #|G × H|.
+Lemma LagrangeMr G H : (#|G : H| × #|H|)%N = #|G × H|.

-Lemma mul_cardG G H : (#|G| × #|H| = #|G × H|%g × #|G :&: H|)%N.
+Lemma mul_cardG G H : (#|G| × #|H| = #|G × H|%g × #|G :&: H|)%N.

-Lemma dvdn_cardMg G H : #|G × H| %| #|G| × #|H|.
+Lemma dvdn_cardMg G H : #|G × H| %| #|G| × #|H|.

-Lemma cardMg_divn G H : #|G × H| = (#|G| × #|H|) %/ #|G :&: H|.
+Lemma cardMg_divn G H : #|G × H| = (#|G| × #|H|) %/ #|G :&: H|.

-Lemma cardIg_divn G H : #|G :&: H| = (#|G| × #|H|) %/ #|G × H|.
+Lemma cardIg_divn G H : #|G :&: H| = (#|G| × #|H|) %/ #|G × H|.

-Lemma TI_cardMg G H : G :&: H = 1 #|G × H| = (#|G| × #|H|)%N.
+Lemma TI_cardMg G H : G :&: H = 1 #|G × H| = (#|G| × #|H|)%N.

-Lemma cardMg_TI G H : #|G| × #|H| #|G × H| G :&: H = 1.
+Lemma cardMg_TI G H : #|G| × #|H| #|G × H| G :&: H = 1.

-Lemma coprime_TIg G H : coprime #|G| #|H| G :&: H = 1.
+Lemma coprime_TIg G H : coprime #|G| #|H| G :&: H = 1.

-Lemma prime_TIg G H : prime #|G| ~~ (G \subset H) G :&: H = 1.
+Lemma prime_TIg G H : prime #|G| ~~ (G \subset H) G :&: H = 1.

-Lemma prime_meetG G H : prime #|G| G :&: H != 1 G \subset H.
+Lemma prime_meetG G H : prime #|G| G :&: H != 1 G \subset H.

-Lemma coprime_cardMg G H : coprime #|G| #|H| #|G × H| = (#|G| × #|H|)%N.
+Lemma coprime_cardMg G H : coprime #|G| #|H| #|G × H| = (#|G| × #|H|)%N.

Lemma coprime_index_mulG G H K :
-  H \subset G K \subset G coprime #|G : H| #|G : K| H × K = G.
+  H \subset G K \subset G coprime #|G : H| #|G : K| H × K = G.

End Lagrange.
@@ -2276,184 +2245,184 @@
Variable gT : finGroupType.
Implicit Types x y z : gT.
-Implicit Types A B C D : {set gT}.
-Implicit Types G H K : {group gT}.
+Implicit Types A B C D : {set gT}.
+Implicit Types G H K : {group gT}.

-Lemma subset_gen A : A \subset <<A>>.
+Lemma subset_gen A : A \subset <<A>>.

-Lemma sub_gen A B : A \subset B A \subset <<B>>.
+Lemma sub_gen A B : A \subset B A \subset <<B>>.

-Lemma mem_gen x A : x \in A x \in <<A>>.
+Lemma mem_gen x A : x \in A x \in <<A>>.

-Lemma generatedP x A : reflect ( G, A \subset G x \in G) (x \in <<A>>).
+Lemma generatedP x A : reflect ( G, A \subset G x \in G) (x \in <<A>>).

-Lemma gen_subG A G : (<<A>> \subset G) = (A \subset G).
+Lemma gen_subG A G : (<<A>> \subset G) = (A \subset G).

-Lemma genGid G : <<G>> = G.
+Lemma genGid G : <<G>> = G.

-Lemma genGidG G : <<G>>%G = G.
+Lemma genGidG G : <<G>>%G = G.

-Lemma gen_set_id A : group_set A <<A>> = A.
+Lemma gen_set_id A : group_set A <<A>> = A.

-Lemma genS A B : A \subset B <<A>> \subset <<B>>.
+Lemma genS A B : A \subset B <<A>> \subset <<B>>.

-Lemma gen0 : <<set0>> = 1 :> {set gT}.
+Lemma gen0 : <<set0>> = 1 :> {set gT}.

-Lemma gen_expgs A : {n | <<A>> = (1 |: A) ^+ n}.
+Lemma gen_expgs A : {n | <<A>> = (1 |: A) ^+ n}.

Lemma gen_prodgP A x :
-  reflect ( n, exists2 c, i : 'I_n, c i \in A & x = \prod_i c i)
-          (x \in <<A>>).
+  reflect ( n, exists2 c, i : 'I_n, c i \in A & x = \prod_i c i)
+          (x \in <<A>>).

-Lemma genD A B : A \subset <<A :\: B>> <<A :\: B>> = <<A>>.
+Lemma genD A B : A \subset <<A :\: B>> <<A :\: B>> = <<A>>.

-Lemma genV A : <<A^-1>> = <<A>>.
+Lemma genV A : <<A^-1>> = <<A>>.

-Lemma genJ A z : <<A :^z>> = <<A>> :^ z.
+Lemma genJ A z : <<A :^z>> = <<A>> :^ z.

-Lemma conjYg A B z : (A <*> B) :^z = A :^ z <*> B :^ z.
+Lemma conjYg A B z : (A <*> B) :^z = A :^ z <*> B :^ z.

-Lemma genD1 A x : x \in <<A :\ x>> <<A :\ x>> = <<A>>.
+Lemma genD1 A x : x \in <<A :\ x>> <<A :\ x>> = <<A>>.

-Lemma genD1id A : <<A^#>> = <<A>>.
+Lemma genD1id A : <<A^#>> = <<A>>.

Notation joingT := (@joing gT) (only parsing).
Notation joinGT := (@joinG gT) (only parsing).

-Lemma joingE A B : A <*> B = <<A :|: B>>.
+Lemma joingE A B : A <*> B = <<A :|: B>>.

-Lemma joinGE G H : (G × H)%G = (G <*> H)%G.
+Lemma joinGE G H : (G × H)%G = (G <*> H)%G.

-Lemma joingC : commutative joingT.
+Lemma joingC : commutative joingT.

-Lemma joing_idr A B : A <*> <<B>> = A <*> B.
+Lemma joing_idr A B : A <*> <<B>> = A <*> B.

-Lemma joing_idl A B : <<A>> <*> B = A <*> B.
+Lemma joing_idl A B : <<A>> <*> B = A <*> B.

-Lemma joing_subl A B : A \subset A <*> B.
+Lemma joing_subl A B : A \subset A <*> B.

-Lemma joing_subr A B : B \subset A <*> B.
+Lemma joing_subr A B : B \subset A <*> B.

-Lemma join_subG A B G : (A <*> B \subset G) = (A \subset G) && (B \subset G).
+Lemma join_subG A B G : (A <*> B \subset G) = (A \subset G) && (B \subset G).

-Lemma joing_idPl G A : reflect (G <*> A = G) (A \subset G).
+Lemma joing_idPl G A : reflect (G <*> A = G) (A \subset G).

-Lemma joing_idPr A G : reflect (A <*> G = G) (A \subset G).
+Lemma joing_idPr A G : reflect (A <*> G = G) (A \subset G).

Lemma joing_subP A B G :
-  reflect (A \subset G B \subset G) (A <*> B \subset G).
+  reflect (A \subset G B \subset G) (A <*> B \subset G).

-Lemma joing_sub A B C : A <*> B = C A \subset C B \subset C.
+Lemma joing_sub A B C : A <*> B = C A \subset C B \subset C.

-Lemma genDU A B C : A \subset C <<C :\: A>> = <<B>> <<A :|: B>> = <<C>>.
+Lemma genDU A B C : A \subset C <<C :\: A>> = <<B>> <<A :|: B>> = <<C>>.

-Lemma joingA : associative joingT.
+Lemma joingA : associative joingT.

-Lemma joing1G G : 1 <*> G = G.
+Lemma joing1G G : 1 <*> G = G.

-Lemma joingG1 G : G <*> 1 = G.
+Lemma joingG1 G : G <*> 1 = G.

-Lemma genM_join G H : <<G × H>> = G <*> H.
+Lemma genM_join G H : <<G × H>> = G <*> H.

-Lemma mulG_subG G H K : (G × H \subset K) = (G \subset K) && (H \subset K).
+Lemma mulG_subG G H K : (G × H \subset K) = (G \subset K) && (H \subset K).

-Lemma mulGsubP K H G : reflect (K \subset G H \subset G) (K × H \subset G).
+Lemma mulGsubP K H G : reflect (K \subset G H \subset G) (K × H \subset G).

-Lemma mulG_sub K H A : K × H = A K \subset A H \subset A.
+Lemma mulG_sub K H A : K × H = A K \subset A H \subset A.

-Lemma trivMg G H : (G × H == 1) = (G :==: 1) && (H :==: 1).
+Lemma trivMg G H : (G × H == 1) = (G :==: 1) && (H :==: 1).

-Lemma comm_joingE G H : commute G H G <*> H = G × H.
+Lemma comm_joingE G H : commute G H G <*> H = G × H.

-Lemma joinGC : commutative joinGT.
+Lemma joinGC : commutative joinGT.

-Lemma joinGA : associative joinGT.
+Lemma joinGA : associative joinGT.

-Lemma join1G : left_id 1%G joinGT.
+Lemma join1G : left_id 1%G joinGT.

-Lemma joinG1 : right_id 1%G joinGT.
+Lemma joinG1 : right_id 1%G joinGT.

Canonical joinG_law := Monoid.Law joinGA join1G joinG1.
Canonical joinG_abelaw := Monoid.ComLaw joinGC.

-Lemma bigprodGEgen I r (P : pred I) (F : I {set gT}) :
-  (\prod_(i <- r | P i) <<F i>>)%G :=: << \bigcup_(i <- r | P i) F i >>.
+Lemma bigprodGEgen I r (P : pred I) (F : I {set gT}) :
+  (\prod_(i <- r | P i) <<F i>>)%G :=: << \bigcup_(i <- r | P i) F i >>.

-Lemma bigprodGE I r (P : pred I) (F : I {group gT}) :
-  (\prod_(i <- r | P i) F i)%G :=: << \bigcup_(i <- r | P i) F i >>.
+Lemma bigprodGE I r (P : pred I) (F : I {group gT}) :
+  (\prod_(i <- r | P i) F i)%G :=: << \bigcup_(i <- r | P i) F i >>.

-Lemma mem_commg A B x y : x \in A y \in B [~ x, y] \in [~: A, B].
+Lemma mem_commg A B x y : x \in A y \in B [~ x, y] \in [~: A, B].

-Lemma commSg A B C : A \subset B [~: A, C] \subset [~: B, C].
+Lemma commSg A B C : A \subset B [~: A, C] \subset [~: B, C].

-Lemma commgS A B C : B \subset C [~: A, B] \subset [~: A, C].
+Lemma commgS A B C : B \subset C [~: A, B] \subset [~: A, C].

Lemma commgSS A B C D :
-  A \subset B C \subset D [~: A, C] \subset [~: B, D].
+  A \subset B C \subset D [~: A, C] \subset [~: B, D].

-Lemma der1_subG G : [~: G, G] \subset G.
+Lemma der1_subG G : [~: G, G] \subset G.

-Lemma comm_subG A B G : A \subset G B \subset G [~: A, B] \subset G.
+Lemma comm_subG A B G : A \subset G B \subset G [~: A, B] \subset G.

-Lemma commGC A B : [~: A, B] = [~: B, A].
+Lemma commGC A B : [~: A, B] = [~: B, A].

-Lemma conjsRg A B x : [~: A, B] :^ x = [~: A :^ x, B :^ x].
+Lemma conjsRg A B x : [~: A, B] :^ x = [~: A :^ x, B :^ x].

End GeneratedGroup.
@@ -2476,79 +2445,79 @@
Variable gT : finGroupType.
Implicit Types x y : gT.
-Implicit Types G : {group gT}.
+Implicit Types G : {group gT}.

Import Monoid.Theory.

-Lemma cycle1 : <[1]> = [1 gT].
+Lemma cycle1 : <[1]> = [1 gT].

-Lemma order1 : #[1 : gT] = 1%N.
+Lemma order1 : #[1 : gT] = 1%N.

-Lemma cycle_id x : x \in <[x]>.
+Lemma cycle_id x : x \in <[x]>.

-Lemma mem_cycle x i : x ^+ i \in <[x]>.
+Lemma mem_cycle x i : x ^+ i \in <[x]>.

-Lemma cycle_subG x G : (<[x]> \subset G) = (x \in G).
+Lemma cycle_subG x G : (<[x]> \subset G) = (x \in G).

-Lemma cycle_eq1 x : (<[x]> == 1) = (x == 1).
+Lemma cycle_eq1 x : (<[x]> == 1) = (x == 1).

-Lemma orderE x : #[x] = #|<[x]>|.
+Lemma orderE x : #[x] = #|<[x]>|.

-Lemma order_eq1 x : (#[x] == 1%N) = (x == 1).
+Lemma order_eq1 x : (#[x] == 1%N) = (x == 1).

-Lemma order_gt1 x : (#[x] > 1) = (x != 1).
+Lemma order_gt1 x : (#[x] > 1) = (x != 1).

-Lemma cycle_traject x : <[x]> =i traject (mulg x) 1 #[x].
+Lemma cycle_traject x : <[x]> =i traject (mulg x) 1 #[x].

-Lemma cycle2g x : #[x] = 2 <[x]> = [set 1; x].
+Lemma cycle2g x : #[x] = 2 <[x]> = [set 1; x].

-Lemma cyclePmin x y : y \in <[x]> {i | i < #[x] & y = x ^+ i}.
+Lemma cyclePmin x y : y \in <[x]> {i | i < #[x] & y = x ^+ i}.

-Lemma cycleP x y : reflect ( i, y = x ^+ i) (y \in <[x]>).
+Lemma cycleP x y : reflect ( i, y = x ^+ i) (y \in <[x]>).

-Lemma expg_order x : x ^+ #[x] = 1.
+Lemma expg_order x : x ^+ #[x] = 1.

-Lemma expg_mod p k x : x ^+ p = 1 x ^+ (k %% p) = x ^+ k.
+Lemma expg_mod p k x : x ^+ p = 1 x ^+ (k %% p) = x ^+ k.

-Lemma expg_mod_order x i : x ^+ (i %% #[x]) = x ^+ i.
+Lemma expg_mod_order x i : x ^+ (i %% #[x]) = x ^+ i.

-Lemma invg_expg x : x^-1 = x ^+ #[x].-1.
+Lemma invg_expg x : x^-1 = x ^+ #[x].-1.

-Lemma invg2id x : #[x] = 2 x^-1 = x.
+Lemma invg2id x : #[x] = 2 x^-1 = x.

-Lemma cycleX x i : <[x ^+ i]> \subset <[x]>.
+Lemma cycleX x i : <[x ^+ i]> \subset <[x]>.

-Lemma cycleV x : <[x^-1]> = <[x]>.
+Lemma cycleV x : <[x^-1]> = <[x]>.

-Lemma orderV x : #[x^-1] = #[x].
+Lemma orderV x : #[x^-1] = #[x].

-Lemma cycleJ x y : <[x ^ y]> = <[x]> :^ y.
+Lemma cycleJ x y : <[x ^ y]> = <[x]> :^ y.

-Lemma orderJ x y : #[x ^ y] = #[x].
+Lemma orderJ x y : #[x ^ y] = #[x].

End Cycles.
@@ -2559,217 +2528,217 @@
Variable gT : finGroupType.
Implicit Types x y z : gT.
-Implicit Types A B C D : {set gT}.
-Implicit Type G H K : {group gT}.
+Implicit Types A B C D : {set gT}.
+Implicit Type G H K : {group gT}.

-Lemma normP x A : reflect (A :^ x = A) (x \in 'N(A)).
+Lemma normP x A : reflect (A :^ x = A) (x \in 'N(A)).

-Lemma group_set_normaliser A : group_set 'N(A).
+Lemma group_set_normaliser A : group_set 'N(A).

Canonical normaliser_group A := group (group_set_normaliser A).

-Lemma normsP A B : reflect {in A, normalised B} (A \subset 'N(B)).
+Lemma normsP A B : reflect {in A, normalised B} (A \subset 'N(B)).

-Lemma memJ_norm x y A : x \in 'N(A) (y ^ x \in A) = (y \in A).
+Lemma memJ_norm x y A : x \in 'N(A) (y ^ x \in A) = (y \in A).

-Lemma norms_cycle x y : (<[y]> \subset 'N(<[x]>)) = (x ^ y \in <[x]>).
+Lemma norms_cycle x y : (<[y]> \subset 'N(<[x]>)) = (x ^ y \in <[x]>).

-Lemma norm1 : 'N(1) = setT :> {set gT}.
+Lemma norm1 : 'N(1) = setT :> {set gT}.

-Lemma norms1 A : A \subset 'N(1).
+Lemma norms1 A : A \subset 'N(1).

-Lemma normCs A : 'N(~: A) = 'N(A).
+Lemma normCs A : 'N(~: A) = 'N(A).

-Lemma normG G : G \subset 'N(G).
+Lemma normG G : G \subset 'N(G).

-Lemma normT : 'N([set: gT]) = [set: gT].
+Lemma normT : 'N([set: gT]) = [set: gT].

-Lemma normsG A G : A \subset G A \subset 'N(G).
+Lemma normsG A G : A \subset G A \subset 'N(G).

-Lemma normC A B : A \subset 'N(B) commute A B.
+Lemma normC A B : A \subset 'N(B) commute A B.

-Lemma norm_joinEl G H : G \subset 'N(H) G <*> H = G × H.
+Lemma norm_joinEl G H : G \subset 'N(H) G <*> H = G × H.

-Lemma norm_joinEr G H : H \subset 'N(G) G <*> H = G × H.
+Lemma norm_joinEr G H : H \subset 'N(G) G <*> H = G × H.

-Lemma norm_rlcoset G x : x \in 'N(G) G :* x = x *: G.
+Lemma norm_rlcoset G x : x \in 'N(G) G :* x = x *: G.

-Lemma rcoset_mul G x y : x \in 'N(G) (G :* x) × (G :* y) = G :* (x × y).
+Lemma rcoset_mul G x y : x \in 'N(G) (G :* x) × (G :* y) = G :* (x × y).

-Lemma normJ A x : 'N(A :^ x) = 'N(A) :^ x.
+Lemma normJ A x : 'N(A :^ x) = 'N(A) :^ x.

Lemma norm_conj_norm x A B :
-  x \in 'N(A) (A \subset 'N(B :^ x)) = (A \subset 'N(B)).
+  x \in 'N(A) (A \subset 'N(B :^ x)) = (A \subset 'N(B)).

-Lemma norm_gen A : 'N(A) \subset 'N(<<A>>).
+Lemma norm_gen A : 'N(A) \subset 'N(<<A>>).

-Lemma class_norm x G : G \subset 'N(x ^: G).
+Lemma class_norm x G : G \subset 'N(x ^: G).

-Lemma class_normal x G : x \in G x ^: G <| G.
+Lemma class_normal x G : x \in G x ^: G <| G.

-Lemma class_sub_norm G A x : G \subset 'N(A) (x ^: G \subset A) = (x \in A).
+Lemma class_sub_norm G A x : G \subset 'N(A) (x ^: G \subset A) = (x \in A).

-Lemma class_support_norm A G : G \subset 'N(class_support A G).
+Lemma class_support_norm A G : G \subset 'N(class_support A G).

Lemma class_support_sub_norm A B G :
-  A \subset G B \subset 'N(G) class_support A B \subset G.
+  A \subset G B \subset 'N(G) class_support A B \subset G.

Section norm_trans.

-Variables (A B C D : {set gT}).
-Hypotheses (nBA : A \subset 'N(B)) (nCA : A \subset 'N(C)).
+Variables (A B C D : {set gT}).
+Hypotheses (nBA : A \subset 'N(B)) (nCA : A \subset 'N(C)).

-Lemma norms_gen : A \subset 'N(<<B>>).
+Lemma norms_gen : A \subset 'N(<<B>>).

-Lemma norms_norm : A \subset 'N('N(B)).
+Lemma norms_norm : A \subset 'N('N(B)).

-Lemma normsI : A \subset 'N(B :&: C).
+Lemma normsI : A \subset 'N(B :&: C).

-Lemma normsU : A \subset 'N(B :|: C).
+Lemma normsU : A \subset 'N(B :|: C).

-Lemma normsIs : B \subset 'N(D) A :&: B \subset 'N(C :&: D).
+Lemma normsIs : B \subset 'N(D) A :&: B \subset 'N(C :&: D).

-Lemma normsD : A \subset 'N(B :\: C).
+Lemma normsD : A \subset 'N(B :\: C).

-Lemma normsM : A \subset 'N(B × C).
+Lemma normsM : A \subset 'N(B × C).

-Lemma normsY : A \subset 'N(B <*> C).
+Lemma normsY : A \subset 'N(B <*> C).

-Lemma normsR : A \subset 'N([~: B, C]).
+Lemma normsR : A \subset 'N([~: B, C]).

-Lemma norms_class_support : A \subset 'N(class_support B C).
+Lemma norms_class_support : A \subset 'N(class_support B C).

End norm_trans.

-Lemma normsIG A B G : A \subset 'N(B) A :&: G \subset 'N(B :&: G).
+Lemma normsIG A B G : A \subset 'N(B) A :&: G \subset 'N(B :&: G).

-Lemma normsGI A B G : A \subset 'N(B) G :&: A \subset 'N(G :&: B).
+Lemma normsGI A B G : A \subset 'N(B) G :&: A \subset 'N(G :&: B).

-Lemma norms_bigcap I r (P : pred I) A (B_ : I {set gT}) :
-    A \subset \bigcap_(i <- r | P i) 'N(B_ i)
-  A \subset 'N(\bigcap_(i <- r | P i) B_ i).
+Lemma norms_bigcap I r (P : pred I) A (B_ : I {set gT}) :
+    A \subset \bigcap_(i <- r | P i) 'N(B_ i)
+  A \subset 'N(\bigcap_(i <- r | P i) B_ i).

-Lemma norms_bigcup I r (P : pred I) A (B_ : I {set gT}) :
-    A \subset \bigcap_(i <- r | P i) 'N(B_ i)
-  A \subset 'N(\bigcup_(i <- r | P i) B_ i).
+Lemma norms_bigcup I r (P : pred I) A (B_ : I {set gT}) :
+    A \subset \bigcap_(i <- r | P i) 'N(B_ i)
+  A \subset 'N(\bigcup_(i <- r | P i) B_ i).

-Lemma normsD1 A B : A \subset 'N(B) A \subset 'N(B^#).
+Lemma normsD1 A B : A \subset 'N(B) A \subset 'N(B^#).

-Lemma normD1 A : 'N(A^#) = 'N(A).
+Lemma normD1 A : 'N(A^#) = 'N(A).

-Lemma normalP A B : reflect (A \subset B {in B, normalised A}) (A <| B).
+Lemma normalP A B : reflect (A \subset B {in B, normalised A}) (A <| B).

-Lemma normal_sub A B : A <| B A \subset B.
+Lemma normal_sub A B : A <| B A \subset B.

-Lemma normal_norm A B : A <| B B \subset 'N(A).
+Lemma normal_norm A B : A <| B B \subset 'N(A).

-Lemma normalS G H K : K \subset H H \subset G K <| G K <| H.
+Lemma normalS G H K : K \subset H H \subset G K <| G K <| H.

-Lemma normal1 G : 1 <| G.
+Lemma normal1 G : 1 <| G.

-Lemma normal_refl G : G <| G.
+Lemma normal_refl G : G <| G.

-Lemma normalG G : G <| 'N(G).
+Lemma normalG G : G <| 'N(G).

-Lemma normalSG G H : H \subset G H <| 'N_G(H).
+Lemma normalSG G H : H \subset G H <| 'N_G(H).

-Lemma normalJ A B x : (A :^ x <| B :^ x) = (A <| B).
+Lemma normalJ A B x : (A :^ x <| B :^ x) = (A <| B).

-Lemma normalM G A B : A <| G B <| G A × B <| G.
+Lemma normalM G A B : A <| G B <| G A × B <| G.

-Lemma normalY G A B : A <| G B <| G A <*> B <| G.
+Lemma normalY G A B : A <| G B <| G A <*> B <| G.

-Lemma normalYl G H : (H <| H <*> G) = (G \subset 'N(H)).
+Lemma normalYl G H : (H <| H <*> G) = (G \subset 'N(H)).

-Lemma normalYr G H : (H <| G <*> H) = (G \subset 'N(H)).
+Lemma normalYr G H : (H <| G <*> H) = (G \subset 'N(H)).

-Lemma normalI G A B : A <| G B <| G A :&: B <| G.
+Lemma normalI G A B : A <| G B <| G A :&: B <| G.

-Lemma norm_normalI G A : G \subset 'N(A) G :&: A <| G.
+Lemma norm_normalI G A : G \subset 'N(A) G :&: A <| G.

-Lemma normalGI G H A : H \subset G A <| G H :&: A <| H.
+Lemma normalGI G H A : H \subset G A <| G H :&: A <| H.

-Lemma normal_subnorm G H : (H <| 'N_G(H)) = (H \subset G).
+Lemma normal_subnorm G H : (H <| 'N_G(H)) = (H \subset G).

-Lemma normalD1 A G : (A^# <| G) = (A <| G).
+Lemma normalD1 A G : (A^# <| G) = (A <| G).

-Lemma gcore_sub A G : gcore A G \subset A.
+Lemma gcore_sub A G : gcore A G \subset A.

-Lemma gcore_norm A G : G \subset 'N(gcore A G).
+Lemma gcore_norm A G : G \subset 'N(gcore A G).

-Lemma gcore_normal A G : A \subset G gcore A G <| G.
+Lemma gcore_normal A G : A \subset G gcore A G <| G.

-Lemma gcore_max A B G : B \subset A G \subset 'N(B) B \subset gcore A G.
+Lemma gcore_max A B G : B \subset A G \subset 'N(B) B \subset gcore A G.

Lemma sub_gcore A B G :
-  G \subset 'N(B) (B \subset gcore A G) = (B \subset A).
+  G \subset 'N(B) (B \subset gcore A G) = (B \subset A).

@@ -2781,161 +2750,161 @@
Lemma rcoset_index2 G H x :
-  H \subset G #|G : H| = 2 x \in G :\: H H :* x = G :\: H.
+  H \subset G #|G : H| = 2 x \in G :\: H H :* x = G :\: H.

-Lemma index2_normal G H : H \subset G #|G : H| = 2 H <| G.
+Lemma index2_normal G H : H \subset G #|G : H| = 2 H <| G.

-Lemma cent1P x y : reflect (commute x y) (x \in 'C[y]).
+Lemma cent1P x y : reflect (commute x y) (x \in 'C[y]).

-Lemma cent1id x : x \in 'C[x].
+Lemma cent1id x : x \in 'C[x].

-Lemma cent1E x y : (x \in 'C[y]) = (x × y == y × x).
+Lemma cent1E x y : (x \in 'C[y]) = (x × y == y × x).

-Lemma cent1C x y : (x \in 'C[y]) = (y \in 'C[x]).
+Lemma cent1C x y : (x \in 'C[y]) = (y \in 'C[x]).

-Canonical centraliser_group A : {group _} := Eval hnf in [group of 'C(A)].
+Canonical centraliser_group A : {group _} := Eval hnf in [group of 'C(A)].

-Lemma cent_set1 x : 'C([set x]) = 'C[x].
+Lemma cent_set1 x : 'C([set x]) = 'C[x].

-Lemma cent1J x y : 'C[x ^ y] = 'C[x] :^ y.
+Lemma cent1J x y : 'C[x ^ y] = 'C[x] :^ y.

-Lemma centP A x : reflect (centralises x A) (x \in 'C(A)).
+Lemma centP A x : reflect (centralises x A) (x \in 'C(A)).

-Lemma centsP A B : reflect {in A, centralised B} (A \subset 'C(B)).
+Lemma centsP A B : reflect {in A, centralised B} (A \subset 'C(B)).

-Lemma centsC A B : (A \subset 'C(B)) = (B \subset 'C(A)).
+Lemma centsC A B : (A \subset 'C(B)) = (B \subset 'C(A)).

-Lemma cents1 A : A \subset 'C(1).
+Lemma cents1 A : A \subset 'C(1).

-Lemma cent1T : 'C(1) = setT :> {set gT}.
+Lemma cent1T : 'C(1) = setT :> {set gT}.

-Lemma cent11T : 'C[1] = setT :> {set gT}.
+Lemma cent11T : 'C[1] = setT :> {set gT}.

-Lemma cent_sub A : 'C(A) \subset 'N(A).
+Lemma cent_sub A : 'C(A) \subset 'N(A).

-Lemma cents_norm A B : A \subset 'C(B) A \subset 'N(B).
+Lemma cents_norm A B : A \subset 'C(B) A \subset 'N(B).

-Lemma centC A B : A \subset 'C(B) commute A B.
+Lemma centC A B : A \subset 'C(B) commute A B.

-Lemma cent_joinEl G H : G \subset 'C(H) G <*> H = G × H.
+Lemma cent_joinEl G H : G \subset 'C(H) G <*> H = G × H.

-Lemma cent_joinEr G H : H \subset 'C(G) G <*> H = G × H.
+Lemma cent_joinEr G H : H \subset 'C(G) G <*> H = G × H.

-Lemma centJ A x : 'C(A :^ x) = 'C(A) :^ x.
+Lemma centJ A x : 'C(A :^ x) = 'C(A) :^ x.

-Lemma cent_norm A : 'N(A) \subset 'N('C(A)).
+Lemma cent_norm A : 'N(A) \subset 'N('C(A)).

-Lemma norms_cent A B : A \subset 'N(B) A \subset 'N('C(B)).
+Lemma norms_cent A B : A \subset 'N(B) A \subset 'N('C(B)).

-Lemma cent_normal A : 'C(A) <| 'N(A).
+Lemma cent_normal A : 'C(A) <| 'N(A).

-Lemma centS A B : B \subset A 'C(A) \subset 'C(B).
+Lemma centS A B : B \subset A 'C(A) \subset 'C(B).

-Lemma centsS A B C : A \subset B C \subset 'C(B) C \subset 'C(A).
+Lemma centsS A B C : A \subset B C \subset 'C(B) C \subset 'C(A).

Lemma centSS A B C D :
-  A \subset C B \subset D C \subset 'C(D) A \subset 'C(B).
+  A \subset C B \subset D C \subset 'C(D) A \subset 'C(B).

-Lemma centI A B : 'C(A) <*> 'C(B) \subset 'C(A :&: B).
+Lemma centI A B : 'C(A) <*> 'C(B) \subset 'C(A :&: B).

-Lemma centU A B : 'C(A :|: B) = 'C(A) :&: 'C(B).
+Lemma centU A B : 'C(A :|: B) = 'C(A) :&: 'C(B).

-Lemma cent_gen A : 'C(<<A>>) = 'C(A).
+Lemma cent_gen A : 'C(<<A>>) = 'C(A).

-Lemma cent_cycle x : 'C(<[x]>) = 'C[x].
+Lemma cent_cycle x : 'C(<[x]>) = 'C[x].

-Lemma sub_cent1 A x : (A \subset 'C[x]) = (x \in 'C(A)).
+Lemma sub_cent1 A x : (A \subset 'C[x]) = (x \in 'C(A)).

-Lemma cents_cycle x y : commute x y <[x]> \subset 'C(<[y]>).
+Lemma cents_cycle x y : commute x y <[x]> \subset 'C(<[y]>).

-Lemma cycle_abelian x : abelian <[x]>.
+Lemma cycle_abelian x : abelian <[x]>.

-Lemma centY A B : 'C(A <*> B) = 'C(A) :&: 'C(B).
+Lemma centY A B : 'C(A <*> B) = 'C(A) :&: 'C(B).

-Lemma centM G H : 'C(G × H) = 'C(G) :&: 'C(H).
+Lemma centM G H : 'C(G × H) = 'C(G) :&: 'C(H).

-Lemma cent_classP x G : reflect (x ^: G = [set x]) (x \in 'C(G)).
+Lemma cent_classP x G : reflect (x ^: G = [set x]) (x \in 'C(G)).

-Lemma commG1P A B : reflect ([~: A, B] = 1) (A \subset 'C(B)).
+Lemma commG1P A B : reflect ([~: A, B] = 1) (A \subset 'C(B)).

-Lemma abelianE A : abelian A = (A \subset 'C(A)).
+Lemma abelianE A : abelian A = (A \subset 'C(A)).

-Lemma abelian1 : abelian [1 gT].
+Lemma abelian1 : abelian [1 gT].

-Lemma abelianS A B : A \subset B abelian B abelian A.
+Lemma abelianS A B : A \subset B abelian B abelian A.

-Lemma abelianJ A x : abelian (A :^ x) = abelian A.
+Lemma abelianJ A x : abelian (A :^ x) = abelian A.

-Lemma abelian_gen A : abelian <<A>> = abelian A.
+Lemma abelian_gen A : abelian <<A>> = abelian A.

Lemma abelianY A B :
-  abelian (A <*> B) = [&& abelian A, abelian B & B \subset 'C(A)].
+  abelian (A <*> B) = [&& abelian A, abelian B & B \subset 'C(A)].

Lemma abelianM G H :
-  abelian (G × H) = [&& abelian G, abelian H & H \subset 'C(G)].
+  abelian (G × H) = [&& abelian G, abelian H & H \subset 'C(G)].

Section SubAbelian.

-Variable A B C : {set gT}.
+Variable A B C : {set gT}.
Hypothesis cAA : abelian A.

-Lemma sub_abelian_cent : C \subset A A \subset 'C(C).
+Lemma sub_abelian_cent : C \subset A A \subset 'C(C).

-Lemma sub_abelian_cent2 : B \subset A C \subset A B \subset 'C(C).
+Lemma sub_abelian_cent2 : B \subset A C \subset A B \subset 'C(C).

-Lemma sub_abelian_norm : C \subset A A \subset 'N(C).
+Lemma sub_abelian_norm : C \subset A A \subset 'N(C).

-Lemma sub_abelian_normal : (C \subset A) = (C <| A).
+Lemma sub_abelian_normal : (C \subset A) = (C <| A).

End SubAbelian.
@@ -2948,83 +2917,85 @@

- -
-Notation "''N' ( A )" := (normaliser_group A) : Group_scope.
-Notation "''C' ( A )" := (centraliser_group A) : Group_scope.
-Notation "''C' [ x ]" := (normaliser_group [set x%g]) : Group_scope.
-Notation "''N_' G ( A )" := (setI_group G 'N(A)) : Group_scope.
-Notation "''C_' G ( A )" := (setI_group G 'C(A)) : Group_scope.
-Notation "''C_' ( G ) ( A )" := (setI_group G 'C(A))
+Notation "''N' ( A )" := (normaliser_group A) : Group_scope.
+Notation "''C' ( A )" := (centraliser_group A) : Group_scope.
+Notation "''C' [ x ]" := (normaliser_group [set x%g]) : Group_scope.
+Notation "''N_' G ( A )" := (setI_group G 'N(A)) : Group_scope.
+Notation "''C_' G ( A )" := (setI_group G 'C(A)) : Group_scope.
+Notation "''C_' ( G ) ( A )" := (setI_group G 'C(A))
  (only parsing) : Group_scope.
-Notation "''C_' G [ x ]" := (setI_group G 'C[x]) : Group_scope.
-Notation "''C_' ( G ) [ x ]" := (setI_group G 'C[x])
+Notation "''C_' G [ x ]" := (setI_group G 'C[x]) : Group_scope.
+Notation "''C_' ( G ) [ x ]" := (setI_group G 'C[x])
  (only parsing) : Group_scope.

-Hint Resolve normG normal_refl.
+Hint Extern 0 (is_true (_ \subset _)) ⇒ apply: normG : core.
+Hint Extern 0 (is_true (_ <| _)) ⇒ apply: normal_refl : core.

Section MinMaxGroup.

Variable gT : finGroupType.
-Variable gP : pred {group gT}.
+Implicit Types gP : pred {group gT}.
+ +
+Definition maxgroup A gP := maxset (fun Agroup_set A && gP <<A>>%G) A.
+Definition mingroup A gP := minset (fun Agroup_set A && gP <<A>>%G) A.

-Definition maxgroup := maxset (fun Agroup_set A && gP <<A>>).
-Definition mingroup := minset (fun Agroup_set A && gP <<A>>).
+Variable gP : pred {group gT}.

-Lemma ex_maxgroup : ( G, gP G) {G : {group gT} | maxgroup G}.
+Lemma ex_maxgroup : ( G, gP G) {G : {group gT} | maxgroup G gP}.

-Lemma ex_mingroup : ( G, gP G) {G : {group gT} | mingroup G}.
+Lemma ex_mingroup : ( G, gP G) {G : {group gT} | mingroup G gP}.

-Variable G : {group gT}.
+Variable G : {group gT}.

Lemma mingroupP :
-  reflect (gP G H, gP H H \subset G H :=: G) (mingroup G).
+  reflect (gP G H, gP H H \subset G H :=: G) (mingroup G gP).

Lemma maxgroupP :
-  reflect (gP G H, gP H G \subset H H :=: G) (maxgroup G).
+  reflect (gP G H, gP H G \subset H H :=: G) (maxgroup G gP).

-Lemma maxgroupp : maxgroup G gP G.
+Lemma maxgroupp : maxgroup G gP gP G.

-Lemma mingroupp : mingroup G gP G.
+Lemma mingroupp : mingroup G gP gP G.

Hypothesis gPG : gP G.

-Lemma maxgroup_exists : {H : {group gT} | maxgroup H & G \subset H}.
+Lemma maxgroup_exists : {H : {group gT} | maxgroup H gP & G \subset H}.

-Lemma mingroup_exists : {H : {group gT} | mingroup H & H \subset G}.
+Lemma mingroup_exists : {H : {group gT} | mingroup H gP & H \subset G}.

End MinMaxGroup.

-Notation "[ 'max' A 'of' G | gP ]" :=
-  (maxgroup (fun G : {group _}gP) A) : group_scope.
-Notation "[ 'max' G | gP ]" := [max gval G of G | gP] : group_scope.
-Notation "[ 'max' A 'of' G | gP & gQ ]" :=
-  [max A of G | gP && gQ] : group_scope.
-Notation "[ 'max' G | gP & gQ ]" := [max G | gP && gQ] : group_scope.
-Notation "[ 'min' A 'of' G | gP ]" :=
-  (mingroup (fun G : {group _}gP) A) : group_scope.
-Notation "[ 'min' G | gP ]" := [min gval G of G | gP] : group_scope.
-Notation "[ 'min' A 'of' G | gP & gQ ]" :=
-  [min A of G | gP && gQ] : group_scope.
-Notation "[ 'min' G | gP & gQ ]" := [min G | gP && gQ] : group_scope.

+Notation "[ 'max' A 'of' G | gP ]" :=
+  (maxgroup A (fun G : {group _}gP)) : group_scope.
+Notation "[ 'max' G | gP ]" := [max gval G of G | gP] : group_scope.
+Notation "[ 'max' A 'of' G | gP & gQ ]" :=
+  [max A of G | gP && gQ] : group_scope.
+Notation "[ 'max' G | gP & gQ ]" := [max G | gP && gQ] : group_scope.
+Notation "[ 'min' A 'of' G | gP ]" :=
+  (mingroup A (fun G : {group _}gP)) : group_scope.
+Notation "[ 'min' G | gP ]" := [min gval G of G | gP] : group_scope.
+Notation "[ 'min' A 'of' G | gP & gQ ]" :=
+  [min A of G | gP && gQ] : group_scope.
+Notation "[ 'min' G | gP & gQ ]" := [min G | gP && gQ] : group_scope.
-- cgit v1.2.3