o | : | N |
s | : | [N] ⟶ N |
true | : | B |
false | : | B |
nil | : | list |
cons | : | [N × list] ⟶ list |
if | : | [B × list × list] ⟶ list |
lteq | : | [N × N] ⟶ B |
from | : | [N × list] ⟶ list |
chain | : | [N → N × list] ⟶ list |
incch | : | [list] ⟶ list |
X | : | list |
Y | : | list |
Z | : | list |
M | : | N |
K | : | N |
H | : | N |
F | : | N → N |
if(true, X, Y) | ⇒ | X |
if(false, X, Y) | ⇒ | Y |
lteq(s(M), o) | ⇒ | false |
lteq(o, M) | ⇒ | true |
lteq(s(M), s(K)) | ⇒ | lteq(M, K) |
from(M, nil) | ⇒ | nil |
from(M, cons(H, Z)) | ⇒ | if(lteq(M, H), cons(H, Z), from(M, Z)) |
chain(F, nil) | ⇒ | nil |
chain(F, cons(H, Z)) | ⇒ | cons(F · H, chain(F, from(F · H, Z))) |
incch(X) | ⇒ | chain(λx:N.s(x), X) |