"

The language of zeroth-order logic

Individual constants

We now have most of what we need to specify a very important logical language we will be working with, the language of zeroth-order logic, denoted

0\mathcal{L}_0

. The alphabet of

0\mathcal{L}_0

consists, first, of infinitely many symbols called individual constants or names. These may be represented by indexing a single symbol with the natural numbers, as if we had a list. Like this:

𝔠1,𝔠2,𝔠3,𝔠4,𝔠5,...\mathfrak{c}_1, \mathfrak{c}_2, \mathfrak{c}_3, \mathfrak{c}_4, \mathfrak{c}_5, …

You can read this as:

𝔠1\mathfrak{c}_1

(‘cee one’) is the first constant,

𝔠2\mathfrak{c}_2

(‘cee two’) is the second constant,

𝔠3\mathfrak{c}_3

(‘cee three’) is the third constant, and so on. (The indices, in order, here would be

11

,

22

,

33

, and so on.) Clearly, we cannot list all of the constants (for each

nn

), just as we cannot list all the natural numbers. That would take an infinitely long paper, and let’s not talk about the time involved! This is why we have the three dots

...

, implying it goes on forever. More succinctly, we may say:

𝔠n\mathfrak{c}_n

is a constant for every natural number

nn

.

Note also that the use of

𝔠\mathfrak{c}

here is completely arbitrary. I chose it because it is the first letter in the word ‘constant’, but I could have chosen

𝔞\mathfrak{a}

or

𝔟\mathfrak{b}

. On the other hand, once we specify that we use

𝔠\mathfrak{c}

, we have to stick with it. In other words, the choice of

𝔠\mathfrak{c}

is arbitrary, but using

𝔠\mathfrak{c}

afterwards is not arbitrary, since we explicitly chose it over other alternatives.

Predicates

Second, similar to constants, we also have infinitely many symbols called predicates in our alphabet. These will be denoted by

𝔓\mathfrak{P}

(like

PP

, but in a different font). In fact, these predicates come with an additional index called their arity, denoting the number of arguments they each take (see below). So really, for each natural number

kk

, there are infinitely many predicates for that natural number (arity)

kk

. This might be a bit confusing at first, so let’s look at some examples.

First, the infinitely many predicates of arity

11

can be represented:

𝔓11,𝔓21,𝔓31,𝔓41,𝔓51,...\mathfrak{P}^1_1, \mathfrak{P}^1_2, \mathfrak{P}^1_3, \mathfrak{P}^1_4, \mathfrak{P}^1_5, …

Then, the infinitely many predicates of arity

22

can be represented:

𝔓12,𝔓22,𝔓32,𝔓42,𝔓52,...\mathfrak{P}^2_1, \mathfrak{P}^2_2, \mathfrak{P}^2_3, \mathfrak{P}^2_4, \mathfrak{P}^2_5, …

So really, the list goes on infinitely not just horizontally, but vertically too! So in full generality:

𝔓11,𝔓21,𝔓31,𝔓41,𝔓51,...𝔓12,𝔓22,𝔓32,𝔓42,𝔓52,...𝔓13,𝔓23,𝔓33,𝔓43,𝔓53,...\begin{gathered} \mathfrak{P}^1_1, \mathfrak{P}^1_2, \mathfrak{P}^1_3, \mathfrak{P}^1_4, \mathfrak{P}^1_5, …\\ \mathfrak{P}^2_1, \mathfrak{P}^2_2, \mathfrak{P}^2_3, \mathfrak{P}^2_4, \mathfrak{P}^2_5, …\\ \mathfrak{P}^3_1, \mathfrak{P}^3_2, \mathfrak{P}^3_3, \mathfrak{P}^3_4, \mathfrak{P}^3_5, …\\ \vdots \end{gathered}

Just as before, this may be represented a lot more succintly by simply saying:

𝔓nk\mathfrak{P}^k_n

is a predicate for each pair of positive natural numbers

k,nk, n

. In other words, no matter what positive natural number you choose for

kk

and

nn

, substituting it for

kk

and

nn

in

𝔓nk\mathfrak{P}^k_n

will get you a predicate of the language. Sometimes, we may say

𝔓nk\mathfrak{P}^k_n

is a

kk

-place predicate.

It is important to note that in a predicate like

𝔓94\mathfrak{P}^{4}_{9}

, the number

44

is called its arity, and the number

99

is called its index. For example, though

44

may look like the power or exponent, this is just because of the similar notation. In reality, these two ideas are not related in any way, and should not be confused.

Exercise 2.24. Decide for the following symbols whether they are a constant or a predicate. If they are a predicate, identify their arity.

  1. 𝔠5\mathfrak{c}_5
  2. 𝔠67\mathfrak{c}_{67}
  3. c45c^5_4
  4. 𝔓74\mathfrak{P}^4_7
  5. 𝔓45698\mathfrak{P}^{98}_{456}
  6. 𝔓11000000\mathfrak{P}^{1000000}_1
  7. 𝔓10000001\mathfrak{P}_{1000000}^1

The connectives and the rest

Just like with the language

AE\mathcal{L}_{AE}

, simpler expressions will be combined together to form more complex expressions using special symbols (similar to the

++

,

, and

×\times

signs). We call these symbols connectives, for obvious reasons. Table 2.1 lists the four connectives we will be using. Note that each symbol comes with a fixed arity, like our predicates. The table also includes, in scare quotes, the closest natural language approximation for the meaning of these symbols. For now (and perhaps altogether), this is irrelevant.

The connectives of 0\mathcal{L}_0
Symbol Name Arity
\wedge conjunction, ‘and’ 2
\vee disjunction, ‘or’ 2
\rightarrow conditional, ‘if-then’ 2
¬\neg negation, ‘not’ 1

You may already know some or all of these connectives by their name, but perhaps not by their specific symbol (e.g.,

\sim

instead of

¬\neg

, & instead of

\wedge

). As noted when talking about alphabetic variants previously (see p. ), what the exact symbols of the alphabet are do not really matter, only the role they play. On the other hand, most contemporary writings on logic use these symbols for the connectives, as opposed to some of the older variants, so our choice is not entirely arbitrary.

Finally, we will keep using the left and right parentheses ‘

((

’ and ‘

))

’, along with the comma symbol ‘

,,

’. Thus:

Alphabet of

0\mathcal{L}_0: The alphabet of

0\mathcal{L}_0consists of the following: for each natural number

nnthe constant

𝔠n\mathfrak{c}_n, for each pair of natural numbers

nnand

kka predicate

𝔓nk\mathfrak{P}^k_n(of arity

kk), the connectives

,,¬,\wedge, \vee, \neg, \rightarrow, the left ‘

((’ and right ‘

))’ parentheses, and the comma ‘

,,’.

The formulas of 0\mathcal{L}_0

Now that we have our alphabet, we can look at how our formulas are built up. Just as with some of the other languages we considered, not any sequence of symbols will qualify as a formula. Our base rule looks like this:

Base Rule of

0\mathcal{L}_0

: if

𝔠n1,...,𝔠nk\mathfrak{c}_{n_1}, …, \mathfrak{c}_{n_k}

are

kk

-many (not necessarily distinct) individual constants and

𝔓ik\mathfrak{P}^k_i

is a predicate of arity

kk

, then

𝔓ik(𝔠n1,...,𝔠nk)\mathfrak{P}^k_i(\mathfrak{c}_{n_1}, …, \mathfrak{c}_{n_k})

is a formula. We shall also call any such formula an atomic formula.

This is an extremely precise formulation of our base rule, and thus can be rather confusing at first. However, it really isn’t very complicated, for all it says is that if you take any predicate with arity

kk

, then you need to have

kk

individual constants following it in order for it to be a formula. In other words, any predicate

𝔓nk\mathfrak{P}^k_n

wears on its sleeves the number of individual constants it demands – namely,

kk

many! Note however that these individual constants need not be distinct. For example, for

𝔓52\mathfrak{P}^2_5

, we may write

𝔓52(𝔠5,𝔠5)\mathfrak{P}^2_5(\mathfrak{c}_5, \mathfrak{c}_5)

just as well as

𝔓52(𝔠5,𝔠3)\mathfrak{P}^2_5(\mathfrak{c}_5, \mathfrak{c}_3)

.

Exercise 2.25. Determine if the following are (atomic) formulas of the language

0\mathcal{L}_0. In each case, explain your reasoning.

  1. 𝔓13(𝔠3,𝔠5,𝔠1)\mathfrak{P}^3_1(\mathfrak{c}_3, \mathfrak{c}_5, \mathfrak{c}_1)
  2. 𝔓41(𝔠66)\mathfrak{P}^1_4(\mathfrak{c}_{66})
  3. 𝔓55(𝔠5,𝔠4,𝔠3,𝔠2,𝔠1)\mathfrak{P}^5_5(\mathfrak{c}_5, \mathfrak{c}_4, \mathfrak{c}_3, \mathfrak{c}_2, \mathfrak{c}_1)
  4. 𝔓62(𝔠2,𝔠2)\mathfrak{P}^2_6(\mathfrak{c}_2, \mathfrak{c}_2)
  5. 𝔓62(𝔠2)\mathfrak{P}^2_6(\mathfrak{c}_2)
  6. 𝔓32(𝔠4,𝔠9,𝔠1)\mathfrak{P}^2_3(\mathfrak{c}_4, \mathfrak{c}_9, \mathfrak{c}_1)

After our atomic formulas are defined, we can give our usual productive rule, which enables us to form more complex, i.e., ‘non-atomic’ formulas iteratively.

Productive Rule of

0\mathcal{L}_0: if

XXand

YYare formulas of

0\mathcal{L}_0, then the following are also formulas of

0\mathcal{L}_0:

  1. ¬X\neg X

    ;

  2. (XY)(X \wedge Y)

    ;

  3. (XY)(X \vee Y)

    ;

  4. (XY)(X \rightarrow Y)

    .

Of course,

XX

and

YY

are variables, which can denote (as noted) any formula of

0\mathcal{L}_0

, both atomic and non-atomic (complex).

Exercise 2.26. Determine whether the following expressions are formulas of the language

0\mathcal{L}_0. If not, explain why, and how they could be made into formulas of the language.

  1. ((¬𝔓43(𝔠1,𝔠2,𝔠1)¬𝔓41(𝔠3))𝔓52(𝔠4,𝔠4))((\neg \mathfrak{P}^{3}_{4}(\mathfrak{c}_{1}, \mathfrak{c}_{2}, \mathfrak{c}_{1}) \neg \mathfrak{P}^{1}_{4}(\mathfrak{c}_{3})) \rightarrow \mathfrak{P}^{2}_{5}(\mathfrak{c}_{4}, \mathfrak{c}_{4}))
  2. ((¬𝔓43(𝔠1,𝔠2,𝔠1)¬𝔓41(𝔠3))𝔓52(𝔠4,𝔠4))((\neg \mathfrak{P}^{3}_{4}(\mathfrak{c}_{1}, \mathfrak{c}_{2}, \mathfrak{c}_{1}) \wedge \neg \mathfrak{P}^{1}_{4}(\mathfrak{c}_{3})) \rightarrow \mathfrak{P}^{2}_{5}(\mathfrak{c}_{4}, \mathfrak{c}_{4}))
  3. (¬𝔓43(𝔠1,𝔠2,𝔠1)¬𝔓41(𝔠3))𝔓52(𝔠4,𝔠4))(\neg \mathfrak{P}^{3}_{4}(\mathfrak{c}_{1}, \mathfrak{c}_{2}, \mathfrak{c}_{1}) \wedge \neg \mathfrak{P}^{1}_{4}(\mathfrak{c}_{3})) \rightarrow \mathfrak{P}^{2}_{5}(\mathfrak{c}_{4}, \mathfrak{c}_{4}))
  4. ((¬𝔓43(𝔠1,𝔠2,𝔠1)¬𝔓41(𝔠3))𝔓54(𝔠4,𝔠4))((\neg \mathfrak{P}^{3}_{4}(\mathfrak{c}_{1}, \mathfrak{c}_{2}, \mathfrak{c}_{1}) \wedge \neg \mathfrak{P}^{1}_{4}(\mathfrak{c}_{3})) \rightarrow \mathfrak{P}^{4}_{5}(\mathfrak{c}_{4}, \mathfrak{c}_{4}))
  5. ((¬(¬𝔓43(𝔠1,𝔠2,𝔠1))¬𝔓41(𝔠3))𝔓52(𝔠4,𝔠4))((\neg(\neg \mathfrak{P}^{3}_{4}(\mathfrak{c}_{1}, \mathfrak{c}_{2}, \mathfrak{c}_{1})) \wedge \neg \mathfrak{P}^{1}_{4}(\mathfrak{c}_{3})) \rightarrow \mathfrak{P}^{2}_{5}(\mathfrak{c}_{4}, \mathfrak{c}_{4}))

Analyzing formulas; again

As before, we can now start analyzing the possible formulas of the language

0\mathcal{L}_0

, checking whether they are in fact well-formed formulas of the language, and how they can be constructed. We previously saw two ways of doing this, one linear, the other making use of trees. These two ways are both applicable to formulas of

0\mathcal{L}_0

. In general,

XX

is a formula of the language

0\mathcal{L}_0

if, and only if, it has a linear derivation and a tree derivation. Thus, if an expression cannot be derived, it is not a formula of

0\mathcal{L}_0

, but if it is a formula of

0\mathcal{L}_0

, you must be able to derive it somewhow.

As an example, let’s analyze the formula:

((¬𝔓43(𝔠1,𝔠2,𝔠1)¬𝔓41(𝔠3))𝔓52(𝔠4,𝔠4))((\neg \mathfrak{P}^3_4(\mathfrak{c}_1, \mathfrak{c_2}, \mathfrak{c_1}) \wedge \neg \mathfrak{P}^1_4(\mathfrak{c}_3)) \rightarrow \mathfrak{P}^2_5(\mathfrak{c}_4, \mathfrak{c}_4))

From bottom to top, linearly, we can show that this is indeed a formula of the language as follows:

(1) 𝔓43(𝔠1,𝔠2,𝔠2)\mathfrak{P}^3_4(\mathfrak{c}_1, \mathfrak{c}_2, \mathfrak{c}_2) (BR)
(2) 𝔓41(𝔠3)\mathfrak{P}^1_4(\mathfrak{c}_3) (BR)
(3) 𝔓52(𝔠4,𝔠4)\mathfrak{P}^2_5(\mathfrak{c}_4, \mathfrak{c}_4) (BR)
(4) ¬𝔓43(𝔠1,𝔠2,𝔠1)\neg \mathfrak{P}^3_4(\mathfrak{c}_1, \mathfrak{c_2}, \mathfrak{c_1}) (PR

¬\neg:1)

(5) ¬𝔓41(𝔠3)\neg\mathfrak{P}^1_4(\mathfrak{c}_3) (PR

¬\neg:2)

(6) (¬𝔓43(𝔠1,𝔠2,𝔠1)¬𝔓41(𝔠3))(\neg \mathfrak{P}^3_4(\mathfrak{c}_1, \mathfrak{c_2}, \mathfrak{c_1}) \wedge \neg \mathfrak{P}^1_4(\mathfrak{c}_3)) (PR

\wedge:4, 5)

(7) ((¬𝔓43(𝔠1,𝔠2,𝔠1)¬𝔓41(𝔠3))𝔓52(𝔠4,𝔠4))((\neg \mathfrak{P}^3_4(\mathfrak{c}_1, \mathfrak{c_2}, \mathfrak{c_1}) \wedge \neg \mathfrak{P}^1_4(\mathfrak{c}_3)) \rightarrow \mathfrak{P}^2_5(\mathfrak{c}_4, \mathfrak{c}_4)) (PR

\rightarrow:3, 6)

From top to bottom, using a tree and visualizing its structure, we can do it as follows:

A logical expression tree diagram with symbols like a stylized beta symbol, and stylized c1, c2, c3, and c4. The tree shows relationships between expressions using arrows.

As before, we can also ask about the main operator for each formula. The main operator is always the one introduced from the previous level or levels. Here:

  1. The formulas

    𝔓43(𝔠1,𝔠2,𝔠1)\mathfrak{P}^3_4(\mathfrak{c}_1, \mathfrak{c_2}, \mathfrak{c_1}),

    𝔓41(𝔠3)\mathfrak{P}^1_4(\mathfrak{c}_3), and

    𝔓52(𝔠4,𝔠4)\mathfrak{P}^2_5(\mathfrak{c}_4, \mathfrak{c}_4)are atomic, and have no operator;

  2. The main operator of

    ¬𝔓43(𝔠1,𝔠2,𝔠1)\neg\mathfrak{P}^3_4(\mathfrak{c}_1, \mathfrak{c_2}, \mathfrak{c_1})and

    ¬𝔓41(𝔠3)\neg\mathfrak{P}^1_4(\mathfrak{c}_3)is

    ¬\neg;

  3. The main operator of

    (¬𝔓43(𝔠1,𝔠2,𝔠1)¬𝔓41(𝔠3))(\neg \mathfrak{P}^3_4(\mathfrak{c}_1, \mathfrak{c_2}, \mathfrak{c_1}) \wedge \neg \mathfrak{P}^1_4(\mathfrak{c}_3))is

    \wedge;

  4. The main operator of

    ((¬𝔓43(𝔠1,𝔠2,𝔠1)¬𝔓41(𝔠3))𝔓52(𝔠4,𝔠4))((\neg \mathfrak{P}^3_4(\mathfrak{c}_1, \mathfrak{c_2}, \mathfrak{c_1}) \wedge \neg \mathfrak{P}^1_4(\mathfrak{c}_3)) \rightarrow \mathfrak{P}^2_5(\mathfrak{c}_4, \mathfrak{c}_4))is

    \rightarrow.

Exercise 2.27. Derive the following formulas using either the linear method or the tree method. In each case, determine what the main operator of the formulas is.

  1. ((𝔓22(𝔠3,𝔠5)¬𝔓24(𝔠4,𝔠3,𝔠3,𝔠1))𝔓11(𝔠1))((\mathfrak{P}^{2}_{2}(\mathfrak{c}_{3}, \mathfrak{c}_{5})\vee \neg\mathfrak{P}^{4}_{2}(\mathfrak{c}_{4}, \mathfrak{c}_{3}, \mathfrak{c}_{3}, \mathfrak{c}_{1})) \vee \mathfrak{P}^{1}_{1}(\mathfrak{c}_{1}))
  2. (𝔓22(𝔠3,𝔠5)¬(𝔓24(𝔠4,𝔠3,𝔠3,𝔠1)𝔓11(𝔠1)))(\mathfrak{P}^{2}_{2}(\mathfrak{c}_{3}, \mathfrak{c}_{5})\vee \neg(\mathfrak{P}^{4}_{2}(\mathfrak{c}_{4}, \mathfrak{c}_{3}, \mathfrak{c}_{3}, \mathfrak{c}_{1}) \vee \mathfrak{P}^{1}_{1}(\mathfrak{c}_{1})))
  3. (𝔓22(𝔠3,𝔠5)(¬𝔓24(𝔠4,𝔠3,𝔠3,𝔠1)𝔓11(𝔠1)))(\mathfrak{P}^{2}_{2}(\mathfrak{c}_{3}, \mathfrak{c}_{5})\rightarrow (\neg\mathfrak{P}^{4}_{2}(\mathfrak{c}_{4}, \mathfrak{c}_{3}, \mathfrak{c}_{3}, \mathfrak{c}_{1}) \rightarrow \mathfrak{P}^{1}_{1}(\mathfrak{c}_{1})))
  4. (¬𝔓22(𝔠3,𝔠5)(𝔓24(𝔠4,𝔠3,𝔠3,𝔠1)¬𝔓11(𝔠1)))(\neg\mathfrak{P}^{2}_{2}(\mathfrak{c}_{3}, \mathfrak{c}_{5})\rightarrow (\mathfrak{P}^{4}_{2}(\mathfrak{c}_{4}, \mathfrak{c}_{3}, \mathfrak{c}_{3}, \mathfrak{c}_{1}) \wedge \neg \mathfrak{P}^{1}_{1}(\mathfrak{c}_{1})))
  5. (¬¬𝔓22(𝔠3,𝔠5)¬(𝔓24(𝔠4,𝔠3,𝔠3,𝔠1)¬𝔓11(𝔠1)))(\neg\neg\mathfrak{P}^{2}_{2}(\mathfrak{c}_{3}, \mathfrak{c}_{5})\rightarrow \neg (\mathfrak{P}^{4}_{2}(\mathfrak{c}_{4}, \mathfrak{c}_{3}, \mathfrak{c}_{3}, \mathfrak{c}_{1}) \wedge \neg \mathfrak{P}^{1}_{1}(\mathfrak{c}_{1})))
  6. ¬(¬(¬𝔓22(𝔠3,𝔠5)¬𝔓24(𝔠4,𝔠3,𝔠3,𝔠1))¬𝔓11(𝔠1))\neg(\neg(\neg\mathfrak{P}^{2}_{2}(\mathfrak{c}_{3}, \mathfrak{c}_{5})\rightarrow \neg\mathfrak{P}^{4}_{2}(\mathfrak{c}_{4}, \mathfrak{c}_{3}, \mathfrak{c}_{3}, \mathfrak{c}_{1})) \vee \neg \mathfrak{P}^{1}_{1}(\mathfrak{c}_{1}))

Why the weird typeface?

You may be wondering why we are using this weird typeface where a simple

PP

looks like this:

𝔓\mathfrak{P}

; and a simple

cc

looks like this:

𝔠\mathfrak{c}

. This is because as we move forward, we will start using

PP

,

cc

, and some other letters to simplify our formulas if it does not matter at that moment which exact formula of the language we are talking about. This often happens when we want to talk about a class of formulas sharing the same structure. Thus, they will serve a separate, but very important, purpose.

It is important that you do not mix the notation freely! In logic, different ways of writing the same thing may have a different meaning. For example,

pp

,

PP

,

𝐏\mathbf{P}

and

𝔓\mathfrak{P}

will all mean different things. You should be careful which is used at any one point (see immediately below for a distinction!).

Variables like

PP

and

cc

are usually called metavariables, emphasizing that they are not part of the language, but outside of it. You may think of

nn

here and the natural numbers. When we want to talk about some natural number or other, we use

nn

, even though

nn

is not a (representation of a) natural number itself (it is not a formula of

\mathcal{L}_\mathbb{N}

). Similarly, when we want to talk about some predicate or other, we may use the uppercase

P,Q,R,...P, Q, R, …

, and when we want to talk about some constant or another, we may use the lowercase

a,b,c,...a, b, c, …

.

For example, we may represent a set of atomic formulas

P(c1,c2,c3)P(c_1, c_2, c_3)

, meaning all formulas such that they start with

𝔓n3\mathfrak{P}^3_n

for some

nn

, and continue with the required three (not necessarily distinct) constants

𝔠k\mathfrak{c}_k

,

𝔠j\mathfrak{c}_j

,

𝔠l\mathfrak{c}_l

. That is, any formula of form:

𝔓n3(𝔠k,𝔠j,𝔠l)\mathfrak{P}^3_n(\mathfrak{c}_k, \mathfrak{c}_j, \mathfrak{c}_l)

for some

nn

,

kk

,

jj

,

ll

. We may also write something like

Q(c1,c1)Q(c_1, c_1)

, which would correspond to the class of all formulas

𝔓n2(𝔠k,𝔠k)\mathfrak{P}^2_n(\mathfrak{c}_k, \mathfrak{c}_k)

for some

nn

,

kk

. Clearly, these specifications are painful, hence the simplification.

Though these variables are arbitrary, just like

nn

,

kk

,

jj

, etc., you should make sure they don’t clash in a given context. Thus, using something like

P(c1,c2)P(c1,c2,c3)P(c_1, c_2) \wedge P(c_1, c_2, c_3)

is bad, because the two

PP

clearly denote two distinct classes of predicates, one

22

-place, one

33

-place.

License

Icon for the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License

Learning Logic Backwards Copyright © by Peter Susanszky is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License, except where otherwise noted.