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 |
F | : | a → c → c |
Y | : | c |
G | : | a → c → c |
V | : | c |
W | : | a |
P | : | b |
X1 | : | c |
Y1 | : | c |
U1 | : | c |
V1 | : | c |
W1 | : | c |
P1 | : | 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)) |