Alphabet

0:nat
add:[nat × nat] ⟶ nat
rec:[nat → nat → nat × nat × nat] ⟶ nat
s:[nat] ⟶ nat
succ:nat → nat → nat
xap:[nat → nat → nat × nat] ⟶ nat → nat
yap:[nat → nat × nat] ⟶ nat

Variables

F:nat → nat → nat
Y:nat
G:nat → nat → nat
V:nat
W:nat
P:nat
X1:nat
Y1:nat
U1:nat
V1:nat
W1:nat
P1:nat
F2:nat → nat → nat
Y2:nat
G2:nat → nat
V2:nat

Rules

rec%X:nat.λ%Y:nat.yap(xap(F, %X), %Y), Y, 0)Y
rec%Z:nat.λ%U:nat.yap(xap(G, %Z), %U), V, s(W))yap(xap(G, W), rec%V:nat.λ%W:nat.yap(xap(G, %V), %W), V, W))
succ · P · X1s(X1)
add(Y1, U1)rec%F:nat.λ%G:nat.yap(xap(succ, %F), %G), Y1, U1)
add(V1, 0)V1
add(W1, s(P1))s(add(W1, P1))
xap(F2, Y2)F2 · Y2
yap(G2, V2)G2 · V2