packages feed

MiniAgda-0.2014.1.9: test/fail/bfSizePatternIncomplete.ma

data Prod (+A : Set) (+B : Set) : Set
{
  pair : A -> B -> Prod A B
}

fun split : (A : Set) -> (B : Set) -> Prod A B ->  
            (C : Set) -> (A -> B -> C) -> C  
{
  split A B (pair a b) C f = f a b
}

sized data List (+ A : Set) : Size -> Set 
{
  nil  : (i : Size) -> List A ($ i) ;
  cons : (i : Size) -> A -> List A i -> List A ($ i)
}

fun append : (A : Set) -> List A # -> List A # -> List A #
{
  append A (nil .#) l = l;
  append A (cons .# a as) l = cons # a (append A as l)
}

sized data Rose (+A : Set) : Size -> Set
{
  rose : (i : Size) -> A -> List (Rose A i) # -> Rose A ($ i)
}



fun step : (j : Size) -> (A : Set) -> (i : Size) ->
           List (Rose A ($ i)) j -> 
           Prod (List A j) (List (Rose A i) #) 

{
  step .($ j) A i (nil {- .(Rose A ($ i)) -} j) = 
    pair {- (List A _) (List (Rose A _) _) -}
      (nil _) 
      (nil {- (Rose A i) -} _);

  step .($ j) A .i (cons {- .(Rose A ($ i)) -} j (rose i a rs') rs) =
    split (List A j) (List (Rose A i) #) 
       (step j A i rs) 
          (Prod (List A ($ j)) (List (Rose A i) #))
       (\ as -> \ rs'' -> pair {- (List A _) (List (Rose A _) #) -}
           (cons _ a as) 
           (append (Rose A i) rs' rs'')) 

}

-- 2010-08-18 new error: successor pattern only allowed in cofun
fun bf' : (A : Set) -> (i : Size) -> List A # -> List (Rose A i) # -> List A # 
{
  bf' A ($ i) as (nil {-.(Rose A ($ i))-} .#) = as;
  bf' A ($ i) as (cons {-.(Rose A ($ i))-} .# r rs) = append A as 
    (split
        (List A #) (List (Rose A i) #) 
      (step # A i (cons {-(Rose A ($ i))-} _ r rs))
        (List A #) 
      (bf' A i) 
    )
}

{-
fun bf : (i : Size) -> (A : Set) -> Rose A i -> List (Rose A i) # -> List A #
{

  bf i A r rs

}
-}