{-# 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 Path open import Equiv open import universe.Universe module universe.Sigma where ΣData : (@♭ l1 l2 : Level) → Set _ ΣData l1 l2 = Σ \ (A : U{l1}) → (El A → U {l2}) Σ-from-data : ∀ {@♭ l1 l2 : Level} → ΣData l1 l2 → Set _ Σ-from-data (A , B) = Σ \ (x : El A) → El (B x) comΣ : ∀ {@♭ l1 l2 : Level} → relCom {Γ = (ΣData l1 l2)} Σ-from-data comΣ AB r r' α t b = ((fst (filla b r')) , fst (comb b)) , (\ pα → pair= (fst (snd (filla b r')) pα) (fst (snd (comb b)) pα)) , ((\ {id → pair= (snd (snd (filla b r')) id) (snd (snd (comb b)) id)})) where A = \ x → fst (AB x) B = \ xa → snd (AB (fst xa)) (snd xa) filla : (b : _) (z : I) → _ filla b z = (comEl A r z α (\ pα z → fst (t pα z)) (fst (fst b) , (\ pα → ap fst (snd b pα)))) comb : (b : _) → _ comb b = (comEl (\ z → B (z , (fst (filla b z)))) r r' α (\ z pα → transport (El o (B o \ h → (z , h))) (fst (snd (filla b z)) pα) (snd (t z pα)) ) (transport (El o B o \ h → (r , h)) (snd (snd (filla b r)) id) (snd (fst b)) , (\ pα → ap (transport (El o B o (λ h → r , h)) (snd (snd (filla b r)) id)) (apd snd (snd b pα) ∘ ! (ap= (transport-ap-assoc' (λ z → El (B (r , z))) fst (snd b pα))) ) ∘ ap= (transport-∘ (El o B o (λ h → r , h)) (snd (snd (filla b r)) id) (ap fst (snd b pα))) ∘ ap {M = (fst (snd (filla b r)) pα)} {N = (snd (snd (filla b r)) id ∘ ap fst (snd b pα))} (\ h → transport (El o B o (λ h → r , h)) h (snd (t r pα))) uip))) Σcode-universal : ∀ {@♭ l1 l2 : Level} → (Σ \ (A : U {l1}) → El(A) → U{l2}) → U{l1 ⊔ l2} Σcode-universal {l1} {l2} = code (ΣData l1 l2) (\ AB → Σ \ (x : El (fst AB)) → El (snd AB x)) comΣ Σcode : ∀ {@♭ l1 l2 l3 : Level} {Γ : Set l1} (A : Γ → U{l2}) (B : Σ (El o A) → U{l3}) → (Γ → U{l2 ⊔ l3}) Σcode {l1} {l2} {l3} A B = Σcode-universal {l2} {l3} o (\ x → (A x , \ y → B (x , y))) Σcode-stable : ∀ {@♭ l1 l2 l3 l4 : Level} {Γ : Set l1} {Δ : Set l3} (A : Γ → U{l2}) (B : Σ (El o A) → U{l4}) {θ : Δ → Γ} → ((Σcode A B) o θ) == Σcode (A o θ) (B o (\ p → (θ (fst p) , snd p))) Σcode-stable A B = id El-Σcode : ∀ {@♭ l1 l2 l3 : Level} {Γ : Set l1} (A : Γ → U{l2}) (B : Σ (El o A) → U{l3}) → (g : Γ) → El (Σcode A B g) == (Σ \ (x : El (A g)) → El (B (g , x))) El-Σcode A B g = id