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 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 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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
(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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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
(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 :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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
(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))
(* 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A =>
pointed_fun (iscomplex_abses E0) in
X F a) @ 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A =>
pointed_fun (iscomplex_abses E0) in
X F a) @ 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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
(funa : A =>
ap (projection E)
(letX :=
funE0 : AbSES' E A =>
pointed_fun (iscomplex_abses E0) in
X F a) @ 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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)
(funb : B =>
ap (projection E)
(abses_pullback_inclusion_transpose_beta
(inclusion E) F p b) @
(letX :=
funE : AbSES' C B =>
pointed_fun (iscomplex_abses E) in
X E b)) 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))%type
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)
(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 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)
(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 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. *)