{-# OPTIONS --rewriting #-}
open import Agda.Primitive using (Level;lsuc;_⊔_;lzero)
open import Lib
open import Interval
open import Proposition
open import Cofibs
open import Kan
open import Path
module Contractible where
contr-extend-partial : {l : Level} {A : Set l}
→ hasHCom A
→ Contractible A
→ ContractibleFill A
contr-extend-partial hcomA cA α t = fst c , (\ pα → fst (snd c) pα ∘ ! (snd (snd (snd cA (t pα))))) where
c = hcomA `0 `1 α (\ z pα → fst (snd cA (t pα)) z) (fst cA , (λ pα → fst (snd (snd cA (t pα)))))
contr-implies-hprop : {l : Level} {A : Set l}
→ hasHCom A
→ Contractible A
→ (x y : A) → Path A x y
contr-implies-hprop hcomA cA x y = (\ z → fst (p z) ) , (! ((snd (p `0)) (inl id))) , (! ((snd (p `1)) (inr id))) where
p : ∀ z → _
p z = contr-extend-partial hcomA cA ((z == `0) ∨ (z == `1)) (case01 (\ _ → x) (\ _ → y))
contr-extend-partial-path : {l : Level} {A : Set l}
→ (hcomA : hasHCom A)
→ (cA : Contractible A)
→ (α : Set) {{cα : Cofib α}} (t : α → A)
→ Path A (fst (contr-extend-partial hcomA cA α t)) (fst cA)
contr-extend-partial-path hcomA cA α t = contr-implies-hprop hcomA cA _ _
HProp : {l : Level} → Set l → Set l
HProp A = (x y : A) → Path A x y
HSet : {l : Level} → Set l → Set l
HSet A = (x y : A) → HProp (Path A x y)
ContractibleFill-hprop : {l : Level} (A : Set l) → (c1 c2 : ContractibleFill A) → Path (ContractibleFill A) c1 c2
ContractibleFill-hprop A c1 c2 = (\ z → λ α t → fst (c z α t) , (\ pα → snd (c z α t) (inl pα))) , (λ= \ α → λ=inf \ cα → λ= \ t → pair= (! (snd (c `0 α {{cα}} t) (inr (inl id))) ) (λ= \ _ → uip)) , (λ= \ α → λ=inf \ cα → λ= \ t → pair= (! (snd (c `1 α {{cα}} t) (inr (inr id))) ) (λ= \ _ → uip)) where
c : ∀ z α {{cα : Cofib α}} t → _
c z α t = c1 (α ∨ ((z == `0) ∨ (z == `1)))
(case (\ pα → t pα)
(case01 (\ z=0 → fst (c1 α t)) (\ z=1 → fst (c2 α t)))
(\ pα → ∨-elim01 _
(\ z=0 → snd (c1 α t) pα)
((\ z=1 → snd (c2 α t) pα))))
inhabited-hprop-contractible : {l : Level} (A : Set l)
→ hasHCom A
→ A
→ ((x y : A) → Path A x y)
→ ContractibleFill A
inhabited-hprop-contractible A hcomA a p = contr-extend-partial hcomA (a , (\ b → p a b))
hcomContractibleFill : {l : Level} (A : Set l) → hasHCom (ContractibleFill A)
hcomContractibleFill A r r' α t b = (λ β s → fst (c β s) , (\ pβ → snd (c β s) (inl (inl pβ)))) , ((\ pα → λ= (\ β → λ=inf \ cβ → λ= \ s → pair= (snd (c β {{cβ}} s) (inl (inr pα))) (λ= \ _ → uip)))) , (\ r=r' → λ= (\ β → λ=inf \ cβ → λ= \ s → pair= (snd (c β {{cβ}} s) (inr r=r')) (λ= \ _ → uip))) where
c : ∀ β {{cβ : Cofib β}} s → _
c β s = (fst b ((β ∨ α) ∨ (r == r'))
(∨-elim _ (case s (\ pα → fst ((t r' pα) β s)) (\ pβ pα → snd ((t r' pα) β s) pβ))
(\ r=r' → fst (fst b β s))
(∨-elim _ (\ pβ r=r' → snd (fst b β s) pβ ∘ ap= (transport-constant trunc)) (\ pα r=r' → ((ap (\ h → fst (h β s))) (snd b pα) ∘ ap (\ h → fst (t h pα β s)) (! r=r')) ∘ ap= (transport-constant trunc) ) (\ _ _ → λ= \ _ → uip))))