module Chapter2.Desc.Examples.List 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 ListD : Set → Desc ListD A = `Σ (Fin 2) (λ { zero → `1 ; (suc zero) → `Σ A λ _ → `var `× `1 ; (suc (suc ())) }) List : Set → Set List A = μ (ListD A) nil : ∀{A} → List A nil = ⟨ zero , tt ⟩ cons : ∀{A} → A → List A → List A cons a xs = ⟨ suc zero , a , xs , tt ⟩ open import Chapter2.Desc.Lifting module TestLifting {A : Set}(P : List A → Set) where test-lifting-nil : [ ListD A ]^ P (zero , tt) ≡ ⊤ test-lifting-nil = refl test-lifting-cons : ∀{a xs} → [ ListD A ]^ P (suc zero , a , xs , tt) ≡ Σ (P xs) λ _ → ⊤ test-lifting-cons = refl