packages feed

MiniAgda-0.2014.1.9: test/succeed/crazys.ma

sized data SNat : Size -> Set
{
zero : (i : Size ) -> SNat ($ i);
succ : (i : Size ) -> SNat i -> SNat ($ i)
}

fun o2e : (i : Size ) -> SNat i -> SNat i
{
o2e .($ i) (zero i) = zero _;
o2e .($ $ i) (succ .($ i) (zero i)) = zero _; 
o2e .($ $ i) (succ .($ i) (succ i x)) = succ _ (succ _ (o2e _ x ))
}

-- "permutating size arguments"
fun crazy : (i : Size ) -> (j : Size ) -> SNat i -> SNat j -> SNat #
{
crazy .($ i) j (zero i) y = y;
crazy .($ i) j (succ i x) y = succ _ (crazy _ _ y (o2e _ x)) 
}