module Chapter2.Desc where open import Data.Unit open import Data.Nat open import Data.Fin open import Data.Product open import Data.Sum infixr 30 _`×_ infixr 30 _`+_ data Desc : Set₁ where `var : Desc `1 : Desc _`×_ : (A B : Desc) → Desc _`+_ : (A B : Desc) → Desc `Σ : (S : Set)(T : S → Desc) → Desc `Π : (S : Set)(T : S → Desc) → Desc ⟦_⟧ : Desc → Set → Set ⟦ `var ⟧ X = X ⟦ `1 ⟧ X = ⊤ ⟦ A `× B ⟧ X = ⟦ A ⟧ X × ⟦ B ⟧ X ⟦ A `+ B ⟧ X = ⟦ A ⟧ X ⊎ ⟦ B ⟧ X ⟦ `Σ S T ⟧ X = Σ[ s ∈ S ] ⟦ T s ⟧ X ⟦ `Π S T ⟧ X = (s : S) → ⟦ T s ⟧ X