Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. 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.
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
Require Import WildCat HSet Truncations.Core Modalities.ReflectiveSubuniverse.Require Import Groups.Group Groups.QuotientGroup AbelianGroup Biproduct.(** * Homomorphisms from a group to an abelian group form an abelian group. *)(** In this file, we use additive notation for the group operation, even though some of the groups we deal with are not assumed to be abelian. *)LocalOpen Scope mc_add_scope.(** The sum of group homomorphisms [f] and [g] is [fun a => f(a) + g(a)]. While the group *laws* require [Funext], the operations do not, so we make them instances. *)
A: Group B: AbGroup
SgOp (A $-> B)
A: Group B: AbGroup
SgOp (A $-> B)
A: Group B: AbGroup f, g: A $-> B
A $-> B
exact (grp_homo_compose ab_codiagonal (grp_prod_corec f g)).Defined.(** We can negate a group homomorphism [A -> B] by post-composing with [ab_homo_negation : B -> B]. *)Instanceinverse_hom {A : Group} {B : AbGroup}
: Inverse (@Hom Group _ A B) := grp_homo_compose ab_homo_negation.(** For [A] and [B] groups, with [B] abelian, homomorphisms [A $-> B] form an abelian group. *)
H: Funext A: Group B: AbGroup
Group
H: Funext A: Group B: AbGroup
Group
H: Funext A: Group B: AbGroup
IsHSet (GroupHomomorphism A B)
H: Funext A: Group B: AbGroup
Associative sg_op
H: Funext A: Group B: AbGroup
LeftIdentity sg_op 0
H: Funext A: Group B: AbGroup
LeftInverse sg_op inv 0
H: Funext A: Group B: AbGroup
Associative sg_op
H: Funext A: Group B: AbGroup
LeftIdentity sg_op 0
H: Funext A: Group B: AbGroup
LeftInverse sg_op inv 0
H: Funext A: Group B: AbGroup x, y, z: GroupHomomorphism A B x0: A
x x0 + (y x0 + z x0) = x x0 + y x0 + z x0
H: Funext A: Group B: AbGroup y: GroupHomomorphism A B x: A
group_unit + y x = y x
H: Funext A: Group B: AbGroup x: GroupHomomorphism A B x0: A
- x x0 + x x0 = group_unit
H: Funext A: Group B: AbGroup x, y, z: GroupHomomorphism A B x0: A
x x0 + (y x0 + z x0) = x x0 + y x0 + z x0
apply associativity.
H: Funext A: Group B: AbGroup y: GroupHomomorphism A B x: A
group_unit + y x = y x
apply left_identity.
H: Funext A: Group B: AbGroup x: GroupHomomorphism A B x0: A
- x x0 + x x0 = group_unit
apply left_inverse.Defined.
H: Funext A: Group B: AbGroup
AbGroup
H: Funext A: Group B: AbGroup
AbGroup
H: Funext A: Group B: AbGroup
Commutative sg_op
H: Funext A: Group B: AbGroup f, g: grp_hom A B
sgop_hom f g = sgop_hom g f
H: Funext A: Group B: AbGroup f, g: grp_hom A B x: A
f x + g x = g x + f x
apply commutativity.Defined.(** ** Coequalizers *)(** 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
b^-1$ $o b $== Id B
exact (cate_issect b).Defined.(** ** The bifunctor [ab_hom] *)
H: Funext A: Group^op
Is0Functor (ab_hom A)
H: Funext A: Group^op
Is0Functor (ab_hom A)
H: Funext A: Group^op B, B': AbGroup f: B $-> B'
ab_hom A B $-> ab_hom A B'
H: Funext A: Group^op B, B': AbGroup f: B $-> B'
ab_hom A B -> ab_hom A B'
H: Funext A: Group^op B, B': AbGroup f: B $-> B'
IsSemiGroupPreserving ?grp_homo_map
H: Funext A: Group^op B, B': AbGroup f: B $-> B'
IsSemiGroupPreserving
(fung : ab_hom A B => grp_homo_compose f g)
H: Funext A: Group^op B, B': AbGroup f: B $-> B' phi, psi: ab_hom A B
grp_homo_compose f (phi + psi) =
grp_homo_compose f phi + grp_homo_compose f psi
H: Funext A: Group^op B, B': AbGroup f: B $-> B' phi, psi: ab_hom A B a: A
f (phi a + psi a) = f (phi a) + f (psi a)
exact (grp_homo_op f _ _).Defined.
H: Funext B: AbGroup
Is0Functor
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
H: Funext B: AbGroup
Is0Functor
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
H: Funext B: AbGroup A, A': Group^op f: A $-> A'
flip (ab_hom : Group^op -> AbGroup -> AbGroup) B A $->
flip (ab_hom : Group^op -> AbGroup -> AbGroup) B A'
H: Funext B: AbGroup A, A': Group^op f: A $-> A'
flip (ab_hom : Group^op -> AbGroup -> AbGroup) B A ->
flip (ab_hom : Group^op -> AbGroup -> AbGroup) B A'
H: Funext B: AbGroup A, A': Group^op f: A $-> A'
IsSemiGroupPreserving ?grp_homo_map
H: Funext B: AbGroup A, A': Group^op f: A $-> A'
IsSemiGroupPreserving
(fung : flip
(ab_hom : Group^op -> AbGroup -> AbGroup) B
A => grp_homo_compose g f)
H: Funext B: AbGroup A, A': Group^op f: A $-> A' phi, psi: flip ab_hom B A
grp_homo_compose (phi + psi) f =
grp_homo_compose phi f + grp_homo_compose psi f
byapply equiv_path_grouphomomorphism.Defined.
H: Funext A: Group^op
Is1Functor (ab_hom A)
H: Funext A: Group^op
Is1Functor (ab_hom A)
H: Funext A: Group^op
forall (ab : AbGroup) (fg : a $-> b),
f $== g -> fmap (ab_hom A) f $== fmap (ab_hom A) g
H: Funext A: Group^op
foralla : AbGroup,
fmap (ab_hom A) (Id a) $== Id (ab_hom A a)
H: Funext A: Group^op
forall (abc : AbGroup) (f : a $-> b) (g : b $-> c),
fmap (ab_hom A) (g $o f) $==
fmap (ab_hom A) g $o fmap (ab_hom A) f
H: Funext A: Group^op
forall (ab : AbGroup) (fg : a $-> b),
f $== g -> fmap (ab_hom A) f $== fmap (ab_hom A) g
H: Funext A: Group^op B, B': AbGroup f, g: B $-> B' p: f $== g phi: ab_hom A B
fmap (ab_hom A) f phi = fmap (ab_hom A) g phi
H: Funext A: Group^op B, B': AbGroup f, g: B $-> B' p: f $== g phi: ab_hom A B a: A
f (phi a) = g (phi a)
exact (p (phi a)).
H: Funext A: Group^op
foralla : AbGroup,
fmap (ab_hom A) (Id a) $== Id (ab_hom A a)
H: Funext A: Group^op B: AbGroup phi: ab_hom A B
fmap (ab_hom A) (Id B) phi = Id (ab_hom A B) phi
byapply equiv_path_grouphomomorphism.
H: Funext A: Group^op
forall (abc : AbGroup) (f : a $-> b) (g : b $-> c),
fmap (ab_hom A) (g $o f) $==
fmap (ab_hom A) g $o fmap (ab_hom A) f
H: Funext A: Group^op B, C, D: AbGroup f: B $-> C g: C $-> D phi: ab_hom A B
fmap (ab_hom A) (g $o f) phi =
(fmap (ab_hom A) g $o fmap (ab_hom A) f) phi
byapply equiv_path_grouphomomorphism.Defined.
H: Funext B: AbGroup
Is1Functor
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
H: Funext B: AbGroup
Is1Functor
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
H: Funext B: AbGroup
forall (ab : Group^op) (fg : a $-> b),
f $== g ->
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) f $==
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) g
H: Funext B: AbGroup
foralla : Group^op,
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
(Id a) $== Id (flip ab_hom B a)
H: Funext B: AbGroup
forall (abc : Group^op) (f : a $-> b) (g : b $-> c),
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
(g $o f) $==
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) g $o
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) f
H: Funext B: AbGroup
forall (ab : Group^op) (fg : a $-> b),
f $== g ->
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) f $==
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) g
H: Funext B: AbGroup A, A': Group^op f, g: A $-> A' p: f $== g phi: flip ab_hom B A
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) f
phi =
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) g
phi
H: Funext B: AbGroup A, A': Group^op f, g: A $-> A' p: f $== g phi: flip ab_hom B A a: A'
phi (f a) = phi (g a)
exact (ap phi (p a)).
H: Funext B: AbGroup
foralla : Group^op,
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
(Id a) $== Id (flip ab_hom B a)
H: Funext B: AbGroup A: Group^op phi: flip ab_hom B A
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
(Id A) phi = Id (flip ab_hom B A) phi
byapply equiv_path_grouphomomorphism.
H: Funext B: AbGroup
forall (abc : Group^op) (f : a $-> b) (g : b $-> c),
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
(g $o f) $==
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) g $o
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B) f
H: Funext B: AbGroup A, C, D: Group^op f: A $-> C g: C $-> D phi: flip ab_hom B A
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
(g $o f) phi =
(fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
g $o
fmap
(flip (ab_hom : Group^op -> AbGroup -> AbGroup) B)
f) phi
forall (a0a1 : Group^op) (f : a0 $-> a1)
(b0b1 : AbGroup) (g : b0 $-> b1),
fmap01 ab_hom a1 g $o fmap10 ab_hom f b0 $==
fmap10 ab_hom f b1 $o fmap01 ab_hom a0 g
H: Funext
forall (a0a1 : Group^op) (f : a0 $-> a1)
(b0b1 : AbGroup) (g : b0 $-> b1),
fmap01 ab_hom a1 g $o fmap10 ab_hom f b0 $==
fmap10 ab_hom f b1 $o fmap01 ab_hom a0 g
H: Funext A, A': Group^op f: A $-> A' B, B': AbGroup g: B $-> B' phi: ab_hom A B
grp_homo_compose g (grp_homo_compose phi f) =
grp_homo_compose (grp_homo_compose g phi) f
byapply equiv_path_grouphomomorphism.Defined.(** ** Properties of [ab_hom] *)(** Precomposition with a surjection is an embedding. *)(* This could be deduced from [isembedding_precompose_surjection_hset], but relating precomposition of homomorphisms with precomposition of the underlying maps is tedious, so we give a direct proof. *)
H: Funext A, B, C: AbGroup f: A $-> B IsSurjection0: IsConnMap (Tr (-1)) f
IsEmbedding (fmap10 ab_hom f C)
H: Funext A, B, C: AbGroup f: A $-> B IsSurjection0: IsConnMap (Tr (-1)) f
IsEmbedding (fmap10 ab_hom f C)
H: Funext A, B, C: AbGroup f: A $-> B IsSurjection0: IsConnMap (Tr (-1)) f g0, g1: ab_hom B C p: fmap10 ab_hom f C g0 = fmap10 ab_hom f C g1
g0 = g1
H: Funext A, B, C: AbGroup f: A $-> B IsSurjection0: IsConnMap (Tr (-1)) f g0, g1: ab_hom B C p: fmap10 ab_hom f C g0 = fmap10 ab_hom f C g1
g0 == g1
H: Funext A, B, C: AbGroup f: A $-> B IsSurjection0: IsConnMap (Tr (-1)) f g0, g1: ab_hom B C p: fmap10 ab_hom f C g0 = fmap10 ab_hom f C g1