Quite another picture is emerging with implementable set theory. Each of our implementable (that is: hereditarily finite) sets uniquely corresponds with a natural number (and $\{\} = 0$). And each natural number uniquely corresponds with an implementable set. Thus our theory of sets does not contain more sets than it contains numbers. Therefore it's not suggested that our implementable set theory can serve as a foundation for the whole of mathematics. It's rather suggested that sets are based upon numbers. And that a good old statement still holds: 'Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk' (Leopold Kronecker - 1886). It's the whole numbers that are foundational for Mathematics, not sets.
The theory of finite ordinals could be labeled as von Neumann's left hand. The common von Neumann computer architecture could be labeled as his right hand. Clearly von Neumann's left hand didn't know what his right hand was doing. Any serious implementation of the former into the latter would be so tremendously inefficient that all computation with naturals would become impossible.
The mapping of sets upon numbers may be denoted by an overline, as in $\overline{x}$ .
In one of our key references, the paper by Abian [2],
that overline notation has been employed all over the place.
According to standard mathematics, indeed, a bijection,
say the 'Ackermann / Alexander Abian' function $A$, which maps sets onto integers,
should be defined in the first place. After doing so, we could proceed with,
for example:
$$
A \left(\;\{ \{\} \{\{\}\} \{\{\{\}\}\} \}\;\right) = A(\overline{7}) = 7
\quad \mbox{and} \quad A^{-1}(7) = \{ \{\} \{\{\}\} \{\{\{\}\}\} \} = \overline{7}
$$
But instead of all that jazz with bijections and overlines, we have followed an
even more simple minded approach and simply declare sets and numbers equal.
This is motivated by the fact that sets and naturals share exactly the same bitmaps,
when implemented in a computer's memory.
The mapping of numbers onto sets is also useful from another point of view. I
don't claim it will ever become a method with beats others from a viewpoint of
effiency, but representing numbers as sets in array implementations certainly
is an alternative way of doing calculations with very large numbers.
A rapid prototyping package has been made available as [6] , for demonstration purposes only. Here are some core routines:
function plus(a,b : integers) : integers; { a + b } function maal(a,b : integers) : integers; { a * b }An example:
program demo; Uses Rekenen; begin Writeln(faculteit(53)); end.53! = 4274883284060025564298013753389399649690343788366813724672000000000000