module Chapter6.Desc where

open import Level

open import Data.Unit
open import Data.Product

open import Chapter4.Desc
open import Chapter4.Desc.Fixpoint


data DescC { : Level} : Set (suc ) where
  `var` `1` `×` `+` `Σ` `Π` : DescC

DescD : ( : Level)  Desc (suc )
DescD  =  DescC λ { `var`  `1 
                   ; `1`  `1 
                   ; `×`  `var  `var  `1 
                   ; `+`  `var  `var  `1 
                   ; `Σ`   (Set ) λ S  ( (Lift {= suc } S) λ _  `var)  `1  
                   ; `Π`   (Set ) λ S  ( (Lift {= suc } S) λ _  `var)  `1 } 


Desc' : ( : Level)  Set (suc )
Desc'  = μ (DescD )

`var' : ∀{}  Desc' 
`var' =  `var` , lift tt 

`1' : ∀{}  Desc' 
`1' =  `1` , lift tt 

_`×'_ : ∀{}  (D D' : Desc' )  Desc' 
D `×' D' =  `×` , D , D' , lift tt 

_`+'_ : ∀{}  (D D' : Desc' )  Desc' 
D `+' D' =  `+` , D , D' , lift tt 

`Σ' : ∀{}  (S : Set )(T : S  Desc' )  Desc' 
`Σ' S T =  `Σ` , S ,  { (lift s)  T s }) , lift tt 

`Π' : ∀{}  (S : Set )(T : S  Desc' )  Desc' 
`Π' S T =  `Π` , S ,  { (lift s)  T s }) , lift tt