It is not about systems that can "do" basic arithmetic but that can "talk about" basic arithmetic.
The mere execution of basic arithmetic does not require the capability of manipulating propositions of basic arithmetic.
Doing basic arithmetic:
12 * ( 5 + 8 ) --> 12 * 13 --> 156
Talking about basic arithmetic:
a * ( b + c ) == a * b + a * c
The formal language needed to describe basic arithmetic is much more powerful than a simple execution engine, such as a stack engine, that can merely carry out basic arithmetic.
For example, I must be able to express that for all natural numbers x and y, if x = y, then y = x. The result could look like this:
∀ x,y ∈ N: x=y ⇔ y=x
Hence, this language must be able to express all Dedekind-Peano's axioms as well as every proposition provable from these axioms, along with their formal proofs.
In that sense, the Gödel numbering system is the "bytecode" of quite a serious programming (or at least, specification) language. (https://en.wikipedia.org/wiki/G%C3%B6del_numbering)
The mere execution of basic arithmetic does not require the capability of manipulating propositions of basic arithmetic.
Doing basic arithmetic:
12 * ( 5 + 8 ) --> 12 * 13 --> 156
Talking about basic arithmetic:
a * ( b + c ) == a * b + a * c
The formal language needed to describe basic arithmetic is much more powerful than a simple execution engine, such as a stack engine, that can merely carry out basic arithmetic.
For example, I must be able to express that for all natural numbers x and y, if x = y, then y = x. The result could look like this:
∀ x,y ∈ N: x=y ⇔ y=x
Hence, this language must be able to express all Dedekind-Peano's axioms as well as every proposition provable from these axioms, along with their formal proofs.
In that sense, the Gödel numbering system is the "bytecode" of quite a serious programming (or at least, specification) language. (https://en.wikipedia.org/wiki/G%C3%B6del_numbering)