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 HSet HFiber Limits.Pullback.From HoTT Require Import Basics Types HSet HFiber Limits.Pullback.From HoTT.WildCat Require Import Core NatTrans.Require Import Pointed.Core Homotopy.ExactSequence.Require Import Groups.QuotientGroup.Require Import AbGroups.AbelianGroup AbGroups.AbPullback AbGroups.Biproduct.Require Import AbSES.Core AbSES.Pullback.Require Import Modalities.Identity Modalities.Modality Truncations.Core.LocalOpen Scope pointed_scope.LocalOpen Scope mc_add_scope.(** * The fiber sequence induced by pulling back along a short exact sequence *)(** We show that pulling back along a short exact sequence [E : AbSES C B] produces a fiber sequence [AbSES C A -> AbSES E A -> AbSES B A]. The associated long exact sequence of homotopy groups recovers the usual (contravariant) six-term exact sequence of Ext groups.We will prove the analog of exactness in terms of path data, and deduce the usual notion. *)(** If a short exact sequence [A -> F -> E] becomes trivial after pulling back along an inclusion [i : B -> E], then there is a "transpose" short exact sequence [B -> F -> F/B]. We begin by constructing the map [B -> F]. *)Definitionabses_pullback_inclusion_transpose_map {ABE : AbGroup}
(i : B $-> E) `{IsEmbedding i}
(F : AbSES E A) (p : abses_pullback i F $== pt)
: B $-> F
:= grp_pullback_pr1 _ _ $o p^$.1 $o ab_biprod_inr.(** The comparison map [A + B $-> F] is an embedding. This comes up twice so we factor it out as a lemma. *)
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt
IsEmbedding (grp_pullback_pr1 (projection F) i $o (p^$).1)
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt
IsEmbedding (grp_pullback_pr1 (projection F) i $o (p^$).1)
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt
IsEmbedding (grp_pullback_pr1 (projection F) i)
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt
IsEmbedding (p^$).1
all: rapply istruncmap_mapinO_tr.Defined.(** The map [B -> F] is an inclusion. *)
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt
IsEmbedding (abses_pullback_inclusion_transpose_map i F p)
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt
IsEmbedding (abses_pullback_inclusion_transpose_map i F p)
rapply (istruncmap_compose _ (ab_biprod_inr)).Defined.(** We define the cokernel [F/B], which is what we need below. *)Definitionabses_pullback_inclusion_transpose_endpoint' {ABE : AbGroup}
(i : B $-> E) `{IsEmbedding i}
(F : AbSES E A) (p : abses_pullback i F $== pt)
: AbGroup
:= ab_cokernel_embedding (abses_pullback_inclusion_transpose_map i F p).(** The composite map [B -> F -> E] is homotopic to the original inclusion [i : B -> E]. *)
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt
projection F $o abses_pullback_inclusion_transpose_map i F p == i
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt
projection F $o abses_pullback_inclusion_transpose_map i F p == i
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt b: B
(projection F $o abses_pullback_inclusion_transpose_map i F p) b = i b
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt b: B
(projection F $o abses_pullback_inclusion_transpose_map i F p)
(ab_biprod_pr2 (0, b)) =
i (ab_biprod_pr2 (0, b))
A, B, E: AbGroup i: B $-> E IsEmbedding0: IsEmbedding i F: AbSES E A p: abses_pullback i F $== pt b: B
pullback_pr2 ((p^$).1 (ab_biprod_inr (ab_biprod_pr2 (0, b)))) =
ab_biprod_pr2 (0, b)
exact (snd p^$.2 _)^.Defined.(** Short exact sequences in the fiber of [inclusion E] descend along [projection E]. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
AbSES C A
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
AbSES C A
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
AbGroup
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
A $-> ?middle
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
?middle $-> C
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsEmbedding ?inclusion
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsConnMap (Tr (-1)) ?projection
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsExact (Tr (-1)) ?inclusion?projection
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
AbGroup
exact (abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p).
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
A $-> abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p
exact (grp_quotient_map $o inclusion F).
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p $-> C
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
grp_homo_compose (projection E $o projection F)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) $==
grp_homo_const
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt b: B
grp_homo_compose (projection E $o projection F)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) b =
grp_homo_const b
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt b: B
projection E (inclusion E b) = grp_homo_const b
apply iscomplex_abses.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsEmbedding (grp_quotient_map $o inclusion F)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a
trivial_subgroup A a
(* Since [inclusion F a] is killed by [grp_quotient_map], its in the image of [B]. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a in_coset: in_cosetL
{|
normalsubgroup_subgroup :=
grp_image_embedding
(abses_pullback_inclusion_transpose_map (inclusion E) F p);
normalsubgroup_isnormal :=
isnormal_ab_subgroup F
(grp_image_embedding
(abses_pullback_inclusion_transpose_map (inclusion E) F p))
|} (inclusion F a) 0
trivial_subgroup A a
(* Cleaning up the context facilitates later steps. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
trivial_subgroup A a
(* Since both [inclusion F] and [B -> F] factor through the mono [ab_biprod A B -> F], we can lift [q1] to [ab_biprod A B]. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
ab_biprod_inr b = ab_biprod_inl (- a)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a q2: ab_biprod_inr b = ab_biprod_inl (- a)
trivial_subgroup A a
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
ab_biprod_inr b = ab_biprod_inl (- a)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
IsEmbedding (inclusion E)
exact _.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
(grp_pullback_pr1 (projection F) (inclusion E) $o (p^$).1)
(ab_biprod_inl (- a)) =
- inclusion F a
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a
grp_pullback_pr1 (projection F) (inclusion E)
(inclusion (abses_pullback (inclusion E) F) (- a)) =
- inclusion F a
exact (grp_homo_inv _ _).
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a q2: ab_biprod_inr b = ab_biprod_inl (- a)
trivial_subgroup A a
(* Using [q2], we conclude. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A q0: grp_kernel (grp_quotient_map $o inclusion F) a b: B q1: abses_pullback_inclusion_transpose_map (inclusion E) F p b = - inclusion F a q2: ab_biprod_inr b = ab_biprod_inl (- a) q3: - group_unit = - - a
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsConnMap (Tr (-1))
(ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
((funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b))
:
grp_homo_compose (projection E $o projection F)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) $==
grp_homo_const))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsConnMap (Tr (-1)) grp_quotient_map
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsConnMap (Tr (-1))
(funx : F =>
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b))
(grp_quotient_map x))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsConnMap (Tr (-1))
(funx : F =>
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b))
(grp_quotient_map x))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsConnMap (Tr (-1)) (funx : F => projection E (projection F x))
exact _.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsExact (Tr (-1)) (grp_quotient_map $o inclusion F)
(ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
((funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b))
:
grp_homo_compose (projection E $o projection F)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) $==
grp_homo_const))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsComplex (grp_quotient_map $o inclusion F)
(ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
((funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b))
:
grp_homo_compose (projection E $o projection F)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) $==
grp_homo_const))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsConnMap (Tr (-1)) (cxfib ?cx_isexact)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsComplex (grp_quotient_map $o inclusion F)
(ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
((funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b))
:
grp_homo_compose (projection E $o projection F)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) $==
grp_homo_const))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
((funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b))
:
grp_homo_compose (projection E $o projection F)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) $==
grp_homo_const)
o* (grp_quotient_map $o inclusion F) == pconst
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A
projection E (projection F (inclusion F a)) = pt
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A
projection F (inclusion F a) = ?Goal
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A
projection E ?Goal = pt
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A
projection E (pconst a) = pt
apply grp_homo_unit.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
IsConnMap (Tr (-1))
(cxfib
(phomotopy_homotopy_hset
((funa : A =>
ap (projection E)
(letX := funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0)
in
X F a) @
grp_homo_unit (projection E)
:
(ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX :=
funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b))
o* (grp_quotient_map $o inclusion F)) a =
pconst a)
:
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
((funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX :=
funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b))
:
grp_homo_compose (projection E $o projection F)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) $==
grp_homo_const)
o* (grp_quotient_map $o inclusion F) == pconst)))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in X E b))
y =
pt
IsConnected (Tr (-1))
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a) @
grp_homo_unit (projection E))))
(y; q))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in X E b))
y =
pt
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a) @
grp_homo_unit (projection E))))
(y; q))
(* We choose a preimage by [grp_quotient_map]. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in X E b))
y =
pt
merely (hfiber grp_quotient_map y)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in X E b))
y =
pt f: merely (hfiber grp_quotient_map y)
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a) @
grp_homo_unit (projection E))))
(y; q))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in X E b))
y =
pt f: merely (hfiber grp_quotient_map y)
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a) @
grp_homo_unit (projection E))))
(y; q))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in X E b))
y =
pt f: F q0: grp_quotient_map f = y
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a) @
grp_homo_unit (projection E))))
(y; q))
(* Since [projection F f] is in the kernel of [projection E], we find a preimage in [B]. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in X E b))
y =
pt f: F q0: grp_quotient_map f = y
merely (hfiber (inclusion E) (projection F f))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: merely (hfiber (inclusion E) (projection F f))
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a) @
grp_homo_unit (projection E))))
(y; q))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in X E b))
y =
pt f: F q0: grp_quotient_map f = y
merely (hfiber (inclusion E) (projection F f))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in X E b))
y =
pt f: F q0: grp_quotient_map f = y
projection E (projection F f) = pt
exact (ap _ q0 @ q).
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: merely (hfiber (inclusion E) (projection F f))
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a) @
grp_homo_unit (projection E))))
(y; q))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a) @
grp_homo_unit (projection E))))
(y; q))
(* The difference [f - b] in [F] is in the kernel of [projection F], hence lies in [A]. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: merely
(hfiber (inclusion F)
(f -
grp_pullback_pr1 (projection F) (inclusion E)
((p^$).1 (ab_biprod_inr b))))
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa0 : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a0) @
grp_homo_unit (projection E))))
(y; q))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f
projection F f +
projection F
(-
grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))) =
pt
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f
projection F f -
projection F
(grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))) =
pt
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f
projection F f - projection F f = pt
apply right_inverse.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: merely
(hfiber (inclusion F)
(f -
grp_pullback_pr1 (projection F) (inclusion E)
((p^$).1 (ab_biprod_inr b))))
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa0 : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a0) @
grp_homo_unit (projection E))))
(y; q))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(funa0 : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a0) @
grp_homo_unit (projection E))))
(y; q))
(* It remains to show that [a] is the desired preimage. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
cxfib
(phomotopy_homotopy_hset
(funa0 : A =>
ap (projection E)
(letX := funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a0) @
grp_homo_unit (projection E)))
a =
(y; q)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
forallx : abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p,
IsHProp
(ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
x =
pt)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
(cxfib
(phomotopy_homotopy_hset
(funa0 : A =>
ap (projection E)
(letX := funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a0) @
grp_homo_unit (projection E)))
a).1 =
(y; q).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
(cxfib
(phomotopy_homotopy_hset
(funa0 : A =>
ap (projection E)
(letX := funE0 : AbSES' E A => pointed_fun (iscomplex_abses E0) in
X F a0) @
grp_homo_unit (projection E)))
a).1 =
(y; q).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
grp_quotient_map f +
grp_quotient_map
(-
grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))) =
grp_quotient_map f
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
grp_quotient_map
(-
grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))) =
- grp_quotient_map f + grp_quotient_map f
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
abses_pullback_inclusion_transpose_map (inclusion E) F p b =
- - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b)) +
0
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt y: abses_pullback_inclusion_transpose_endpoint' (inclusion E) F p q: ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(projection E $o projection F)
(funb0 : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta (inclusion E) F p b0) @
(letX := funE0 : AbSES' C B => pointed_fun (iscomplex_abses E0) in
X E b0))
y =
pt f: F q0: grp_quotient_map f = y b: B q1: inclusion E b = projection F f a: A q2: inclusion F a =
f - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
abses_pullback_inclusion_transpose_map (inclusion E) F p b =
- - grp_pullback_pr1 (projection F) (inclusion E) ((p^$).1 (ab_biprod_inr b))
exact (inverse_involutive _)^.Defined.(** That [abses_pullback_trivial_preimage E F p] pulls back to [F] is immediate from [abses_pullback_component1_id] and the following map. As such, we've shown that sequences which become trivial after pulling back along [inclusion E] are in the image of pullback along [projection E]. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
AbSESMorphism F (abses_pullback_trivial_preimage E F p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
AbSESMorphism F (abses_pullback_trivial_preimage E F p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
A $-> A
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
F $-> abses_pullback_trivial_preimage E F p
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
E $-> C
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
inclusion (abses_pullback_trivial_preimage E F p) $o ?component1 ==
?component2 $o inclusion F
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
projection (abses_pullback_trivial_preimage E F p) $o ?component2 ==
?component3 $o projection F
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
A $-> A
exact grp_homo_id.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
F $-> abses_pullback_trivial_preimage E F p
exact grp_quotient_map.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
E $-> C
exact (projection E).
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
inclusion (abses_pullback_trivial_preimage E F p) $o grp_homo_id ==
grp_quotient_map $o inclusion F
reflexivity.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
projection (abses_pullback_trivial_preimage E F p) $o grp_quotient_map ==
projection E $o projection F
reflexivity.Defined.(** For exactness we need not only a preimage of [F] but a preimage of [(F,p)] along [cxfib]. We now define and prove this in terms of path data. *)(** The analog of [cxfib] induced by pullback in terms of path data. *)
A, B, C: AbGroup E: AbSES C B
AbSES C A -> graph_hfiber (abses_pullback (inclusion E)) pt
A, B, C: AbGroup E: AbSES C B
AbSES C A -> graph_hfiber (abses_pullback (inclusion E)) pt
abses_pullback (projection E $o inclusion E) Y $== pt
A, B, C: AbGroup E: AbSES C B Y: AbSES C A
projection E $o inclusion E == grp_homo_const
A, B, C: AbGroup E: AbSES C B Y: AbSES C A
abses_pullback grp_homo_const Y $== pt
A, B, C: AbGroup E: AbSES C B Y: AbSES C A
abses_pullback grp_homo_const Y $== pt
symmetry; apply abses_pullback_const'.Defined.Definitionhfiber_cxfib' {ABC : AbGroup} (E : AbSES C B)
(F : AbSES (middle E) A) (p : abses_pullback (inclusion E) F $== pt)
:= {Y : AbSES C A & hfiber_abses_path (cxfib' E Y) (F; p)}.(* This is just [idpath], but Coq takes too long to see that. *)
H: Univalence A, B, C: AbGroup E: AbSES C B U: AbSES C A
equiv_ptransformation_phomotopy
(iscomplex_abses_pullback' (inclusion E) (projection E) (iscomplex_abses E))
U =
equiv_path_abses_iso (cxfib' E U).2
H: Univalence A, B, C: AbGroup E: AbSES C B U: AbSES C A
equiv_ptransformation_phomotopy
(iscomplex_abses_pullback' (inclusion E) (projection E) (iscomplex_abses E))
U =
equiv_path_abses_iso (cxfib' E U).2
H: Univalence A, B, C: AbGroup E: AbSES C B U: AbSES C A
H: Univalence A, B, C: AbGroup E: AbSES C B U: AbSES C A
transport (funx : AbSES E A => abses_pullback_pmap (inclusion E) x = pt)
?p (cxfib (iscomplex_pullback_abses E) U).2 =
(equiv_hfiber_abses (abses_pullback (inclusion E)) pt (cxfib' E U)).2
H: Univalence A, B, C: AbGroup E: AbSES C B U: AbSES C A
transport (funx : AbSES E A => abses_pullback_pmap (inclusion E) x = pt) 1
(cxfib (iscomplex_pullback_abses E) U).2 =
(equiv_hfiber_abses (abses_pullback (inclusion E)) pt (cxfib' E U)).2
H: Univalence A, B, C: AbGroup E: AbSES C B U: AbSES C A
(to_pointed_compose (abses_pullback' (projection E))
(abses_pullback' (inclusion E)) @*
(letX := equiv_fun equiv_ptransformation_phomotopy in
X
(iscomplex_abses_pullback' (inclusion E) (projection E)
(iscomplex_abses E))))
U =
(equiv_hfiber_abses (abses_pullback (inclusion E)) pt (cxfib' E U)).2
H: Univalence A, B, C: AbGroup E: AbSES C B U: AbSES C A
(letX := equiv_fun equiv_ptransformation_phomotopy in
X
(iscomplex_abses_pullback' (inclusion E) (projection E)
(iscomplex_abses E)))
U =
(equiv_hfiber_abses (abses_pullback (inclusion E)) pt (cxfib' E U)).2
H: Univalence A, B, C: AbGroup E: AbSES C B U: AbSES C A
equiv_ptransformation_phomotopy
(iscomplex_abses_pullback' (inclusion E) (projection E) (iscomplex_abses E))
U =
(equiv_hfiber_abses (abses_pullback (inclusion E)) pt (cxfib' E U)).2
H: Univalence A, B, C: AbGroup E: AbSES C B U: AbSES C A
equiv_ptransformation_phomotopy
(iscomplex_abses_pullback' (inclusion E) (projection E) (iscomplex_abses E))
U =
equiv_path_abses_iso (cxfib' E U).2
(* The goal looks identical to [pr2_cxfib'], but the implicit argument to [@paths] is expressed differently, which is why the next line isn't faster. *)exact (@pr2_cxfib' _ A B C E U).Defined.Transparent abses_pullback'.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
hfiber_cxfib' E F p <~>
hfiber (cxfib (iscomplex_pullback_abses E))
(equiv_hfiber_abses (abses_pullback (inclusion E)) pt (F; p))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
hfiber_cxfib' E F p <~>
hfiber (cxfib (iscomplex_pullback_abses E))
(equiv_hfiber_abses (abses_pullback (inclusion E)) pt (F; p))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U: AbSES C A
hfiber_abses_path (cxfib' E U) (F; p) <~>
cxfib (iscomplex_pullback_abses E) U =
equiv_hfiber_abses (abses_pullback (inclusion E)) pt (F; p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U: AbSES C A
cxfib' E U = (F; p) <~>
cxfib (iscomplex_pullback_abses E) U =
equiv_hfiber_abses (abses_pullback (inclusion E)) pt (F; p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U: AbSES C A
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p
(U.2).1 = fmap (abses_pullback (projection E)) (Id U.1) $@ (U.2).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p
(U.2).1 = Id (abses_pullback (projection E) U.1) $@ (U.2).1
exact (cat_idr_strong _)^.Defined.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p
path_hfiber_cxfib' U V <~> U = V
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p
path_hfiber_cxfib' U V <~> U = V
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p
path_hfiber_cxfib' U V <~>
{p0 : U.1 = V.1 &
transport (funY : AbSES C A => hfiber_abses_path (cxfib' E Y) (F; p)) p0 U.2 =
V.2}
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
(fmap (abses_pullback (projection E)) q)^$ $@ (U.2).1 $== (V.2).1 <~>
transport (funY : AbSES C A => hfiber_abses_path (cxfib' E Y) (F; p))
(equiv_path_abses_iso q) U.2 =
V.2
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
(fmap (abses_pullback (projection E)) q)^$ $@ (U.2).1 $== (V.2).1 <~>
(transport (funY : AbSES C A => hfiber_abses_path (cxfib' E Y) (F; p))
(equiv_path_abses_iso q) U.2).1 =
(V.2).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
(transport (funY : AbSES C A => hfiber_abses_path (cxfib' E Y) (F; p))
(equiv_path_abses_iso q) U.2).1 =
?Goal
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt U, V: hfiber_cxfib' E F p q: abses_path_data_iso U.1 V.1
apply equiv_path_groupisomorphism.Defined.(** The fibre of [cxfib'] over [(F;p)] is inhabited. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
hfiber_cxfib' E F p
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
hfiber_cxfib' E F p
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
hfiber_abses_path (cxfib' E (abses_pullback_trivial_preimage E F p)) (F; p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(F; p).1 $-> (cxfib' E (abses_pullback_trivial_preimage E F p)).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(funp0 : (cxfib' E (abses_pullback_trivial_preimage E F p)).1 $-> (F; p).1 =>
(fmap (abses_pullback (inclusion E)) p0)^$ $@
(cxfib' E (abses_pullback_trivial_preimage E F p)).2 $->
(F; p).2) ?Goal^$
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(funp0 : (cxfib' E (abses_pullback_trivial_preimage E F p)).1 $-> (F; p).1 =>
(fmap (abses_pullback (inclusion E)) p0)^$ $@
(cxfib' E (abses_pullback_trivial_preimage E F p)).2 $->
(F; p).2)
(abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1))^$
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(fmap (abses_pullback (inclusion E))
(abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1))^$)^$ $@
(cxfib' E (abses_pullback_trivial_preimage E F p)).2 $-> p
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
abses_pullback_homotopic' (projection E $o inclusion E) grp_homo_const
(iscomplex_abses E) (abses_pullback_trivial_preimage E F p) $@
symmetric_GpdHom pt
(abses_pullback grp_homo_const (abses_pullback_trivial_preimage E F p))
(abses_pullback_const' (abses_pullback_trivial_preimage E F p)) $o
(abses_pullback_compose' (inclusion E) (projection E)
(abses_pullback_trivial_preimage E F p) $o
(fmap (abses_pullback (inclusion E))
(abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1))^$)^$) $==
p
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
symmetric_GpdHom pt
(abses_pullback grp_homo_const (abses_pullback_trivial_preimage E F p))
(abses_pullback_const' (abses_pullback_trivial_preimage E F p)) $o
(abses_pullback_homotopic' (projection E $o inclusion E) grp_homo_const
(iscomplex_abses E) (abses_pullback_trivial_preimage E F p) $o
(abses_pullback_compose' (inclusion E) (projection E)
(abses_pullback_trivial_preimage E F p) $o
(fmap (abses_pullback (inclusion E))
(abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1))^$)^$)) $==
p
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
abses_pullback_homotopic' (projection E $o inclusion E) grp_homo_const
(iscomplex_abses E) (abses_pullback_trivial_preimage E F p) $o
(abses_pullback_compose' (inclusion E) (projection E)
(abses_pullback_trivial_preimage E F p) $o
(fmap (abses_pullback (inclusion E))
(abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1))^$)^$) $==
abses_pullback_const' (abses_pullback_trivial_preimage E F p) $o p
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
abses_pullback_homotopic' (projection E $o inclusion E) grp_homo_const
(iscomplex_abses E) (abses_pullback_trivial_preimage E F p) $o
(abses_pullback_compose' (inclusion E) (projection E)
(abses_pullback_trivial_preimage E F p) $o
(fmap (abses_pullback (inclusion E))
(abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1))^$)^$) $o
p^$ $== abses_pullback_const' (abses_pullback_trivial_preimage E F p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
((abses_pullback_homotopic' (projection E $o inclusion E) grp_homo_const
(iscomplex_abses E) (abses_pullback_trivial_preimage E F p) $o
(abses_pullback_compose' (inclusion E) (projection E)
(abses_pullback_trivial_preimage E F p) $o
(fmap (abses_pullback (inclusion E))
(abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1))^$)^$) $o
p^$).1 $o
ab_biprod_inl ==
(abses_pullback_const' (abses_pullback_trivial_preimage E F p)).1 $o
ab_biprod_inl) *
((abses_pullback_homotopic' (projection E $o inclusion E) grp_homo_const
(iscomplex_abses E) (abses_pullback_trivial_preimage E F p) $o
(abses_pullback_compose' (inclusion E) (projection E)
(abses_pullback_trivial_preimage E F p) $o
(fmap (abses_pullback (inclusion E))
(abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1))^$)^$) $o
p^$).1 $o
ab_biprod_inr ==
(abses_pullback_const' (abses_pullback_trivial_preimage E F p)).1 $o
ab_biprod_inr)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(funx : A =>
class_of
(funx0y : F =>
hfiber (funx1 : B => pullback_pr1 ((p.1)^-1 (group_unit, x1)))
(- x0 + y))
(pullback_pr1 ((p.1)^-1 (x, group_unit)))) ==
(funx : A =>
class_of
(funx0y : F =>
hfiber (funx1 : B => pullback_pr1 ((p.1)^-1 (group_unit, x1)))
(- x0 + y))
(inclusion F x))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(funx : A => pullback_pr2 ((p.1)^-1 (x, group_unit))) ==
(fun_ : A => group_unit)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(funx : B =>
class_of
(funx0y : F =>
hfiber (funx1 : B => pullback_pr1 ((p.1)^-1 (group_unit, x1)))
(- x0 + y))
(pullback_pr1 ((p.1)^-1 (group_unit, x)))) ==
(fun_ : B =>
class_of
(funxy : F =>
hfiber (funx0 : B => pullback_pr1 ((p.1)^-1 (group_unit, x0))) (- x + y))
(inclusion F group_unit))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(funx : B => pullback_pr2 ((p.1)^-1 (group_unit, x))) == idmap
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(funx : A =>
class_of
(funx0y : F =>
hfiber (funx1 : B => pullback_pr1 ((p.1)^-1 (group_unit, x1)))
(- x0 + y))
(pullback_pr1 ((p.1)^-1 (x, group_unit)))) ==
(funx : A =>
class_of
(funx0y : F =>
hfiber (funx1 : B => pullback_pr1 ((p.1)^-1 (group_unit, x1)))
(- x0 + y))
(inclusion F x))
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A
class_of
(funxy : F =>
hfiber (funx0 : B => pullback_pr1 ((p.1)^-1 (group_unit, x0))) (- x + y))
(pullback_pr1 ((p.1)^-1 (a, group_unit))) =
class_of
(funxy : F =>
hfiber (funx0 : B => pullback_pr1 ((p.1)^-1 (group_unit, x0))) (- x + y))
(inclusion F a)
exact (ap (class_of _ o pullback_pr1) (fst p^$.2 a)).
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(funx : A => pullback_pr2 ((p.1)^-1 (x, group_unit))) ==
(fun_ : A => group_unit)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt a: A
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
(funx : B => pullback_pr2 ((p.1)^-1 (group_unit, x))) == idmap
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt b: B
pullback_pr2 ((p.1)^-1 (group_unit, b)) = b
exact (snd p^$.2 _)^.Defined.(** To conclude exactness in terms of path data, we show that the fibre is a proposition, hence contractible. *)(** Given a point [(Y;Q)] in the fiber of [cxfib'] over [(F;p)] there is an induced map as follows. *)
A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
ab_biprod A B $-> abses_pullback (projection E) Y.1
A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
ab_biprod A B $-> abses_pullback (projection E) Y.1
A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A q: hfiber_abses_path (cxfib' E Y) (F; p)
ab_biprod A B $-> abses_pullback (projection E) (Y; q).1
A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A q: hfiber_abses_path (cxfib' E Y) (F; p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p a: A b: B
pullback_pr1 ((((cxfib' E Y.1).2)^$).1 (a, b)) =
grp_pullback_sgop (projection Y.1) (projection E)
(inclusion Y.1 a; group_unit;
cx_isexact a @ (grp_homo_unit (projection E))^)
(group_unit; inclusion E b;
grp_homo_unit (projection Y.1) @ (iscomplex_abses E b)^)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p a: A b: B
inclusion Y.1 a = inclusion Y.1 a + group_unit
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p a: A b: B
inclusion E b = group_unit + inclusion E b
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p a: A b: B
inclusion Y.1 a = inclusion Y.1 a + group_unit
exact (grp_unit_r _)^.
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p a: A b: B
inclusion E b = group_unit + inclusion E b
exact (grp_unit_l _)^.Defined.(** Given another point [(Y,Q)] in the fibre of [cxfib'] over [(F;p)], we get path data in [AbSES C A]. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
abses_pullback_trivial_preimage E F p $== Y.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
abses_pullback_trivial_preimage E F p $== Y.1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
abses_pullback_trivial_preimage E F p $== (Y; Q).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
abses_pullback_trivial_preimage E F p $-> (Y; Q).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
?proj1 $o inclusion (abses_pullback_trivial_preimage E F p) ==
inclusion (Y; Q).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
projection (abses_pullback_trivial_preimage E F p) ==
projection (Y; Q).1 $o ?proj1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
abses_pullback_trivial_preimage E F p $-> (Y; Q).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
Is01Cat Group
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
Is01Cat (AbSES E A)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
Is0Gpd (AbSES E A)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p) f: B
grp_homo_compose
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) f =
grp_homo_const f
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p) f: B
inclusion Y group_unit + group_unit = group_unit
exact (grp_unit_r _ @ grp_homo_unit _).
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
((funf : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y)
:
grp_pullback_pr1 (projection Y) (projection E)
(abses_pullback_splits_induced_map' E (Y; Q).1 (ab_biprod_inr f)) =
grp_homo_const f))
:
grp_homo_compose
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) $==
grp_homo_const) $o
inclusion (abses_pullback_trivial_preimage E F p) ==
inclusion (Y; Q).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p) a: A
(ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(funf : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y))) $o
inclusion (abses_pullback_trivial_preimage E F p)) a =
inclusion (Y; Q).1 a
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p) a: A
(ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(funf : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y))) $o
inclusion (abses_pullback_trivial_preimage E F p)) a =
grp_pullback_pr1 (projection Y) (projection E)
((((Q.1)^$).1 $o inclusion (F; p).1) a)
exact (grp_quotient_rec_beta' _ F _ _ (inclusion F a)).
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
projection (abses_pullback_trivial_preimage E F p) ==
projection (Y; Q).1 $o
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
((funf : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y)
:
grp_pullback_pr1 (projection Y) (projection E)
(abses_pullback_splits_induced_map' E (Y; Q).1 (ab_biprod_inr f)) =
grp_homo_const f))
:
grp_homo_compose
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(abses_pullback_inclusion_transpose_map (inclusion E) F p) $==
grp_homo_const)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
IsConnMap ?Goal grp_quotient_map
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
forallb : QuotientGroup F
{|
normalsubgroup_subgroup :=
grp_image_embedding
(abses_pullback_inclusion_transpose_map (inclusion E) F p);
normalsubgroup_isnormal :=
isnormal_ab_subgroup F
(grp_image_embedding
(abses_pullback_inclusion_transpose_map (inclusion E) F p))
|},
In ?Goal
(projection (abses_pullback_trivial_preimage E F p) b =
(projection (Y; Q).1 $o
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(funf : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y))))
b)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
foralla : F,
projection (abses_pullback_trivial_preimage E F p) (grp_quotient_map a) =
(projection (Y; Q).1 $o
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(funf : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y))))
(grp_quotient_map a)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
forallb : QuotientGroup F
{|
normalsubgroup_subgroup :=
grp_image_embedding
(abses_pullback_inclusion_transpose_map (inclusion E) F p);
normalsubgroup_isnormal :=
isnormal_ab_subgroup F
(grp_image_embedding
(abses_pullback_inclusion_transpose_map (inclusion E) F p))
|},
In (Tr (-1))
(projection (abses_pullback_trivial_preimage E F p) b =
(projection (Y; Q).1 $o
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(funf : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y))))
b)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
foralla : F,
projection (abses_pullback_trivial_preimage E F p) (grp_quotient_map a) =
(projection (Y; Q).1 $o
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(funf : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y))))
(grp_quotient_map a)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p)
foralla : F,
projection (abses_pullback_trivial_preimage E F p) (grp_quotient_map a) =
(projection (Y; Q).1 $o
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(funf : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y))))
(grp_quotient_map a)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p) f: F
projection (abses_pullback_trivial_preimage E F p) (grp_quotient_map f) =
(projection (Y; Q).1 $o
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(funf0 : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f0)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y))))
(grp_quotient_map f)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A Q: hfiber_abses_path (cxfib' E Y) (F; p) f: F
projection E ((projection (cxfib' E Y).1 $o ((Q.1)^$).1) f) =
(projection Y $o
ab_cokernel_embedding_rec
(abses_pullback_inclusion_transpose_map (inclusion E) F p)
(grp_pullback_pr1 (projection Y) (projection E) $o ((Q.1)^$).1)
(funf0 : B =>
ap (grp_pullback_pr1 (projection Y) (projection E))
(induced_map_eq E F p (Y; Q) (ab_biprod_inr f0)) @
(grp_unit_r (inclusion Y 0) @ grp_homo_unit (inclusion Y))))
(grp_quotient_map f)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
path_hfiber_cxfib' (hfiber_cxfib'_inhabited E F p) Y
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
path_hfiber_cxfib' (hfiber_cxfib'_inhabited E F p) Y
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
(fmap (abses_pullback (projection E)) (hfiber_cxfib'_induced_path'0 E F p Y))^$ $@
((hfiber_cxfib'_inhabited E F p).2).1 $== (Y.2).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
(fmap (abses_pullback (projection E)) (hfiber_cxfib'_induced_path'0 E F p Y))^$ $==
abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1) $o
(Y.2).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
(fmap (abses_pullback (projection E)) (hfiber_cxfib'_induced_path'0 E F p Y))^$ $o
((Y.2).1)^$ $==
abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p
((Y.2).1)^$ $==
fmap (abses_pullback (projection E)) (hfiber_cxfib'_induced_path'0 E F p Y) $o
abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p x: (F; p).1
(((Y.2).1)^$).1 x =
(fmap (abses_pullback (projection E)) (hfiber_cxfib'_induced_path'0 E F p Y) $o
abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1)).1
x
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p x: (F; p).1
((((Y.2).1)^$).1 x).1 =
((fmap (abses_pullback (projection E)) (hfiber_cxfib'_induced_path'0 E F p Y) $o
abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1)).1
x).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p x: (F; p).1
(((((Y.2).1)^$).1 x).2).1 =
(((fmap (abses_pullback (projection E))
(hfiber_cxfib'_induced_path'0 E F p Y) $o
abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1)).1
x).2).1
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: hfiber_cxfib' E F p x: (F; p).1
((((Y.2).1)^$).1 x).1 =
((fmap (abses_pullback (projection E)) (hfiber_cxfib'_induced_path'0 E F p Y) $o
abses_pullback_component1_id' (abses_pullback_inclusion0_map' E F p)
(funx0 : A => 1)).1
x).1
reflexivity.Defined.(** It follows that [hfiber_cxfib'] is contractible. *)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
Contr (hfiber_cxfib' E F p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
Contr (hfiber_cxfib' E F p)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
hfiber_cxfib' E F p
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
forally : hfiber_cxfib' E F p, ?center = y
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt
forally : hfiber_cxfib' E F p, hfiber_cxfib'_inhabited E F p = y
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A q: hfiber_abses_path (cxfib' E Y) (F; p)
hfiber_cxfib'_inhabited E F p = (Y; q)
H: Univalence A, B, C: AbGroup E: AbSES C B F: AbSES E A p: abses_pullback (inclusion E) F $== pt Y: AbSES C A q: hfiber_abses_path (cxfib' E Y) (F; p)
path_hfiber_cxfib' (hfiber_cxfib'_inhabited E F p) (Y; q)
apply hfiber_cxfib'_induced_path'.Defined.(** From this we deduce exactness. *)