{-# OPTIONS --rewriting #-}
open import Agda.Primitive using (Level;lsuc;_⊔_;lzero)
open import Lib
open import Interval
open import Cofibs
open import Kan
open import Glue
open import Equiv
open import Bool
open import universe.Universe
module universe.Pi where
ΠData : (@♭ l : Level) → Set _
ΠData l = Σ \ (A : U {l}) → (El A → U {l})
Π-from-data : ∀ {@♭ l : Level} → ΠData l → Set _
Π-from-data (A , B) = (x : El A) → El (B x)
comΠ : ∀ {@♭ l : Level} → relCom {Γ = (ΠData l)} Π-from-data
comΠ AB r r' α t b = (\ a' → transport (\ h → El (B (r' , h))) (! (snd (fillback a' r') id))
(fst (forward a')) ) ,
(λ pα → λ= \ a' → ! (ap= (transport-ap-assoc' (El o B) (λ h → r' , h) (! (snd (fillback a' r') id)))) ∘ ap (transport (El o B) (ap (\ h → r' , h) (! (snd (fillback a' r') id)))) (fst (snd (forward a')) pα) ∘ ap= (transport-ap-assoc' (El o B) (λ h → r' , h) (! (snd (fillback a' r') id))) ∘ apd! (t r' pα) (snd (fillback a' r') id)) ,
(λ {id → λ= \ a' → ! (ap= (transport-ap-assoc' (El o B) (λ h → r' , h) (! (snd (fillback a' r') id)))) ∘ ( ap (transport (El o B) (ap (λ h → r' , h) (! (snd (fillback a' r') id)))) (snd (snd (forward a')) id) ∘ ap= (transport-ap-assoc' (El o B) (λ h → r' , h) (! (snd (fillback a' r') id)))) ∘ apd! (fst b) (snd (fillback a' r) id)}) where
A = \ x → fst (AB x)
B = \ xa → snd (AB (fst xa)) (snd xa)
fillback : (a' : _) (z : I) → _
fillback a' z = coeU A r' z a'
forward : (a' : _) → _
forward a' = comEl (\ z → B (z , (fst (fillback a' z))))
r r'
α (\ z pα → t z pα (fst (fillback a' z)))
(fst b (fst (fillback a' r)) ,
(\ pα → ap (\ f → f _) (snd b pα)))
Πcode-universal : ∀ {@♭ l : Level}
→ (Σ \ (A : U {l}) → El(A) → U{l}) → U{l}
Πcode-universal {l} = code (Σ \ (A : U {l}) → El(A) → U{l})
(\ AB → (x : El (fst AB)) → El (snd AB x))
(comΠ)
Πcode : ∀ {@♭ l1 l2 : Level} {Γ : Set l1} (A : Γ → U{l2}) (B : Σ (El o A) → U{l2}) → (Γ → U{l2})
Πcode A B = Πcode-universal o (\ x → (A x , \ y → B (x , y)))
Πcode-stable : ∀ {@♭ l1 l2 l3 : Level} {Γ : Set l1} {Δ : Set l3} (A : Γ → U{l2}) (B : Σ (El o A) → U{l2})
{θ : Δ → Γ}
→ ((Πcode A B) o θ) == Πcode (A o θ) (B o (\ p → (θ (fst p) , snd p)))
Πcode-stable A B = id
El-Πcode : ∀ {@♭ l1 l2 : Level} {Γ : Set l1} (A : Γ → U{l2}) (B : Σ (El o A) → U{l2})
→ (g : Γ) → El (Πcode A B g) == ((x : El (A g)) → El (B (g , x)))
El-Πcode A B g = id
comEl'-Πcode : ∀ {@♭ l1 l2 : Level} {@♭ Γ : Set l1}
(A : Γ → U{l2}) (B : Σ (El o A) → U{l2}) → (Γ → U{l2})
→ comEl' (Πcode A B) == comPre (\ γ → (A γ , \ a → B (γ , a))) Π-from-data comΠ
comEl'-Πcode {l2 = l2} {Γ} A B p =
comEl-code-subst {Γ = (Σ \ (A : U {l2}) → El(A) → U{l2})} {A = (\ AB → (x : El (fst AB)) → El (snd AB x))} (\ x → (A x , \ y → B (x , y)))