packages feed

MiniAgda-0.2014.1.9: test/fail/loopBounded.ma

-- 2012-02-04

data Empty {}
data Unit { unit }
data Maybe ++(A : Set) { nothing ; just (a : A) }

cofun Nat : +Size -> Set
{ Nat i = Maybe ([j < i] & Nat j) 
}
pattern zero    = nothing
pattern suc i n = just (i, n)

fun pred : [i : Size] -> Nat $i -> Nat i
{ pred i zero      = zero
; pred i (suc j n) = n
}

{-
fun loop : [i : Size] -> Nat i -> Unit
{ loop i zero      = unit
; loop i (suc j n) = loop j (pred j (suc j n))
}
-}

fun wfix : [A : Size -> Set] (f : [i : Size] -> ([j < i] -> A j) -> A i)  
  [i : Size]  -> |i| -> A i
{ wfix A f i = f i (wfix A f)
}

fail
fun fix : [A : Size -> Set] (f : [i : Size] -> A i -> A $i) [i : Size] -> A i
{ fix A f i = f i (fix A f)
}

let A -(i : Size) = (Nat # -> Nat i) -> Nat #

fun fix : (f : [i : Size] -> A i -> A $i) [i : Size] -> |i| -> A i
{ fix f i = f i (fix f i)
}