module Chapter7.Derivable.Examples.Nat where

open import Level 
  renaming ( zero to zeroL
           ; suc to sucL )

open import Data.Bool
open import Data.Unit
open import Data.Sum
open import Data.Product

open import Relation.Nullary
open import Relation.Nullary.Decidable
open import Relation.Binary
open import Relation.Binary.PropositionalEquality

open import Chapter4.Desc
open import Chapter4.Desc.Fixpoint

open import Chapter7.Derivable
open import Chapter7.Derivable.Equality

NatD : Desc zeroL
NatD = `1 `+ `var

Nat : Set
Nat = μ NatD

ze : μ NatD
ze =  inj₁ (lift tt) 

su : μ NatD  μ NatD
su n =  inj₂ n 


natEq :  (x y : Nat)  Dec (x  y)
natEq = deriving Equality NatD tt

module Test where
  test-neq :  natEq (su ze) ze   false
  test-neq = refl

  test-eq :  natEq (su ze) (su ze)   true
  test-eq = refl