{-# 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 ⟩