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]
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
grp_homo_const o f == projection E o inclusion E
symmetry; rapply iscomplex_abses.
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
IsEmbedding ab_pushout_inl
rapply ab_pushout_embedding_inl.
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
IsConnMap (Tr (-1))
(ab_pushout_rec grp_homo_const (projection E)
((fun (xy : A -> B) (p : x == y) (x0 : A) =>
(p x0)^) (projection E o inclusion E)
(grp_homo_const o f) (iscomplex_abses E)))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
IsConnMap (Tr (-1))
(funx : E =>
ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^)
(ab_pushout_inr x))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
(funx : E =>
ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^)
(ab_pushout_inr x)) == projection E
napply ab_pushout_rec_beta_right.
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
IsExact (Tr (-1)) ab_pushout_inl
(ab_pushout_rec grp_homo_const (projection E)
((fun (xy : A -> B) (p : x == y) (x0 : A) =>
(p x0)^) (projection E o inclusion E)
(grp_homo_const o f) (iscomplex_abses E)))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
IsComplex ab_pushout_inl
(ab_pushout_rec grp_homo_const (projection E)
((fun (xy : A -> B) (p : x == y) (x0 : A) =>
(p x0)^) (projection E o inclusion E)
(grp_homo_const o f) (iscomplex_abses E)))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
IsConnMap (Tr (-1)) (cxfib ?cx_isexact)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
IsComplex ab_pushout_inl
(ab_pushout_rec grp_homo_const (projection E)
((fun (xy : A -> B) (p : x == y) (x0 : A) =>
(p x0)^) (projection E o inclusion E)
(grp_homo_const o f) (iscomplex_abses E)))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
ab_pushout_rec grp_homo_const (projection E)
((fun (xy : A -> B) (p : x == y) (x0 : A) =>
(p x0)^) (projection E o inclusion E)
(grp_homo_const o f) (iscomplex_abses E))
o* ab_pushout_inl == pconst
napply ab_pushout_rec_beta_left.
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
IsConnMap (Tr (-1))
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f (inclusion E)
grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt
IsConnected (Tr (-1))
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f (inclusion E)
grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f (inclusion E)
grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
(** Pick a preimage under the quotient map. *)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt
merely (hfiber grp_quotient_map bc')
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt bc: merely (hfiber grp_quotient_map bc')
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f (inclusion E)
grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt bc: merely (hfiber grp_quotient_map bc')
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f (inclusion E)
grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt bc: hfiber grp_quotient_map bc'
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f (inclusion E)
grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc'
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f (inclusion E)
grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
(** The E-component of the preimage is in the kernel of [projection E]. *)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc'
projection E c = 0
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f (inclusion E)
grp_homo_const (projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc'
projection E c = 0
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc'
ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' =
projection E c
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc'
group_unit + projection E c = projection E c
apply left_identity.
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f
(inclusion E) grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
(** By exactness, we get an element in [A]. *)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: Tr (-1) (hfiber (inclusion E) c)
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f
(inclusion E) grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: hfiber (inclusion E) c
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f
(inclusion E) grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
Tr (-1)
(hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f
(inclusion E) grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p))
(** Now the goal is to show that [bc'] lies in the image of [ab_pushout_inl]. *)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
hfiber
(cxfib
(phomotopy_homotopy_hset
(ab_pushout_rec_beta_left f
(inclusion E) grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^))))
(bc'; p)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
(class_of
(funxy : A' * E =>
Trunc (-1)
{x0 : A &
(- f x0, inclusion E x0) =
(- fst x + fst y, - snd x + snd y)})
(b - f (- a), group_unit);
ab_pushout_rec_beta_left f
(inclusion E)
(grp_homo_compose (grp_trivial_rec B)
(grp_trivial_corec A'))
(projection E)
(funx0 : A => (iscomplex_abses E x0)^)
(b - f (- a))) = (bc'; p)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
class_of
(funxy : A' * E =>
Trunc (-1)
{x0 : A &
(- f x0, inclusion E x0) =
(- fst x + fst y, - snd x + snd y)})
(b - f (- a), group_unit) = bc'
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
ab_pushout_inl (b - f (- a)) = bc'
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
ab_pushout_inl (b - f (- a)) = grp_quotient_map (b, c)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
grp_quotient_map (b, c) = ab_pushout_inl (b - f (- a))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
Trunc (-1)
{x : A &
(- f x, inclusion E x) =
(- b + (b - f (- a)), - c + group_unit)}
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
(- f (- a), inclusion E (- a)) =
(- b + (b - f (- a)), - c + group_unit)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
- f (- a) = - b + (b - f (- a))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
inclusion E (- a) = - c + group_unit
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
- f (- a) = - b + (b - f (- a))
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
- - b - f (- a) = b - f (- a)
byrewrite involutive.
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A bc': ab_pushout f (inclusion E) p: ab_pushout_rec grp_homo_const
(projection E)
(funx0 : A => (iscomplex_abses E x0)^) bc' = pt b: A' c: E q: grp_quotient_map (b, c) = bc' c_in_kernel: projection E c = 0 a: A s: inclusion E a = c
inclusion E (- a) = - c + group_unit
exact ((preserves_inverse a) @ ap _ s @ (right_identity _)^).Defined.(** ** The universal property of [abses_pushout_morphism] *)
H: Univalence A, A', B: AbGroup E: AbSES B A f: A $-> A'
AbSESMorphism E (abses_pushout f E)
H: Univalence A, A', B: AbGroup E: AbSES B A f: A $-> A'
AbSESMorphism E (abses_pushout f E)
H: Univalence A, A', B: AbGroup E: AbSES B A f: A $-> A'
E $-> abses_pushout f E
H: Univalence A, A', B: AbGroup E: AbSES B A f: A $-> A'
inclusion (abses_pushout f E) $o f ==
?component2 $o inclusion E
H: Univalence A, A', B: AbGroup E: AbSES B A f: A $-> A'
projection (abses_pushout f E) $o ?component2 ==
grp_homo_id $o projection E
H: Univalence A, A', B: AbGroup E: AbSES B A f: A $-> A'
E $-> abses_pushout f E
exact ab_pushout_inr.
H: Univalence A, A', B: AbGroup E: AbSES B A f: A $-> A'
inclusion (abses_pushout f E) $o f ==
ab_pushout_inr $o inclusion E
exact ab_pushout_commsq.
H: Univalence A, A', B: AbGroup E: AbSES B A f: A $-> A'
projection (abses_pushout f E) $o ab_pushout_inr ==
grp_homo_id $o projection E
rapply ab_pushout_rec_beta_right.Defined.(** Any map [f : E -> F] of short exact sequences factors (uniquely) through [abses_pushout E f1]. *)
H: Univalence A, B, X, Y: AbGroup E: AbSES B A F: AbSES Y X f: AbSESMorphism E F
AbSESMorphism (abses_pushout (component1 f) E) F
H: Univalence A, B, X, Y: AbGroup E: AbSES B A F: AbSES Y X f: AbSESMorphism E F
AbSESMorphism (abses_pushout (component1 f) E) F
H: Univalence A, B, X, Y: AbGroup E: AbSES B A F: AbSES Y X f: AbSESMorphism E F
abses_pushout (component1 f) E $-> F
H: Univalence A, B, X, Y: AbGroup E: AbSES B A F: AbSES Y X f: AbSESMorphism E F
H: Univalence A, B, X, Y: AbGroup E: AbSES B A F: AbSES Y X f: AbSESMorphism E F x: A
component1 f x = component1 f x
H: Univalence A, B, X, Y: AbGroup E: AbSES B A F: AbSES Y X f: AbSESMorphism E F x: E
component2 f x =
inclusion F group_unit + component2 f x
H: Univalence A, B, X, Y: AbGroup E: AbSES B A F: AbSES Y X f: AbSESMorphism E F x: B
component3 f x = component3 f x
H: Univalence A, B, X, Y: AbGroup E: AbSES B A F: AbSES Y X f: AbSESMorphism E F x: E
component2 f x =
inclusion F group_unit + component2 f x
H: Univalence A, B, X, Y: AbGroup E: AbSES B A F: AbSES Y X f: AbSESMorphism E F x: E
component2 f x = 0 + component2 f x
exact (left_identity _)^.Defined.(** Given [E : AbSES B A'] and [F : AbSES B A] and a morphism [f : E -> F], the pushout of [E] along [f_1] is [F] if [f_3] is homotopic to [id_B]. *)
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id
abses_pushout (component1 f) E $== F
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id
abses_pushout (component1 f) E $== F
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id g:= abses_pushout_morphism_rec f: AbSESMorphism (abses_pushout (component1 f) E) F
abses_pushout (component1 f) E $== F
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id g:= abses_pushout_morphism_rec f: AbSESMorphism (abses_pushout (component1 f) E) F
abses_path_data (abses_pushout (component1 f) E) F
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id g:= abses_pushout_morphism_rec f: AbSESMorphism (abses_pushout (component1 f) E) F
component2 g $o
inclusion (abses_pushout (component1 f) E) ==
inclusion F
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id g:= abses_pushout_morphism_rec f: AbSESMorphism (abses_pushout (component1 f) E) F
projection (abses_pushout (component1 f) E) ==
projection F $o component2 g
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id g:= abses_pushout_morphism_rec f: AbSESMorphism (abses_pushout (component1 f) E) F
component2 g $o
inclusion (abses_pushout (component1 f) E) ==
inclusion F
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id g:= abses_pushout_morphism_rec f: AbSESMorphism (abses_pushout (component1 f) E) F x: A
(component2 g $o
inclusion (abses_pushout (component1 f) E)) x =
inclusion F x
exact (left_square g _)^.
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id g:= abses_pushout_morphism_rec f: AbSESMorphism (abses_pushout (component1 f) E) F
projection (abses_pushout (component1 f) E) ==
projection F $o component2 g
H: Univalence A, A', B: AbGroup E: AbSES B A' F: AbSES B A f: AbSESMorphism E F h: component3 f == grp_homo_id g:= abses_pushout_morphism_rec f: AbSESMorphism (abses_pushout (component1 f) E) F x: abses_pushout (component1 f) E
projection (abses_pushout (component1 f) E) x =
(projection F $o component2 g) x
exact ((right_square g _) @ h _)^.Defined.(** A version with equality instead of path data. *)Definitionabses_pushout_component3_id `{Univalence}
{A A' B : AbGroup} {E : AbSES B A'} {F : AbSES B A}
(f : AbSESMorphism E F) (h : component3 f == grp_homo_id)
: abses_pushout (component1 f) E = F
:= equiv_path_abses_iso (abses_pushout_component3_id' f h).(** Given short exact sequences [E] and [F] and homomorphisms [f : A' $-> A] and [g : D' $-> D], there is a morphism [E + F -> fE + gF] induced by the universal properties of the pushouts of [E] and [F]. *)Definitionabses_directsum_pushout_morphism `{Univalence}
{A A' B C D D' : AbGroup} {E : AbSES B A'} {F : AbSES C D'}
(f : A' $-> A) (g : D' $-> D)
: AbSESMorphism (abses_direct_sum E F) (abses_direct_sum (abses_pushout f E) (abses_pushout g F))
:= functor_abses_directsum (abses_pushout_morphism E f) (abses_pushout_morphism F g).(** For [E, F : AbSES B A'] and [f, g : A' $-> A], we have (f+g)(E+F) = fE + gF, where + denotes the direct sum. *)Definitionabses_directsum_distributive_pushouts `{Univalence}
{A A' B C C' D : AbGroup} {E : AbSES B A'} {F : AbSES D C'} (f : A' $-> A) (g : C' $-> C)
: abses_pushout (functor_ab_biprod f g) (abses_direct_sum E F)
= abses_direct_sum (abses_pushout f E) (abses_pushout g F)
:= abses_pushout_component3_id (abses_directsum_pushout_morphism f g) (fun_ => idpath).(** Given an [AbSESMorphism] whose third component is the identity, we know that it induces a path from the pushout of the domain along the first map to the codomain. Conversely, given a path from a pushout, we can deduce that the following square commutes: *)
H: Univalence A, A', B: AbGroup alpha: A $-> A' E: AbSES B A F: AbSES B A' p: abses_pushout alpha E = F
{phi : E $-> F &
inclusion F o alpha == phi o inclusion E}
H: Univalence A, A', B: AbGroup alpha: A $-> A' E: AbSES B A F: AbSES B A' p: abses_pushout alpha E = F
{phi : E $-> F &
inclusion F o alpha == phi o inclusion E}
H: Univalence A, A', B: AbGroup alpha: A $-> A' E: AbSES B A
{phi : E $-> abses_pushout alpha E &
(funx : A =>
inclusion (abses_pushout alpha E) (alpha x)) ==
(funx : A => phi (inclusion E x))}
H: Univalence A, A', B: AbGroup alpha: A $-> A' E: AbSES B A x: A
napply ab_pushout_commsq.Defined.(** ** Functoriality of [abses_pushout f : AbSES B A -> AbSES B A'] *)(** In this file we will prove various "levels" of functoriality of pushing out. Here we show that the induced map between [AbSES B A] respect the groupoid structure of [is1gpd_abses] from AbSES.Core. *)
H: Univalence A, A', B: AbGroup f: A $-> A'
Is0Functor (abses_pushout f)
H: Univalence A, A', B: AbGroup f: A $-> A'
Is0Functor (abses_pushout f)
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
abses_pushout f E $-> abses_pushout f F
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
abses_path_data (abses_pushout f E)
(abses_pushout f F)
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
grp_homo_id $o f == f $o grp_homo_id
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
inclusion F $o grp_homo_id == p.1 $o inclusion E
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
functor_ab_pushout f f (inclusion E) (inclusion F)
grp_homo_id grp_homo_id p.1?h?k $o
inclusion (abses_pushout f E) ==
inclusion (abses_pushout f F)
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
projection (abses_pushout f E) ==
projection (abses_pushout f F) $o
functor_ab_pushout f f (inclusion E) (inclusion F)
grp_homo_id grp_homo_id p.1?h?k
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
grp_homo_id $o f == f $o grp_homo_id
reflexivity.
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
inclusion F $o grp_homo_id == p.1 $o inclusion E
symmetry; exact (fst p.2).
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
functor_ab_pushout f f (inclusion E) (inclusion F)
grp_homo_id grp_homo_id p.1 (funx0 : A => 1)
((fun (xy : A -> F) (p : x == y) (x0 : A) =>
(p x0)^) (p.1 $o inclusion E)
(inclusion F $o grp_homo_id) (fst p.2)) $o
inclusion (abses_pushout f E) ==
inclusion (abses_pushout f F)
napply ab_pushout_rec_beta_left.
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
projection (abses_pushout f E) ==
projection (abses_pushout f F) $o
functor_ab_pushout f f (inclusion E) (inclusion F)
grp_homo_id grp_homo_id p.1 (funx0 : A => 1)
((fun (xy : A -> F) (p : x == y) (x0 : A) =>
(p x0)^) (p.1 $o inclusion E)
(inclusion F $o grp_homo_id) (fst p.2))
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F
foralla : ab_biprod A' E,
(funx : ab_biprod A' E /
in_cosetL
{|
normalsubgroup_subgroup :=
ab_pushout_subgroup f (inclusion E);
normalsubgroup_isnormal :=
isnormal_ab_subgroup (ab_biprod A' E)
(ab_pushout_subgroup f (inclusion E))
|} =>
projection (abses_pushout f E) x =
(projection (abses_pushout f F) $o
functor_ab_pushout f f (inclusion E) (inclusion F)
grp_homo_id grp_homo_id p.1 (funx0 : A => 1)
((fun (x0y : A -> F) (p : x0 == y) (x1 : A) =>
(p x1)^) (p.1 $o inclusion E)
(inclusion F $o grp_homo_id) (fst p.2))) x)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup :=
ab_pushout_subgroup f (inclusion E);
normalsubgroup_isnormal :=
isnormal_ab_subgroup (ab_biprod A' E)
(ab_pushout_subgroup f (inclusion E))
|}) a)
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F x: ab_biprod A' E
group_unit + projection E (snd x) =
group_unit + projection F (group_unit + p.1 (snd x))
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F x: ab_biprod A' E
projection E (snd x) =
projection F (group_unit + p.1 (snd x))
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $-> F x: ab_biprod A' E
p.1 (snd x) = group_unit + p.1 (snd x)
exact (left_identity _)^.Defined.
H: Univalence A, A', B: AbGroup f: A $-> A'
Is1Functor (abses_pushout f)
H: Univalence A, A', B: AbGroup f: A $-> A'
Is1Functor (abses_pushout f)
H: Univalence A, A', B: AbGroup f: A $-> A'
forall (ab : AbSES B A) (f0g : a $-> b),
f0 $== g ->
fmap (abses_pushout f) f0 $== fmap (abses_pushout f) g
H: Univalence A, A', B: AbGroup f: A $-> A'
foralla : AbSES B A,
fmap (abses_pushout f) (Id a) $==
Id (abses_pushout f a)
H: Univalence A, A', B: AbGroup f: A $-> A'
forall (abc : AbSES B A) (f0 : a $-> b)
(g : b $-> c),
fmap (abses_pushout f) (g $o f0) $==
fmap (abses_pushout f) g $o fmap (abses_pushout f) f0
H: Univalence A, A', B: AbGroup f: A $-> A'
forall (ab : AbSES B A) (f0g : a $-> b),
f0 $== g ->
fmap (abses_pushout f) f0 $== fmap (abses_pushout f) g
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A g0, g1: E $-> F h: g0 $== g1
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A g0, g1: E $-> F h: g0 $== g1 a': A' e: E
class_of
(funxy : A' * F =>
Tr (-1)
{x0 : A & (- f x0, inclusion F x0) = - x + y})
(a', group_unit) +
class_of
(funxy : A' * F =>
Tr (-1)
{x0 : A & (- f x0, inclusion F x0) = - x + y})
(group_unit, g0.1 e) =
class_of
(funxy : A' * F =>
Tr (-1)
{x0 : A & (- f x0, inclusion F x0) = - x + y})
(a', group_unit) +
class_of
(funxy : A' * F =>
Tr (-1)
{x0 : A & (- f x0, inclusion F x0) = - x + y})
(group_unit, g1.1 e)
byrewrite (h e).
H: Univalence A, A', B: AbGroup f: A $-> A'
foralla : AbSES B A,
fmap (abses_pushout f) (Id a) $==
Id (abses_pushout f a)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
fmap (abses_pushout f) (Id E) $==
Id (abses_pushout f E)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A a': A' e: E
class_of
(funxy : A' * E =>
Tr (-1)
{x0 : A & (- f x0, inclusion E x0) = - x + y})
(a', group_unit) +
class_of
(funxy : A' * E =>
Tr (-1)
{x0 : A & (- f x0, inclusion E x0) = - x + y})
(group_unit, e) =
class_of
(funxy : A' * E =>
Tr (-1)
{x0 : A & (- f x0, inclusion E x0) = - x + y})
(a', e)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A a': A' e: E
a' + group_unit = a'
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A a': A' e: E
group_unit + e = e
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A a': A' e: E
a' + group_unit = a'
exact (grp_unit_r _).
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A a': A' e: E
group_unit + e = e
exact (grp_unit_l _).
H: Univalence A, A', B: AbGroup f: A $-> A'
forall (abc : AbSES B A) (f0 : a $-> b)
(g : b $-> c),
fmap (abses_pushout f) (g $o f0) $==
fmap (abses_pushout f) g $o fmap (abses_pushout f) f0
H: Univalence A, A', B: AbGroup f: A $-> A' E, F, G: AbSES B A g0: E $-> F g1: F $-> G
H: Univalence A, A', B: AbGroup f: A $-> A' E, F, G: AbSES B A g0: E $-> F g1: F $-> G a': A' e: E
class_of
(funxy : A' * G =>
Tr (-1)
{x0 : A & (- f x0, inclusion G x0) = - x + y})
(a', group_unit) +
class_of
(funxy : A' * G =>
Tr (-1)
{x0 : A & (- f x0, inclusion G x0) = - x + y})
(group_unit, g1.1 (g0.1 e)) =
class_of
(funxy : A' * G =>
Tr (-1)
{x0 : A & (- f x0, inclusion G x0) = - x + y})
(a' + group_unit, group_unit) +
class_of
(funxy : A' * G =>
Tr (-1)
{x0 : A & (- f x0, inclusion G x0) = - x + y})
(group_unit, g1.1 (group_unit + g0.1 e))
H: Univalence A, A', B: AbGroup f: A $-> A' E, F, G: AbSES B A g0: E $-> F g1: F $-> G a': A' e: E
a' + group_unit = a' + group_unit + group_unit
H: Univalence A, A', B: AbGroup f: A $-> A' E, F, G: AbSES B A g0: E $-> F g1: F $-> G a': A' e: E
exact (ap (funx => _ + g1.1 x) (grp_unit_l _)^).Defined.
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
fmap (abses_pushout f) (Id E) = Id (abses_pushout f E)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
fmap (abses_pushout f) (Id E) = Id (abses_pushout f E)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
(fmap (abses_pushout f) (Id E)).1 =
(Id (abses_pushout f E)).1
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
(fmap (abses_pushout f) (Id E)).1 ==
(Id (abses_pushout f E)).1
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A
foralla : ab_biprod A' E,
(funx : ab_biprod A' E /
in_cosetL
{|
normalsubgroup_subgroup :=
ab_pushout_subgroup f (inclusion E);
normalsubgroup_isnormal :=
isnormal_ab_subgroup (ab_biprod A' E)
(ab_pushout_subgroup f (inclusion E))
|} =>
(fmap (abses_pushout f) (Id E)).1 x =
(Id (abses_pushout f E)).1 x)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup :=
ab_pushout_subgroup f (inclusion E);
normalsubgroup_isnormal :=
isnormal_ab_subgroup (ab_biprod A' E)
(ab_pushout_subgroup f (inclusion E))
|}) a)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A a': A' e: E
class_of
(funxy : A' * E =>
Tr (-1)
{x0 : A & (- f x0, inclusion E x0) = - x + y})
(a', group_unit) +
class_of
(funxy : A' * E =>
Tr (-1)
{x0 : A & (- f x0, inclusion E x0) = - x + y})
(group_unit, e) =
class_of
(funxy : A' * E =>
Tr (-1)
{x0 : A & (- f x0, inclusion E x0) = - x + y})
(a', e)
H: Univalence A, A', B: AbGroup f: A $-> A' E: AbSES B A a': A' e: E
H: Univalence A, A', B: AbGroup f: A $-> A' E, F: AbSES B A p: E $== F
equiv_path_abses_iso^-1 (equiv_path_abses_iso p) = p
apply eissect.Defined.
H: Univalence A, A', B: AbGroup f: A $-> A'
abses_pushout f pt $== pt
H: Univalence A, A', B: AbGroup f: A $-> A'
abses_pushout f pt $== pt
H: Univalence A, A', B: AbGroup f: A $-> A'
abses_pushout f pt $-> pt
H: Univalence A, A', B: AbGroup f: A $-> A'
?proj1 $o inclusion (abses_pushout f pt) ==
inclusion pt
H: Univalence A, A', B: AbGroup f: A $-> A'
projection (abses_pushout f pt) ==
projection pt $o ?proj1
H: Univalence A, A', B: AbGroup f: A $-> A'
abses_pushout f pt $-> pt
H: Univalence A, A', B: AbGroup f: A $-> A'
pt $-> ab_biprod A' B
H: Univalence A, A', B: AbGroup f: A $-> A'
ab_biprod_inl o f == ?c o inclusion pt
H: Univalence A, A', B: AbGroup f: A $-> A'
pt $-> ab_biprod A' B
exact (functor_ab_biprod f grp_homo_id).
H: Univalence A, A', B: AbGroup f: A $-> A'
ab_biprod_inl o f ==
functor_ab_biprod f grp_homo_id o inclusion pt
reflexivity.
H: Univalence A, A', B: AbGroup f: A $-> A'
ab_pushout_rec ab_biprod_inl
(functor_ab_biprod f grp_homo_id) (funx0 : A => 1) $o
inclusion (abses_pushout f pt) == inclusion pt
H: Univalence A, A', B: AbGroup f: A $-> A' a': A'
(ab_pushout_rec ab_biprod_inl
(functor_ab_biprod f grp_homo_id) (funx0 : A => 1) $o
inclusion (abses_pushout f pt)) a' = inclusion pt a'
H: Univalence A, A', B: AbGroup f: A $-> A' a': A'
fst
((ab_pushout_rec ab_biprod_inl
(functor_ab_biprod f grp_homo_id)
(funx0 : A => 1) $o
inclusion (abses_pushout f pt)) a') =
fst (inclusion pt a')
H: Univalence A, A', B: AbGroup f: A $-> A' a': A'
snd
((ab_pushout_rec ab_biprod_inl
(functor_ab_biprod f grp_homo_id)
(funx0 : A => 1) $o
inclusion (abses_pushout f pt)) a') =
snd (inclusion pt a')
H: Univalence A, A', B: AbGroup f: A $-> A' a': A'
fst
((ab_pushout_rec ab_biprod_inl
(functor_ab_biprod f grp_homo_id)
(funx0 : A => 1) $o
inclusion (abses_pushout f pt)) a') =
fst (inclusion pt a')
H: Univalence A, A', B: AbGroup f: A $-> A' a': A'
a' + f 0 = a'
exact (ap _ (grp_homo_unit f) @ right_identity _).
H: Univalence A, A', B: AbGroup f: A $-> A' a': A'
snd
((ab_pushout_rec ab_biprod_inl
(functor_ab_biprod f grp_homo_id)
(funx0 : A => 1) $o
inclusion (abses_pushout f pt)) a') =
snd (inclusion pt a')
H: Univalence A, A', B: AbGroup f: A $-> A' a': A'
group_unit + 0 = group_unit
exact (right_identity _).
H: Univalence A, A', B: AbGroup f: A $-> A'
projection (abses_pushout f pt) ==
projection pt $o
ab_pushout_rec ab_biprod_inl
(functor_ab_biprod f grp_homo_id) (funx0 : A => 1)
H: Univalence A, A', B: AbGroup f: A $-> A'
foralla : ab_biprod A' pt,
(funx : ab_biprod A' pt /
in_cosetL
{|
normalsubgroup_subgroup :=
ab_pushout_subgroup f (inclusion pt);
normalsubgroup_isnormal :=
isnormal_ab_subgroup (ab_biprod A' pt)
(ab_pushout_subgroup f (inclusion pt))
|} =>
projection (abses_pushout f pt) x =
(projection pt $o
ab_pushout_rec ab_biprod_inl
(functor_ab_biprod f grp_homo_id)
(funx0 : A => 1)) x)
(class_of
(in_cosetL
{|
normalsubgroup_subgroup :=
ab_pushout_subgroup f (inclusion pt);
normalsubgroup_isnormal :=
isnormal_ab_subgroup (ab_biprod A' pt)
(ab_pushout_subgroup f (inclusion pt))
|}) a)
reflexivity.Defined.Definitionabses_pushout_point `{Univalence} {A A' B : AbGroup} (f : A $-> A')
: abses_pushout f (point (AbSES B A)) = pt
:= equiv_path_abses_iso (abses_pushout_point' f).Definitionabses_pushout' `{Univalence} {A A' B : AbGroup} (f : A $-> A')
: AbSES B A -->* AbSES B A'
:= Build_BasepointPreservingFunctor (abses_pushout f) (abses_pushout_point' f).Definitionabses_pushout_pmap `{Univalence} {A A' B : AbGroup} (f : A $-> A')
: AbSES B A ->* AbSES B A'
:= to_pointed (abses_pushout' f).(** The following general lemma lets us show that [abses_pushout f E] is trivial in cases of interest. It says that if you have a map [phi : E -> A'], then if you push out along the restriction [phi $o inclusion E], the result is trivial. Specifically, we get a morphism witnessing this fact. *)
B, A, A': AbGroup E: AbSES B A f: A $-> A' phi: E $-> A' k: f == phi $o inclusion E
AbSESMorphism E (pt : AbSES B A')
B, A, A': AbGroup E: AbSES B A f: A $-> A' phi: E $-> A' k: f == phi $o inclusion E
AbSESMorphism E (pt : AbSES B A')
B, A, A': AbGroup E: AbSES B A f: A $-> A' phi: E $-> A' k: f == phi $o inclusion E
E $-> pt
B, A, A': AbGroup E: AbSES B A f: A $-> A' phi: E $-> A' k: f == phi $o inclusion E
inclusion pt $o f == ?component2 $o inclusion E
B, A, A': AbGroup E: AbSES B A f: A $-> A' phi: E $-> A' k: f == phi $o inclusion E
projection pt $o ?component2 ==
grp_homo_id $o projection E
B, A, A': AbGroup E: AbSES B A f: A $-> A' phi: E $-> A' k: f == phi $o inclusion E
inclusion pt $o f ==
ab_biprod_corec phi (projection E) $o inclusion E
B, A, A': AbGroup E: AbSES B A f: A $-> A' phi: E $-> A' k: f == phi $o inclusion E
reflexivity.Defined.(** The pushout of a short exact sequence along its inclusion map is trivial. *)Definitionabses_pushout_inclusion_morphism {BA : AbGroup} (E : AbSES B A)
: AbSESMorphism E (pt : AbSES B E)
:= abses_pushout_trivial_morphism E (inclusion E) grp_homo_id (fun_ => idpath).Definitionabses_pushout_inclusion `{Univalence} {B A : AbGroup} (E : AbSES B A)
: abses_pushout (inclusion E) E = pt
:= abses_pushout_component3_id
(abses_pushout_inclusion_morphism E) (fun_ => idpath).(** Pushing out along [grp_homo_const] is trivial. *)Definitionabses_pushout_const_morphism {BAA' : AbGroup} (E : AbSES B A)
: AbSESMorphism E (pt : AbSES B A')
:= abses_pushout_trivial_morphism E
grp_homo_const grp_homo_const (fun_ => idpath).Definitionabses_pushout_const `{Univalence} {B A A' : AbGroup} (E : AbSES B A)
: abses_pushout grp_homo_const E = pt :> AbSES B A'
:= abses_pushout_component3_id
(abses_pushout_const_morphism E) (fun_ => idpath).(** Pushing out a fixed extension, with the map variable. This is the connecting map in the contravariant six-term exact sequence (see SixTerm.v). *)
H: Univalence B, A, G: AbGroup E: AbSES B A
ab_hom A G ->* AbSES B G
H: Univalence B, A, G: AbGroup E: AbSES B A
ab_hom A G ->* AbSES B G
H: Univalence B, A, G: AbGroup E: AbSES B A
ab_hom A G -> AbSES B G
H: Univalence B, A, G: AbGroup E: AbSES B A
?f pt = pt
H: Univalence B, A, G: AbGroup E: AbSES B A
(fung : ab_hom A G => abses_pushout g E) pt = pt
apply abses_pushout_const.Defined.(** ** Functoriality of pushing out *)(** For every [E : AbSES B A], the pushout of [E] along [id_A] is [E]. *)Definitionabses_pushout_id `{Univalence} {A B : AbGroup}
: abses_pushout (B:=B) (@grp_homo_id A) == idmap
:= funE => abses_pushout_component3_id (abses_morphism_id E) (fun_ => idpath).
by rapply Quotient_ind_hprop.Defined.(** Pushing out along homotopic maps induces homotopic pushout functors. This statement has a short proof by path induction on the homotopy [h], but we prefer to construct a path using [abses_path_data_iso] with better computational properties. *)
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f'
abses_pushout f $=> abses_pushout f'
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f'
abses_pushout f $=> abses_pushout f'
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
abses_path_data_iso (abses_pushout f E)
(abses_pushout f' E)
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
abses_path_data (abses_pushout f E)
(abses_pushout f' E)
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
abses_pushout f E $-> abses_pushout f' E
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
?proj1 $o inclusion (abses_pushout f E) ==
inclusion (abses_pushout f' E)
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
projection (abses_pushout f E) ==
projection (abses_pushout f' E) $o ?proj1
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
abses_pushout f E $-> abses_pushout f' E
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
E $-> abses_pushout f' E
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
inclusion (abses_pushout f' E) o f == ?c o inclusion E
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
inclusion (abses_pushout f' E) o f ==
ab_pushout_inr o inclusion E
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A x: A
inclusion (abses_pushout f' E) (f x) =
ab_pushout_inr (inclusion E x)
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A x: A
inclusion (abses_pushout f' E) (f' x) =
ab_pushout_inr (inclusion E x)
exact (ab_pushout_commsq x).
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
ab_pushout_rec (inclusion (abses_pushout f' E))
ab_pushout_inr
((funx : A =>
ap (inclusion (abses_pushout f' E)) (h x) @
ab_pushout_commsq x)
:
inclusion (abses_pushout f' E) o f ==
ab_pushout_inr o inclusion E) $o
inclusion (abses_pushout f E) ==
inclusion (abses_pushout f' E)
apply ab_pushout_rec_beta_left.
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A
projection (abses_pushout f E) ==
projection (abses_pushout f' E) $o
ab_pushout_rec (inclusion (abses_pushout f' E))
ab_pushout_inr
((funx : A =>
ap (inclusion (abses_pushout f' E)) (h x) @
ab_pushout_commsq x)
:
inclusion (abses_pushout f' E) o f ==
ab_pushout_inr o inclusion E)
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' E: AbSES B A a': A' e: E
group_unit + projection E e =
group_unit + projection E (group_unit + e)
exact (ap (funx => _ + projection E x) (grp_unit_l _)^).Defined.Definitionabses_pushout_homotopic `{Univalence} {A A' B : AbGroup}
(f f' : A $-> A') (h : f == f')
: abses_pushout (B:=B) f == abses_pushout f'
:= equiv_path_data_homotopy _ _ (abses_pushout_homotopic' _ _ h).
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f'
abses_pushout' f $=>* abses_pushout' f'
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f'
abses_pushout' f $=>* abses_pushout' f'
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f'
abses_pushout_homotopic' f f' h pt $==
bp_pointed (abses_pushout' f) $@
(bp_pointed (abses_pushout' f'))^$
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f'
bp_pointed (abses_pushout' f') $o
abses_pushout_homotopic' f f' h pt $==
bp_pointed (abses_pushout' f)
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' a': A' a: A b: B
(a' + group_unit, group_unit) + (f' (0 + a), 0 + b) =
(a', group_unit) + (f a, b)
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' a': A' a: A b: B
a' + group_unit + f' (0 + a) = a' + f a
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' a': A' a: A b: B
group_unit + (0 + b) = group_unit + b
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' a': A' a: A b: B
a' + group_unit + f' (0 + a) = a' + f a
byrewrite grp_unit_l, grp_unit_r, (h a).
H: Univalence A, A', B: AbGroup f, f': A $-> A' h: f == f' a': A' a: A b: B
group_unit + (0 + b) = group_unit + b
apply grp_unit_l.Defined.Definitionabses_pushout_phomotopic `{Univalence} {A A' B : AbGroup}
(f f' : A $-> A') (h : f == f')
: abses_pushout_pmap (B:=B) f ==* abses_pushout_pmap f'
:= equiv_ptransformation_phomotopy (abses_pushout_phomotopic' f f' h).
inclusion (abses_pushout g (abses_pushout f E))
o (g $o f) ==
component2
(abses_pushout_morphism (abses_pushout f E) g) $o
component2 (abses_pushout_morphism E f) o inclusion E
inclusion (abses_pushout g (abses_pushout f E))
((g $o f) a0) =
(component2
(abses_pushout_morphism (abses_pushout f E) g) $o
component2 (abses_pushout_morphism E f))
(inclusion E a0)