module Chapter2.Desc.Examples.Tree where open import Data.Unit open import Data.Product open import Data.Fin open import Relation.Binary.PropositionalEquality open import Chapter2.Desc open import Chapter2.Desc.Fixpoint TreeD : Set → Desc TreeD A = `Σ (Fin 2) (λ { zero → `1 ; (suc zero) → `var `× `Σ A λ _ → `var `× `1 ; (suc (suc ())) }) Tree : Set → Set Tree A = μ (TreeD A) leaf : ∀{A} → Tree A leaf = ⟨ zero , tt ⟩ node : ∀{A} → Tree A → A → Tree A → Tree A node lb a rb = ⟨ suc zero , lb , a , rb , tt ⟩ open import Chapter2.Desc.Lifting module TestLifting {A : Set}(P : Tree A → Set) where test-lifting-leaf : [ TreeD A ]^ P (zero , tt) ≡ ⊤ test-lifting-leaf = refl test-lifting-node : ∀{lb a rb} → [ TreeD A ]^ P (suc zero , lb , a , rb , tt) ≡ Σ (P lb) λ _ → Σ (P rb) λ _ → ⊤ test-lifting-node = refl