Monomorphisms and epimorphisms in Group
#
In this file, we prove monomorphisms in the category of groups are injective homomorphisms and epimorphisms are surjective homomorphisms.
theorem
AddMonoidHom.ker_eq_bot_of_cancel
{A : Type u}
{B : Type v}
[AddGroup A]
[AddGroup B]
{f : A →+ B}
(h : ∀ (u v : ↥(AddMonoidHom.ker f) →+ A), AddMonoidHom.comp f u = AddMonoidHom.comp f v → u = v)
:
theorem
MonoidHom.ker_eq_bot_of_cancel
{A : Type u}
{B : Type v}
[Group A]
[Group B]
{f : A →* B}
(h : ∀ (u v : ↥(MonoidHom.ker f) →* A), MonoidHom.comp f u = MonoidHom.comp f v → u = v)
:
MonoidHom.ker f = ⊥
theorem
AddMonoidHom.range_eq_top_of_cancel
{A : Type u}
{B : Type v}
[AddCommGroup A]
[AddCommGroup B]
{f : A →+ B}
(h : ∀ (u v : B →+ B ⧸ AddMonoidHom.range f), AddMonoidHom.comp u f = AddMonoidHom.comp v f → u = v)
:
theorem
MonoidHom.range_eq_top_of_cancel
{A : Type u}
{B : Type v}
[CommGroup A]
[CommGroup B]
{f : A →* B}
(h : ∀ (u v : B →* B ⧸ MonoidHom.range f), MonoidHom.comp u f = MonoidHom.comp v f → u = v)
:
Equations
- AddGroupCat.instGroupα_1 G = G.str
Equations
- GroupCat.instGroupα_1 G = G.str
theorem
AddGroupCat.ker_eq_bot_of_mono
{A : AddGroupCat}
{B : AddGroupCat}
(f : A ⟶ B)
[CategoryTheory.Mono f]
:
theorem
GroupCat.ker_eq_bot_of_mono
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
[CategoryTheory.Mono f]
:
MonoidHom.ker f = ⊥
inductive
GroupCat.SurjectiveOfEpiAuxs.XWithInfinity
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
:
Type u
Define X'
to be the set of all left cosets with an extra point at "infinity".
- fromCoset: {A B : GroupCat} → {f : A ⟶ B} → ↑(Set.range fun (x : ↑B) => x • ↑(MonoidHom.range f)) → GroupCat.SurjectiveOfEpiAuxs.XWithInfinity f
- infinity: {A B : GroupCat} → {f : A ⟶ B} → GroupCat.SurjectiveOfEpiAuxs.XWithInfinity f
Instances For
instance
GroupCat.SurjectiveOfEpiAuxs.instSMulαGroupXWithInfinity
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
:
Equations
- One or more equations did not get rendered due to their size.
theorem
GroupCat.SurjectiveOfEpiAuxs.one_smul
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
(x : GroupCat.SurjectiveOfEpiAuxs.XWithInfinity f)
:
theorem
GroupCat.SurjectiveOfEpiAuxs.fromCoset_eq_of_mem_range
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
{b : ↑B}
(hb : b ∈ MonoidHom.range f)
:
GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := b • ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = b • ↑(MonoidHom.range f)) } = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = ↑(MonoidHom.range f)) }
theorem
GroupCat.SurjectiveOfEpiAuxs.fromCoset_ne_of_nin_range
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
{b : ↑B}
(hb : b ∉ MonoidHom.range f)
:
GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := b • ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = b • ↑(MonoidHom.range f)) } ≠ GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = ↑(MonoidHom.range f)) }
instance
GroupCat.SurjectiveOfEpiAuxs.instDecidableEqXWithInfinity
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
:
Let τ
be the permutation on X'
exchanging f.range
and the point at infinity.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
GroupCat.SurjectiveOfEpiAuxs.τ_apply_infinity
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
:
(GroupCat.SurjectiveOfEpiAuxs.tau f) GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.infinity = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = ↑(MonoidHom.range f)) }
theorem
GroupCat.SurjectiveOfEpiAuxs.τ_apply_fromCoset
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
:
(GroupCat.SurjectiveOfEpiAuxs.tau f)
(GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = ↑(MonoidHom.range f)) }) = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.infinity
theorem
GroupCat.SurjectiveOfEpiAuxs.τ_apply_fromCoset'
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
(x : ↑B)
(hx : x ∈ MonoidHom.range f)
:
(GroupCat.SurjectiveOfEpiAuxs.tau f)
(GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := x • ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = x • ↑(MonoidHom.range f)) }) = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.infinity
theorem
GroupCat.SurjectiveOfEpiAuxs.τ_symm_apply_fromCoset
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
:
(GroupCat.SurjectiveOfEpiAuxs.tau f).symm
(GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = ↑(MonoidHom.range f)) }) = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.infinity
theorem
GroupCat.SurjectiveOfEpiAuxs.τ_symm_apply_infinity
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
:
(GroupCat.SurjectiveOfEpiAuxs.tau f).symm GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.infinity = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = ↑(MonoidHom.range f)) }
Let g : B ⟶ S(X')
be defined as such that, for any β : B
, g(β)
is the function sending
point at infinity to point at infinity and sending coset y
to β • y
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The strategy is the following: assuming epi f
theorem
GroupCat.SurjectiveOfEpiAuxs.g_apply_fromCoset
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
(x : ↑B)
(y : ↑(Set.range fun (x : ↑B) => x • ↑(MonoidHom.range f)))
:
((GroupCat.SurjectiveOfEpiAuxs.g f) x) (GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset y) = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := x • ↑y, property := (_ : x • ↑y ∈ Set.range fun (x : ↑B) => x • ↑(MonoidHom.range f)) }
theorem
GroupCat.SurjectiveOfEpiAuxs.g_apply_infinity
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
(x : ↑B)
:
((GroupCat.SurjectiveOfEpiAuxs.g f) x) GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.infinity = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.infinity
theorem
GroupCat.SurjectiveOfEpiAuxs.h_apply_infinity
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
(x : ↑B)
(hx : x ∈ MonoidHom.range f)
:
((GroupCat.SurjectiveOfEpiAuxs.h f) x) GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.infinity = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.infinity
theorem
GroupCat.SurjectiveOfEpiAuxs.h_apply_fromCoset
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
(x : ↑B)
:
((GroupCat.SurjectiveOfEpiAuxs.h f) x)
(GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = ↑(MonoidHom.range f)) }) = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = ↑(MonoidHom.range f)) }
theorem
GroupCat.SurjectiveOfEpiAuxs.h_apply_fromCoset'
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
(x : ↑B)
(b : ↑B)
(hb : b ∈ MonoidHom.range f)
:
((GroupCat.SurjectiveOfEpiAuxs.h f) x)
(GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := b • ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = b • ↑(MonoidHom.range f)) }) = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := b • ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = b • ↑(MonoidHom.range f)) }
theorem
GroupCat.SurjectiveOfEpiAuxs.h_apply_fromCoset_nin_range
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
(x : ↑B)
(hx : x ∈ MonoidHom.range f)
(b : ↑B)
(hb : b ∉ MonoidHom.range f)
:
((GroupCat.SurjectiveOfEpiAuxs.h f) x)
(GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := b • ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = b • ↑(MonoidHom.range f)) }) = GroupCat.SurjectiveOfEpiAuxs.XWithInfinity.fromCoset
{ val := (x * b) • ↑(MonoidHom.range f),
property := (_ : ∃ (y : ↑B), (fun (x : ↑B) => x • ↑(MonoidHom.range f)) y = (x * b) • ↑(MonoidHom.range f)) }
theorem
GroupCat.SurjectiveOfEpiAuxs.agree
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
:
↑(MonoidHom.range f) = {x : ↑B | (GroupCat.SurjectiveOfEpiAuxs.h f) x = (GroupCat.SurjectiveOfEpiAuxs.g f) x}
theorem
GroupCat.SurjectiveOfEpiAuxs.comp_eq
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
:
CategoryTheory.CategoryStruct.comp f
(let_fun this := GroupCat.SurjectiveOfEpiAuxs.g f;
this) = CategoryTheory.CategoryStruct.comp f
(let_fun this := GroupCat.SurjectiveOfEpiAuxs.h f;
this)
theorem
GroupCat.SurjectiveOfEpiAuxs.g_ne_h
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
(x : ↑B)
(hx : x ∉ MonoidHom.range f)
:
theorem
GroupCat.surjective_of_epi
{A : GroupCat}
{B : GroupCat}
(f : A ⟶ B)
[CategoryTheory.Epi f]
:
theorem
AddCommGroupCat.ker_eq_bot_of_mono
{A : AddCommGroupCat}
{B : AddCommGroupCat}
(f : A ⟶ B)
[CategoryTheory.Mono f]
:
theorem
CommGroupCat.ker_eq_bot_of_mono
{A : CommGroupCat}
{B : CommGroupCat}
(f : A ⟶ B)
[CategoryTheory.Mono f]
:
MonoidHom.ker f = ⊥
theorem
AddCommGroupCat.mono_iff_ker_eq_bot
{A : AddCommGroupCat}
{B : AddCommGroupCat}
(f : A ⟶ B)
:
theorem
AddCommGroupCat.mono_iff_injective
{A : AddCommGroupCat}
{B : AddCommGroupCat}
(f : A ⟶ B)
:
theorem
AddCommGroupCat.range_eq_top_of_epi
{A : AddCommGroupCat}
{B : AddCommGroupCat}
(f : A ⟶ B)
[CategoryTheory.Epi f]
:
theorem
CommGroupCat.range_eq_top_of_epi
{A : CommGroupCat}
{B : CommGroupCat}
(f : A ⟶ B)
[CategoryTheory.Epi f]
:
theorem
AddCommGroupCat.epi_iff_range_eq_top
{A : AddCommGroupCat}
{B : AddCommGroupCat}
(f : A ⟶ B)
:
theorem
AddCommGroupCat.epi_iff_surjective
{A : AddCommGroupCat}
{B : AddCommGroupCat}
(f : A ⟶ B)
: