{-# OPTIONS --without-K --exact-split --two-level #-}
module Extension.GlueConstructorPackage where
open import Extension.Prelude
open import Extension.Core
using (Ext ; restrict ; ext-≡ ; pr1ᵉ-exo-tr-const ; exo-tr-ap')
open import Extension.CofibFibration using (is-cofib ; Ext-isFibrant ; i*)
open import Extension.GlueLiteralRules using (module GlueNotation)
open import Extension.GlueHomotopySemantic using (tr-inv-tr ; pairΣC-eq)
open import Extension.PiTruncation using (funext-Id-equiv)
open import Extension.RS410Pack using (HEP ; hep)
open import Extension.RelFunext using (rel-funext-holds)
open import Extension.RS412Ext using (match-equiv)
open import Extension.FundamentalId using (tot)
open import Extension.CanonicalFibre
using (value-to-fiber ; value-to-fiber-isEquiv)
open import Extension.HomFillers
using (module MatchedFibreEngine ; tot-isEquiv ; inv-path-isEquiv ;
isEquiv-htpy ; isEquiv-left-cancel)
private
variable
ℓ ℓ' ℓ'' ℓφ ℓΨ ℓX ℓS 𝓤 : Level
swapΣ : {A : UU ℓ} {B : UU ℓ'} {R : A → B → UU ℓ''}
→ Σ A (λ a → Σ B (λ b → R a b)) ≃ Σ B (λ b → Σ A (λ a → R a b))
swapΣ {A = A} {B} {R} =
sw , invertibles-are-equiv sw (sw' , (λ _ → refl) , (λ _ → refl))
where
sw : Σ A (λ a → Σ B (λ b → R a b)) → Σ B (λ b → Σ A (λ a → R a b))
sw (x , y , r) = (y , x , r)
sw' : Σ B (λ b → Σ A (λ a → R a b)) → Σ A (λ a → Σ B (λ b → R a b))
sw' (y , x , r) = (x , y , r)
pr1-contr-isEquiv : {A : UU ℓ} {P : A → UU ℓ'}
→ ((a : A) → is-contr (P a)) → isEquiv (pr1 {B = P})
pr1-contr-isEquiv h a =
is-contr-cong (value-to-fiber a , value-to-fiber-isEquiv a) (h a)
module MatchPath {ℓX 𝓤 : Level} {X : UUᵉ ℓX}
(cofX : isCofibrant X 𝓤) (Y : X → UU 𝓤) where
private
WY = Π-fibrant-witness (cofX Y)
tY = pr1ᵉ (fibrant-witness WY)
fY = pr1ᵉ (pr2ᵉ (fibrant-witness WY))
ftY = pr1ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WY)))
match-of : ((x : X) → C (Y x)) → fibrant-match WY
match-of g = ic (tY g)
match-path-of-pointwise :
(g₁ g₂ : (x : X) → C (Y x))
→ ((x : X) → Id (ic (g₁ x)) (ic (g₂ x)))
→ Id (match-of g₁) (match-of g₂)
match-path-of-pointwise g₁ g₂ H =
pr1 (≃-sym (funext-Id-equiv cofX Y g₁ (match-of g₂))) q
where
WId = Π-fibrant-witness
(cofX (λ x → Id (ic (g₁ x)) (ic (fY (c (match-of g₂)) x))))
q : fibrant-match WId
q = ic (pr1ᵉ (fibrant-witness WId)
(λ x → c (H x · cic-eq (exo-inv (happlyᵉ (ftY g₂) x)))))
module ProductEquiv {ℓX 𝓤 : Level} {X : UUᵉ ℓX} (cofX : isCofibrant X 𝓤)
(B Y : X → UU 𝓤)
(v : (x : X) → B x → Y x)
(ev : (x : X) → C (isEquiv (v x)))
where
private
WB = Π-fibrant-witness (cofX B)
tB = pr1ᵉ (fibrant-witness WB)
fB = pr1ᵉ (pr2ᵉ (fibrant-witness WB))
ftB = pr1ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WB)))
tfB = pr2ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WB)))
WY = Π-fibrant-witness (cofX Y)
tY = pr1ᵉ (fibrant-witness WY)
fY = pr1ᵉ (pr2ᵉ (fibrant-witness WY))
ftY = pr1ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WY)))
tfY = pr2ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WY)))
MB : UU (ℓX ⊔ 𝓤)
MB = fibrant-match WB
MY : UU (ℓX ⊔ 𝓤)
MY = fibrant-match WY
vΠ : ((x : X) → C (B x)) → ((x : X) → C (Y x))
vΠ h x = c (v x (ic (h x)))
wΠ : ((x : X) → C (Y x)) → ((x : X) → C (B x))
wΠ g x = c (inv (v x) (ic (ev x)) (ic (g x)))
v-match : MB → MY
v-match m = ic (tY (vΠ (fB (c m))))
w-match : MY → MB
w-match m = ic (tB (wΠ (fY (c m))))
private
sect : (m : MY) → Id (v-match (w-match m)) m
sect m =
cic-eq (exo-ap (λ h → tY (vΠ h)) (ftB (wΠ g)))
· (MatchPath.match-path-of-pointwise cofX Y (vΠ (wΠ g)) g
(λ x → inv-is-section (v x) (ic (ev x)) (ic (g x)))
· cic-eq (tfY (c m)))
where
g = fY (c m)
retr : (m : MB) → Id (w-match (v-match m)) m
retr m =
cic-eq (exo-ap (λ g → tB (wΠ g)) (ftY (vΠ h)))
· (MatchPath.match-path-of-pointwise cofX B (wΠ (vΠ h)) h
(λ x → inv-is-retraction (v x) (ic (ev x)) (ic (h x)))
· cic-eq (tfB (c m)))
where
h = fB (c m)
v-match-isEquiv : isEquiv v-match
v-match-isEquiv = invertibles-are-equiv v-match (w-match , retr , sect)
module _ {Φ : UUᵉ ℓφ} {Ψ : UUᵉ ℓΨ} (i : Φ → Ψ) {𝓤 : Level}
(A : Ψ → UU 𝓤) (T : Φ → UU 𝓤) (f : (φ : Φ) → C (T φ ≃ A (i φ)))
(G : Ψ → UU 𝓤) (p : (λ φ → G (i φ)) =ᵉ T)
(ung : (ψ : Ψ) → G ψ → A ψ)
(ubd : (φ : Φ) → c (ung (i φ)) =ᵉ
exo-tr (λ H → (ξ : Φ) → C (H ξ → A (i ξ))) (exo-inv p)
(λ ξ → c (pr1 (ic (f ξ)))) φ)
where
open GlueNotation i 𝓤 A T f G p ung ubd
StrictInverse : UUᵉ (ℓφ ⊔ ℓΨ ⊔ 𝓤)
StrictInverse =
Σᵉ (GlueInputTm → ((ψ : Ψ) → C (G ψ)))
(λ Θ⁻¹ → ((b : (ψ : Ψ) → C (G ψ)) → Θ⁻¹ (Θ b) =ᵉ b)
×ᵉ ((w : GlueInputTm) → Θ (Θ⁻¹ w) =ᵉ w))
package-to-inverse : ConstructorPackage → StrictInverse
package-to-inverse pkg =
(λ w → glue (pr1ᵉ w) (pr2ᵉ w))
,ᵉ ((λ b → exo-inv (glue-η b)) ,ᵉ sect)
where
open ConstructorPackage pkg
sect : (w : GlueInputTm) → Θ (glue (pr1ᵉ w) (pr2ᵉ w)) =ᵉ w
sect (t ,ᵉ a) =
dep-pair-=ᵉ _ _
( glue-bdry t a
,ᵉ ext-≡ (exo-concat
(pr1ᵉ-exo-tr-const (glue-bdry t a) (unglue⊙ (glue t a)))
(glue-β t a)) )
inverse-to-package : StrictInverse → ConstructorPackage
inverse-to-package (Θ⁻¹ ,ᵉ (retr ,ᵉ sect)) = record
{ glue = λ t a → Θ⁻¹ (t ,ᵉ a)
; glue-bdry = λ t a → exo-ap pr1ᵉ (sect (t ,ᵉ a))
; glue-η = λ b → exo-inv (retr b)
; glue-β = λ t a → exo-ap (λ w → pr1ᵉ (pr2ᵉ w)) (sect (t ,ᵉ a))
}
tG-path-convert :
{Φ : UUᵉ ℓφ} {Ψ : UUᵉ ℓΨ} (i : Φ → Ψ) {𝓤 : Level}
(G : Ψ → UU 𝓤) (T : Φ → UU 𝓤) (p : (λ φ → G (i φ)) =ᵉ T)
(b : (ψ : Ψ) → C (G ψ)) (t : (φ : Φ) → C (T φ))
(r : (φ : Φ) → Id (ic (exo-tr (λ H → (ξ : Φ) → C (H ξ)) p
(λ φ' → b (i φ')) φ))
(ic (t φ)))
(φ : Φ)
→ Id (ic (exo-tr (λ H → (ξ : Φ) → C (H ξ)) (exo-inv p) t φ)) (ic (b (i φ)))
tG-path-convert i G .(λ φ → G (i φ)) reflᵉ b t r φ = (r φ) ⁻¹
module ThetaAnalysis
{ℓS 𝓤 : Level} {Φ Ψ : UUᵉ ℓS} {i : Φ → Ψ}
(cof : is-cofib i 𝓤)
(cofΦ : isCofibrant Φ 𝓤) (cofΨ : isCofibrant Ψ 𝓤)
(A : Ψ → UU 𝓤) (T : Φ → UU 𝓤) (f : (φ : Φ) → C (T φ ≃ A (i φ)))
(G : Ψ → UU 𝓤) (p : (λ φ → G (i φ)) =ᵉ T)
(ung : (ψ : Ψ) → G ψ → A ψ)
(ubd : (φ : Φ) → c (ung (i φ)) =ᵉ
exo-tr (λ H → (ξ : Φ) → C (H ξ → A (i ξ))) (exo-inv p)
(λ ξ → c (pr1 (ic (f ξ)))) φ)
where
open GlueNotation i 𝓤 A T f G p ung ubd
private
triv = rel-funext-holds cof cofΨ cofΦ
Ai : Φ → UU 𝓤
Ai φ = A (i φ)
WT = Π-fibrant-witness (cofΦ T)
WAF = Π-fibrant-witness (cofΦ Ai)
WAS = Π-fibrant-witness (cofΨ A)
WG = Π-fibrant-witness (cofΨ G)
tT = pr1ᵉ (fibrant-witness WT)
fT = pr1ᵉ (pr2ᵉ (fibrant-witness WT))
ftT = pr1ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WT)))
tfT = pr2ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WT)))
tAF = pr1ᵉ (fibrant-witness WAF)
fAF = pr1ᵉ (pr2ᵉ (fibrant-witness WAF))
ftAF = pr1ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WAF)))
tAS = pr1ᵉ (fibrant-witness WAS)
fAS = pr1ᵉ (pr2ᵉ (fibrant-witness WAS))
ftAS = pr1ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WAS)))
tGm = pr1ᵉ (fibrant-witness WG)
fGm = pr1ᵉ (pr2ᵉ (fibrant-witness WG))
ftGm = pr1ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WG)))
tfGm = pr2ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness WG)))
MT : UU (ℓS ⊔ 𝓤)
MT = fibrant-match WT
MAF : UU (ℓS ⊔ 𝓤)
MAF = fibrant-match WAF
MAS : UU (ℓS ⊔ 𝓤)
MAS = fibrant-match WAS
MG : UU (ℓS ⊔ 𝓤)
MG = fibrant-match WG
private
WExt : (z : (φ : Φ) → C (Ai φ)) → isFibrant (Ext i (λ ψ → C (A ψ)) z)
WExt z = Ext-isFibrant cof A z
MExt : ((φ : Φ) → C (Ai φ)) → UU (ℓS ⊔ 𝓤)
MExt z = fibrant-match (WExt z)
private
toExt : (z : (φ : Φ) → C (Ai φ))
→ Ext i (λ ψ → C (A ψ)) z → C (MExt z)
toExt z = pr1ᵉ (fibrant-witness (WExt z))
fromExt : (z : (φ : Φ) → C (Ai φ))
→ C (MExt z) → Ext i (λ ψ → C (A ψ)) z
fromExt z = pr1ᵉ (pr2ᵉ (fibrant-witness (WExt z)))
ftExt : (z : (φ : Φ) → C (Ai φ)) (w : Ext i (λ ψ → C (A ψ)) z)
→ fromExt z (toExt z w) =ᵉ w
ftExt z = pr1ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness (WExt z))))
tfExt : (z : (φ : Φ) → C (Ai φ)) (x : C (MExt z))
→ toExt z (fromExt z x) =ᵉ x
tfExt z = pr2ᵉ (pr2ᵉ (pr2ᵉ (fibrant-witness (WExt z))))
shiftExt : {z z' : (φ : Φ) → C (Ai φ)} (E : z =ᵉ z')
→ C (MExt z) → C (MExt z')
shiftExt E s = exo-tr (λ w → C (MExt w)) E s
MΣ : UU (ℓS ⊔ 𝓤)
MΣ = Σ MT (λ mt → MExt (f∙ (fT (c mt))))
private
toΣ' : GlueInputTm → C MΣ
toΣ' w = c ( ic (tT (pr1ᵉ w))
, ic (shiftExt (exo-ap f∙ (exo-inv (ftT (pr1ᵉ w))))
(toExt (f∙ (pr1ᵉ w)) (pr2ᵉ w))) )
fromΣ' : C MΣ → GlueInputTm
fromΣ' s = fT (c (pr1 (ic s)))
,ᵉ fromExt (f∙ (fT (c (pr1 (ic s))))) (c (pr2 (ic s)))
fromExt-tr-lemma : {t₁ t₀ : (φ : Φ) → C (T φ)} (E : t₁ =ᵉ t₀)
(a : Ext i (λ ψ → C (A ψ)) (f∙ t₀))
→ exo-tr (λ t' → Ext i (λ ψ → C (A ψ)) (f∙ t')) E
(fromExt (f∙ t₁)
(shiftExt (exo-ap f∙ (exo-inv E)) (toExt (f∙ t₀) a)))
=ᵉ a
fromExt-tr-lemma {t₀ = t₀} reflᵉ a = ftExt (f∙ t₀) a
ftΣ' : (w : GlueInputTm) → fromΣ' (toΣ' w) =ᵉ w
ftΣ' (t ,ᵉ a) =
dep-pair-=ᵉ _ _ (ftT t ,ᵉ fromExt-tr-lemma (ftT t) a)
tfΣ' : (s : C MΣ) → toΣ' (fromΣ' s) =ᵉ s
tfΣ' s =
exo-concat
(exo-ap (λ q → c ( ic (tT (fT (c mt)))
, ic (shiftExt E₁ q) ))
(tfExt (f∙ (fT (c mt))) (c me)))
(pairΣC-eq (tfT (c mt)) W)
where
mt = pr1 (ic s)
me = pr2 (ic s)
E₁ = exo-ap f∙ (exo-inv (ftT (fT (c mt))))
E₂ = exo-ap (λ h → f∙ (fT h)) (tfT (c mt))
W : exo-tr (λ (h : C MT) → C (MExt (f∙ (fT h)))) (tfT (c mt))
(shiftExt E₁ (c me))
=ᵉ c me
W =
exo-concat (exo-tr-ap' (λ h → f∙ (fT h)) (tfT (c mt)))
(exo-concat (exo-tr-concat E₁ E₂)
(exo-ap-tr (UIPᵉ (exo-concat E₁ E₂) reflᵉ)))
WΣ' : isFibrant GlueInputTm
WΣ' = isfibrant MΣ (toΣ' ,ᵉ (fromΣ' ,ᵉ (ftΣ' ,ᵉ tfΣ')))
Θ-hat : MG → MΣ
Θ-hat mg = ic (toΣ' (Θ (fGm (c mg))))
κ-hat : MΣ → MAS
κ-hat w = ic (tAS (pr1ᵉ (fromExt (f∙ (fT (c (pr1 w)))) (c (pr2 w)))))
unglue-match : MG → MAS
unglue-match mg = ic (tAS (pr1ᵉ (unglue⊙ (fGm (c mg)))))
private
fromExt-pr1-shift : {z z' : (φ : Φ) → C (Ai φ)} (E : z =ᵉ z')
(s : C (MExt z))
→ pr1ᵉ (fromExt z' (shiftExt E s)) =ᵉ pr1ᵉ (fromExt z s)
fromExt-pr1-shift reflᵉ s = reflᵉ
κΘ~unglue : (mg : MG) → Id (κ-hat (Θ-hat mg)) (unglue-match mg)
κΘ~unglue mg = cic-eq (exo-ap tAS step)
where
b = fGm (c mg)
E = exo-ap f∙ (exo-inv (ftT (res-p b)))
step : pr1ᵉ (fromExt (f∙ (fT (tT (res-p b))))
(shiftExt E (toExt (f∙ (res-p b)) (unglue⊙ b))))
=ᵉ pr1ᵉ (unglue⊙ b)
step =
exo-concat (fromExt-pr1-shift E (toExt (f∙ (res-p b)) (unglue⊙ b)))
(exo-ap pr1ᵉ (ftExt (f∙ (res-p b)) (unglue⊙ b)))
private
r-hat : MAS → MAF
r-hat m = ic (tAF (restrict i (fAS (c m))))
HcR : (h : (ψ : Ψ) → C (A ψ))
→ Id (r-hat (ic (tAS h))) (ic (tAF (restrict i h)))
HcR h = cic-eq (exo-ap (λ h' → tAF (restrict i h')) (ftAS h))
module Eng = MatchedFibreEngine (i* i A) WAF WExt WAS r-hat HcR
module FA = ProductEquiv cofΦ T Ai
(λ φ → pr1 (ic (f φ))) (λ φ → c (pr2 (ic (f φ))))
f-hat : MT → MAF
f-hat = FA.v-match
eB : MΣ ≃ MAS
eB = ≃-trans e1 (≃-trans e2 (≃-trans e3 e4))
where
e1 : MΣ ≃ Σ MT (λ mt → fiber r-hat (f-hat mt))
e1 = tot (λ mt → pr1 (Eng.matched-fibre-equiv (f∙ (fT (c mt)))))
, tot-isEquiv _
(λ mt → pr2 (Eng.matched-fibre-equiv (f∙ (fT (c mt)))))
e2 : Σ MT (λ mt → fiber r-hat (f-hat mt))
≃ Σ MAS (λ ma → Σ MT (λ mt → Id (r-hat ma) (f-hat mt)))
e2 = swapΣ
e3 : Σ MAS (λ ma → Σ MT (λ mt → Id (r-hat ma) (f-hat mt)))
≃ Σ MAS (λ ma → fiber f-hat (r-hat ma))
e3 = tot (λ ma → tot (λ mt → λ q → q ⁻¹))
, tot-isEquiv _
(λ ma → tot-isEquiv _ (λ mt → inv-path-isEquiv))
e4 : Σ MAS (λ ma → fiber f-hat (r-hat ma)) ≃ MAS
e4 = pr1
, pr1-contr-isEquiv (λ ma → FA.v-match-isEquiv (r-hat ma))
eB~κ : (w : MΣ) → Id (pr1 eB w) (κ-hat w)
eB~κ (mt , me) = cic-eq (exo-ap tAS step)
where
z = f∙ (fT (c mt))
step : pr1ᵉ (fromExt (fAF (tAF z))
(shiftExt (exo-inv (ftAF z)) (c me)))
=ᵉ pr1ᵉ (fromExt z (c me))
step = fromExt-pr1-shift (exo-inv (ftAF z)) (c me)
κ-hat-isEquiv : isEquiv κ-hat
κ-hat-isEquiv = isEquiv-htpy eB~κ (pr2 eB)
Θ-hat-isEquiv-of-inverse :
StrictInverse i A T f G p ung ubd → isEquiv Θ-hat
Θ-hat-isEquiv-of-inverse (Θ⁻¹ ,ᵉ (retr ,ᵉ sect)) =
pr2 (match-equiv WG WΣ' (Θ ,ᵉ (Θ⁻¹ ,ᵉ (retr ,ᵉ sect))))
unglue-equiv-of-strict-inverse :
StrictInverse i A T f G p ung ubd → isEquiv unglue-match
unglue-equiv-of-strict-inverse S =
isEquiv-htpy κΘ~unglue
(∘-is-equiv Θ-hat κ-hat (Θ-hat-isEquiv-of-inverse S) κ-hat-isEquiv)
module Package2 (inv : (ψ : Ψ) → C (isEquiv (ung ψ))) where
private
module UA = ProductEquiv cofΨ G A ung inv
unglue-match-isEquiv : isEquiv unglue-match
unglue-match-isEquiv = UA.v-match-isEquiv
abstract
Θ-hat-isEquiv : isEquiv Θ-hat
Θ-hat-isEquiv =
isEquiv-left-cancel Θ-hat κ-hat κ-hat-isEquiv
(isEquiv-htpy (λ mg → (κΘ~unglue mg) ⁻¹) unglue-match-isEquiv)
glue-unique : (w : MΣ) → is-contr (fiber Θ-hat w)
glue-unique = Θ-hat-isEquiv
module GlueTerm (t : (φ : Φ) → C (T φ))
(a : Ext i (λ ψ → C (A ψ)) (f∙ t)) where
⌜ta⌝ : MΣ
⌜ta⌝ = ic (toΣ' (t ,ᵉ a))
private
fib-c : is-contr (fiber Θ-hat ⌜ta⌝)
fib-c = Θ-hat-isEquiv ⌜ta⌝
b₀m : MG
b₀m = pr1 (pr1 fib-c)
γ : Id (Θ-hat b₀m) ⌜ta⌝
γ = pr2 (pr1 fib-c)
private
b₀ : (ψ : Ψ) → C (G ψ)
b₀ = fGm (c b₀m)
p1γ : Id (ic (tT (res-p b₀))) (ic (tT t))
p1γ = ap pr1 γ
WIdT = Π-fibrant-witness
(cofΦ (λ φ → Id (ic (res-p b₀ φ))
(ic (fT (c (ic (tT t))) φ))))
q̃ : fibrant-match WIdT
q̃ = pr1 (funext-Id-equiv cofΦ T (res-p b₀) (ic (tT t))) p1γ
r₀ : (φ : Φ) → C (Id (ic (res-p b₀ φ)) (ic (fT (tT t) φ)))
r₀ = pr1ᵉ (pr2ᵉ (fibrant-witness WIdT)) (c q̃)
r' : (φ : Φ) → Id (ic (res-p b₀ φ)) (ic (t φ))
r' φ = ic (r₀ φ) · cic-eq (happlyᵉ (ftT t) φ)
tbd : (φ : Φ) → C (G (i φ))
tbd = exo-tr (λ H → (ξ : Φ) → C (H ξ)) (exo-inv p) t
e' : (φ : Φ) → Id (ic (tbd φ)) (ic (b₀ (i φ)))
e' φ = tG-path-convert i G T p b₀ t r' φ
pack : HEP cof triv G b₀ tbd e'
pack = hep cof triv G b₀ tbd e'
aext : Ext i (λ ψ → C (G ψ)) tbd
aext = pr1ᵉ pack
glue-tm : (ψ : Ψ) → C (G ψ)
glue-tm = pr1ᵉ aext
glue-strict-bdry : res-p glue-tm =ᵉ t
glue-strict-bdry =
exo-concat
(exo-ap (exo-tr (λ H → (ξ : Φ) → C (H ξ)) p) (pr2ᵉ aext))
(tr-inv-tr (λ H → (ξ : Φ) → C (H ξ)) p t)
private
glue-agrees-b₀ : (ψ : Ψ) → Id (ic (glue-tm ψ)) (ic (b₀ ψ))
glue-agrees-b₀ ψ = ic (pr2ᵉ pack ψ)
glue-b₀m-path : Id (ic (tGm glue-tm)) b₀m
glue-b₀m-path =
MatchPath.match-path-of-pointwise cofΨ G glue-tm b₀ glue-agrees-b₀
· cic-eq (tfGm (c b₀m))
glue-linked-β : Id (Θ-hat (ic (tGm glue-tm))) ⌜ta⌝
glue-linked-β = ap Θ-hat glue-b₀m-path · γ
glue-linked-η : (b : (ψ : Ψ) → C (G ψ))
→ Id (ic (tGm (GlueTerm.glue-tm (res-p b) (unglue⊙ b))))
(ic (tGm b))
glue-linked-η b =
GlueTerm.glue-b₀m-path (res-p b) (unglue⊙ b)
· (ap pr1 (pr2 (Θ-hat-isEquiv (ic (toΣ' (Θ b)))) (ic (tGm b) , χ))) ⁻¹
where
χ : Id (Θ-hat (ic (tGm b))) (ic (toΣ' (Θ b)))
χ = cic-eq (exo-ap (λ h → toΣ' (Θ h)) (ftGm b))
record HomotopyConstructorPackage : UUᵉ (ℓS ⊔ 𝓤) where
field
Θ-is-equiv : C (isEquiv Θ-hat)
glue : (t : (φ : Φ) → C (T φ))
(a : Ext i (λ ψ → C (A ψ)) (f∙ t)) →
(ψ : Ψ) → C (G ψ)
glue-strict-boundary :
(t : (φ : Φ) → C (T φ))
(a : Ext i (λ ψ → C (A ψ)) (f∙ t)) →
res-p (glue t a) =ᵉ t
linked-β :
(t : (φ : Φ) → C (T φ))
(a : Ext i (λ ψ → C (A ψ)) (f∙ t)) →
C (Id (Θ-hat (ic (tGm (glue t a))))
(ic (toΣ' (t ,ᵉ a))))
linked-η : (b : (ψ : Ψ) → C (G ψ)) →
C (Id (ic (tGm (glue (res-p b) (unglue⊙ b))))
(ic (tGm b)))
contractible-unique : (w : C MΣ) →
C (is-contr (fiber Θ-hat (ic w)))
homotopy-constructor-package : HomotopyConstructorPackage
homotopy-constructor-package = record
{ Θ-is-equiv = c Θ-hat-isEquiv
; glue = GlueTerm.glue-tm
; glue-strict-boundary = GlueTerm.glue-strict-bdry
; linked-β = λ t a → c (GlueTerm.glue-linked-β t a)
; linked-η = λ b → c (glue-linked-η b)
; contractible-unique = λ w → c (glue-unique (ic w))
}