module Chapter2.IDesc.Examples.Walk where

open import Data.Unit
open import Data.Nat
open import Data.Fin
open import Data.Vec 
open import Data.Product

open import Relation.Binary.PropositionalEquality

open import Chapter2.IDesc
open import Chapter2.IDesc.Fixpoint
open import Chapter2.IDesc.Tagged


WalkD : tagDesc 
WalkD = (1 ,  n  `var (suc n)  `1  [])) ,
        ((λ { zero  1 
            ; (suc n)  1 }) , 
          λ { zero  `1  [] 
            ; (suc n)  `var n  `1  [] })

Walk :   Set
Walk = μ (toDesc WalkD)

up : ∀{n}  Walk (suc n)  Walk n
up w =  zero , w , tt 

stop : Walk 0
stop =  suc zero , tt 

down : ∀{n}  Walk n  Walk (suc n)
down w =  suc zero , w , tt