module Chapter2.Desc.Examples.Nat 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

NatD : Desc 
NatD =  (Fin 2) 
           { zero  `1 
             ; (suc zero)  `var  `1 
             ; (suc (suc ())) })

Nat : Set 
Nat = μ NatD

ze : Nat
ze =  zero , tt  

su : Nat  Nat
su n =  suc zero , n , tt 


open import Chapter2.Desc.Lifting

module TestLifting (P : Nat  Set) where

  test-lifting-ze : [ NatD ]^ P (zero , tt)  
  test-lifting-ze = refl

  test-lifting-su : ∀{n}  [ NatD ]^ P (suc zero , n , tt)  Σ (P n) λ _  
  test-lifting-su = refl