Agda-2.3.2.2: test/bugs/Issue325b.agda
{-# OPTIONS -v tc.meta:20 #-}
-- Andreas, 2011-04-15
-- source: Conor's post "foldl Miller magic" on the Agda list (2008)
module Issue325b where
data Nat : Set where
zero : Nat
suc : Nat -> Nat
data Vec (X : Set) : Nat -> Set where
[] : X ^ zero
cons : (n : Nat) -> X -> Vec X n -> Vec X (suc n)
foldl : (S : Set)(T : Nat -> Set) ->
((n : Nat) -> T n -> S -> T (suc n)) ->
T zero ->
(n : Nat) -> Vec S n -> T n
foldl S T0 f t ._ [] = t
foldl S Tsn f t ._ (cons m s ss) =
foldl S _ -- (\ n -> Tsn (suc n))
(\ n -> f _) (f _ t s) _ ss
-- (\ n -> f (suc n)) (f zero t s) _ ss
{- PROTOCOL:
term _43 S Tsn f t m s ss zero := suc zero
term _43 S Tsn f t m s ss (suc n) := suc (_43 S Tsn f t m s ss n)
term _43 S Tsn f t m s ss m := suc m
Pruning could give us:
_43 m zero := suc zero
_43 m (suc n) := suc (_43 m n)
_43 m m := suc m
We could then try
a) _43 x y := suc x failing
b) _43 x y := suc y succeeding
but this only complete in the absence of recursion.
-}