0 | : | nat |
s | : | [nat] ⟶ nat |
+ | : | [nat × nat] ⟶ nat |
* | : | [nat × nat] ⟶ nat |
rec | : | [nat × nat × nat → nat → nat] ⟶ nat |
x | : | nat |
y | : | nat |
U | : | nat |
F | : | nat → nat → nat |
+(x, 0) | ⇒ | x |
+(x, s(y)) | ⇒ | s(+(x, y)) |
rec(0, U, F) | ⇒ | U |
rec(s(x), U, F) | ⇒ | F · x · rec(x, U, F) |
*(x, y) | ⇒ | rec(y, 0, λz1:nat.λz2:nat.+(x, z2)) |