{-# OPTIONS --without-K #-}
open import container.core
module container.w.fibration
{li la lb}(c : Container li la lb) where
open import sum
open import equality
open import function
open import container.w.core
open import container.w.algebra c
open import hott.level
open Container c
AlgFib : ∀ ℓ → Set _
AlgFib ℓ = Σ ((i : I) → W c i → Set ℓ) λ P
→ (∀ i x → ((b : B (proj₁ x)) → P (r b) (proj₂ x b)) → P i (inW c i x))
AlgSection : ∀ {ℓ} (𝓟 : AlgFib ℓ) → Set _
AlgSection (P , θ) = Σ (∀ i x → P i x) λ f
→ _≡_ {A = ∀ i x → P i (inW c i x)}
(λ i x → θ i x (λ b → f (r b) (proj₂ x b)))
(λ i x → f i (inW c i x))
alg-total : ∀ {ℓ} → AlgFib ℓ → Alg _
alg-total (P , θ) = X , ψ
where
X : I → Set _
X i = Σ (W c i) (P i)
ψ : F X →ⁱ X
ψ i (a , u) = inW c i (a , λ b → proj₁ (u b))
, θ i (a , λ b → proj₁ (u b)) (λ b → proj₂ (u b))
module _ {ℓ} (𝓟 : AlgFib ℓ) where
private 𝓧 = alg-total 𝓟
open Σ 𝓟 renaming (proj₁ to P ; proj₂ to θ)
open Σ (alg-total 𝓟) renaming (proj₁ to X ; proj₂ to ψ)
section : AlgSection 𝓟
section = f₀ , refl
where
f₀ : ∀ i x → P i x
f₀ i (sup a u) = θ i (a , u) (λ b → f₀ (r b) (u b))
private
split-lem : ∀ {ℓ'} (Y : I → Set ℓ')
→ (Y →ⁱ X)
≅ ( Σ (Y →ⁱ W c) λ g₀
→ ∀ i x → P i (g₀ i x) )
split-lem Y
= sym≅ (curry-iso (λ i _ → X i))
·≅ ΠΣ-swap-iso
·≅ Σ-ap-iso (curry-iso (λ i _ → W c i))
(λ g₀ → curry-iso (λ i x → P i (g₀ (i , x))))
section-mor-iso : Mor 𝓦 𝓧 ≅ AlgSection 𝓟
section-mor-iso = begin
( Σ (W c →ⁱ X) λ f → ψ ∘ⁱ imap f ≡ f ∘ⁱ inW c )
≅⟨ Σ-ap-iso (split-lem (W c)) (λ _ → refl≅) ⟩
( Σ (Σ (W c →ⁱ W c) λ f₀ → ∀ i → (w : W c i) → P i (f₀ i w)) λ { (f₀ , f₁)
→ _≡_ {A = ∀ i (x : F (W c) i) → X i}
(λ i x → let x' = imap f₀ i x
in (inW c i x' , θ i x' (λ b → f₁ (r b) (proj₂ x b))))
(λ i x → (f₀ i (inW c i x) , f₁ i (inW c i x))) } )
≅⟨ ( Σ-ap-iso refl≅ λ { (f₀ , f₁) → iso≡ (split-lem (F (W c)))
·≅ sym≅ Σ-split-iso } ) ⟩
( Σ (Σ (W c →ⁱ W c) λ f₀ → ∀ i → (w : W c i) → P i (f₀ i w)) λ { (f₀ , f₁)
→ Σ ( _≡_ {A = ∀ i (x : F (W c) i) → W c i}
(λ i x → inW c i (imap f₀ i x))
(λ i x → f₀ i (inW c i x)) ) λ eq
→ subst (λ g → ∀ i (x : F (W c) i) → P i (g i x)) eq
(λ i x → θ i (imap f₀ i x) (λ b → f₁ (r b) (proj₂ x b)))
≡ (λ i x → f₁ i (inW c i x)) } )
≅⟨ record
{ to = λ { ((f₀ , f₁) , (α₀ , α₁)) → ((f₀ , α₀) , (f₁ , α₁)) }
; from = λ { ((f₀ , α₀) , (f₁ , α₁)) → ((f₀ , f₁) , (α₀ , α₁)) }
; iso₁ = λ { ((f₀ , f₁) , (α₀ , α₁)) → refl }
; iso₂ = λ { ((f₀ , α₀) , (f₁ , α₁)) → refl } } ⟩
( Σ ( Σ (∀ i → W c i → W c i) λ f₀
→ ( _≡_ {A = ∀ i (x : F (W c) i) → W c i}
(λ i x → inW c i (imap f₀ i x))
(λ i x → f₀ i (inW c i x)) ) ) λ { (f₀ , eq)
→ Σ (∀ i w → P i (f₀ i w)) λ f₁
→ subst (λ g → ∀ i (x : F (W c) i) → P i (g i x)) eq
(λ i x → θ i (imap f₀ i x) (λ b → f₁ (r b) (proj₂ x b)))
≡ (λ i x → f₁ i (inW c i x)) } )
≅⟨ sym≅ ( Σ-ap-iso (sym≅ (contr-⊤-iso W-initial-W)) λ _ → refl≅ ) ·≅ ×-left-unit ⟩
( Σ (∀ i w → P i w) λ f₁
→ (λ i x → θ i x (λ b → f₁ (r b) (proj₂ x b)))
≡ (λ i x → f₁ i (inW c i x)) )
∎
where
open ≅-Reasoning
W-section-contr : contr (AlgSection 𝓟)
W-section-contr = iso-level section-mor-iso (W-initial 𝓧)