{-# OPTIONS
  --without-K
  --prop
  --rewriting
  --confluence-check
#-}

module TT.IRUniv where

open import TT.Lib

private variable
  i : 

data Uᵇ₀ : Set where

Elᵇ₀ : Uᵇ₀  Set
Elᵇ₀ ()

module _ (U : Set) (El : U  Set) where
  data Uᵇ₊ : Set where
    `U : Uᵇ₊
    `Lift : U  Uᵇ₊

  Elᵇ₊ : Uᵇ₊  Set
  Elᵇ₊ `U = U
  Elᵇ₊ (`Lift A) = El A

module _ (Uᵇ : Set) (Elᵇ : Uᵇ  Set) where
  data Uᶜ : Set
  Elᶜ : Uᶜ  Set

  data Uᶜ where
    base : Uᵇ  Uᶜ
    `⊤ : Uᶜ
     : (A : Uᶜ)  (Elᶜ A  Uᶜ)  Uᶜ
     : (A : Uᶜ)  (Elᶜ A  Uᶜ)  Uᶜ

  Elᶜ (base A) = Elᵇ A
  Elᶜ `⊤ = 
  Elᶜ ( A B) = (a : Elᶜ A)  Elᶜ (B a)
  Elᶜ ( A B) = Σ (Elᶜ A) λ a  Elᶜ (B a)

Uᵇ :   Set
Elᵇ : Uᵇ i  Set

U :   Set
El : U i  Set

Uᵇ zero = Uᵇ₀
Uᵇ (suc i) = Uᵇ₊ (U i) El

Elᵇ {zero} = Elᵇ₀
Elᵇ {suc i} = Elᵇ₊ (U i) El

U i = Uᶜ (Uᵇ i) Elᵇ
El {i} = Elᶜ (Uᵇ i) Elᵇ

data Uᵇω : Set where
  `U :   Uᵇω
  `Lift : U i  Uᵇω

Elᵇω : Uᵇω  Set
Elᵇω (`U i) = U i
Elᵇω (`Lift A) = El A

 : Set
 = Uᶜ Uᵇω Elᵇω

Elω :   Set
Elω = Elᶜ Uᵇω Elᵇω