Logic 3003 Spring 2005 Notes on paradoxes and the limits of formal

advertisement
Logic 3003 Spring 2005 Notes on paradoxes and the limits of formal methods.
I.
The Liar:
Suppose we interpret our language as, in part, allowing us to talk about the language itself. In
fact, of course, this is something we do already in English & other natural languages: We describe the
vocabulary and the grammar of English sentences in English. We even use an English word to distinguish
the (declarative) sentences we are correct to endorse/accept/assert from those we would be wrong to take
these attitudes towards: The word is ‘true’.
Similarly, in a formal language such as Lq we might have predicates in the language that we
interpret as applying to all and only those things that are proper names, arbitrary names, variables and
predicate letters, unary connectives and binary connectives, etc. in the language. In this language we might
be able to write axioms expressing the rules of our grammar, so that we could build on these categories,
together with the theory of identity, to define the wffs of the language in the language. And we could go
still further, writing axioms describing sequences of wffs that follow our proof rules. At that point, the
language would be (on this interpretation) understood as giving an account of the formal system we have
been studying.
The question here is, how far can we go with this? In particular, if the language is powerful
enough to describe its own rules of grammar, its own wffs, and its rules for constructing proofs, we might
ask if the language could also include its own truth predicate, a predicate letter whose combination with a
nominal to form an atomic wff or propostional function, would be satisfied if and only if the nominal were
assigned to a true sentence in the language?
It seems that English contains such a predicate: “___ is true” intuitively holds if and only if we
replace ‘___’ with a name or pronoun referring to a true sentence in English. So in effect what we’re
asking is whether a formal language like our Lq could contain a predicate that could be interpreted as
meaning ‘___ is true in Lq’. The idea is to set the interpretation of T up so that it will accord with our
formal account of truth, i.e. satisfaction. That is, we will set things up so that, where m is assigned to name
a wff of Lq, Tm will be a wff in the language, and Tm will satisfied in M at  if and only if m is satisfied in
M at .
But the answer to our question is that we can’t have such a predicate (at least, not without
substantial modifications of our logical system). Consider the following sentence:
m is not true.
So far there’s nothing terribly wrong here. All we need to express this sentence is our truthpredicate, a negation, and a name. So if T is our special truth predicate, we could write this sentence as
Tm
Now, m is just a proper name; when our language is interpreted as being (at least in part) about the
language itself, a proper name like m may refer to a sentence. So on one hand, if m is not interpreted as
referring to a wff in our model, then Tm will be satisfied at every assignment in our model; i.e. M,  
Tm for all assignments . But if m is interpreted as naming a wff, then M,  Tm if and only if m
names a sentence in L that is not satisfied in M at , i.e. iff M,  I(m). (Recall that a model M = <D,I>,
an ordered pair of a domain and an interpretation, and I(m) is the member of the domain that the
interpretation assigns to the proper name m.)
Now we’re ready for a nasty turn. Suppose we have a model on which the wff that m names is the
very sentence ‘Tm’. There is nothing to prevent us having such a model—if m names a sentence, then
it’s easy to choose an interpretation on which that sentence is the very sentence that (on our interpretation)
says of m that it is not satisfied. But then M,   Tm if and only if M,  I(m), but I(m) = Tm, so M, 
  Tm if and only if M,  Tm. And this is a contradiction!
If our language can be interpreted as including its own truth predicate and names for all of its
sentences, then it will allow us to construct a wff which can be interpreted (in some model, assignment pair
M, ) as saying of itself that it is not true (simply by interpreting the name m as referring to the wff
constructed by applying the negation of the ‘truth’ predicate to m). But such a sentence will be satisfied in
M at  if and only if it is not satisfied in M at . That is, we cannot consistently suppose either that it is
satisfied or that it is not satisfied.
We have carefully set up our rules for models and assignments so that each and every sentence in
the language is either satisfied or not satisfied for any well-characterized model, assignment pair. So there
is no class of model, assignment pairs M,  that is
1.
Closed under simple re-interpretions of the proper names for Lq, and that
2.
Always assigns to the extension of T (or any predicate letter of Lq) all and only the wffs of Lq
satisfied in M, .
If there were such a class of model, assignment pairs, then we can see that there would be a model,
assignment pair that assigned m as the name of the wff ‘Tm’, and in that model-assignment pair it’s clear
that T can not have all and only the satisfied sentences in its extension. The key reason for this difficulty is
that which wffs involving this ‘truth’ predicate should be satisfied in the model at that assignment depends
on which wffs are satisfied in the model at the assignment, and we can use ‘’ to tangle this dependence
into a contradictory knot.
II.
Gödel.
Kurt Gödel’s first incompleteness result is very closely related to this informal puzzle about truth.
But Gödel’s work was far more thorough and formal. Gödel showed that a first-order theory of arithmetic
(i.e. a first-order language supplemented by axioms allowing us to define numbers and basic operations on
numbers) would have enough expressive power to have predicates interpretable as picking out the wffs of
the language, as separating the sequences of wffs that are proofs from those that are not, and as
distinguishing the wffs that are theorems from the wffs that are not. Gödel’s method was to arithmetize the
language and the rules of the language, and show that arithmetic could then be used to draw these lines.
Gödel then posed a very closely related question: Could such a first-order theory of arithmetic be
complete? You might think that we’ve already answered that question here, by showing that whenever 
A holds in our first-order language, A. But Gödel has a different notion of completeness in mind—
completeness in his sense is a matter of capturing all the truths of arithmetic, that is, all the truths we can
intuitively prove in arithmetic. So the fact that every wff satisfied in all the models that satisfy the axioms
of this first order theory of arithmetic is provable from the axioms of our theory is not enough for Gödel.
His question is, is this class of models the intended class of models, i.e. the models of arithmetic, or is it
some larger class that includes models of arithmetic along with models of other theories that are not models
of arithmetic at all? That is, can we completely axiomatize arithmetic (using a finite number of axioms or
axiom schemata)?
What Gödel’s first incompleteness result shows is that for any such axiomatization there is a
sentence that is intuitively true, but which cannot be proven unless the entire system is inconsistent (and an
inconsistent system has no model at all, let alone a model that is a model of arithmetic). Rather than focus
on truth, Gödel focused on provability. As I said above, a language in which we can define numbers and
certain (recursive) operations on numbers will be strong enough to express the provability predicate of the
system, i.e. to distinguish the wffs that are theorems from those that are not. But Gödel showed that such a
language will be strong enough to ensure that there is a sentence that can be interpreted as saying, of itself,
that it is not provable. And for such a sentence there are two possibilities. If it is provable after all, then
the system is inconsistent and every sentence is provable. But if it is not provable, then what we have
interpreted it as saying, is a true claim in the language of arithmetic. So either our theory of arithmetic is
inconsistent, or it is incomplete.
A second Gödelian incompleteness result shows something a little more general, and very
startling indeed: If we can prove that our theory of arithmetic is consistent—which is equivalent to proving
that there is at least one sentence that cannot be proven in the system given the axioms—then our theory
must be inconsistent. The reason for this is a bit subtle, but we can draw on what we’ve already said to
motivate it. Consider the Gödel sentence, G. G can be interpreted as saying of itself that it is unprovable.
Obviously, if our system of arithmetic is inconsistent, G is provable (along with every other sentence), and
so (on our interpretation) G is false. On the other hand, if our system of arithmetic is consistent, we won’t
be able to prove G. But if we could prove that we can’t prove it, we will have proven it after all: After all,
G says that G is unproveable, so a proof that G is unproveable is a proof of G! The unprovability of the
Gödel sentence follows from the assumption of consistency. Therefore, if we could prove consistency, we
could prove the Gödel sentence. But that would prove the inconsistency of the system. So if the system is
consistent, we won’t be able to prove its consistency. If the system is inconsistent, of course, we can
‘prove’ in the system a sentence that we interpret as saying that it is consistent—but that proof is worthless,
since it’s conducted in a system that allows us to prove anything at all.
The lesson here is fundamental: Once a system gets strong enough to express the key ideas of
arithmetic, it cannot, on pain of inconsistency, prove its own consistency. Hilbert’s ideal of a selfcontained, provably consistent system in which we can capture the basic mathematics of arithmetic is a
will-of-the-wisp, an impossibility.
III.
Turing and the halting problem.
Alan Turing was one of the great pioneers of computing. His ‘Turing machine’ is still one of the
most fundamental approaches to describing what can be ‘calculated’ by a well-defined procedure. He too
encountered paradoxical limitations on what can be calculated or computed by a Turing machine. The
problem at the heart of Turing’s puzzle is the so-called halting problem, the problem of determining, for a
given program (computational procedure) and a given input to that program, whether the program will ever
finish its computation, or whether it will get stuck in an infinite loop somewhere.
This problem is very closely related to Gödel’s first incompleteness result, since it turns out that
any procedure that would settle any question of arithmetic (i.e. any question about the natural numbers)
could be translated into a procedure for determining if a given algorithm could be completed given a certain
input.
The problem is also closely related to Godel’s incompleteness result in the way that it’s generated.
The argument is a reductio. Suppose we have a procedure (algorithm) that decides, for any given
algorithm, input pair, whether the algorithm will halt (finish its calculation) or not. The input for this
supposed algorithm is any pair of an algorithm with some input to that algorithm. If this algorithm works,
then it will eventually produce either the answer ‘true’ if the algorithm, input pair will indeed halt, or the
answer ‘false’ if it won’t. We call the halting algorithm ‘halt’.
Now consider a troublesome algorithm s:
function trouble(string s)
if halt(s, s) = false
return true
else
loop forever
(Source: Wikipedia.)
So our troublesome algorithm s halts if and only if, given itself as input, our halt algorithm says
that it doesn’t halt. We can easily write this algorithm if we have the halt algorithm in hand. But it’s
contradictory to suppose that an algorithm, input pair halts if and only if it doesn’t halt! We cannot have a
halting algorithm, on pain of contradiction.
All these puzzles and paradoxes rely on using a kind of inversion, in which a sentence says of
itself that it’s false, or that it’s unproveable, or an algorithm, input pair is designed so that it will halt if and
only if it is determined not to halt by our supposed ‘halting’ algorithm. In each case, contradictory results
are easy to obtain, once we assume that we have a ‘truth’ predicate in our language, or that we can prove
every truth of arithmetic, or that we can produce an algorithm that determines, for any algorithm, input pair,
whether the resulting computation terminates.
There is lots more to say about these puzzles and philosophers’ and mathematicians’ responses to
them – the liar paradox goes back to the ancient Greeks, and logicians today still wrestle with how best to
deal with it. My own view is that it should be seen as a lesson about the expressive power of language and
the limits of certain idealizations about language. A language with great expressive power—enough power
to express our ideas about mathematics—can be interpreted in the formal way we have assumed in our
account of models and assignments. But only if we restrict the language (or what we expect the system to
do) in some way. It must be incomplete (in the sense that we cannot prove either A or A for every
sentence A—though of course we can prove the disjunction A  A). And it must not include a ‘truth’
predicate. And it cannot provide a general procedure for determining which procedures come to a halt and
which loop infinitely.
Download