Truth and falsity [in formal systems]
The notion that statements can always be classified as either true or false has been a common idealization in logic since antiquity. But in everyday language, computer languages and mathematics there are many ways in which this idealization can fail. An example is x+y==z, which cannot reasonably be considered either true or false unless one knows what x, y and z are. Predicate logic avoids this particular kind of case by implicitly assuming that what is meant is a general statement about all values of any variable—and avoids cases like the expression x+y by requiring all statements to be well-formed formulas (see page 1150). In Mathematica functions like TrueQ and IntegerQ are set up always to yield True or False—but just by looking at the explicit structure of a symbolic expression.
Note that although the notion of negation seems fairly straightforward in everyday language it can be difficult to implement in computational or mathematical settings. And thus for example even though it may be possible to establish by a finite computation that a particular system halts, it will often be impossible to do the same for the negation of this statement. The same basic issue arises in the intuitionistic approach to mathematics, in which one assumes that any object one handles must be found by a finite construction. And in such cases one can set up an analog of logic in which one no longer takes ¬ ¬ a == a.
It is also possible to assume a specific number k>2 of truth values, as on page 1175, or to use so-called modal logics.
(See also page 1167.)