{-# OPTIONS --without-K --exact-split --two-level #-}
--------------------------------------------------------------------------------
-- Definition 4.3 (and its two coherence notions).
--
-- For a 2LTT cofibration i : Ξ¦ βͺ Ξ¨ and a fibrant universe (here the inner
-- universe `UU π€`), a *Glue structure* sends every input triple
--
-- A : Ξ¨ β π€, T : Ξ¦ β π€, e : Ξ (Ο). T Ο β A(iΟ)
--
-- to an output triple
--
-- G : Ξ¨ β π€, p : Gβi β T, u : Ξ (Ο). G Ο β A Ο
--
-- (the top triangle commutes *strictly* via p; the bottom globe commutes up to
-- equivalence via u). It is *strictly* / *homotopy* coherent if u restricts to
-- e up to strict / fibrant equality, comparing e along p (`coerce-e`). For a
-- fixed input, `GlueData` is the type of quadruples (G,p,u,c) with c a strict
-- coherence witness.
--------------------------------------------------------------------------------
module Extension.GlueStructure where
open import Extension.Prelude
private
variable
βΟ βΞ¨ π€ : Level
-- ΞΉ-fun : the paper's ΞΉ at a boundary, a strict equality of universe-valued
-- functions yields, pointwise, a path in the universe. (One cannot form
-- `X =α΅ Y` for universe elements directly, since `UU π€` is not an exo type; but
-- a strict equality of *functions into* `UU π€` lives on the exo function type,
-- and exo-J turns it into inner paths of the values.)
ΞΉ-fun : {Ξ¦ : UUα΅ βΟ} (f g : Ξ¦ β UU π€) β f =α΅ g β (Ο : Ξ¦) β Id (f Ο) (g Ο)
ΞΉ-fun f .f reflα΅ Ο = refl
module _ {Ξ¦ : UUα΅ βΟ} {Ξ¨ : UUα΅ βΞ¨} (i : Ξ¦ β Ξ¨) (π€ : Level) where
-- Input triple (A, T, e).
GlueInput : UUα΅ (βΟ β βΞ¨ β lsuc π€)
GlueInput = Ξ£α΅ (Ξ¨ β UU π€)
(Ξ» A β Ξ£α΅ (Ξ¦ β UU π€) (Ξ» T β (Ο : Ξ¦) β C (T Ο β A (i Ο))))
module _ (A : Ξ¨ β UU π€) (T : Ξ¦ β UU π€) (e : (Ο : Ξ¦) β C (T Ο β A (i Ο))) where
-- Output triple (G, p, u): item (1).
GlueOutput : UUα΅ (βΟ β βΞ¨ β lsuc π€)
GlueOutput = Ξ£α΅ (Ξ¨ β UU π€)
(Ξ» G β Ξ£α΅ ((Ξ» Ο β G (i Ο)) =α΅ T)
(Ξ» _ β (Ο : Ξ¨) β C (G Ο β A Ο)))
-- e with its source coerced from T to Gβi along p (writes e^p). Transport
-- in the *exo* family H β¦ Ξ (Ο).C(H Ο β A(iΟ)) over H : Ξ¦ β UU π€ (which is an
-- exo type), avoiding an exo-transport indexed by the universe itself.
coerce-e : (G : Ξ¨ β UU π€) β (Ξ» Ο β G (i Ο)) =α΅ T β (Ο : Ξ¦) β C (G (i Ο) β A (i Ο))
coerce-e G p = exo-tr (Ξ» H β (Ο : Ξ¦) β C (H Ο β A (i Ο))) (exo-inv p) e
-- Item (3): strict coherence, u restricts to e up to strict equality.
is-strictly-coherent : GlueOutput β UUα΅ (βΟ β π€)
is-strictly-coherent (G ,α΅ (p ,α΅ u)) = (Ο : Ξ¦) β u (i Ο) =α΅ coerce-e G p Ο
-- Item (2): homotopy coherence, u restricts to e up to fibrant equality.
is-homotopy-coherent : GlueOutput β UUα΅ (βΟ β π€)
is-homotopy-coherent (G ,α΅ (p ,α΅ u)) =
(Ο : Ξ¦) β C (Id (ic (u (i Ο))) (ic (coerce-e G p Ο)))
-- GlueData_{i,π€}(A,T,e): quadruples (G,p,u,c) with c strict coherence.
GlueData : UUα΅ (βΟ β βΞ¨ β lsuc π€)
GlueData = Ξ£α΅ GlueOutput is-strictly-coherent
-- Lemma 5.13(2): strict coherence yields homotopy coherence,
-- by coercing the strict equality to a fibrant path (`=α΅-to-Id`).
strict-coh-to-homotopy-coh : (out : GlueOutput)
β is-strictly-coherent out β is-homotopy-coherent out
strict-coh-to-homotopy-coh (G ,α΅ (p ,α΅ u)) coh Ο = c (=α΅-to-Id (coh Ο))
-- A Glue structure / strictly-coherent Glue structure for (i, π€):
-- an output (resp. coherent quadruple) for every input triple.
has-glue-structure : UUα΅ (βΟ β βΞ¨ β lsuc π€)
has-glue-structure =
(A : Ξ¨ β UU π€) (T : Ξ¦ β UU π€) (e : (Ο : Ξ¦) β C (T Ο β A (i Ο)))
β GlueOutput A T e
has-strictly-coherent-glue : UUα΅ (βΟ β βΞ¨ β lsuc π€)
has-strictly-coherent-glue =
(A : Ξ¨ β UU π€) (T : Ξ¦ β UU π€) (e : (Ο : Ξ¦) β C (T Ο β A (i Ο)))
β GlueData A T e
-- The strong Glue structure (Definition 5.2) demands contractibility of
-- GlueData as a fibrant type (inner `is-contr` of its fibrant match). Since
-- the fibrancy of GlueData is established in `Extension.GlueDataFibrant`
-- (which imports this module), the definition `has-strong-glue-structure`
-- and Lemma 5.13(1) (`strong-to-strict`) live there.
-- A homotopy coherent Glue structure for (i, π€).
has-homotopy-coherent-glue : UUα΅ (βΟ β βΞ¨ β lsuc π€)
has-homotopy-coherent-glue =
(A : Ξ¨ β UU π€) (T : Ξ¦ β UU π€) (e : (Ο : Ξ¦) β C (T Ο β A (i Ο)))
β Ξ£α΅ (GlueOutput A T e) (is-homotopy-coherent A T e)
-- Unfolding of coerce-e: its underlying map is e's underlying map precomposed
-- with the coercion idtoeqv(ΞΉ Ξ²_Ο). Proved by exo-J on the boundary Ξ², at
-- reflα΅ the transport is the identity and ΞΉ Ξ²_Ο is refl. This is the
-- `idtoeqv(ΞΉ Ξ²) ~ c_Ξ²` step of Lemma 5.13(3).
coerce-e-und : (A : Ξ¨ β UU π€) (G : Ξ¨ β UU π€) (T : Ξ¦ β UU π€)
(e : (Ο : Ξ¦) β C (T Ο β A (i Ο)))
(Ξ² : (Ξ» Ο β G (i Ο)) =α΅ T) (Ο : Ξ¦) (x : G (i Ο))
β Id (pr1 (ic (coerce-e A T e G Ξ² Ο)) x)
(pr1 (ic (e Ο)) (pr1 (idtoeqv (ΞΉ-fun (Ξ» Ο' β G (i Ο')) T Ξ² Ο)) x))
coerce-e-und A G .(Ξ» Ο' β G (i Ο')) e reflα΅ Ο x = refl
-- The universal glue-data family W Ο = Ξ£(X:π€). X β A Ο (Lemma 5.1).
W : (A : Ξ¨ β UU π€) β Ξ¨ β UU (lsuc π€)
W A Ο = Ξ£ (UU π€) (Ξ» X β X β A Ο)
-- Boundary correspondence, forward: the pair (Ξ², coherence) of a Glue datum
-- gives the strict boundary of the corresponding W-section. By exo-J on Ξ².
bdry-pt : (A G : Ξ¨ β UU π€) (T : Ξ¦ β UU π€) (e : (Ο : Ξ¦) β C (T Ο β A (i Ο)))
(u : (Ο : Ξ¨) β C (G Ο β A Ο)) (Ξ² : (Ξ» Ο β G (i Ο)) =α΅ T)
(cc : (Ο : Ξ¦) β u (i Ο) =α΅ coerce-e A T e G Ξ² Ο) (Ο : Ξ¦)
β c {A = W A (i Ο)} (G (i Ο) , ic (u (i Ο))) =α΅ c {A = W A (i Ο)} (T Ο , ic (e Ο))
bdry-pt A G .(Ξ» Ο' β G (i Ο')) e u reflα΅ cc Ο =
exo-ap (Ξ» (q : C (G (i Ο) β A (i Ο))) β c {A = W A (i Ο)} (G (i Ο) , ic q)) (cc Ο)
-- Boundary correspondence, backward: the strict boundary p of a W-section
-- gives the coherence of the corresponding Glue datum. By exo-J on p.
bdry-pt-inv : (A : Ξ¨ β UU π€) (w : (Ο : Ξ¨) β C (W A Ο))
(wβ : (Ο : Ξ¦) β C (W A (i Ο)))
(p : (Ξ» Ο β w (i Ο)) =α΅ wβ) (Ο : Ξ¦)
β c (pr2 (ic (w (i Ο))))
=α΅ coerce-e A (Ξ» Ο' β pr1 (ic (wβ Ο'))) (Ξ» Ο' β c (pr2 (ic (wβ Ο'))))
(Ξ» Ο β pr1 (ic (w Ο)))
(exo-ap (Ξ» v Ο' β pr1 (ic (v Ο'))) p) Ο
bdry-pt-inv A w .(Ξ» Ο' β w (i Ο')) reflα΅ Ο = reflα΅