{-# OPTIONS --without-K #-}
module agda.fibration where
open import agda.prelude
open import agda.postulates
infix 4 _↗_
_↗_ :
  {l : Level}
  {φ : Set}
  {A : Set l}
  (t : φ → A)
  (x : A)
  → 
  Set l
t ↗ x = ∀ u → t u ≡ x
module
  Fib
    
    (℘ :
       {l : Level}
       (Γ : Set l)
       → 
       Set l)
     (℘` :
       {l m : Level}
       {Γ : Set l}
       {Δ : Set m}
       (γ : Δ → Γ)
       → 
       ℘ Δ → ℘ Γ)
     (℘`comp :
       {l m n : Level}
       {Γ : Set l}
       {Δ : Set m}
       {Θ : Set n}
       (γ : Δ → Γ)
       (σ : Θ → Δ)
       (p : ℘ Θ)
       → 
       ℘` γ (℘` σ p) ≡ ℘` (γ ∘ σ) p)
    
    (C : {l : Level} (P : ℘ (Set l)) → Set (ℓ₁ ⊔ l))
    where
  
  
  isFib :
    {l l' : Level}
    (Γ : Set l')
    (A : Γ → Set l)
    → 
    Set (ℓ₁ ⊔ l ⊔ l')
  isFib Γ A = (p : ℘ Γ) → C (℘` A p)
  
  
  Fib :
    {l' : Level}
    (l : Level)
    (Γ : Set l')
    → 
    Set (l' ⊔ lsuc l)
  Fib l Γ = Σ A ∶ (Γ → Set l), isFib Γ A
  
  infixl 5 _[_]
  _[_] :
    {l l' l'' : Level}
    {Γ : Set l'}
    {Γ' : Set l''}
    (Φ : Fib l Γ)
    (γ : Γ' → Γ)
    → 
    Fib l Γ'
  (A , α) [ γ ] = (A ∘ γ , α[γ]) where
    α[γ] : isFib _ (A ∘ γ)
    α[γ] p' = subst C (℘`comp A γ p') (α (℘` γ p'))
  Fib₀ :
    {l' : Level}
    (Γ : Set l')
    → 
    Set (ℓ₁ ⊔ l')
  Fib₀ = Fib ℓ₀
module
  Fib₀
    
    (℘ :
       {l : Level}
       (Γ : Set l)
       → 
       Set l)
     (℘` :
       {l m : Level}
       {Γ : Set l}
       {Δ : Set m}
       (γ : Δ → Γ)
       → 
       ℘ Δ → ℘ Γ)
     (℘`comp :
       {l m n : Level}
       {Γ : Set l}
       {Δ : Set m}
       {Θ : Set n}
       (γ : Δ → Γ)
       (σ : Θ → Δ)
       (p : ℘ Θ)
       → 
       ℘` γ (℘` σ p) ≡ ℘` (γ ∘ σ) p)
    
    (C : ℘ Set → Set₁) where
  
  
  isFib :
    {l' : Level}
    (Γ : Set l')
    (A : Γ → Set)
    → 
    Set (ℓ₁ ⊔ l')
  isFib Γ A = (p : ℘ Γ) → C (℘` A p)
  
  Fib₀ :
    {l' : Level}
    (Γ : Set l')
    → 
    Set (ℓ₁ ⊔ l')
  Fib₀ Γ = Σ A ∶ (Γ → Set), isFib Γ A
  
   
  infixl 5 _[_]
  _[_] :
    {l' l'' : Level}
    {Γ : Set l'}
    {Γ' : Set l''}
    (Φ : Fib₀ Γ)
    (γ : Γ' → Γ)
    → 
    Fib₀ Γ'
  (A , α) [ γ ] = (A ∘ γ , α[γ]) where
    α[γ] : isFib _ (A ∘ γ)
    α[γ] p' = subst C (℘`comp A γ p') (α (℘` γ p'))