module IDesc.Examples.Walk where

open import Data.Unit
open import Data.Nat
open import Data.Fin hiding (lift)
open import Data.Vec 
open import Data.Product

open import Relation.Binary.PropositionalEquality

open import IDesc.IDesc
open import IDesc.Fixpoint
open import 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