[comp.lang.c] On formally undecidable programs

smryan@garth.UUCP (Steven Ryan) (06/19/88)

(My chagrin at not realising this earlier is offset only by nobody else
realising it either.)

A perfect compiler is impossible.

The argument is quite simple and does not assert or deny the Church-Turing
(CT) hypothesis.

An optimiser transforms an input string into an output string such that certain
properties of the input string are retained (possibly translated) in the
output string. In other words, the optimiser is a theorem prover. And because
it is embedded in a formal system (a computer, remember, which is equivalent
to a turing machine), its ability to decide propositions about the string
(to determine and maintain valid properties) is limited by Godel's theorem.

Therefore, there exists strings whose properties are either undecidable
(in which case the optimiser is incomplete and imperfect) or inconsistently
decided (in which case the optimiser produces bad code and is imperfect).

How could such a program be written? It is not necessary to transcend CT but
just sidestep it: hire a staff of monkey programmers (they work cheap--you
can pay them peanuts) and let them bang away. They will produce correct
programs, once in awhile, once in a greate while, which defy reason. These
would unreasonble programs in the sense that they are random and no reasonable
reasoning could find a reason why they are correct. Such unreasonable,
undecidable programs must exist or the compiler is inconsistent.

Why not let the same staff bang out a perfect compiler then? Because Godel's
theorem does not make any restriction on how the steps of a theorem are
chosen, it is perfectly acceptable to consult an oracle, but that within a
formal system, it is impossible to construct the theorem. Any compiler which
is complete and consistent (thus perfect) and transcends Godel transcends
the CT hypothesis. Yet the existence of a perfect compiler was asserted by
implicit assuming CT, when it was stated that a perfect compiler can
understand anything a human can understand. I do not invoke CT--it is the
perfect compiler that both asserts and denies CT. Again the choice between
incompleteness or inconsistency.

Of course, a lot depends on the definition of a "perfect" compiler. I am
assuming a perfect compiler is consistent and can handle all possible
correct programs. "Perfect" is a rather transcendal word and to restrict it
to reasonable programs (programs a formal system can reason about), tarnishes
the word.

If you are still reading reading this and have read my previous notice, I
think you understand why I object to blithely asserting the existence of
algorithms without arguing from a solid foundation. While forming my thoughts
for this note, I now understand the flaw in Chris Torek's original
assertion of a perfect compiler: it was assumed it would only have to deal
with reasonable programs.

How good is this assumption? If it is possible to separate reasonable and
unreasonable programs, it might be acceptable. How would they separated?
If CT is assumed, the only decision procedure is a partial recursive predicate
which means we could identify reasonable programs but cannot guarentee
identification of unreasonable programs in finite time. If CT is denied,
separation in finite time might be possible, but that transcends the power
of whatever computer the compiler is running on.

If you want a real mess, consider programs that are syntactically correct and
do not fault at runtime but are still incorrect. 

Why is necessary to identify unreasonable programs? We're all reasonable
people, right? Right. Try maintaining code. Also, anybody whose says they
only have to deal with reasonable programs has never had to have a compiler
passed by a test and evaluation group.

Oh, right, this discussion is about volatile and C. Well, the point I've
been trying to make all along is that there is no such thing as free lunch.
It's a tradeoff between how much effort you exert in explaining your code
and how much effort somebody else exerts in understanding it. After all,
haven't our teachers and wise men been telling us for years to document our
code and explicitly state our invariants and assertions and other formal
properties? (Don't expect programmers who write optimisers to be any less
lazy than you.)

Now, be quiet. I have to write a letter to my (?)elected representatives.
Talk about unreasonble.

                                          sm ryan

               Religion isn't knowing the answers,
               it's knowing there are answers.
                              -- Marcia Rand