{-# OPTIONS --type-in-type #-}

module Chapter3.Desc where

open import Data.Unit
open import Data.Product

open import Chapter2.Desc
open import Chapter2.Desc.Fixpoint


data DescC : Set where
  `var` `1` `×` `+` `Σ` `Π` : DescC

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


Desc' : Set
Desc' = μ DescD

`var' : Desc'
`var' =  `var` , tt 

`1' : Desc'
`1' =  `1` , tt 

_`×'_ : (D D' : Desc')  Desc'
D `×' D' =  `×` , D , D' , tt 

_`+'_ : (D D' : Desc')  Desc'
D `+' D' =  `+` , D , D' , tt 

`Σ' : (S : Set)(T : S  Desc')  Desc'
`Σ' S T =  `Σ` , S , T , tt 

`Π' : (S : Set)(T : S  Desc')  Desc'
`Π' S T =  `Π` , S , T , tt