"

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 constant for each pair of natural numbers k,nk, n. In other words, no matter what 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}_0 consists of the following: for each natural number nn the constant 𝔠n\mathfrak{c}_n, for each pair of natural numbers nn and kk a 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 XX and YY are 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:

image

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.