packages feed

MiniAgda-0.2014.1.9: test/succeed/implicitSizeVarUsedExplicitely.ma

data Bool : Set
{ true : Bool
; false : Bool
}

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

fun leq : Nat -> Nat -> Bool {}

fun plus : [A : Set] -> A -> A -> A {}

sized data List : Size -> Set
{ nil  : (i : Size) -> List ($ i) 
; cons : [i : Size] -> Nat -> List i -> List ($ i)
}

fun filter : [i : Size] -> List i -> List i
{ filter .($ i) (nil i) = nil i  -- Size variables are resurrected
; filter .($ i) (cons i n l) = plus (List ($ i)) (filter _ l) (cons _ n (filter _ l))
}

fun quicksort : [i : Size] -> List i -> List #
{ quicksort .($ i) (nil i) = nil _
; quicksort .($ i) (cons i n l) = 
    plus (List #) (quicksort _ (filter i l)) (cons _ n (quicksort _ (filter i l))) 
}

data Id (A : Set)(a : A) : A -> Set
{ refl : Id A a a
}
{-
let p1 : (i : Size) -> Id (List #) (nil i) (nil #)
       = \ i -> refl (List #) (nil i)
-}