Built with doc-gen4, running Lean4. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓to navigate, Ctrl+πŸ–±οΈto focus. On Mac, use Cmdinstead of Ctrl.
/-
Copyright (c) 2018 Johannes HΓΆlzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes HΓΆlzl, Mitchell Rowett, Scott Morrison, Johan Commelin, Mario Carneiro,
  Michael Howes

! This file was ported from Lean 3 source module deprecated.subgroup
! leanprover-community/mathlib commit f93c11933efbc3c2f0299e47b8ff83e9b539cbf6
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.GroupTheory.Subgroup.Basic
import Mathlib.Deprecated.Submonoid

/-!
# Unbundled subgroups (deprecated)

This file is deprecated, and is no longer imported by anything in mathlib other than other
deprecated files, and test files. You should not need to import it.

This file defines unbundled multiplicative and additive subgroups. Instead of using this file,
please use `Subgroup G` and `AddSubgroup A`, defined in `GroupTheory.Subgroup.Basic`.

## Main definitions

`IsAddSubgroup (S : Set A)` : the predicate that `S` is the underlying subset of an additive
subgroup of `A`. The bundled variant `AddSubgroup A` should be used in preference to this.

`IsSubgroup (S : Set G)` : the predicate that `S` is the underlying subset of a subgroup
of `G`. The bundled variant `Subgroup G` should be used in preference to this.

## Tags

subgroup, subgroups, IsSubgroup
-/


open Set Function

variable {
G: Type ?u.77632
G
:
Type _: Type (?u.39733+1)
Type _
} {
H: Type ?u.5
H
:
Type _: Type (?u.5+1)
Type _
} {
A: Type ?u.77638
A
:
Type _: Type (?u.8+1)
Type _
} {
a: G
a
a₁: G
a₁
aβ‚‚: G
aβ‚‚
b: G
b
c: G
c
:
G: Type ?u.77632
G
} section Group variable [
Group: Type ?u.65 β†’ Type ?u.65
Group
G: Type ?u.21
G
] [
AddGroup: Type ?u.68 β†’ Type ?u.68
AddGroup
A: Type ?u.2675
A
] /-- `s` is an additive subgroup: a set containing 0 and closed under addition and negation. -/ structure
IsAddSubgroup: βˆ€ {A : Type u_1} [inst : AddGroup A] {s : Set A}, IsAddSubmonoid s β†’ (βˆ€ {a : A}, a ∈ s β†’ -a ∈ s) β†’ IsAddSubgroup s
IsAddSubgroup
(
s: Set A
s
:
Set: Type ?u.71 β†’ Type ?u.71
Set
A: Type ?u.52
A
) extends
IsAddSubmonoid: {A : Type ?u.75} β†’ [inst : AddMonoid A] β†’ Set A β†’ Prop
IsAddSubmonoid
s: Set A
s
:
Prop: Type
Prop
where /-- The proposition that `s` is closed under negation. -/
neg_mem: βˆ€ {A : Type u_1} [inst : AddGroup A] {s : Set A}, IsAddSubgroup s β†’ βˆ€ {a : A}, a ∈ s β†’ -a ∈ s
neg_mem
{
a: ?m.371
a
} :
a: ?m.371
a
∈
s: Set A
s
β†’ -
a: ?m.371
a
∈
s: Set A
s
#align is_add_subgroup
IsAddSubgroup: {A : Type u_1} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsAddSubgroup
/-- `s` is a subgroup: a set containing 1 and closed under multiplication and inverse. -/ @[
to_additive: {A : Type u_1} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
to_additive
] structure
IsSubgroup: {G : Type u_1} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
(
s: Set G
s
:
Set: Type ?u.660 β†’ Type ?u.660
Set
G: Type ?u.635
G
) extends
IsSubmonoid: {M : Type ?u.664} β†’ [inst : Monoid M] β†’ Set M β†’ Prop
IsSubmonoid
s: Set G
s
:
Prop: Type
Prop
where /-- The proposition that `s` is closed under inverse. -/
inv_mem: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsSubgroup s β†’ βˆ€ {a : G}, a ∈ s β†’ a⁻¹ ∈ s
inv_mem
{
a: ?m.990
a
} :
a: ?m.990
a
∈
s: Set G
s
β†’
a: ?m.990
a
⁻¹ ∈
s: Set G
s
#align is_subgroup
IsSubgroup: {G : Type u_1} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
@[
to_additive: βˆ€ {G : Type u_1} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ βˆ€ {x y : G}, x ∈ s β†’ y ∈ s β†’ x - y ∈ s
to_additive
] theorem
IsSubgroup.div_mem: βˆ€ {s : Set G}, IsSubgroup s β†’ βˆ€ {x y : G}, x ∈ s β†’ y ∈ s β†’ x / y ∈ s
IsSubgroup.div_mem
{
s: Set G
s
:
Set: Type ?u.1266 β†’ Type ?u.1266
Set
G: Type ?u.1241
G
} (hs :
IsSubgroup: {G : Type ?u.1269} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
s: Set G
s
) {
x: G
x
y: G
y
:
G: Type ?u.1241
G
} (
hx: x ∈ s
hx
:
x: G
x
∈
s: Set G
s
) (
hy: y ∈ s
hy
:
y: G
y
∈
s: Set G
s
) :
x: G
x
/
y: G
y
∈
s: Set G
s
:=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.1244

A: Type ?u.1247

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

hs: IsSubgroup s

x, y: G

hx: x ∈ s

hy: y ∈ s


x / y ∈ s

Goals accomplished! πŸ™
#align is_subgroup.div_mem
IsSubgroup.div_mem: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsSubgroup s β†’ βˆ€ {x y : G}, x ∈ s β†’ y ∈ s β†’ x / y ∈ s
IsSubgroup.div_mem
#align is_add_subgroup.sub_mem
IsAddSubgroup.sub_mem: βˆ€ {G : Type u_1} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ βˆ€ {x y : G}, x ∈ s β†’ y ∈ s β†’ x - y ∈ s
IsAddSubgroup.sub_mem
theorem
Additive.isAddSubgroup: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsSubgroup s β†’ IsAddSubgroup s
Additive.isAddSubgroup
{
s: Set G
s
:
Set: Type ?u.2212 β†’ Type ?u.2212
Set
G: Type ?u.2187
G
} (hs :
IsSubgroup: {G : Type ?u.2215} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
s: Set G
s
) : @
IsAddSubgroup: {A : Type ?u.2246} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsAddSubgroup
(
Additive: Type ?u.2247 β†’ Type ?u.2247
Additive
G: Type ?u.2187
G
) _
s: Set G
s
:= @
IsAddSubgroup.mk: βˆ€ {A : Type ?u.2264} [inst : AddGroup A] {s : Set A}, IsAddSubmonoid s β†’ (βˆ€ {a : A}, a ∈ s β†’ -a ∈ s) β†’ IsAddSubgroup s
IsAddSubgroup.mk
(
Additive: Type ?u.2265 β†’ Type ?u.2265
Additive
G: Type ?u.2187
G
) _
_: Set (Additive G)
_
(
Additive.isAddSubmonoid: βˆ€ {M : Type ?u.2286} [inst : Monoid M] {s : Set M}, IsSubmonoid s β†’ IsAddSubmonoid s
Additive.isAddSubmonoid
hs.
toIsSubmonoid: βˆ€ {G : Type ?u.2344} [inst : Group G] {s : Set G}, IsSubgroup s β†’ IsSubmonoid s
toIsSubmonoid
) hs.
inv_mem: βˆ€ {G : Type ?u.2640} [inst : Group G] {s : Set G}, IsSubgroup s β†’ βˆ€ {a : G}, a ∈ s β†’ a⁻¹ ∈ s
inv_mem
#align additive.is_add_subgroup
Additive.isAddSubgroup: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsSubgroup s β†’ IsAddSubgroup s
Additive.isAddSubgroup
theorem
Additive.isAddSubgroup_iff: βˆ€ {s : Set G}, IsAddSubgroup s ↔ IsSubgroup s
Additive.isAddSubgroup_iff
{
s: Set G
s
:
Set: Type ?u.2694 β†’ Type ?u.2694
Set
G: Type ?u.2669
G
} : @
IsAddSubgroup: {A : Type ?u.2697} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsAddSubgroup
(
Additive: Type ?u.2698 β†’ Type ?u.2698
Additive
G: Type ?u.2669
G
) _
s: Set G
s
↔
IsSubgroup: {G : Type ?u.2715} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
s: Set G
s
:= ⟨

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.2672

A: Type ?u.2675

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G


G: Type u_1

H: Type ?u.2672

A: Type ?u.2675

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

h₃: βˆ€ {a : Additive G}, a ∈ s β†’ -a ∈ s

h₁: 0 ∈ s

hβ‚‚: βˆ€ {a b : Additive G}, a ∈ s β†’ b ∈ s β†’ a + b ∈ s


mk.mk
G: Type u_1

H: Type ?u.2672

A: Type ?u.2675

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

h₃: βˆ€ {a : Additive G}, a ∈ s β†’ -a ∈ s

h₁: 0 ∈ s

hβ‚‚: βˆ€ {a b : Additive G}, a ∈ s β†’ b ∈ s β†’ a + b ∈ s


mk.mk
G: Type u_1

H: Type ?u.2672

A: Type ?u.2675

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G



Goals accomplished! πŸ™
, fun
h: ?m.2734
h
=>
Additive.isAddSubgroup: βˆ€ {G : Type ?u.2736} [inst : Group G] {s : Set G}, IsSubgroup s β†’ IsAddSubgroup s
Additive.isAddSubgroup
h: ?m.2734
h
⟩ #align additive.is_add_subgroup_iff
Additive.isAddSubgroup_iff: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsAddSubgroup s ↔ IsSubgroup s
Additive.isAddSubgroup_iff
theorem
Multiplicative.isSubgroup: βˆ€ {A : Type u_1} [inst : AddGroup A] {s : Set A}, IsAddSubgroup s β†’ IsSubgroup s
Multiplicative.isSubgroup
{
s: Set A
s
:
Set: Type ?u.3254 β†’ Type ?u.3254
Set
A: Type ?u.3235
A
} (hs :
IsAddSubgroup: {A : Type ?u.3257} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsAddSubgroup
s: Set A
s
) : @
IsSubgroup: {G : Type ?u.3287} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
(
Multiplicative: Type ?u.3288 β†’ Type ?u.3288
Multiplicative
A: Type ?u.3235
A
) _
s: Set A
s
:= @
IsSubgroup.mk: βˆ€ {G : Type ?u.3305} [inst : Group G] {s : Set G}, IsSubmonoid s β†’ (βˆ€ {a : G}, a ∈ s β†’ a⁻¹ ∈ s) β†’ IsSubgroup s
IsSubgroup.mk
(
Multiplicative: Type ?u.3306 β†’ Type ?u.3306
Multiplicative
A: Type ?u.3235
A
) _ _ (
Multiplicative.isSubmonoid: βˆ€ {A : Type ?u.3327} [inst : AddMonoid A] {s : Set A}, IsAddSubmonoid s β†’ IsSubmonoid s
Multiplicative.isSubmonoid
hs.
toIsAddSubmonoid: βˆ€ {A : Type ?u.3382} [inst : AddGroup A] {s : Set A}, IsAddSubgroup s β†’ IsAddSubmonoid s
toIsAddSubmonoid
) hs.
neg_mem: βˆ€ {A : Type ?u.3652} [inst : AddGroup A] {s : Set A}, IsAddSubgroup s β†’ βˆ€ {a : A}, a ∈ s β†’ -a ∈ s
neg_mem
#align multiplicative.is_subgroup
Multiplicative.isSubgroup: βˆ€ {A : Type u_1} [inst : AddGroup A] {s : Set A}, IsAddSubgroup s β†’ IsSubgroup s
Multiplicative.isSubgroup
theorem
Multiplicative.isSubgroup_iff: βˆ€ {s : Set A}, IsSubgroup s ↔ IsAddSubgroup s
Multiplicative.isSubgroup_iff
{
s: Set A
s
:
Set: Type ?u.3706 β†’ Type ?u.3706
Set
A: Type ?u.3687
A
} : @
IsSubgroup: {G : Type ?u.3709} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
(
Multiplicative: Type ?u.3710 β†’ Type ?u.3710
Multiplicative
A: Type ?u.3687
A
) _
s: Set A
s
↔
IsAddSubgroup: {A : Type ?u.3727} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsAddSubgroup
s: Set A
s
:= ⟨

Goals accomplished! πŸ™
G: Type ?u.3681

H: Type ?u.3684

A: Type u_1

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set A


G: Type ?u.3681

H: Type ?u.3684

A: Type u_1

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set A

h₃: βˆ€ {a : Multiplicative A}, a ∈ s β†’ a⁻¹ ∈ s

h₁: 1 ∈ s

hβ‚‚: βˆ€ {a b : Multiplicative A}, a ∈ s β†’ b ∈ s β†’ a * b ∈ s


mk.mk
G: Type ?u.3681

H: Type ?u.3684

A: Type u_1

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set A

h₃: βˆ€ {a : Multiplicative A}, a ∈ s β†’ a⁻¹ ∈ s

h₁: 1 ∈ s

hβ‚‚: βˆ€ {a b : Multiplicative A}, a ∈ s β†’ b ∈ s β†’ a * b ∈ s


mk.mk
G: Type ?u.3681

H: Type ?u.3684

A: Type u_1

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set A



Goals accomplished! πŸ™
, fun
h: ?m.3747
h
=>
Multiplicative.isSubgroup: βˆ€ {A : Type ?u.3749} [inst : AddGroup A] {s : Set A}, IsAddSubgroup s β†’ IsSubgroup s
Multiplicative.isSubgroup
h: ?m.3747
h
⟩ #align multiplicative.is_subgroup_iff
Multiplicative.isSubgroup_iff: βˆ€ {A : Type u_1} [inst : AddGroup A] {s : Set A}, IsSubgroup s ↔ IsAddSubgroup s
Multiplicative.isSubgroup_iff
@[to_additive
of_add_neg: βˆ€ {G : Type u_1} [inst : AddGroup G] (s : Set G), 0 ∈ s β†’ (βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a + -b ∈ s) β†’ IsAddSubgroup s
of_add_neg
] theorem
IsSubgroup.of_div: βˆ€ {G : Type u_1} [inst : Group G] (s : Set G), 1 ∈ s β†’ (βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s) β†’ IsSubgroup s
IsSubgroup.of_div
(
s: Set G
s
:
Set: Type ?u.4236 β†’ Type ?u.4236
Set
G: Type ?u.4211
G
) (
one_mem: 1 ∈ s
one_mem
: (
1: ?m.4260
1
:
G: Type ?u.4211
G
) ∈
s: Set G
s
) (
div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s
div_mem
: βˆ€ {
a: G
a
b: G
b
:
G: Type ?u.4211
G
},
a: G
a
∈
s: Set G
s
β†’
b: G
b
∈
s: Set G
s
β†’
a: G
a
*
b: G
b
⁻¹ ∈
s: Set G
s
) :
IsSubgroup: {G : Type ?u.5484} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
s: Set G
s
:= have
inv_mem: βˆ€ (a : G), a ∈ s β†’ a⁻¹ ∈ s
inv_mem
: βˆ€
a: ?m.5520
a
,
a: ?m.5520
a
∈
s: Set G
s
β†’
a: ?m.5520
a
⁻¹ ∈
s: Set G
s
:= fun
a: ?m.5750
a
ha: ?m.5753
ha
=>

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

a: G

ha: a ∈ s


G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

a: G

ha: a ∈ s

this: 1 * a⁻¹ ∈ s


G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

a: G

ha: a ∈ s


G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

a: G

ha: a ∈ s

this: 1 * a⁻¹ ∈ s


h.e'_4
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

a: G

ha: a ∈ s


G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

a: G

ha: a ∈ s

this: 1 * a⁻¹ ∈ s


h.e'_4
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

a: G

ha: a ∈ s

this: 1 * a⁻¹ ∈ s


h.e'_4

Goals accomplished! πŸ™
{ inv_mem :=
inv_mem: βˆ€ (a : G), a ∈ s β†’ a⁻¹ ∈ s
inv_mem
_: G
_
mul_mem := fun {
a: ?m.6056
a
b: ?m.6059
b
}
ha: ?m.6062
ha
hb: ?m.6065
hb
=>

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b✝, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

inv_mem: βˆ€ (a : G), a ∈ s β†’ a⁻¹ ∈ s

a, b: G

ha: a ∈ s

hb: b ∈ s


a * b ∈ s
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b✝, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

inv_mem: βˆ€ (a : G), a ∈ s β†’ a⁻¹ ∈ s

a, b: G

ha: a ∈ s

hb: b ∈ s

this: a * b⁻¹⁻¹ ∈ s


a * b ∈ s
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b✝, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

inv_mem: βˆ€ (a : G), a ∈ s β†’ a⁻¹ ∈ s

a, b: G

ha: a ∈ s

hb: b ∈ s


a * b ∈ s
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b✝, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

inv_mem: βˆ€ (a : G), a ∈ s β†’ a⁻¹ ∈ s

a, b: G

ha: a ∈ s

hb: b ∈ s

this: a * b⁻¹⁻¹ ∈ s


h.e'_4.h.e'_6
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b✝, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

inv_mem: βˆ€ (a : G), a ∈ s β†’ a⁻¹ ∈ s

a, b: G

ha: a ∈ s

hb: b ∈ s


a * b ∈ s
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b✝, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

inv_mem: βˆ€ (a : G), a ∈ s β†’ a⁻¹ ∈ s

a, b: G

ha: a ∈ s

hb: b ∈ s

this: a * b⁻¹⁻¹ ∈ s


h.e'_4.h.e'_6
G: Type u_1

H: Type ?u.4214

A: Type ?u.4217

a✝, a₁, aβ‚‚, b✝, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set G

one_mem: 1 ∈ s

div_mem: βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s

inv_mem: βˆ€ (a : G), a ∈ s β†’ a⁻¹ ∈ s

a, b: G

ha: a ∈ s

hb: b ∈ s

this: a * b⁻¹⁻¹ ∈ s


h.e'_4.h.e'_6
b = b

Goals accomplished! πŸ™
one_mem: 1 ∈ s
one_mem
} #align is_subgroup.of_div
IsSubgroup.of_div: βˆ€ {G : Type u_1} [inst : Group G] (s : Set G), 1 ∈ s β†’ (βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a * b⁻¹ ∈ s) β†’ IsSubgroup s
IsSubgroup.of_div
#align is_add_subgroup.of_add_neg
IsAddSubgroup.of_add_neg: βˆ€ {G : Type u_1} [inst : AddGroup G] (s : Set G), 0 ∈ s β†’ (βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a + -b ∈ s) β†’ IsAddSubgroup s
IsAddSubgroup.of_add_neg
theorem
IsAddSubgroup.of_sub: βˆ€ {A : Type u_1} [inst : AddGroup A] (s : Set A), 0 ∈ s β†’ (βˆ€ {a b : A}, a ∈ s β†’ b ∈ s β†’ a - b ∈ s) β†’ IsAddSubgroup s
IsAddSubgroup.of_sub
(
s: Set A
s
:
Set: Type ?u.9272 β†’ Type ?u.9272
Set
A: Type ?u.9253
A
) (
zero_mem: 0 ∈ s
zero_mem
: (
0: ?m.9296
0
:
A: Type ?u.9253
A
) ∈
s: Set A
s
) (
sub_mem: βˆ€ {a b : A}, a ∈ s β†’ b ∈ s β†’ a - b ∈ s
sub_mem
: βˆ€ {
a: A
a
b: A
b
:
A: Type ?u.9253
A
},
a: A
a
∈
s: Set A
s
β†’
b: A
b
∈
s: Set A
s
β†’
a: A
a
-
b: A
b
∈
s: Set A
s
) :
IsAddSubgroup: {A : Type ?u.10053} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsAddSubgroup
s: Set A
s
:=
IsAddSubgroup.of_add_neg: βˆ€ {G : Type ?u.10086} [inst : AddGroup G] (s : Set G), 0 ∈ s β†’ (βˆ€ {a b : G}, a ∈ s β†’ b ∈ s β†’ a + -b ∈ s) β†’ IsAddSubgroup s
IsAddSubgroup.of_add_neg
s: Set A
s
zero_mem: 0 ∈ s
zero_mem
fun {
x: ?m.10102
x
y: ?m.10105
y
}
hx: ?m.10108
hx
hy: ?m.10111
hy
=>

Goals accomplished! πŸ™
G: Type ?u.9247

H: Type ?u.9250

A: Type u_1

a, a₁, aβ‚‚, b, c: G

inst✝¹: Group G

inst✝: AddGroup A

s: Set A

zero_mem: 0 ∈ s

sub_mem: βˆ€ {a b : A}, a ∈ s β†’ b ∈ s β†’ a - b ∈ s

x, y: A

hx: x ∈ s

hy: y ∈ s


x + -y ∈ s

Goals accomplished! πŸ™
#align is_add_subgroup.of_sub
IsAddSubgroup.of_sub: βˆ€ {A : Type u_1} [inst : AddGroup A] (s : Set A), 0 ∈ s β†’ (βˆ€ {a b : A}, a ∈ s β†’ b ∈ s β†’ a - b ∈ s) β†’ IsAddSubgroup s
IsAddSubgroup.of_sub
@[
to_additive: βˆ€ {G : Type u_1} [inst : AddGroup G] {s₁ sβ‚‚ : Set G}, IsAddSubgroup s₁ β†’ IsAddSubgroup sβ‚‚ β†’ IsAddSubgroup (s₁ ∩ sβ‚‚)
to_additive
] theorem
IsSubgroup.inter: βˆ€ {G : Type u_1} [inst : Group G] {s₁ sβ‚‚ : Set G}, IsSubgroup s₁ β†’ IsSubgroup sβ‚‚ β†’ IsSubgroup (s₁ ∩ sβ‚‚)
IsSubgroup.inter
{
s₁: Set G
s₁
sβ‚‚: Set G
sβ‚‚
:
Set: Type ?u.10386 β†’ Type ?u.10386
Set
G: Type ?u.10358
G
} (
hs₁: IsSubgroup s₁
hs₁
:
IsSubgroup: {G : Type ?u.10389} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
s₁: Set G
s₁
) (
hsβ‚‚: IsSubgroup sβ‚‚
hsβ‚‚
:
IsSubgroup: {G : Type ?u.10420} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
sβ‚‚: Set G
sβ‚‚
) :
IsSubgroup: {G : Type ?u.10446} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
(
s₁: Set G
s₁
∩
sβ‚‚: Set G
sβ‚‚
) := {
IsSubmonoid.inter: βˆ€ {M : Type ?u.10495} [inst : Monoid M] {s₁ sβ‚‚ : Set M}, IsSubmonoid s₁ β†’ IsSubmonoid sβ‚‚ β†’ IsSubmonoid (s₁ ∩ sβ‚‚)
IsSubmonoid.inter
hs₁: IsSubgroup s₁
hs₁
.
toIsSubmonoid: βˆ€ {G : Type ?u.10527} [inst : Group G] {s : Set G}, IsSubgroup s β†’ IsSubmonoid s
toIsSubmonoid
hsβ‚‚: IsSubgroup sβ‚‚
hsβ‚‚
.
toIsSubmonoid: βˆ€ {G : Type ?u.10549} [inst : Group G] {s : Set G}, IsSubgroup s β†’ IsSubmonoid s
toIsSubmonoid
with inv_mem := fun
hx: ?m.10875
hx
=> ⟨
hs₁: IsSubgroup s₁
hs₁
.
inv_mem: βˆ€ {G : Type ?u.10885} [inst : Group G] {s : Set G}, IsSubgroup s β†’ βˆ€ {a : G}, a ∈ s β†’ a⁻¹ ∈ s
inv_mem
hx: ?m.10875
hx
.
1: βˆ€ {a b : Prop}, a ∧ b β†’ a
1
,
hsβ‚‚: IsSubgroup sβ‚‚
hsβ‚‚
.
inv_mem: βˆ€ {G : Type ?u.10895} [inst : Group G] {s : Set G}, IsSubgroup s β†’ βˆ€ {a : G}, a ∈ s β†’ a⁻¹ ∈ s
inv_mem
hx: ?m.10875
hx
.
2: βˆ€ {a b : Prop}, a ∧ b β†’ b
2
⟩ } #align is_subgroup.inter
IsSubgroup.inter: βˆ€ {G : Type u_1} [inst : Group G] {s₁ sβ‚‚ : Set G}, IsSubgroup s₁ β†’ IsSubgroup sβ‚‚ β†’ IsSubgroup (s₁ ∩ sβ‚‚)
IsSubgroup.inter
#align is_add_subgroup.inter
IsAddSubgroup.inter: βˆ€ {G : Type u_1} [inst : AddGroup G] {s₁ sβ‚‚ : Set G}, IsAddSubgroup s₁ β†’ IsAddSubgroup sβ‚‚ β†’ IsAddSubgroup (s₁ ∩ sβ‚‚)
IsAddSubgroup.inter
@[
to_additive: βˆ€ {G : Type u_2} [inst : AddGroup G] {ΞΉ : Sort u_1} {s : ΞΉ β†’ Set G}, (βˆ€ (y : ΞΉ), IsAddSubgroup (s y)) β†’ IsAddSubgroup (Set.iInter s)
to_additive
] theorem
IsSubgroup.iInter: βˆ€ {G : Type u_2} [inst : Group G] {ΞΉ : Sort u_1} {s : ΞΉ β†’ Set G}, (βˆ€ (y : ΞΉ), IsSubgroup (s y)) β†’ IsSubgroup (Set.iInter s)
IsSubgroup.iInter
{
ΞΉ: Sort u_1
ΞΉ
:
Sort _: Type ?u.10978
Sort
Sort _: Type ?u.10978
_
} {
s: ΞΉ β†’ Set G
s
:
ΞΉ: Sort ?u.10978
ΞΉ
β†’
Set: Type ?u.10983 β†’ Type ?u.10983
Set
G: Type ?u.10953
G
} (
hs: βˆ€ (y : ΞΉ), IsSubgroup (s y)
hs
: βˆ€
y: ΞΉ
y
:
ΞΉ: Sort ?u.10978
ΞΉ
,
IsSubgroup: {G : Type ?u.10990} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
(
s: ΞΉ β†’ Set G
s
y: ΞΉ
y
)) :
IsSubgroup: {G : Type ?u.11022} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
(
Set.iInter: {Ξ² : Type ?u.11045} β†’ {ΞΉ : Sort ?u.11044} β†’ (ΞΉ β†’ Set Ξ²) β†’ Set Ξ²
Set.iInter
s: ΞΉ β†’ Set G
s
) := {
IsSubmonoid.iInter: βˆ€ {M : Type ?u.11064} [inst : Monoid M] {ΞΉ : Sort ?u.11063} {s : ΞΉ β†’ Set M}, (βˆ€ (y : ΞΉ), IsSubmonoid (s y)) β†’ IsSubmonoid (Set.iInter s)
IsSubmonoid.iInter
fun
y: ?m.11097
y
=> (
hs: βˆ€ (y : ΞΉ), IsSubgroup (s y)
hs
y: ?m.11097
y
).
toIsSubmonoid: βˆ€ {G : Type ?u.11099} [inst : Group G] {s : Set G}, IsSubgroup s β†’ IsSubmonoid s
toIsSubmonoid
with inv_mem := fun
h: ?m.11461
h
=>
Set.mem_iInter: βˆ€ {Ξ± : Type ?u.11463} {ΞΉ : Sort ?u.11464} {x : Ξ±} {s : ΞΉ β†’ Set Ξ±}, (x ∈ Set.iInter fun i => s i) ↔ βˆ€ (i : ΞΉ), x ∈ s i
Set.mem_iInter
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
fun
y: ?m.11481
y
=>
IsSubgroup.inv_mem: βˆ€ {G : Type ?u.11483} [inst : Group G] {s : Set G}, IsSubgroup s β†’ βˆ€ {a : G}, a ∈ s β†’ a⁻¹ ∈ s
IsSubgroup.inv_mem
(
hs: βˆ€ (y : ΞΉ), IsSubgroup (s y)
hs
_: ΞΉ
_
) (
Set.mem_iInter: βˆ€ {Ξ± : Type ?u.11497} {ΞΉ : Sort ?u.11498} {x : Ξ±} {s : ΞΉ β†’ Set Ξ±}, (x ∈ Set.iInter fun i => s i) ↔ βˆ€ (i : ΞΉ), x ∈ s i
Set.mem_iInter
.
1: βˆ€ {a b : Prop}, (a ↔ b) β†’ a β†’ b
1
h: ?m.11461
h
y: ?m.11481
y
) } #align is_subgroup.Inter
IsSubgroup.iInter: βˆ€ {G : Type u_2} [inst : Group G] {ΞΉ : Sort u_1} {s : ΞΉ β†’ Set G}, (βˆ€ (y : ΞΉ), IsSubgroup (s y)) β†’ IsSubgroup (iInter s)
IsSubgroup.iInter
#align is_add_subgroup.Inter
IsAddSubgroup.iInter: βˆ€ {G : Type u_2} [inst : AddGroup G] {ΞΉ : Sort u_1} {s : ΞΉ β†’ Set G}, (βˆ€ (y : ΞΉ), IsAddSubgroup (s y)) β†’ IsAddSubgroup (iInter s)
IsAddSubgroup.iInter
@[
to_additive: βˆ€ {G : Type u_2} [inst : AddGroup G] {ΞΉ : Type u_1} [inst_1 : Nonempty ΞΉ] {s : ΞΉ β†’ Set G}, (βˆ€ (i : ΞΉ), IsAddSubgroup (s i)) β†’ (βˆ€ (i j : ΞΉ), βˆƒ k, s i βŠ† s k ∧ s j βŠ† s k) β†’ IsAddSubgroup (iUnion fun i => s i)
to_additive
] theorem
isSubgroup_iUnion_of_directed: βˆ€ {G : Type u_2} [inst : Group G] {ΞΉ : Type u_1} [inst_1 : Nonempty ΞΉ] {s : ΞΉ β†’ Set G}, (βˆ€ (i : ΞΉ), IsSubgroup (s i)) β†’ (βˆ€ (i j : ΞΉ), βˆƒ k, s i βŠ† s k ∧ s j βŠ† s k) β†’ IsSubgroup (iUnion fun i => s i)
isSubgroup_iUnion_of_directed
{
ΞΉ: Type u_1
ΞΉ
:
Type _: Type (?u.11620+1)
Type _
} [
Nonempty: Sort ?u.11623 β†’ Prop
Nonempty
ΞΉ: Type ?u.11620
ΞΉ
] {
s: ΞΉ β†’ Set G
s
:
ΞΉ: Type ?u.11620
ΞΉ
β†’
Set: Type ?u.11628 β†’ Type ?u.11628
Set
G: Type ?u.11595
G
} (
hs: βˆ€ (i : ΞΉ), IsSubgroup (s i)
hs
: βˆ€
i: ?m.11633
i
,
IsSubgroup: {G : Type ?u.11636} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
(
s: ΞΉ β†’ Set G
s
i: ?m.11633
i
)) (
directed: βˆ€ (i j : ΞΉ), βˆƒ k, s i βŠ† s k ∧ s j βŠ† s k
directed
: βˆ€
i: ?m.11669
i
j: ?m.11672
j
, βˆƒ
k: ?m.11678
k
,
s: ΞΉ β†’ Set G
s
i: ?m.11669
i
βŠ†
s: ΞΉ β†’ Set G
s
k: ?m.11678
k
∧
s: ΞΉ β†’ Set G
s
j: ?m.11672
j
βŠ†
s: ΞΉ β†’ Set G
s
k: ?m.11678
k
) :
IsSubgroup: {G : Type ?u.11704} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
(⋃
i: ?m.11733
i
,
s: ΞΉ β†’ Set G
s
i: ?m.11733
i
) := { inv_mem := fun
ha: ?m.12164
ha
=> let ⟨
i: ΞΉ
i
,
hi: a✝ ∈ s i
hi
⟩ :=
Set.mem_iUnion: βˆ€ {Ξ± : Type ?u.12166} {ΞΉ : Sort ?u.12167} {x : Ξ±} {s : ΞΉ β†’ Set Ξ±}, (x ∈ iUnion fun i => s i) ↔ βˆƒ i, x ∈ s i
Set.mem_iUnion
.
1: βˆ€ {a b : Prop}, (a ↔ b) β†’ a β†’ b
1
ha: ?m.12164
ha
Set.mem_iUnion: βˆ€ {Ξ± : Type ?u.12219} {ΞΉ : Sort ?u.12220} {x : Ξ±} {s : ΞΉ β†’ Set Ξ±}, (x ∈ iUnion fun i => s i) ↔ βˆƒ i, x ∈ s i
Set.mem_iUnion
.
2: βˆ€ {a b : Prop}, (a ↔ b) β†’ b β†’ a
2
⟨
i: ΞΉ
i
, (
hs: βˆ€ (i : ΞΉ), IsSubgroup (s i)
hs
i: ΞΉ
i
).
inv_mem: βˆ€ {G : Type ?u.12243} [inst : Group G] {s : Set G}, IsSubgroup s β†’ βˆ€ {a : G}, a ∈ s β†’ a⁻¹ ∈ s
inv_mem
hi: a✝ ∈ s i
hi
⟩ toIsSubmonoid :=
isSubmonoid_iUnion_of_directed: βˆ€ {M : Type ?u.11762} [inst : Monoid M] {ΞΉ : Type ?u.11761} [hΞΉ : Nonempty ΞΉ] {s : ΞΉ β†’ Set M}, (βˆ€ (i : ΞΉ), IsSubmonoid (s i)) β†’ (βˆ€ (i j : ΞΉ), βˆƒ k, s i βŠ† s k ∧ s j βŠ† s k) β†’ IsSubmonoid (iUnion fun i => s i)
isSubmonoid_iUnion_of_directed
(fun
i: ?m.11851
i
=> (
hs: βˆ€ (i : ΞΉ), IsSubgroup (s i)
hs
i: ?m.11851
i
).
toIsSubmonoid: βˆ€ {G : Type ?u.11853} [inst : Group G] {s : Set G}, IsSubgroup s β†’ IsSubmonoid s
toIsSubmonoid
)
directed: βˆ€ (i j : ΞΉ), βˆƒ k, s i βŠ† s k ∧ s j βŠ† s k
directed
} #align is_subgroup_Union_of_directed
isSubgroup_iUnion_of_directed: βˆ€ {G : Type u_2} [inst : Group G] {ΞΉ : Type u_1} [inst_1 : Nonempty ΞΉ] {s : ΞΉ β†’ Set G}, (βˆ€ (i : ΞΉ), IsSubgroup (s i)) β†’ (βˆ€ (i j : ΞΉ), βˆƒ k, s i βŠ† s k ∧ s j βŠ† s k) β†’ IsSubgroup (iUnion fun i => s i)
isSubgroup_iUnion_of_directed
#align is_add_subgroup_Union_of_directed
isAddSubgroup_iUnion_of_directed: βˆ€ {G : Type u_2} [inst : AddGroup G] {ΞΉ : Type u_1} [inst_1 : Nonempty ΞΉ] {s : ΞΉ β†’ Set G}, (βˆ€ (i : ΞΉ), IsAddSubgroup (s i)) β†’ (βˆ€ (i j : ΞΉ), βˆƒ k, s i βŠ† s k ∧ s j βŠ† s k) β†’ IsAddSubgroup (iUnion fun i => s i)
isAddSubgroup_iUnion_of_directed
end Group namespace IsSubgroup open IsSubmonoid variable [
Group: Type ?u.13019 β†’ Type ?u.13019
Group
G: Type ?u.12512
G
] {
s: Set G
s
:
Set: Type ?u.12478 β†’ Type ?u.12478
Set
G: Type ?u.12512
G
} (hs :
IsSubgroup: {G : Type ?u.12537} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
s: Set G
s
) @[
to_additive: βˆ€ {G : Type u_1} {a : G} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ (-a ∈ s ↔ a ∈ s)
to_additive
] theorem
inv_mem_iff: βˆ€ {G : Type u_1} {a : G} [inst : Group G] {s : Set G}, IsSubgroup s β†’ (a⁻¹ ∈ s ↔ a ∈ s)
inv_mem_iff
:
a: G
a
⁻¹ ∈
s: Set G
s
↔
a: G
a
∈
s: Set G
s
:= ⟨fun
h: ?m.12765
h
=>

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.12515

A: Type ?u.12518

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

hs: IsSubgroup s

h: a⁻¹ ∈ s


a ∈ s

Goals accomplished! πŸ™
,
inv_mem: βˆ€ {G : Type ?u.12771} [inst : Group G] {s : Set G}, IsSubgroup s β†’ βˆ€ {a : G}, a ∈ s β†’ a⁻¹ ∈ s
inv_mem
hs⟩ #align is_subgroup.inv_mem_iff
IsSubgroup.inv_mem_iff: βˆ€ {G : Type u_1} {a : G} [inst : Group G] {s : Set G}, IsSubgroup s β†’ (a⁻¹ ∈ s ↔ a ∈ s)
IsSubgroup.inv_mem_iff
#align is_add_subgroup.neg_mem_iff
IsAddSubgroup.neg_mem_iff: βˆ€ {G : Type u_1} {a : G} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ (-a ∈ s ↔ a ∈ s)
IsAddSubgroup.neg_mem_iff
@[
to_additive: βˆ€ {G : Type u_1} {a b : G} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ a ∈ s β†’ (b + a ∈ s ↔ b ∈ s)
to_additive
] theorem
mul_mem_cancel_right: a ∈ s β†’ (b * a ∈ s ↔ b ∈ s)
mul_mem_cancel_right
(
h: a ∈ s
h
:
a: G
a
∈
s: Set G
s
) :
b: G
b
*
a: G
a
∈
s: Set G
s
↔
b: G
b
∈
s: Set G
s
:= ⟨fun
hba: ?m.13872
hba
=>

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.13003

A: Type ?u.13006

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

hs: IsSubgroup s

h: a ∈ s

hba: b * a ∈ s


b ∈ s

Goals accomplished! πŸ™
, fun
hb: ?m.13879
hb
=> hs.
mul_mem: βˆ€ {M : Type ?u.13894} [inst : Monoid M] {s : Set M}, IsSubmonoid s β†’ βˆ€ {a b : M}, a ∈ s β†’ b ∈ s β†’ a * b ∈ s
mul_mem
hb: ?m.13879
hb
h: a ∈ s
h
⟩ #align is_subgroup.mul_mem_cancel_right
IsSubgroup.mul_mem_cancel_right: βˆ€ {G : Type u_1} {a b : G} [inst : Group G] {s : Set G}, IsSubgroup s β†’ a ∈ s β†’ (b * a ∈ s ↔ b ∈ s)
IsSubgroup.mul_mem_cancel_right
#align is_add_subgroup.add_mem_cancel_right
IsAddSubgroup.add_mem_cancel_right: βˆ€ {G : Type u_1} {a b : G} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ a ∈ s β†’ (b + a ∈ s ↔ b ∈ s)
IsAddSubgroup.add_mem_cancel_right
@[
to_additive: βˆ€ {G : Type u_1} {a b : G} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ a ∈ s β†’ (a + b ∈ s ↔ b ∈ s)
to_additive
] theorem
mul_mem_cancel_left: a ∈ s β†’ (a * b ∈ s ↔ b ∈ s)
mul_mem_cancel_left
(
h: a ∈ s
h
:
a: G
a
∈
s: Set G
s
) :
a: G
a
*
b: G
b
∈
s: Set G
s
↔
b: G
b
∈
s: Set G
s
:= ⟨fun
hab: ?m.15379
hab
=>

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.14510

A: Type ?u.14513

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

hs: IsSubgroup s

h: a ∈ s

hab: a * b ∈ s


b ∈ s

Goals accomplished! πŸ™
, hs.
mul_mem: βˆ€ {M : Type ?u.15398} [inst : Monoid M] {s : Set M}, IsSubmonoid s β†’ βˆ€ {a b : M}, a ∈ s β†’ b ∈ s β†’ a * b ∈ s
mul_mem
h: a ∈ s
h
⟩ #align is_subgroup.mul_mem_cancel_left
IsSubgroup.mul_mem_cancel_left: βˆ€ {G : Type u_1} {a b : G} [inst : Group G] {s : Set G}, IsSubgroup s β†’ a ∈ s β†’ (a * b ∈ s ↔ b ∈ s)
IsSubgroup.mul_mem_cancel_left
#align is_add_subgroup.add_mem_cancel_left
IsAddSubgroup.add_mem_cancel_left: βˆ€ {G : Type u_1} {a b : G} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ a ∈ s β†’ (a + b ∈ s ↔ b ∈ s)
IsAddSubgroup.add_mem_cancel_left
end IsSubgroup /-- `IsNormalAddSubgroup (s : Set A)` expresses the fact that `s` is a normal additive subgroup of the additive group `A`. Important: the preferred way to say this in Lean is via bundled subgroups `S : AddSubgroup A` and `hs : S.normal`, and not via this structure. -/ structure
IsNormalAddSubgroup: {A : Type u_1} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsNormalAddSubgroup
[
AddGroup: Type ?u.16114 β†’ Type ?u.16114
AddGroup
A: Type ?u.16101
A
] (
s: Set A
s
:
Set: Type ?u.16117 β†’ Type ?u.16117
Set
A: Type ?u.16101
A
) extends
IsAddSubgroup: {A : Type ?u.16121} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsAddSubgroup
s: Set A
s
:
Prop: Type
Prop
where /-- The proposition that `s` is closed under (additive) conjugation. -/
normal: βˆ€ {A : Type u_1} [inst : AddGroup A] {s : Set A}, IsNormalAddSubgroup s β†’ βˆ€ (n : A), n ∈ s β†’ βˆ€ (g : A), g + n + -g ∈ s
normal
: βˆ€
n: ?m.16162
n
∈
s: Set A
s
, βˆ€
g: A
g
:
A: Type ?u.16101
A
,
g: A
g
+
n: ?m.16162
n
+ -
g: A
g
∈
s: Set A
s
#align is_normal_add_subgroup
IsNormalAddSubgroup: {A : Type u_1} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsNormalAddSubgroup
/-- `IsNormalSubgroup (s : Set G)` expresses the fact that `s` is a normal subgroup of the group `G`. Important: the preferred way to say this in Lean is via bundled subgroups `S : Subgroup G` and not via this structure. -/ @[
to_additive: {A : Type u_1} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
to_additive
] structure
IsNormalSubgroup: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsSubgroup s β†’ (βˆ€ (n : G), n ∈ s β†’ βˆ€ (g : G), g * n * g⁻¹ ∈ s) β†’ IsNormalSubgroup s
IsNormalSubgroup
[
Group: Type ?u.17311 β†’ Type ?u.17311
Group
G: Type ?u.17292
G
] (
s: Set G
s
:
Set: Type ?u.17314 β†’ Type ?u.17314
Set
G: Type ?u.17292
G
) extends
IsSubgroup: {G : Type ?u.17318} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
s: Set G
s
:
Prop: Type
Prop
where /-- The proposition that `s` is closed under conjugation. -/
normal: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ βˆ€ (n : G), n ∈ s β†’ βˆ€ (g : G), g * n * g⁻¹ ∈ s
normal
: βˆ€
n: ?m.17360
n
∈
s: Set G
s
, βˆ€
g: G
g
:
G: Type ?u.17292
G
,
g: G
g
*
n: ?m.17360
n
*
g: G
g
⁻¹ ∈
s: Set G
s
#align is_normal_subgroup
IsNormalSubgroup: {G : Type u_1} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
@[
to_additive: βˆ€ {G : Type u_1} [inst : AddCommGroup G] {s : Set G}, IsAddSubgroup s β†’ IsNormalAddSubgroup s
to_additive
] theorem
isNormalSubgroup_of_commGroup: βˆ€ [inst : CommGroup G] {s : Set G}, IsSubgroup s β†’ IsNormalSubgroup s
isNormalSubgroup_of_commGroup
[
CommGroup: Type ?u.18689 β†’ Type ?u.18689
CommGroup
G: Type ?u.18670
G
] {
s: Set G
s
:
Set: Type ?u.18692 β†’ Type ?u.18692
Set
G: Type ?u.18670
G
} (hs :
IsSubgroup: {G : Type ?u.18695} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
s: Set G
s
) :
IsNormalSubgroup: {G : Type ?u.18736} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
s: Set G
s
:= { hs with normal := fun
n: ?m.18820
n
hn: ?m.18823
hn
g: ?m.18826
g
=>

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.18673

A: Type ?u.18676

a, a₁, aβ‚‚, b, c: G

inst✝: CommGroup G

s: Set G

hs: IsSubgroup s

n: G

hn: n ∈ s

g: G


G: Type u_1

H: Type ?u.18673

A: Type ?u.18676

a, a₁, aβ‚‚, b, c: G

inst✝: CommGroup G

s: Set G

hs: IsSubgroup s

n: G

hn: n ∈ s

g: G


G: Type u_1

H: Type ?u.18673

A: Type ?u.18676

a, a₁, aβ‚‚, b, c: G

inst✝: CommGroup G

s: Set G

hs: IsSubgroup s

n: G

hn: n ∈ s

g: G


G: Type u_1

H: Type ?u.18673

A: Type ?u.18676

a, a₁, aβ‚‚, b, c: G

inst✝: CommGroup G

s: Set G

hs: IsSubgroup s

n: G

hn: n ∈ s

g: G


G: Type u_1

H: Type ?u.18673

A: Type ?u.18676

a, a₁, aβ‚‚, b, c: G

inst✝: CommGroup G

s: Set G

hs: IsSubgroup s

n: G

hn: n ∈ s

g: G


1 * n ∈ s
G: Type u_1

H: Type ?u.18673

A: Type ?u.18676

a, a₁, aβ‚‚, b, c: G

inst✝: CommGroup G

s: Set G

hs: IsSubgroup s

n: G

hn: n ∈ s

g: G


G: Type u_1

H: Type ?u.18673

A: Type ?u.18676

a, a₁, aβ‚‚, b, c: G

inst✝: CommGroup G

s: Set G

hs: IsSubgroup s

n: G

hn: n ∈ s

g: G


n ∈ s
G: Type u_1

H: Type ?u.18673

A: Type ?u.18676

a, a₁, aβ‚‚, b, c: G

inst✝: CommGroup G

s: Set G

hs: IsSubgroup s

n: G

hn: n ∈ s

g: G


n ∈ s
} #align is_normal_subgroup_of_comm_group
isNormalSubgroup_of_commGroup: βˆ€ {G : Type u_1} [inst : CommGroup G] {s : Set G}, IsSubgroup s β†’ IsNormalSubgroup s
isNormalSubgroup_of_commGroup
#align is_normal_add_subgroup_of_add_comm_group
isNormalAddSubgroup_of_addCommGroup: βˆ€ {G : Type u_1} [inst : AddCommGroup G] {s : Set G}, IsAddSubgroup s β†’ IsNormalAddSubgroup s
isNormalAddSubgroup_of_addCommGroup
theorem
Additive.isNormalAddSubgroup: βˆ€ [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ IsNormalAddSubgroup s
Additive.isNormalAddSubgroup
[
Group: Type ?u.19582 β†’ Type ?u.19582
Group
G: Type ?u.19563
G
] {
s: Set G
s
:
Set: Type ?u.19585 β†’ Type ?u.19585
Set
G: Type ?u.19563
G
} (hs :
IsNormalSubgroup: {G : Type ?u.19588} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
s: Set G
s
) : @
IsNormalAddSubgroup: {A : Type ?u.19619} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsNormalAddSubgroup
(
Additive: Type ?u.19620 β†’ Type ?u.19620
Additive
G: Type ?u.19563
G
) _
s: Set G
s
:= @
IsNormalAddSubgroup.mk: βˆ€ {A : Type ?u.19638} [inst : AddGroup A] {s : Set A}, IsAddSubgroup s β†’ (βˆ€ (n : A), n ∈ s β†’ βˆ€ (g : A), g + n + -g ∈ s) β†’ IsNormalAddSubgroup s
IsNormalAddSubgroup.mk
(
Additive: Type ?u.19639 β†’ Type ?u.19639
Additive
G: Type ?u.19563
G
) _
_: Set (Additive G)
_
(
Additive.isAddSubgroup: βˆ€ {G : Type ?u.19659} [inst : Group G] {s : Set G}, IsSubgroup s β†’ IsAddSubgroup s
Additive.isAddSubgroup
hs.
toIsSubgroup: βˆ€ {G : Type ?u.19690} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ IsSubgroup s
toIsSubgroup
) (@
IsNormalSubgroup.normal: βˆ€ {G : Type ?u.19704} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ βˆ€ (n : G), n ∈ s β†’ βˆ€ (g : G), g * n * g⁻¹ ∈ s
IsNormalSubgroup.normal
_: Type ?u.19704
_
β€ΉGroup (Additive G)β€Ί
_: Set ?m.19705
_
hs) -- porting note: Lean needs help synthesising #align additive.is_normal_add_subgroup
Additive.isNormalAddSubgroup: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ IsNormalAddSubgroup s
Additive.isNormalAddSubgroup
theorem
Additive.isNormalAddSubgroup_iff: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsNormalAddSubgroup s ↔ IsNormalSubgroup s
Additive.isNormalAddSubgroup_iff
[
Group: Type ?u.20798 β†’ Type ?u.20798
Group
G: Type ?u.20779
G
] {
s: Set G
s
:
Set: Type ?u.20801 β†’ Type ?u.20801
Set
G: Type ?u.20779
G
} : @
IsNormalAddSubgroup: {A : Type ?u.20804} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsNormalAddSubgroup
(
Additive: Type ?u.20805 β†’ Type ?u.20805
Additive
G: Type ?u.20779
G
) _
s: Set G
s
↔
IsNormalSubgroup: {G : Type ?u.20822} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
s: Set G
s
:= ⟨

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.20782

A: Type ?u.20785

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G


G: Type u_1

H: Type ?u.20782

A: Type ?u.20785

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

h₁: IsAddSubgroup s

hβ‚‚: βˆ€ (n : Additive G), n ∈ s β†’ βˆ€ (g : Additive G), g + n + -g ∈ s


mk
G: Type u_1

H: Type ?u.20782

A: Type ?u.20785

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

h₁: IsAddSubgroup s

hβ‚‚: βˆ€ (n : Additive G), n ∈ s β†’ βˆ€ (g : Additive G), g + n + -g ∈ s


mk
G: Type u_1

H: Type ?u.20782

A: Type ?u.20785

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G



Goals accomplished! πŸ™
, fun
h: ?m.20842
h
=>
Additive.isNormalAddSubgroup: βˆ€ {G : Type ?u.20844} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ IsNormalAddSubgroup s
Additive.isNormalAddSubgroup
h: ?m.20842
h
⟩ #align additive.is_normal_add_subgroup_iff
Additive.isNormalAddSubgroup_iff: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsNormalAddSubgroup s ↔ IsNormalSubgroup s
Additive.isNormalAddSubgroup_iff
theorem
Multiplicative.isNormalSubgroup: βˆ€ [inst : AddGroup A] {s : Set A}, IsNormalAddSubgroup s β†’ IsNormalSubgroup s
Multiplicative.isNormalSubgroup
[
AddGroup: Type ?u.21006 β†’ Type ?u.21006
AddGroup
A: Type ?u.20993
A
] {
s: Set A
s
:
Set: Type ?u.21009 β†’ Type ?u.21009
Set
A: Type ?u.20993
A
} (hs :
IsNormalAddSubgroup: {A : Type ?u.21012} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsNormalAddSubgroup
s: Set A
s
) : @
IsNormalSubgroup: {G : Type ?u.21042} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
(
Multiplicative: Type ?u.21043 β†’ Type ?u.21043
Multiplicative
A: Type ?u.20993
A
) _
s: Set A
s
:= @
IsNormalSubgroup.mk: βˆ€ {G : Type ?u.21061} [inst : Group G] {s : Set G}, IsSubgroup s β†’ (βˆ€ (n : G), n ∈ s β†’ βˆ€ (g : G), g * n * g⁻¹ ∈ s) β†’ IsNormalSubgroup s
IsNormalSubgroup.mk
(
Multiplicative: Type ?u.21062 β†’ Type ?u.21062
Multiplicative
A: Type ?u.20993
A
) _ _ (
Multiplicative.isSubgroup: βˆ€ {A : Type ?u.21082} [inst : AddGroup A] {s : Set A}, IsAddSubgroup s β†’ IsSubgroup s
Multiplicative.isSubgroup
hs.
toIsAddSubgroup: βˆ€ {A : Type ?u.21111} [inst : AddGroup A] {s : Set A}, IsNormalAddSubgroup s β†’ IsAddSubgroup s
toIsAddSubgroup
) (@
IsNormalAddSubgroup.normal: βˆ€ {A : Type ?u.21126} [inst : AddGroup A] {s : Set A}, IsNormalAddSubgroup s β†’ βˆ€ (n : A), n ∈ s β†’ βˆ€ (g : A), g + n + -g ∈ s
IsNormalAddSubgroup.normal
_: Type ?u.21126
_
β€ΉAddGroup (Multiplicative A)β€Ί
_: Set ?m.21127
_
hs) #align multiplicative.is_normal_subgroup
Multiplicative.isNormalSubgroup: βˆ€ {A : Type u_1} [inst : AddGroup A] {s : Set A}, IsNormalAddSubgroup s β†’ IsNormalSubgroup s
Multiplicative.isNormalSubgroup
theorem
Multiplicative.isNormalSubgroup_iff: βˆ€ [inst : AddGroup A] {s : Set A}, IsNormalSubgroup s ↔ IsNormalAddSubgroup s
Multiplicative.isNormalSubgroup_iff
[
AddGroup: Type ?u.22220 β†’ Type ?u.22220
AddGroup
A: Type ?u.22207
A
] {
s: Set A
s
:
Set: Type ?u.22223 β†’ Type ?u.22223
Set
A: Type ?u.22207
A
} : @
IsNormalSubgroup: {G : Type ?u.22226} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
(
Multiplicative: Type ?u.22227 β†’ Type ?u.22227
Multiplicative
A: Type ?u.22207
A
) _
s: Set A
s
↔
IsNormalAddSubgroup: {A : Type ?u.22244} β†’ [inst : AddGroup A] β†’ Set A β†’ Prop
IsNormalAddSubgroup
s: Set A
s
:= ⟨

Goals accomplished! πŸ™
G: Type ?u.22201

H: Type ?u.22204

A: Type u_1

a, a₁, aβ‚‚, b, c: G

inst✝: AddGroup A

s: Set A


G: Type ?u.22201

H: Type ?u.22204

A: Type u_1

a, a₁, aβ‚‚, b, c: G

inst✝: AddGroup A

s: Set A

h₁: IsSubgroup s

hβ‚‚: βˆ€ (n : Multiplicative A), n ∈ s β†’ βˆ€ (g : Multiplicative A), g * n * g⁻¹ ∈ s


mk
G: Type ?u.22201

H: Type ?u.22204

A: Type u_1

a, a₁, aβ‚‚, b, c: G

inst✝: AddGroup A

s: Set A

h₁: IsSubgroup s

hβ‚‚: βˆ€ (n : Multiplicative A), n ∈ s β†’ βˆ€ (g : Multiplicative A), g * n * g⁻¹ ∈ s


mk
G: Type ?u.22201

H: Type ?u.22204

A: Type u_1

a, a₁, aβ‚‚, b, c: G

inst✝: AddGroup A

s: Set A



Goals accomplished! πŸ™
, fun
h: ?m.22265
h
=>
Multiplicative.isNormalSubgroup: βˆ€ {A : Type ?u.22267} [inst : AddGroup A] {s : Set A}, IsNormalAddSubgroup s β†’ IsNormalSubgroup s
Multiplicative.isNormalSubgroup
h: ?m.22265
h
⟩ #align multiplicative.is_normal_subgroup_iff
Multiplicative.isNormalSubgroup_iff: βˆ€ {A : Type u_1} [inst : AddGroup A] {s : Set A}, IsNormalSubgroup s ↔ IsNormalAddSubgroup s
Multiplicative.isNormalSubgroup_iff
namespace IsSubgroup variable [
Group: Type ?u.27820 β†’ Type ?u.27820
Group
G: Type ?u.22407
G
] -- Normal subgroup properties @[
to_additive: βˆ€ {G : Type u_1} [inst : AddGroup G] {s : Set G}, IsNormalAddSubgroup s β†’ βˆ€ {a b : G}, a + b ∈ s β†’ b + a ∈ s
to_additive
] theorem
mem_norm_comm: βˆ€ {s : Set G}, IsNormalSubgroup s β†’ βˆ€ {a b : G}, a * b ∈ s β†’ b * a ∈ s
mem_norm_comm
{
s: Set G
s
:
Set: Type ?u.22451 β†’ Type ?u.22451
Set
G: Type ?u.22429
G
} (hs :
IsNormalSubgroup: {G : Type ?u.22454} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
s: Set G
s
) {
a: G
a
b: G
b
:
G: Type ?u.22429
G
} (
hab: a * b ∈ s
hab
:
a: G
a
*
b: G
b
∈
s: Set G
s
) :
b: G
b
*
a: G
a
∈
s: Set G
s
:=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.22432

A: Type ?u.22435

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

hs: IsNormalSubgroup s

a, b: G

hab: a * b ∈ s


b * a ∈ s
G: Type u_1

H: Type ?u.22432

A: Type ?u.22435

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

hs: IsNormalSubgroup s

a, b: G

hab: a * b ∈ s

h: a⁻¹ * (a * b) * a⁻¹⁻¹ ∈ s


b * a ∈ s
G: Type u_1

H: Type ?u.22432

A: Type ?u.22435

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

hs: IsNormalSubgroup s

a, b: G

hab: a * b ∈ s


b * a ∈ s
G: Type u_1

H: Type ?u.22432

A: Type ?u.22435

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

hs: IsNormalSubgroup s

a, b: G

hab: a * b ∈ s

h: b * a ∈ s


b * a ∈ s
G: Type u_1

H: Type ?u.22432

A: Type ?u.22435

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

hs: IsNormalSubgroup s

a, b: G

hab: a * b ∈ s

h: b * a ∈ s


b * a ∈ s
G: Type u_1

H: Type ?u.22432

A: Type ?u.22435

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

hs: IsNormalSubgroup s

a, b: G

hab: a * b ∈ s


b * a ∈ s

Goals accomplished! πŸ™
#align is_subgroup.mem_norm_comm
IsSubgroup.mem_norm_comm: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ βˆ€ {a b : G}, a * b ∈ s β†’ b * a ∈ s
IsSubgroup.mem_norm_comm
#align is_add_subgroup.mem_norm_comm
IsAddSubgroup.mem_norm_comm: βˆ€ {G : Type u_1} [inst : AddGroup G] {s : Set G}, IsNormalAddSubgroup s β†’ βˆ€ {a b : G}, a + b ∈ s β†’ b + a ∈ s
IsAddSubgroup.mem_norm_comm
@[
to_additive: βˆ€ {G : Type u_1} [inst : AddGroup G] {s : Set G}, IsNormalAddSubgroup s β†’ βˆ€ {a b : G}, a + b ∈ s ↔ b + a ∈ s
to_additive
] theorem
mem_norm_comm_iff: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ βˆ€ {a b : G}, a * b ∈ s ↔ b * a ∈ s
mem_norm_comm_iff
{
s: Set G
s
:
Set: Type ?u.26125 β†’ Type ?u.26125
Set
G: Type ?u.26103
G
} (hs :
IsNormalSubgroup: {G : Type ?u.26128} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
s: Set G
s
) {
a: G
a
b: G
b
:
G: Type ?u.26103
G
} :
a: G
a
*
b: G
b
∈
s: Set G
s
↔
b: G
b
*
a: G
a
∈
s: Set G
s
:= ⟨
mem_norm_comm: βˆ€ {G : Type ?u.27295} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ βˆ€ {a b : G}, a * b ∈ s β†’ b * a ∈ s
mem_norm_comm
hs,
mem_norm_comm: βˆ€ {G : Type ?u.27328} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ βˆ€ {a b : G}, a * b ∈ s β†’ b * a ∈ s
mem_norm_comm
hs⟩ #align is_subgroup.mem_norm_comm_iff
IsSubgroup.mem_norm_comm_iff: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsNormalSubgroup s β†’ βˆ€ {a b : G}, a * b ∈ s ↔ b * a ∈ s
IsSubgroup.mem_norm_comm_iff
#align is_add_subgroup.mem_norm_comm_iff
IsAddSubgroup.mem_norm_comm_iff: βˆ€ {G : Type u_1} [inst : AddGroup G] {s : Set G}, IsNormalAddSubgroup s β†’ βˆ€ {a b : G}, a + b ∈ s ↔ b + a ∈ s
IsAddSubgroup.mem_norm_comm_iff
/-- The trivial subgroup -/ @[
to_additive: (G : Type u_1) β†’ [inst : AddGroup G] β†’ Set G
to_additive
"the trivial additive subgroup"] def
trivial: (G : Type ?u.27395) β†’ [inst : Group G] β†’ Set G
trivial
(
G: Type ?u.27395
G
:
Type _: Type (?u.27395+1)
Type _
) [
Group: Type ?u.27398 β†’ Type ?u.27398
Group
G: Type ?u.27395
G
] :
Set: Type ?u.27401 β†’ Type ?u.27401
Set
G: Type ?u.27395
G
:= {
1: ?m.27423
1
} #align is_subgroup.trivial
IsSubgroup.trivial: (G : Type u_1) β†’ [inst : Group G] β†’ Set G
IsSubgroup.trivial
#align is_add_subgroup.trivial
IsAddSubgroup.trivial: (G : Type u_1) β†’ [inst : AddGroup G] β†’ Set G
IsAddSubgroup.trivial
@[
to_additive: βˆ€ {G : Type u_1} [inst : AddGroup G] {g : G}, g ∈ IsAddSubgroup.trivial G ↔ g = 0
to_additive
(attr := simp)] theorem
mem_trivial: βˆ€ {g : G}, g ∈ trivial G ↔ g = 1
mem_trivial
{
g: G
g
:
G: Type ?u.27801
G
} :
g: G
g
∈
trivial: (G : Type ?u.27830) β†’ [inst : Group G] β†’ Set G
trivial
G: Type ?u.27801
G
↔
g: G
g
=
1: ?m.27851
1
:=
mem_singleton_iff: βˆ€ {Ξ± : Type ?u.28194} {a b : Ξ±}, a ∈ {b} ↔ a = b
mem_singleton_iff
#align is_subgroup.mem_trivial
IsSubgroup.mem_trivial: βˆ€ {G : Type u_1} [inst : Group G] {g : G}, g ∈ trivial G ↔ g = 1
IsSubgroup.mem_trivial
#align is_add_subgroup.mem_trivial
IsAddSubgroup.mem_trivial: βˆ€ {G : Type u_1} [inst : AddGroup G] {g : G}, g ∈ IsAddSubgroup.trivial G ↔ g = 0
IsAddSubgroup.mem_trivial
@[
to_additive: βˆ€ {G : Type u_1} [inst : AddGroup G], IsNormalAddSubgroup (IsAddSubgroup.trivial G)
to_additive
] theorem
trivial_normal: IsNormalSubgroup (trivial G)
trivial_normal
:
IsNormalSubgroup: {G : Type ?u.28298} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
(
trivial: (G : Type ?u.28320) β†’ [inst : Group G] β†’ Set G
trivial
G: Type ?u.28276
G
) :=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_1
G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_2
βˆ€ {a b : G}, a ∈ trivial G β†’ b ∈ trivial G β†’ a * b ∈ trivial G
G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_3
βˆ€ {a : G}, a ∈ trivial G β†’ a⁻¹ ∈ trivial G
G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_4
βˆ€ (n : G), n ∈ trivial G β†’ βˆ€ (g : G), g * n * g⁻¹ ∈ trivial G
G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_1
G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_2
βˆ€ {a b : G}, a ∈ trivial G β†’ b ∈ trivial G β†’ a * b ∈ trivial G
G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_3
βˆ€ {a : G}, a ∈ trivial G β†’ a⁻¹ ∈ trivial G
G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_4
βˆ€ (n : G), n ∈ trivial G β†’ βˆ€ (g : G), g * n * g⁻¹ ∈ trivial G
G: Type u_1

H: Type ?u.28279

A: Type ?u.28282

a, a₁, aβ‚‚, b, c: G

inst✝: Group G



Goals accomplished! πŸ™
#align is_subgroup.trivial_normal
IsSubgroup.trivial_normal: βˆ€ {G : Type u_1} [inst : Group G], IsNormalSubgroup (trivial G)
IsSubgroup.trivial_normal
#align is_add_subgroup.trivial_normal
IsAddSubgroup.trivial_normal: βˆ€ {G : Type u_1} [inst : AddGroup G], IsNormalAddSubgroup (IsAddSubgroup.trivial G)
IsAddSubgroup.trivial_normal
@[
to_additive: βˆ€ {G : Type u_1} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ (s = IsAddSubgroup.trivial G ↔ βˆ€ (x : G), x ∈ s β†’ x = 0)
to_additive
] theorem
eq_trivial_iff: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsSubgroup s β†’ (s = trivial G ↔ βˆ€ (x : G), x ∈ s β†’ x = 1)
eq_trivial_iff
{
s: Set G
s
:
Set: Type ?u.34570 β†’ Type ?u.34570
Set
G: Type ?u.34548
G
} (hs :
IsSubgroup: {G : Type ?u.34573} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
s: Set G
s
) :
s: Set G
s
=
trivial: (G : Type ?u.34606) β†’ [inst : Group G] β†’ Set G
trivial
G: Type ?u.34548
G
↔ βˆ€
x: ?m.34611
x
∈
s: Set G
s
,
x: ?m.34611
x
= (
1: ?m.34652
1
:
G: Type ?u.34548
G
) :=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.34551

A: Type ?u.34554

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

hs: IsSubgroup s


s = trivial G ↔ βˆ€ (x : G), x ∈ s β†’ x = 1
G: Type u_1

H: Type ?u.34551

A: Type ?u.34554

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

hs: IsSubgroup s


(βˆ€ (x : G), x ∈ s ↔ x = 1) ↔ βˆ€ (x : G), x ∈ s β†’ x = 1
G: Type u_1

H: Type ?u.34551

A: Type ?u.34554

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

hs: IsSubgroup s


(βˆ€ (x : G), x ∈ s ↔ x = 1) ↔ βˆ€ (x : G), x ∈ s β†’ x = 1
G: Type u_1

H: Type ?u.34551

A: Type ?u.34554

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

hs: IsSubgroup s


s = trivial G ↔ βˆ€ (x : G), x ∈ s β†’ x = 1

Goals accomplished! πŸ™
#align is_subgroup.eq_trivial_iff
IsSubgroup.eq_trivial_iff: βˆ€ {G : Type u_1} [inst : Group G] {s : Set G}, IsSubgroup s β†’ (s = trivial G ↔ βˆ€ (x : G), x ∈ s β†’ x = 1)
IsSubgroup.eq_trivial_iff
#align is_add_subgroup.eq_trivial_iff
IsAddSubgroup.eq_trivial_iff: βˆ€ {G : Type u_1} [inst : AddGroup G] {s : Set G}, IsAddSubgroup s β†’ (s = IsAddSubgroup.trivial G ↔ βˆ€ (x : G), x ∈ s β†’ x = 0)
IsAddSubgroup.eq_trivial_iff
@[
to_additive: βˆ€ {G : Type u_1} [inst : AddGroup G], IsNormalAddSubgroup univ
to_additive
] theorem
univ_subgroup: IsNormalSubgroup univ
univ_subgroup
:
IsNormalSubgroup: {G : Type ?u.35615} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
(@
univ: {Ξ± : Type ?u.35637} β†’ Set Ξ±
univ
G: Type ?u.35593
G
) :=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_1
1 ∈ univ
G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_2
βˆ€ {a b : G}, a ∈ univ β†’ b ∈ univ β†’ a * b ∈ univ
G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_3
βˆ€ {a : G}, a ∈ univ β†’ a⁻¹ ∈ univ
G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_4
βˆ€ (n : G), n ∈ univ β†’ βˆ€ (g : G), g * n * g⁻¹ ∈ univ
G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_1
1 ∈ univ
G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_2
βˆ€ {a b : G}, a ∈ univ β†’ b ∈ univ β†’ a * b ∈ univ
G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_3
βˆ€ {a : G}, a ∈ univ β†’ a⁻¹ ∈ univ
G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G


refine'_4
βˆ€ (n : G), n ∈ univ β†’ βˆ€ (g : G), g * n * g⁻¹ ∈ univ
G: Type u_1

H: Type ?u.35596

A: Type ?u.35599

a, a₁, aβ‚‚, b, c: G

inst✝: Group G



Goals accomplished! πŸ™
#align is_subgroup.univ_subgroup
IsSubgroup.univ_subgroup: βˆ€ {G : Type u_1} [inst : Group G], IsNormalSubgroup univ
IsSubgroup.univ_subgroup
#align is_add_subgroup.univ_add_subgroup
IsAddSubgroup.univ_addSubgroup: βˆ€ {G : Type u_1} [inst : AddGroup G], IsNormalAddSubgroup univ
IsAddSubgroup.univ_addSubgroup
/-- The underlying set of the center of a group. -/ @[to_additive
addCenter: (G : Type u_1) β†’ [inst : AddGroup G] β†’ Set G
addCenter
"The underlying set of the center of an additive group."] def
center: (G : Type u_1) β†’ [inst : Group G] β†’ Set G
center
(
G: Type ?u.38576
G
:
Type _: Type (?u.38576+1)
Type _
) [
Group: Type ?u.38579 β†’ Type ?u.38579
Group
G: Type ?u.38576
G
] :
Set: Type ?u.38582 β†’ Type ?u.38582
Set
G: Type ?u.38576
G
:= {
z: ?m.38593
z
| βˆ€
g: ?m.38596
g
,
g: ?m.38596
g
*
z: ?m.38593
z
=
z: ?m.38593
z
*
g: ?m.38596
g
} #align is_subgroup.center
IsSubgroup.center: (G : Type u_1) β†’ [inst : Group G] β†’ Set G
IsSubgroup.center
#align is_add_subgroup.add_center
IsAddSubgroup.addCenter: (G : Type u_1) β†’ [inst : AddGroup G] β†’ Set G
IsAddSubgroup.addCenter
@[to_additive
mem_add_center: βˆ€ {G : Type u_1} [inst : AddGroup G] {a : G}, a ∈ IsAddSubgroup.addCenter G ↔ βˆ€ (g : G), g + a = a + g
mem_add_center
] theorem
mem_center: βˆ€ {a : G}, a ∈ center G ↔ βˆ€ (g : G), g * a = a * g
mem_center
{
a: G
a
:
G: Type ?u.39733
G
} :
a: G
a
∈
center: (G : Type ?u.39762) β†’ [inst : Group G] β†’ Set G
center
G: Type ?u.39733
G
↔ βˆ€
g: ?m.39782
g
,
g: ?m.39782
g
*
a: G
a
=
a: G
a
*
g: ?m.39782
g
:=
Iff.rfl: βˆ€ {a : Prop}, a ↔ a
Iff.rfl
#align is_subgroup.mem_center
IsSubgroup.mem_center: βˆ€ {G : Type u_1} [inst : Group G] {a : G}, a ∈ center G ↔ βˆ€ (g : G), g * a = a * g
IsSubgroup.mem_center
#align is_add_subgroup.mem_add_center
IsAddSubgroup.mem_add_center: βˆ€ {G : Type u_1} [inst : AddGroup G] {a : G}, a ∈ IsAddSubgroup.addCenter G ↔ βˆ€ (g : G), g + a = a + g
IsAddSubgroup.mem_add_center
@[to_additive
add_center_normal: βˆ€ {G : Type u_1} [inst : AddGroup G], IsNormalAddSubgroup (IsAddSubgroup.addCenter G)
add_center_normal
] theorem
center_normal: βˆ€ {G : Type u_1} [inst : Group G], IsNormalSubgroup (center G)
center_normal
:
IsNormalSubgroup: {G : Type ?u.40930} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsNormalSubgroup
(
center: (G : Type ?u.40952) β†’ [inst : Group G] β†’ Set G
center
G: Type ?u.40908
G
) := { one_mem :=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G



Goals accomplished! πŸ™
mul_mem := fun
ha: ?m.41278
ha
hb: ?m.41281
hb
g: ?m.41284
g
=>

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


g * (a✝ * b✝) = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


g * (a✝ * b✝) = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


g * a✝ * b✝ = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


g * (a✝ * b✝) = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


a✝ * g * b✝ = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


g * (a✝ * b✝) = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


a✝ * (g * b✝) = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


g * (a✝ * b✝) = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


a✝ * (b✝ * g) = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


g * (a✝ * b✝) = a✝ * b✝ * g
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

a✝, b✝: G

ha: a✝ ∈ center G

hb: b✝ ∈ center G

g: G


a✝ * b✝ * g = a✝ * b✝ * g

Goals accomplished! πŸ™
inv_mem := fun {
a: ?m.41304
a
}
ha: ?m.41307
ha
g: ?m.41310
g
=> calc
g: ?m.41310
g
*
a: ?m.41304
a
⁻¹ =
a: ?m.41304
a
⁻¹ * (
g: ?m.41310
g
*
a: ?m.41304
a
) *
a: ?m.41304
a
⁻¹ :=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

a: G

ha: a ∈ center G

g: G



Goals accomplished! πŸ™
_: ?m✝
_
=
a: ?m.41304
a
⁻¹ *
g: ?m.41310
g
:=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

a: G

ha: a ∈ center G

g: G


G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

a: G

ha: a ∈ center G

g: G


G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

a: G

ha: a ∈ center G

g: G


G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

a: G

ha: a ∈ center G

g: G


G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

a: G

ha: a ∈ center G

g: G


G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

a: G

ha: a ∈ center G

g: G


G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

a: G

ha: a ∈ center G

g: G


G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

a: G

ha: a ∈ center G

g: G



Goals accomplished! πŸ™
normal := fun
n: ?m.43573
n
ha: ?m.43576
ha
g: ?m.43579
g
h: ?m.43582
h
=> calc
h: ?m.43582
h
* (
g: ?m.43579
g
*
n: ?m.43573
n
*
g: ?m.43579
g
⁻¹) =
h: ?m.43582
h
*
n: ?m.43573
n
:=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


h * (g * n * g⁻¹) = h * n

Goals accomplished! πŸ™
_: ?m✝
_
=
g: ?m.43579
g
*
g: ?m.43579
g
⁻¹ *
n: ?m.43573
n
*
h: ?m.43582
h
:=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


h * n = g * g⁻¹ * n * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


h * n = g * g⁻¹ * n * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


n * h = g * g⁻¹ * n * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


n * h = g * g⁻¹ * n * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


n * h = g * g⁻¹ * n * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


h * n = g * g⁻¹ * n * h

Goals accomplished! πŸ™
_: ?m✝
_
=
g: ?m.43579
g
*
n: ?m.43573
n
*
g: ?m.43579
g
⁻¹ *
h: ?m.43582
h
:=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


g * g⁻¹ * n * h = g * n * g⁻¹ * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


g * g⁻¹ * n * h = g * n * g⁻¹ * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


g * (g⁻¹ * n) * h = g * n * g⁻¹ * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


g * g⁻¹ * n * h = g * n * g⁻¹ * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


g * (n * g⁻¹) * h = g * n * g⁻¹ * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


g * g⁻¹ * n * h = g * n * g⁻¹ * h
G: Type u_1

H: Type ?u.40911

A: Type ?u.40914

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

n: G

ha: n ∈ center G

g, h: G


g * n * g⁻¹ * h = g * n * g⁻¹ * h

Goals accomplished! πŸ™
} #align is_subgroup.center_normal
IsSubgroup.center_normal: βˆ€ {G : Type u_1} [inst : Group G], IsNormalSubgroup (center G)
IsSubgroup.center_normal
#align is_add_subgroup.add_center_normal
IsAddSubgroup.add_center_normal: βˆ€ {G : Type u_1} [inst : AddGroup G], IsNormalAddSubgroup (IsAddSubgroup.addCenter G)
IsAddSubgroup.add_center_normal
/-- The underlying set of the normalizer of a subset `S : Set G` of a group `G`. That is, the elements `g : G` such that `g * S * g⁻¹ = S`. -/ @[to_additive
addNormalizer: {G : Type u_1} β†’ [inst : AddGroup G] β†’ Set G β†’ Set G
addNormalizer
"The underlying set of the normalizer of a subset `S : Set A` of an additive group `A`. That is, the elements `a : A` such that `a + S - a = S`."] def
normalizer: {G : Type u_1} β†’ [inst : Group G] β†’ Set G β†’ Set G
normalizer
(
s: Set G
s
:
Set: Type ?u.51199 β†’ Type ?u.51199
Set
G: Type ?u.51177
G
) :
Set: Type ?u.51202 β†’ Type ?u.51202
Set
G: Type ?u.51177
G
:= {
g: G
g
:
G: Type ?u.51177
G
| βˆ€
n: ?m.51213
n
,
n: ?m.51213
n
∈
s: Set G
s
↔
g: G
g
*
n: ?m.51213
n
*
g: G
g
⁻¹ ∈
s: Set G
s
} #align is_subgroup.normalizer
IsSubgroup.normalizer: {G : Type u_1} β†’ [inst : Group G] β†’ Set G β†’ Set G
IsSubgroup.normalizer
#align is_add_subgroup.add_normalizer
IsAddSubgroup.addNormalizer: {G : Type u_1} β†’ [inst : AddGroup G] β†’ Set G β†’ Set G
IsAddSubgroup.addNormalizer
@[
to_additive: βˆ€ {G : Type u_1} [inst : AddGroup G] (s : Set G), IsAddSubgroup (IsAddSubgroup.addNormalizer s)
to_additive
] theorem
normalizer_isSubgroup: βˆ€ {G : Type u_1} [inst : Group G] (s : Set G), IsSubgroup (normalizer s)
normalizer_isSubgroup
(
s: Set G
s
:
Set: Type ?u.52526 β†’ Type ?u.52526
Set
G: Type ?u.52504
G
) :
IsSubgroup: {G : Type ?u.52529} β†’ [inst : Group G] β†’ Set G β†’ Prop
IsSubgroup
(
normalizer: {G : Type ?u.52551} β†’ [inst : Group G] β†’ Set G β†’ Set G
normalizer
s: Set G
s
) := { one_mem :=

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G



Goals accomplished! πŸ™
mul_mem := fun {
a: ?m.52891
a
b: ?m.52894
b
} (
ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s
ha
: βˆ€
n: ?m.52898
n
,
n: ?m.52898
n
∈
s: Set G
s
↔
a: ?m.52891
a
*
n: ?m.52898
n
*
a: ?m.52891
a
⁻¹ ∈
s: Set G
s
) (
hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s
hb
: βˆ€
n: ?m.54083
n
,
n: ?m.54083
n
∈
s: Set G
s
↔
b: ?m.52894
b
*
n: ?m.54083
n
*
b: ?m.52894
b
⁻¹ ∈
s: Set G
s
)
n: ?m.54791
n
=>

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


n ∈ s ↔ a * b * n * (a * b)⁻¹ ∈ s
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


n ∈ s ↔ a * b * n * (a * b)⁻¹ ∈ s
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


n ∈ s ↔ a * b * n * (a * b)⁻¹ ∈ s
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


n ∈ s ↔ a * b * n * (a * b)⁻¹ ∈ s
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


n ∈ s ↔ a * b * n * (a * b)⁻¹ ∈ s
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


n ∈ s ↔ a * b * n * (a * b)⁻¹ ∈ s
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G


n ∈ s ↔ a * b * n * (a * b)⁻¹ ∈ s
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b✝, c: G

inst✝: Group G

s: Set G

a, b: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

hb: βˆ€ (n : G), n ∈ s ↔ b * n * b⁻¹ ∈ s

n: G



Goals accomplished! πŸ™
inv_mem := fun {
a: ?m.54805
a
} (
ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s
ha
: βˆ€
n: ?m.54809
n
,
n: ?m.54809
n
∈
s: Set G
s
↔
a: ?m.54805
a
*
n: ?m.54809
n
*
a: ?m.54805
a
⁻¹ ∈
s: Set G
s
)
n: ?m.55517
n
=>

Goals accomplished! πŸ™
G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

a: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

a: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

a: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

a: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

a: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

n: G


G: Type u_1

H: Type ?u.52507

A: Type ?u.52510

a✝, a₁, aβ‚‚, b, c: G

inst✝: Group G

s: Set G

a: G

ha: βˆ€ (n : G), n ∈ s ↔ a * n * a⁻¹ ∈ s

n: G



Goals accomplished! πŸ™
} #align is_subgroup.normalizer_is_subgroup
IsSubgroup.normalizer_isSubgroup: βˆ€ {G :