Boolean Propositions aren't Truth-Functional

Peter Roosen-Runge

"the words 'true' and 'false' are only items in a particular notation for truth-functions.", L. Wittgenstein, Philosophical Grammar

Purely logical propositions such as "P implies Q" contain no relation or object names, just variables and logical operations. They are, in fact better understood as Boolean functions, that is, functions from 2n -> 2, where 2 stands for any set of cardinality 2 -- and since the set is arbitrary, it is just a matter of conventional labelling if we choose to call one of its elements 'true' and the other 'false'.

Without the connection to actual objects and properties, linguistic usage has no way to fix the meanings of the symbols occuring within a logical proposition. All usage can do is fix how we use the Boolean functions referred to in those propositions, and as we shall see, this is not enough to fix a sense of 'true' or 'false' which is any more than an arbitrary label for an arbitrary value.

So it is misleading to describe the and function in, say, p and q as identifying a specific function defined on the values {true, false}, for there is nothing true about true or false about false-- they could just as well be 'white' and 'green'. The domains of the logical operators are truth-values only in the limited sense that if the variables p and q were replaced by simple contingent propositions, then there would be a connection to truth and falsity. But then the proposition would no longer be a logical proposition, but a proposition about the World.

To apply the terms 'true' and 'false' to logical propositions is to think of them as veiled statements about something: statements whose constituent simple statements have been, so to speak, put under wraps so that we cannot see them, to perhaps better bring out the "logical structure" of the statement. But logical propositions are not veiled statements; they are statement forms within a well-defined calculus that has no connection to simple propositions. In that calculus, there is nothing left to which one can appeal to decide what operation is really 'and', and thereby what is really 'or; or what value is 'true', and thereby what value is 'false'. The questions "what operation is the 'and'?" or "what value represents 'truth'?" are meaningless, since they call for a comparison between a convention (the name chosen to represent something) and something outside the framework in which the convention is applicable. Internal to the system of logical propositions, the values are not truth-values; all that matters about them is that there are two of them.

As a result, there is no connection between two-valued logic and necessary truth; a proposal such as that of Kielkopf [Strict Finitism, 1970, p. 98], that P is necessary if when

"rewritten in logical notation in which it has the form Q, the proposition 'The truth value assigned to Q in two value logic is true' is an identity."
is utterly unworkable, for true is not a truth value in two value(d) logic. 'True' or 'vrai' or 'blau' or 0 can be truth values in a two-valued logic, but no choice of some symbol as the symbol to assign to a rewriting of P in a logical notation can confer truth or necessity. I would guess that Kielkopf thought that in using the word "true", he was using a name of something, namely, truth, and that a necessary truth was one which was, via a logic, identical with a name for truth. But in the case of a two-valued logic, as for a calculus generally, the assignment of values is not the establishment of an identity with something external to logic, but the establishment of the identity of values internal to the logic, as in "the value of not(false) is identical to the value of not(not(not(false)))."

We can (and should) drop the language of truth and falsity altogether in this context and consider the logical propositions simply as Boolean functions of Boolean variables. Among these functions we can pick out the (unique) function of one argument which is neither constant nor the identity, and this we can appropriately label ~ or negation. We can also pick out the two distinct functions of two arguments, call them f and g, which satisfy

f(x,y) = f(y,x);
f(x,x) = x = g(x,x);

and g(x,y) = ~f(x,y) if x is unequal to ;

where x, y are variables with two distinct values. It would be a mistake to claim that one of these functions works like 'and' and the other like 'or'--each works like one half of the 'and/or' pair, but the question 'which half?' is meaningless.

Likewise, the identification of a particular constant logical function as tautology or as contradiction is inappropriate; there are just two cases, call them what you like.

An example of the confusions which result if we try to impose an interpretation on the Boolean values beyond their cardinality:

"Computers, as is well known, communicate . . through sequences of 0s and 1s. Now the presence of 0 here is no accident. Much can be made of the relation between it and the Boolean algebra which governs how computers do what they do." [Rotman, 1987, p. 5]

There are a number of muddles here--among them the idea that in Boolean computation (whether by computers or by humans), the value 0 has any special significance other than as a handy labelling. The labelling establishes a convenient link between logical operations and one possible implementation of arithmetic operations performed in binary notation, but this relationship is just a relation among conventional labels; changing the labels only changes how we describe the operation of the computer, not the actual operation of the computer itself.

And the Boolean algebra of logical propositions 'governs' nothing of what computers do (other than that the minimal unit of storage is necessarily constituted by 2 states). If we were to implement the arithmetic circuits differently, say, with inverted circuits, should we say that "the presence of 1 here is no accident"? There are no more 0s and 1s in the circuits of computers than there are -5 volts and 0 volts in the calculations of logic.

A somewhat more accurate view is that

"a formal system is valid as long as it is a mere Boolean algebra . . In this case, the notions of true and false have not been introduced and the system does not acquire, by the mechanical interpretation, any epistemological character. If we interpret, for instance, the two values of a Boolean algebra as "open" and "closed" (as in the circuits with contacts and relays), the formal system may be successfully applied. However this application has nothing in common with the true and the false." [Dimitriu, Theory and System, pp. 52-53.]

But what about inference? suppose we require that there be an internal operation -> to play the role given earlier for inferring statements via tautologies. Does this help to unravel the ambiguity of what logical propositions "mean"?

No. Define x -> y to be f(~x, y), where f is either of the two functions defined above, and let s = g(x,~x). (s is independent of x since g(~x,x) = g(x,~x).)

Abbreviate "P has the constant value s" to "P is s". Then if P is s and P -> Q is s, it can be shown that Q is s. And just as for inferences among statements, this can be interpreted as a pattern of inference "justified" by the fact that

f(P, P -> Q) -> Q is s,

paralleling the inference of Q from tautologies P and P-> Q, which is justified by the tautology

P & (P -> Q) -> Q .

But the parallel holds regardless of whether f is interpreted as 'and' with s as 'true', or as 'or' with s as 'false'. From the outside, we can see that there are two parallel inference patterns, depending on the choice. From the inside, there is only one pattern. That the same inference pattern could be written with the roles of f and g reversed says only that the names are conventional labels with no intrinsic significance, other than that distinct labels label distinct functions.

Breaking the symmetry

Aaron Sloman has suggested that while "computers can be said to use boolean operations and boolean values", attributing the semantics of true and false to their use of these values is problematic, and requires some computable critierion to break the formal symmetry.

He argues for a source of asymmetry "in mechanisms that can check stored assertions . . Truth of a formula is then associated with having the capacity to survive thorough checking." But this appeal to a sort of logical "empiricism" in which logical formula are tested against their "consequences" gets us no farther in producing an internal interpretion of Boolean values as truth/false unless we have an answer for what appears to be a much harder problem: what is it that, without an appeal to an external, observer-supplied interpretation, can constrain some (arbitrary?) pattern of bits to count as a "correct" description of some external consequences? Or putting it more simply, on what is the distinction between having a machine check that a formula is correct, and having it check that the formula is incorrect, to be grounded?

A plausible guess is that the distinction will have to be grounded in some as-yet not understood holistic manner on the entire pattern of interconnections between all the computations that involve the checking operation in some way , but as Sloman observes, "the connection is not simple, for the processing of checking may involve errors" and even the the checking of of arithmetical propositions "requires deeper analysis".

However, if our purpose is simply to break the symmetry of Boolean values, this can be achieved fairly simply without attaching to them a true/false semantics, by extending the evaluation of propositions to include:

(a) equality
(b) self-reference.

To make the construction quite explicit, we introduce a function

val: propositions -> Boolean
. Pick one Boolean value, say, b, for the value of val(" A = B") if A = B ; otherwise the value is the other Boolean value, call it b'.

(We have not thereby selected b to stand for truth, for there is no interpretation specified for the val function, so the basis on which val assigns the value b or b' is left open. So we cannot identify within the formalism an unambiguous interpretation of b as 'true' in the expression val(('a = a' ) = b on the basis that the arguments of the relation '=' are identical, for we could just as well take b to stand for 'false' on the basis that the arguments of the relation '=' are not distinct.)

Now suppose we extend the val function to propositions containing names of propositions in the form #N, by defining, as expected,

val(#N) = val(P) if #N is the name of P.
. We can now show that the symmetry between b and b' fails for self-referential propositions, in that if #n is the name of a proposition that says that val(#n) = b, then indeed we can extend val to specify a value for this proposition by defining val("val(#n) = b") to be b.

But if #n is the name of a proposition that says that val(#n) = b', then the valueval("val(#n) = b'") must be undefined.

For if val(#n) = b then

val("val(#n) = b") = val("b = b") = b (by the definition of b above.)
Whereas val("val(#n) = b'") cannot be assigned a value without contradicting the requirement that b and b' are distinct.

If val(#n) = b, then

val("val(#n) = b'") = val("b = b'") = b', so
val(#n) = b', and b = b'.

And if val(#n) = b', then

val("val(#n) = b'") = val("b '= b'") = b, so
val(#n) = b, and again b '= b.

Obviously this is just a "purified" form of the "Liar Paradox", stripped of the distractions of natural language semantics, indeed stripped of any reference at all to the meaning of 'true' and 'false', and so reduced to a purely algebraic proof that a given function can only be partially defined.


Author: Peter Roosen-Runge (peter at cse.yorku.ca)
Last revised August 18, 2008