0 | : | nat |
build | : | [nat] ⟶ list |
collapse | : | [list] ⟶ nat |
cons | : | [nat → nat × list] ⟶ list |
diff | : | [nat × nat] ⟶ nat |
gcd | : | [nat × nat] ⟶ nat |
min | : | [nat × nat] ⟶ nat |
nil | : | list |
s | : | [nat] ⟶ nat |
X | : | nat |
Y | : | nat |
U | : | nat |
V | : | nat |
W | : | nat |
P | : | nat |
X1 | : | nat |
Y1 | : | nat |
U1 | : | nat |
V1 | : | nat |
W1 | : | nat |
P1 | : | nat |
F2 | : | nat → nat |
Y2 | : | list |
U2 | : | nat |
min(X, 0) | ⇒ | 0 |
min(0, Y) | ⇒ | 0 |
min(s(U), s(V)) | ⇒ | s(min(U, V)) |
diff(W, 0) | ⇒ | W |
diff(0, P) | ⇒ | P |
diff(s(X1), s(Y1)) | ⇒ | diff(X1, Y1) |
gcd(s(U1), 0) | ⇒ | s(U1) |
gcd(0, s(V1)) | ⇒ | s(V1) |
gcd(s(W1), s(P1)) | ⇒ | gcd(diff(W1, P1), s(min(W1, P1))) |
collapse(nil) | ⇒ | 0 |
collapse(cons(F2, Y2)) | ⇒ | F2 · collapse(Y2) |
build(0) | ⇒ | nil |
build(s(U2)) | ⇒ | cons(λ%X:nat.gcd(%X, U2), build(U2)) |