0 :: c add :: a → c → c cons :: a → b → b fold :: (a → c → c) → c → b → c mul :: a → c → c nil :: b plus :: c → c → c prod :: b → c s :: c → c sum :: b → c times :: c → c → c fold(F, Y, nil) → Y fold(G, V, cons(W, P)) → G(W, fold(G, V, P)) plus(0, X1) → X1 plus(s(Y1), U1) → s(plus(Y1, U1)) times(0, V1) → 0 times(s(W1), P1) → plus(times(W1, P1), P1) sum → fold(add, 0) prod → fold(mul, s(0))