Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
From HoTT Require Import Basics Types.From HoTT Require Import Basics Types.Require Import WildCat.Core WildCat.Square WildCat.Equiv Truncations.Core.Require Import Groups.Group Groups.QuotientGroup AbelianGroup AbHom.LocalOpen Scope mc_add_scope.(** * Coequalizers of maps [f g : A $-> B] between abelian groups *)(** Using the cokernel and addition and negation for the homs of abelian groups, we can define the coequalizer of two group homomorphisms as the cokernel of their difference. *)Definitionab_coeq {AB : AbGroup} (fg : A $-> B)
:= ab_cokernel ((-f) + g).
A, B: AbGroup f, g: A $-> B
B $-> ab_coeq f g
A, B: AbGroup f, g: A $-> B
B $-> ab_coeq f g
exact grp_quotient_map.Defined.
A, B: AbGroup f, g: A $-> B
ab_coeq_in $o f $== ab_coeq_in $o g
A, B: AbGroup f, g: A $-> B
ab_coeq_in $o f $== ab_coeq_in $o g
A, B: AbGroup f, g: A $-> B x: A
(ab_coeq_in $o f) x = (ab_coeq_in $o g) x
A, B: AbGroup f, g: A $-> B x: A
in_cosetL
{|
normalsubgroup_subgroup := grp_image (- f + g);
normalsubgroup_isnormal := isnormal_ab_subgroup B (grp_image (- f + g))
|} (f x) (g x)
A, B: AbGroup f, g: A $-> B x: A
{x0 : A & (- f + g) x0 = - f x + g x}
byexistsx.Defined.
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g
ab_coeq f g $-> C
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g
ab_coeq f g $-> C
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g
foralln : B,
{|
normalsubgroup_subgroup := grp_image (- f + g);
normalsubgroup_isnormal := isnormal_ab_subgroup B (grp_image (- f + g))
|} n -> i n = 0
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g
foralln : B, Trunc (-1) {x : A & - f x + g x = n} -> i n = 0
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g b: B H: Trunc (-1) {x : A & - f x + g x = b}
i b = 0
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g b: B H: {x : A & - f x + g x = b}
i b = 0
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g b: B a: A q: - f a + g a = b
i b = 0
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g a: A
i (- f a + g a) = 0
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g a: A
i (- f a) + i (g a) = 0
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g a: A
i (- f a) = ?Goal
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g a: A
?Goal + i (g a) = 0
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g a: A
- i (f a) + i (g a) = 0
A, B: AbGroup f, g: A $-> B C: AbGroup i: B $-> C p: i $o f $== i $o g a: A
i (g a) = i (f a)
exact (p a)^.Defined.Definitionab_coeq_rec_beta_in {AB : AbGroup} {fg : A $-> B}
{C : AbGroup} (i : B $-> C) (p : i $o f $== i $o g)
: ab_coeq_rec i p $o ab_coeq_in $== i
:= fun_ => idpath.
A, B: AbGroup f, g: A $-> B P: ab_coeq f g -> Type H: forallx : ab_coeq f g, IsHProp (P x) i: forallb : B, P (ab_coeq_in b)
forallx : ab_coeq f g, P x
A, B: AbGroup f, g: A $-> B P: ab_coeq f g -> Type H: forallx : ab_coeq f g, IsHProp (P x) i: forallb : B, P (ab_coeq_in b)
forallx : ab_coeq f g, P x
A, B: AbGroup f, g: A $-> B P: ab_coeq f g -> Type H: forallx : ab_coeq f g, IsHProp (P x) i: forallb : B, P (ab_coeq_in b)
foralla : B,
P
(class_of
(in_cosetL
{|
normalsubgroup_subgroup := grp_image (- f + g);
normalsubgroup_isnormal :=
isnormal_ab_subgroup B (grp_image (- f + g))
|})
a)
exact i.Defined.
A, B, C: AbGroup f, g: A $-> B l, r: ab_coeq f g $-> C p: l $o ab_coeq_in $== r $o ab_coeq_in
l $== r
A, B, C: AbGroup f, g: A $-> B l, r: ab_coeq f g $-> C p: l $o ab_coeq_in $== r $o ab_coeq_in
l $== r
A, B, C: AbGroup f, g: A $-> B l, r: ab_coeq f g $-> C p: l $o ab_coeq_in $== r $o ab_coeq_in
forallb : B,
(funx : ab_coeq f g =>
(grp_homo_map : GroupHomomorphism (ab_coeq f g) C -> ab_coeq f g $-> C) l x =
(grp_homo_map : GroupHomomorphism (ab_coeq f g) C -> ab_coeq f g $-> C) r x)
(ab_coeq_in b)
exact p.Defined.
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq f g $-> ab_coeq f' g'
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq f g $-> ab_coeq f' g'
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
B $-> ab_coeq f' g'
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
?i $o f $== ?i $o g
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq_in $o b $o f $== ab_coeq_in $o b $o g
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq_in $o (b $o f) $== ab_coeq_in $o (b $o g)
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq_in $o (f' $o a) $== ab_coeq_in $o (g' $o a)
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq_in $o f' $== ab_coeq_in $o g'
exact ab_coeq_glue.Defined.
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a, a': A $-> A' b, b': B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g p': f' $o a' $== b' $o f q': g' $o a' $== b' $o g s: b $== b'
functor_ab_coeq a b p q $== functor_ab_coeq a' b' p' q'
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a, a': A $-> A' b, b': B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g p': f' $o a' $== b' $o f q': g' $o a' $== b' $o g s: b $== b'
functor_ab_coeq a b p q $== functor_ab_coeq a' b' p' q'
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a, a': A $-> A' b, b': B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g p': f' $o a' $== b' $o f q': g' $o a' $== b' $o g s: b $== b'
functor_ab_coeq a b p q $o ab_coeq_in $==
functor_ab_coeq a' b' p' q' $o ab_coeq_in
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a, a': A $-> A' b, b': B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g p': f' $o a' $== b' $o f q': g' $o a' $== b' $o g s: b $== b' x: B
(functor_ab_coeq a b p q $o ab_coeq_in) x =
(functor_ab_coeq a' b' p' q' $o ab_coeq_in) x
exact (ap ab_coeq_in (s x)).Defined.
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g A'', B'': AbGroup f'', g'': A'' $-> B'' a': A' $-> A'' b': B' $-> B'' p': f'' $o a' $== b' $o f' q': g'' $o a' $== b' $o g'
functor_ab_coeq a' b' p' q' $o functor_ab_coeq a b p q $==
functor_ab_coeq (a' $o a) (b' $o b) (p $@h p') (q $@h q')
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g A'', B'': AbGroup f'', g'': A'' $-> B'' a': A' $-> A'' b': B' $-> B'' p': f'' $o a' $== b' $o f' q': g'' $o a' $== b' $o g'
functor_ab_coeq a' b' p' q' $o functor_ab_coeq a b p q $==
functor_ab_coeq (a' $o a) (b' $o b) (p $@h p') (q $@h q')
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $-> A' b: B $-> B' p: f' $o a $== b $o f q: g' $o a $== b $o g A'', B'': AbGroup f'', g'': A'' $-> B'' a': A' $-> A'' b': B' $-> B'' p': f'' $o a' $== b' $o f' q': g'' $o a' $== b' $o g'
functor_ab_coeq a' b' p' q' $o functor_ab_coeq a b p q $o ab_coeq_in $==
functor_ab_coeq (a' $o a) (b' $o b) (p $@h p') (q $@h q') $o ab_coeq_in
simpl; reflexivity.Defined.
A, B: AbGroup f, g: A $-> B
functor_ab_coeq (Id A) (Id B) (hrefl f) (hrefl g) $== Id (ab_coeq f g)
A, B: AbGroup f, g: A $-> B
functor_ab_coeq (Id A) (Id B) (hrefl f) (hrefl g) $== Id (ab_coeq f g)
A, B: AbGroup f, g: A $-> B
functor_ab_coeq (Id A) (Id B) (hrefl f) (hrefl g) $o ab_coeq_in $==
Id (ab_coeq f g) $o ab_coeq_in
reflexivity.Defined.
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq f g $<~> ab_coeq f' g'
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq f g $<~> ab_coeq f' g'
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq f g $-> ab_coeq f' g'
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq f' g' $-> ab_coeq f g
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
?f $o ?g $== Id (ab_coeq f' g')
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
?g $o ?f $== Id (ab_coeq f g)
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq f g $-> ab_coeq f' g'
exact (functor_ab_coeq a b p q).
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
ab_coeq f' g' $-> ab_coeq f g
exact (functor_ab_coeq a^-1$ b^-1$ (hinverse a _ p) (hinverse a _ q)).
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
functor_ab_coeq a b p q $o functor_ab_coeq a^-1$ b^-1$ p ^h$ q ^h$ $==
Id (ab_coeq f' g')
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
b $o b^-1$ $== Id B'
exact (cate_isretr b).
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g
functor_ab_coeq a^-1$ b^-1$ p ^h$ q ^h$ $o functor_ab_coeq a b p q $==
Id (ab_coeq f g)
A, B: AbGroup f, g: A $-> B A', B': AbGroup f', g': A' $-> B' a: A $<~> A' b: B $<~> B' p: f' $o a $== b $o f q: g' $o a $== b $o g