Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

Revision 0239ae5607dd869ef6ad18aa41b2a27ed5e0ed5d authored by Jarl G. Taxerås Flaten on 10 August 2023, 11:37:38 UTC, committed by GitHub on 10 August 2023, 11:37:38 UTC
add doi to README.md
1 parent 0d8bfe8
  • Files
  • Changes
  • 0316bec
  • /
  • XII_5.v
Raw File Download

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • revision
  • directory
  • content
revision badge
swh:1:rev:0239ae5607dd869ef6ad18aa41b2a27ed5e0ed5d
directory badge Iframe embedding
swh:1:dir:0316becdb6490aaf3f90d4626351c5e52016464e
content badge Iframe embedding
swh:1:cnt:d33d4400c656ec88e778f9736ebc696f34acf382

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • revision
  • directory
  • content
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
Generate software citation in BibTex format (requires biblatex-software package)
Generating citation ...
XII_5.v
From HoTT Require Import Basics Types Spaces.Nat WildCat Pointed
  Truncations HProp HSet HFiber Limits.Pullback ExactSequence
  AbGroups AbSES.


Require Import Lemmas EquivalenceRelation ES HigherExt.

Local Open Scope pointed_scope.
Local Open Scope type_scope.

(** We prove Lemma XII.5.3, Lemma XII.5.4, and Lemma XII.5.5 in Mac Lane's "Homology". Using these, we deduce the long exact sequence in LES.v. The statements are named [XII_5_3], [XII_5_4], and [XII_5_5], respectively. We do the proof on the level of [ES n] as opposed to the quotient [Ext n], since it's simpler to express things before truncating. Afterwards we show that analogous statements hold for [Ext n] in HigherExt.v. *)

(** Since we'll be proving several goals of the form "the following 3 statements are equivalent" we make a helper structure: *)

Definition TFAE3 (P Q R : Type) := (P -> Q) * (Q -> R) * (R -> P).

Definition TFAE3_merely (P Q R : Type)
  : TFAE3 P Q R -> TFAE3 (merely P) (merely Q) (merely R).
Proof.
  intros [[PQ QR] RP]; repeat split;
    apply Trunc_functor; assumption.
Defined.

Definition iff_TFAE3 {P P' Q Q' R R' : Type}
  (p : P <-> P') (q : Q <-> Q') (r : R <-> R')
  : TFAE3 P Q R -> TFAE3 P' Q' R'.
Proof.
  intros [[PQ QR] RP]; repeat split.
  - exact (fst q o PQ o snd p).
  - exact (fst r o QR o snd q).
  - exact (fst p o RP o snd r).
Defined.


(** * Lemma XII.5.3 *)

(** Given two short exact sequences [F] and [E] which can be spliced, the following are logically equivalent:
    a) F is in the image of of pullback along [inclusion E]
    b) E is in the image of pushout along [projection F]
    c) [es_splice F E] is trivial
**)

(** We start by showing that (a) <-> (b), which we need in order to show that (c) is equivalent to either. *)

Definition abses_spliceable_hfiber_inclusion_to_hfiber_projection
  `{Univalence} {C B A : AbGroup} (F : AbSES B A) (E : AbSES C B)
  : hfiber (abses_pullback (inclusion E)) F
    -> hfiber (abses_pushout (projection F)) E.
Proof.
  (* By inducting on the path, we assume definitionally that
     [F = abses_pullback (inclusion F) G]
     for some [G]. *)
  intros [G []].
  (* We construct the sequence [K] then show it lies in the fiber. *)
  srefine (let K:=_ in (K; _)).
  { srapply (Build_AbSES G).
    1: apply grp_pullback_pr1.
    1: exact (projection E $o projection G).
    1: rapply istruncmap_mapinO_tr.
    1: exact _.
    snrapply Build_IsExact.
    { apply phomotopy_homotopy_hset; intros [g [b q]]; cbn.
      refine (ap _ q @ _).
      apply isexact_inclusion_projection. }
    intros [g q]; rapply contr_inhabited_hprop; cbn.
    assert (b : Tr (-1) (hfiber (inclusion E) (projection G g))).
    1: exact (isexact_preimage _ _ (projection E) _ q).
    strip_truncations; apply tr.
    srefine ((g; b.1; _); _); cbn.
    1: exact b.2^.
    by apply equiv_path_sigma_hprop. }
  (* We construct a morphism which exhibits [K] as the pullback of [F]: *)
  snrefine (abses_pushout_component3_id
              (Build_AbSESMorphism _ _ grp_homo_id _ _)
              (fun _ => idpath)).
  1: exact (projection G).
  - intros [g [b q]]; cbn.
    exact q^.
  - reflexivity.
Defined.

Definition abses_spliceable_hfiber_projection_to_hfiber_inclusion
  `{U : Univalence} {C B A : AbGroup} (F : AbSES B A) (E : AbSES C B)
  : hfiber (abses_pushout (projection F)) E
    -> hfiber (abses_pullback (inclusion E)) F.
Proof.
  (* We assume that [H] is definitionally a pushout by inducting on the path. *)
  intros [H []].
  (* We first construct a sequence [K], afterwards we show that it's in the fibre. *)
  srefine (let K:=_ in (K; _)).
  { srapply (Build_AbSES H).
    1: exact (inclusion H $o inclusion F).
    1: apply ab_pushout_inr.
    1: exact _.
    1: rapply ab_pushout_surjection_inr.
    srapply Build_IsExact.
    { apply phomotopy_homotopy_hset; intro a.
      refine ((ab_pushout_commsq _)^ @ _).
      refine (ap ab_pushout_inl _ @ _).
      1: apply isexact_inclusion_projection.
      apply grp_homo_unit. }
    intros [h p]; rapply contr_inhabited_hprop.
    (* since [h] is in the kernel of [projection H], we can lift it to [e : E] *)
    assert (e : merely (hfiber (inclusion H) h)).
    { rapply (isexact_preimage (Tr (-1)) (inclusion H)).
      refine ((right_square (abses_pushout_morphism H (projection F)) h)^ @ _);
        unfold abses_pushout_morphism, component2.
      refine (ap _ p @ _).
      apply grp_homo_unit. }
    strip_truncations.
    (* since [inclusion F] is a mono, [e] is in the kernel of [projection E] *)
    assert (q : projection F e.1 = pt).
    { rapply (isinj_embedding (inclusion (abses_pushout (projection F) H))).
      refine (ab_pushout_commsq e.1 @ _ @ (grp_homo_unit _)^).
      exact (ap ab_pushout_inr e.2 @ p). }
    (* by exactness of [E] we get a preimage [a : A] of [e : E] *)
    pose (a := isexact_preimage (Tr (-1)) (inclusion F) _ _ q).
    generalize a; clear a. apply Trunc_functor; intro a.
    exists a.1.
    apply path_sigma_hprop; cbn.
    exact (ap (inclusion H) a.2 @ e.2). }
  snrefine (abses_pullback_component1_id
             (Build_AbSESMorphism grp_homo_id _ _ _ _)
             (fun _ => idpath))^.
  - exact (inclusion H).
  - reflexivity.
  - exact (fun x => (ab_pushout_commsq x)^).
Defined.

(** Lemma XII.5.3 (a) iff (b) *)
Definition iff_abses_spliceable_hfiber_projection_inclusion `{Univalence}
  {C B A : AbGroup} (F : AbSES B A) (E : AbSES C B)
  : hfiber (abses_pullback (inclusion E)) F
    <-> hfiber (abses_pushout (projection F)) E
  := (abses_spliceable_hfiber_inclusion_to_hfiber_projection F E,
       abses_spliceable_hfiber_projection_to_hfiber_inclusion F E).

(** We construct maps between fibres which are needed for the proof. *)
Definition es2_zig_fiber_projection `{Univalence} {C B B' A : AbGroup}
  {F : ES 1 B A} {E : ES 1 C B} {Y : ES 1 B' A} {X : ES 1 C B'}
  (zig : es_zig (es_splice F E) (es_splice Y X))
  : hfiber (abses_pushout (projection F)) E
    -> hfiber (abses_pushout (projection Y)) X.
Proof.
  intros [G p]; induction p.
  destruct zig as [phi [p q]]; cbn in phi, p, q.
  pose (phi' := abses_path_pullback_projection_commsq phi _ _ p^).
  destruct phi' as [phi' r].
  exists (abses_pushout phi' G).
  refine ((abses_pushout_compose _ _ _)^ @ _).
  refine (abses_pushout_homotopic _ (grp_homo_compose phi (projection F)) _ _ @ _).
  1: exact r.
  exact (abses_pushout_compose _ _ _ @ q).
Defined.

Definition es2_zag_fiber_inclusion `{Univalence} {C B B' A : AbGroup}
  {F : ES 1 B A} {E : ES 1 C B} {Y : ES 1 B' A} {X : ES 1 C B'}
  (zag : es_zig (es_splice Y X) (es_splice F E))
  : hfiber (abses_pullback (inclusion E)) F
    -> hfiber (abses_pullback (inclusion X)) Y.
Proof.
  intros [G p]; induction p.
  destruct zag as [phi [p q]]; cbn in phi, p, q.
  pose (phi' := abses_path_pushout_inclusion_commsq phi _ _ q).
  destruct phi' as [phi' r].
  exists (abses_pullback phi' G).
  refine (abses_pullback_compose _ _ _ @ _).
  refine (abses_pullback_homotopic _ (inclusion E $o phi) _ _ @ _).
  1: symmetry; exact r.
  exact ((abses_pullback_compose _ _ _)^ @ p^).
Defined.

Lemma XII_5_3 `{Univalence} {C B A : AbGroup} (F : ES 1 B A) (E : ES 1 C B)
  : TFAE3 (hfiber (abses_pullback (inclusion E)) F)
      (hfiber (abses_pushout (projection F)) E)
      (pt ~ (es_splice F E)).
Proof.
  repeat split.
  - apply abses_spliceable_hfiber_inclusion_to_hfiber_projection.
  - (* (b) -> (c)  can be shown directly *)
    intros [G p]; induction p.
    exists 2%nat. (* pt <- (E (projection E) <> F) -> E <> (projection E) F *)
    refine (_; (_, inl (es_morphism_abses_zig _ _ _))).
    refine (pt; (idpath, inr _)).
    exists grp_homo_const; split; cbn.
    + refine (_ @ (abses_pullback_point _)^).
      exact (abses_pullback_projection F)^.
    + exact (abses_pushout_const G).
  - (* for (c) -> (a) we need to use that we know (a) <-> (b) *)
    intros [n zzs].
    revert dependent B.
    induction n as [|n IH]; intros.
    + (* the base case can be shown directly *)
      cbn in zzs.
      apply (transport (fun X : ES 2 C A =>
                          hfiber (abses_pullback (inclusion (snd X.2)))
                            (fst X.2)) zzs); cbn.
      exists pt.
      apply abses_pullback_point.
    + destruct zzs as [[D [X0 X1]] [zzs [zig|zag]]].
      (* note: X is definitionally in the image of es_splice *)
      * apply abses_spliceable_hfiber_projection_to_hfiber_inclusion.
        apply (es2_zig_fiber_projection zig).
        apply abses_spliceable_hfiber_inclusion_to_hfiber_projection.
        exact (IH _ X0 X1 zzs).
      * apply (es2_zag_fiber_inclusion zag).
        by apply IH.
Defined.


(** * Lemma XII.5.4 *)

(** Lemma XII.5.4 gives an equivalent condition to (b) in Lemma XII.5.3 which generalises to [ES n]. The condition is that the following type is inhabited: *)
Definition es_ii_family `{Univalence} {n : nat} {C B A : AbGroup}
  : ES n.+1 B A -> ES 1 C B -> Type
  := fun F E => { alpha : { B' : AbGroup & B' $-> B }
                       & (pt ~ es_pullback alpha.2 F)
                         * (hfiber (abses_pushout alpha.2) E) }.

(** The logical equivalence with condition (b) above. *)
Lemma XII_5_4 `{Univalence} {C B A : AbGroup} (F : ES 1 B A) (E : ES 1 C B)
  : hfiber (abses_pushout (projection F)) E <-> es_ii_family F E.
Proof.
  split.
  - intros [G p]; induction p.
    exists (middle F; projection F); split.
    + apply abses_pullback_projection.
    + cbn. exact (G; idpath).
  - intros [[B' alpha] [p [G q]]]; cbn in *.
    pose (phi := abses_pullback_trivial_factors_projection p).
    destruct phi as [phi gamma].
    exists (abses_pushout phi G).
    refine ((abses_pushout_compose _ _ _)^ @ _).
    refine (abses_pushout_homotopic _ _ _ _ @ _).
    1: exact (equiv_path_grouphomomorphism^-1 gamma^).
    assumption.
Defined.

(** We rephrase Lemma XII.5.3 in general terms for later use. *)
Theorem XII_5_3' `{Univalence} {C B A : AbGroup} (F : ES 1 B A) (E : ES 1 C B)
  : TFAE3 (rfiber es_zig (es_pullback (inclusion E)) F)
      (es_ii_family F E)
      (pt ~ (es_splice F E)).
Proof.
  repeat split.
  - refine (_ o _).
    + apply XII_5_4.
    + apply XII_5_3.
  - refine (_ o _).
    + apply XII_5_3.
    + apply XII_5_4.
  - apply XII_5_3.
Defined.


(** * Lemma XII.5.5 *)

(** For [F : ES n.+1 B A] and [E : ES 1 C B], the following are equivalent:
 a) F is in the image of pullback along [inclusion E]
 b) [es_ii_family F E] holds
 c) [es_splice F E] is trivial
**)

(** The proof is structurally similar to Lemma XII.5.3; we need to know that (a) iff (b) in order to show the equivalence with (c). *)

Definition es_zig_fiber_projection `{Univalence} {n : nat} {C B B' A : AbGroup}
  {F : ES n.+1 B A} {E : ES 1 C B} {Y : ES n.+1 B' A} {X : ES 1 C B'}
  (zig : es_zig (es_abses_splice F E) (es_abses_splice Y X))
  : es_ii_family F E -> es_ii_family Y X.
Proof.
  intros [[B'' alpha] [zz [G p]]]; induction p.
  unfold pr2 in zz, zig; unfold pr1 in G.
  destruct zig as [phi [p q]]; cbn in phi, q; unfold es_abses_splice in p.
  exists (B''; grp_homo_compose phi alpha); split; unfold pr2.
  2: exact (G; abses_pushout_compose _ _ _ @ q).
  rewrite <- es_pullback_compose.
  etransitivity.
  2: { apply rap_pullback.
       destruct n.
       + by induction p.
       + exact (zig_to_eqrel _ p). }
  assumption.
Defined.

Definition es_zag_fiber_inclusion `{Univalence} {n : nat} {C B B' A : AbGroup}
  {F : ES n.+1 B A} {E : ES 1 C B} {Y : ES n.+1 B' A} {X : ES 1 C B'}
  (zag : es_zig (es_abses_splice Y X) (es_abses_splice F E))
  : rfiber es_eqrel (es_pullback (inclusion E)) F
    -> rfiber es_eqrel (es_pullback (inclusion X)) Y.
Proof.
  destruct n.
  1: by apply es2_zag_fiber_inclusion.
  intros [G zz].
  destruct zag as [phi [p q]]; cbn in phi, q; unfold es_abses_splice in p.
  pose (phi' := abses_path_pushout_inclusion_commsq phi _ _ q).
  destruct phi' as [phi' r].
  exists (es_pullback phi' G).
  transitivity (es_pullback phi F).
  2: exact (zag_to_eqrel _ p).
  refine (transport (fun X => X ~ _) _ _).
  { refine (_ @ (es_pullback_compose _ _ _)^).
    refine (_ @ es_pullback_homotopic (f:=inclusion E $o phi) _ _).
    2: exact r.
    exact (es_pullback_compose _ _ _). }
  apply rap_pullback.
  exact zz.
Defined.

(** Lemma XII.5.5 (i) -> (ii) *)
Definition es_spliceable_rfiber_inclusion_es_ii_family `{Univalence} {n : nat}
  {C B A : AbGroup} (F : ES n.+1 B A) (E : ES 1 C B)
  : rfiber es_eqrel (es_pullback (inclusion E)) F -> es_ii_family F E.
Proof.
  destruct n.
  1: intro; by apply XII_5_4,
      abses_spliceable_hfiber_inclusion_to_hfiber_projection.
  intros [[? [G0 G1]] p].
  pose (T := abses_pullback (inclusion E) G1).
  exists (middle T; projection T); split; unfold pr2.
  - etransitivity.
    2: exact (rap_pullback _ _ _ p).
    unfold es_pullback.
    rewrite <- abses_pullback_projection.
    apply zig_to_eqrel.
    nrapply es_splice_point_abses.
  - apply abses_spliceable_hfiber_inclusion_to_hfiber_projection.
    exact (G1; idpath).
Defined.

(** A preliminary result for Lemma XII.5.5: given Lemma XII.5.5 at level n, we deduce (i) iff (ii) on level n+1. *)
Lemma XII_5_5_prelim `{Univalence} {n : nat}
  : (forall {C B A : AbGroup} (F : ES n.+1 B A) (E : ES 1 C B),
    TFAE3 (rfiber es_eqrel (es_pullback (inclusion E)) F)
      (es_ii_family F E)
      (pt ~ (es_abses_splice F E)))
    -> (forall {C B A : AbGroup} (F : ES n.+2 B A) (E : ES 1 C B),
           (rfiber es_eqrel (es_pullback (inclusion E)) F)
           <-> es_ii_family F E).
Proof.
  intro IH; split.
  1: apply es_spliceable_rfiber_inclusion_es_ii_family.
  destruct F as [C' [T F]].
  intros [[B' alpha] [p [E' q]]]; unfold pr2 in p, q.
  assert (T' : rfiber es_eqrel
                (es_pullback (inclusion (abses_pullback alpha F))) T).
  1: apply IH; exact p.
  assert (F' : hfiber (abses_pullback (inclusion E))
                 (abses_pushout (inclusion (abses_pullback alpha F)) F)).
  { apply XII_5_3.
    induction q.
    etransitivity.
    2: nrapply es_morphism_abses_eqrel.
    unfold es_pullback.
    rewrite (abses_pushout_pullback_reorder F _ alpha)^.
    rewrite abses_pushout_inclusion.
    apply zag_to_eqrel.
    nrapply es_point_splice_abses. }
  destruct F' as [F' r], T' as [T' r'].
  exists (es_abses_splice T' F').
  unfold es_pullback, es_abses_splice.
  rewrite r.
  etransitivity.
  1: symmetry; nrapply es_morphism_abses_eqrel.
  exact (rap_splice _ _ _ r').
Defined.

(** It is useful to have a name for this family below. *)
Local Definition XII_5_5_family `{Univalence} {n : nat} {B A : AbGroup}
  : ES n.+2 B A -> Type.
Proof.
  intros [C [F E]].
  exact (rfiber es_eqrel (es_pullback (inclusion E)) F).
Defined.
  
Lemma XII_5_5 `{Univalence} {n : nat}
  : forall {C B A : AbGroup} (F : ES n.+1 B A) (E : ES 1 C B),
    TFAE3 (rfiber es_eqrel (es_pullback (inclusion E)) F)
      (es_ii_family F E)
      (pt ~ (es_abses_splice F E)).
Proof.
  induction n as [|n IHn]; intros.
  1: apply XII_5_3'.
  repeat split.
  - apply es_spliceable_rfiber_inclusion_es_ii_family.
  - intros [[B' alpha] [[m zzs] [G p]]]; induction p.
    unfold pr1, pr2 in *.
    etransitivity.
    2: nrapply es_morphism_abses_eqrel.
    etransitivity (es_abses_splice (pt : ES n.+2 B' A) G).
    2: { rapply rap_splice.
         exact (m; zzs). }
    apply zag_to_eqrel.
    apply es_point_splice_abses.
  - intros [m zzs].
    revert dependent B.
    induction m as [|m IHm]; intros.
    + nrapply (transport XII_5_5_family zzs).
      exists pt.
      exists (0%nat); rapply es_pullback_point.
    + destruct zzs as [[D [X0 X1]] [zzs [zig|zag]]].
      * apply (XII_5_5_prelim IHn).
        apply (es_zig_fiber_projection zig).
        apply (XII_5_5_prelim IHn).
        by apply IHm.
      * apply (es_zag_fiber_inclusion zag).
        by apply IHm.
Defined.


(** * Lemma XII.5.5 for [Ext n] *)

(** Relating condition (i) for ES and Ext. *)

Definition es_rfiber_to_ext_hfiber `{Univalence} {n : nat}
  {C B A : AbGroup} (F : ES n.+1 B A) (E : ES 1 C B)
  : rfiber es_eqrel (es_pullback (inclusion E)) F
    -> hfiber (ext_pullback (inclusion E)) (es_in F).
Proof.
  apply (functor_sigma es_in); intros G rho.
  destruct n.
  1: by destruct rho. (* path induction *)
  rapply path_quotient.
  exact (tr rho).
Defined.

Definition ext_hfiber_to_mere_es_rfiber `{Univalence} {n : nat}
  {C B A : AbGroup} (F : ES n.+1 B A) (E : ES 1 C B)
  : hfiber (ext_pullback (inclusion E)) (es_in F)
    -> merely (rfiber es_eqrel (es_pullback (inclusion E)) F).
Proof.
  intros [G p].
  (* First we choose a representative for G. *)
  assert (G' : Tr (-1) (hfiber es_in G)).
  1: destruct n; rapply center. (* both tr and class_of are surjective *)
  strip_truncations.
  destruct G' as [G' q]; induction q.
  (* by inducting on [q], [G'] is definitionally in the image of [tr] *)
  destruct n.
  - pose proof (q := (equiv_path_Tr _ _)^-1 p); strip_truncations.
    exact (tr (G'; q)).
  -pose proof (q := (path_quotient _ _ _)^-1 p); strip_truncations.
   exact (tr (G'; q)).
Defined.

Definition iff_es_rfiber_ext_hfiber `{Univalence} {n : nat}
  {C B A : AbGroup} (F : ES n.+1 B A) (E : ES 1 C B)
  : merely (rfiber es_eqrel (es_pullback (inclusion E)) F)
    <-> merely (hfiber (ext_pullback (inclusion E)) (es_in F)).
Proof.
  split.
  - apply Trunc_functor, es_rfiber_to_ext_hfiber.
  - apply Trunc_rec, ext_hfiber_to_mere_es_rfiber.
Defined.

(** Relating condition (ii) for ES and Ext. *)

Definition ext_ii_family `{Univalence} {n : nat} {C B A : AbGroup}
  : Ext n.+1 B A -> Ext 1 C B -> Type
  := fun F E => { bt : { B' : AbGroup & B' $-> B }
                    & (pt = ext_pullback bt.2 F :> Ext n.+1 bt.1 A)
                      * (hfiber (ext_pushout bt.2) E) }.

(** Condition (iii) for ES and Ext. *)

Lemma iff_iii `{Univalence} {n : nat} {C B A : AbGroup}
  (F : ES n.+1 B A) (E : ES 1 C B)
  : (es_meqrel pt (es_abses_splice F E))
    <-> (pt = ext_abses_splice (es_in F) E).
Proof.
  apply (equiv_equiv_iff_hprop _ _)^-1.
  destruct n; rapply path_quotient.
Defined.

(** Now we show that [ext_ii_family] corresponds to the propositional truncation of [ii_family] from ES.v. *)

Lemma iff_es_ext_ii_family `{Univalence} {n : nat} {C B A : AbGroup}
  (F : ES n.+1 B A) (E : ES 1 C B)
  : merely (es_ii_family F E)
    <-> merely (ext_ii_family (es_in F) (es_in E)).
Proof.
  apply (equiv_equiv_iff_hprop _ _)^-1.
  refine (equiv_O_sigma_O _ _ oE _ oE (equiv_O_sigma_O _ _)^-1).
  apply Trunc_functor_equiv.
  apply equiv_functor_sigma_id; intros [B' alpha].
  refine ((equiv_O_prod_cmp _ _ _)^-1 oE _ oE equiv_O_prod_cmp _ _ _).
  apply equiv_functor_prod'.
  { destruct n.
    all: refine (equiv_tr _ _ oE _).
    - apply equiv_path_Tr.
    - rapply path_quotient. }
  refine (_ oE (equiv_O_sigma_O _ _)^-1).
  apply equiv_iff_hprop.
  - apply Trunc_functor.
    apply (functor_sigma tr); cbn; intro G.
    apply path_Tr.
  - apply Trunc_rec; cbn; intros [G p].
    revert p; strip_truncations; cbn.
    rapply (equiv_ind (equiv_path_Tr _ _)).
    apply Trunc_functor; intro p.
    exact (G; tr p).
Defined.

(** Now Lemma XII.5.5 follows for Ext as well. *)

Lemma ext_XII_5_5 `{Univalence} {n : nat} {C B A : AbGroup}
  (F : ES n.+1 B A) (E : ES 1 C B)
  : TFAE3 (merely (hfiber (ext_pullback (inclusion E)) (es_in F)))
      (merely (ext_ii_family (es_in F) (es_in E)))
      (pt = ext_abses_splice (es_in F) E).
Proof.
  rapply iff_TFAE3.
  - apply iff_es_rfiber_ext_hfiber.
  - apply iff_es_ext_ii_family.
  - apply iff_iii.
  - apply TFAE3_merely.
    apply XII_5_5.
Defined.
The diff you're trying to view is too large. Only the first 1000 changed files have been loaded.
Showing with 0 additions and 0 deletions (0 / 0 diffs computed)
swh spinner

Computing file changes ...

back to top

Software Heritage — Copyright (C) 2015–2025, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API