0 | : | b |
cons | : | [b × c] ⟶ c |
eq | : | [b × b] ⟶ a |
false | : | a |
hamming | : | c |
if | : | [a × c × c] ⟶ c |
list1 | : | c |
list2 | : | c |
list3 | : | c |
lt | : | [b × b] ⟶ a |
map | : | [b → b × c] ⟶ c |
merge | : | [c × c] ⟶ c |
mult | : | [b] ⟶ b → b |
nil | : | c |
plus | : | [b × b] ⟶ b |
s | : | [b] ⟶ b |
true | : | a |
X | : | c |
Y | : | c |
U | : | c |
V | : | c |
W | : | b |
P | : | b |
X1 | : | b |
Y1 | : | b |
U1 | : | b |
V1 | : | b |
W1 | : | b |
P1 | : | c |
X2 | : | c |
Y2 | : | b |
U2 | : | c |
V2 | : | b |
W2 | : | c |
J2 | : | b → b |
F3 | : | b → b |
Y3 | : | b |
U3 | : | c |
V3 | : | b |
W3 | : | b |
P3 | : | b |
X4 | : | b |
Y4 | : | b |
U4 | : | b |
if(true, X, Y) | ⇒ | X |
if(false, U, V) | ⇒ | V |
lt(s(W), s(P)) | ⇒ | lt(W, P) |
lt(0, s(X1)) | ⇒ | true |
lt(Y1, 0) | ⇒ | false |
eq(U1, U1) | ⇒ | true |
eq(s(V1), 0) | ⇒ | false |
eq(0, s(W1)) | ⇒ | false |
merge(P1, nil) | ⇒ | P1 |
merge(nil, X2) | ⇒ | X2 |
merge(cons(Y2, U2), cons(V2, W2)) | ⇒ | if(lt(Y2, V2), cons(Y2, merge(U2, cons(V2, W2))), if(eq(Y2, V2), cons(Y2, merge(U2, W2)), cons(V2, merge(cons(Y2, U2), W2)))) |
map(J2, nil) | ⇒ | nil |
map(F3, cons(Y3, U3)) | ⇒ | cons(F3 · Y3, map(F3, U3)) |
mult(0) · V3 | ⇒ | 0 |
mult(s(W3)) · P3 | ⇒ | plus(P3, mult(W3) · P3) |
plus(0, X4) | ⇒ | 0 |
plus(s(Y4), U4) | ⇒ | s(plus(Y4, U4)) |
list1 | ⇒ | map(mult(s(s(0))), hamming) |
list2 | ⇒ | map(mult(s(s(s(0)))), hamming) |
list3 | ⇒ | map(mult(s(s(s(s(s(0)))))), hamming) |
hamming | ⇒ | cons(s(0), merge(list1, merge(list2, list3))) |