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)
 :