The logical symbols, i.e. the Boolean operators and quantifiers, have the same meaning as in logic. There are two types of quantifiers though. The bounded quantifiers are just a useful shorthand. \[ \{ ∀ x < c : P \} \] means the same as \[ \{ ∀ x . [ ( x < c ) ⊃ P ] \} \] and similarly for the existential quantifier.
The arithmetic operators \({ + }\) and \({ - }\) mean addition and multiplication, respectively. 0 means 0. The apostrophe is the successor operator, that is the operator which takes a natural number and increments it. The successor operator occurs so often that I’ve broken with my usual practice of allowing only fully parenthesised expressions. This won’t cause any problems because it’s the only exception.
This language doesn’t allow the usual decimal notation for natural numbers so the way to represent the natural numbers we’d normally call 0, 1, 2, 3, … is as 0, 0’, 0’‘, 0’’‘, etc. We can also add and multiply numerical expressions, which gives us a few more options. So we don’t have to represent 2023 as a 0 followed by 2023 apostrophes, for example. We could also write it as \[ ( 0''' + \{ [ 0' + ( \{ 0'' + [ ( 0''' + \{ [ 0''' + ( 0' · 0'''' ) ] · 0'''' \} ) · 0'''' ] \} · 0'''' ) · 0'''' ) ] · 0'''' \} ) . \] If you’re wondering where this came from it’s just the base 4 representation \[ ( 3 + \{ [ 1 + ( \{ 2 + [ ( 3 + \{ [ 3 + ( 1 · 4 ) ] · 4 \} ) · 4 ] \} · 4 ) ] · 4 \} ) \] with 1, 2, 3 and 4 replaced by 0’, 0’‘, 0’’‘, and 0’’’‘. There’s nothing special about 4. We could have used decimal instead but it’s hard to look at 0’’’’’’’’’’ and see what number it is. We could also have used binary but then the expression would be quite long, though not nearly as long as a 0 followed by 2023 apostrophes!
Note that some expressions are of numerical type, which in this case means they should be though of as natural numbers, and some are of Boolean type.
Numerical expressions include const_exp
s,
variable
s and num_exp
s.
const_exp
s, i.e. constant expressions, are those
constructed without the use of variable
s. Every
const_exp
is a num_exp
, but not every
num_exp
is a const_exp
. The expression \[
( 0''' + \{ [ 0' + ( \{ 0'' + [ (
0''' + \{ [ 0''' + ( 0' ·
0'''' ) ] · 0'''' \} ) ·
0'''' ] \} · 0'''' ) ·
0'''' ) ] · 0'''' \} ) .
\] for \({ 2023 }\) considered
earlier is a const_exp
, and therefore also a
num_exp
. \({ ( x + y ' )
}\) is a num_exp
which is not a
const_exp
.
Boolean expressions include comparison
,
bndd_exp
and bool_exp
. Every
comparison
is a bndd_exp
and every
bndd_exp
is a bool_exp
but not every
bool_exp
is a bndd_exp
and not every
bndd_exp
is a comparison
.
comparison
s have to be constructed without the use of
Boolean operators or quantifiers. bndd_exp
s can use Boolean
operators and quantifiers, but only bounded quantifiers.
The point of bounded expressions is that for any given value of the free variables occurring in them we can, at least in principle, check whether they’re true. Whenever we see a quantifier we only need to check those numbers up to the given bound. With an ordinary quantifier we might need to check all natural numbers, which cannot be done in finite time.
It would have been possible to use decimal or binary representations as part of the language but then we’d have build much of elementary arithmetic into the axioms and rules of inference. This can be done, as we saw when we considered languages expressing divisibility properties. In addition to requiring a very complicated set of rules of inference that approach would miss the point. We want to build a formal system in which to prove statements in elementary arithmetic. If we need to assume large parts of elementary arithmetic to show that our rules of inference are sound then what’s the point? It’s better to assume as little prior knowledge of arithmetic as we can get away with.
Note that there Boolean operators, which combine Boolean expressions to give a Boolean expression, and there are arithmetic operators, which combine numerical expressions to give a numerical expression, and there are comparison relations, which combine numerical expressions to give a Boolean expression, but there is no way of combining Boolean expressions to get a numerical expression.