packages feed

MiniAgda-0.2014.1.9: test/succeed/sizedOrd.ma

data Nat : Set
{ zero : Nat
; succ : Nat -> Nat
}

sized data Ord : Size -> Set
{ ozero : [i : Size] -> Ord ($ i)
; osucc : [i : Size] -> Ord i -> Ord ($ i)
; olim  : [i : Size] -> (Nat -> Ord i) -> Ord ($ i)
}

fun maxO : [i : Size] -> Ord i -> Ord i -> Ord i
{ maxO i (ozero (i > j)) q = q
; maxO i p (ozero (i > k)) = p
; maxO i (olim (i > j) f) (olim (i > k) g) = 
   olim (max j k) (\ n -> maxO (max j k) (f n) (g n))
; maxO i (osucc (i > j) p) (osucc (i > k) q) =
   osucc (max j k) (maxO (max j k) p q)
-- CANNOT DEFINE MISSION CLAUSES
}

fun idO : [i : Size] -> Ord i -> Ord i
{ idO i (ozero (i > j)  ) = ozero j
; idO i (osucc (i > j) p) = osucc j (idO j p)
; idO i (olim  (i > j) f) = olim  j (\ n -> idO j (f n))
}