On Wed, Apr 13, 2005 at 11:01:11AM -0400, der Mouse wrote: > > Take the code for the checker. Wrap it in a small amount of code that > makes a deliberate out-of-bounds access if the checker outputs `no > problem'. Then write another small bit of code which ignores its input > and runs the wrapped checker on itself. > > Run the original checker on the result. > > This is basically the same diagonalization argument Turing used to > demonstrate that the Halting Problem was unsolvable; that's the sense > in which I call it the Halting Theorem rephrased.
First off, I think you're more or less correct. Sortof. There is no computable predicate that will decide for any ARBITRARY PROGRAM whether ANY ARBITRARY CONSTRAINT is satisfied. But, this is just the statement of the fact that there are constraints that are, themselves, not computable. But, this is highly naive. A useful checker would not be designed to try to meet this objective. I think that's why he used the term "constrained environment." So, there are lots of cool ways to constraint the environment. You could constrain the language in order to make certain constraints easy to prove. You would still be unable to make proofs about all constraints, but the sub-theory you're working in for a particular constraint might be complete, which means that whether a program meets that constraint would be fully computable. This is just the assertion that if T is a deductively closed theory (in logic) and S is a sub-theory, that T's incompleteness doesn't imply S's incompleteness. At one level, this is just the statement that every formal theory contains Logic itself as a sub-theory and that logic is complete (Goedel's Completeness Theorem). Another more interesting example is the sub-theory of Number Theory that contains only zero, the successor function, and addition. Its a perfectly good sub-theory of Number Theory and its been proved complete. But, its embedded** within a much stronger Number Theory that's not complete.**** Also, one might seek to constrain the program's resource use during a given computation. E.g., build the run-time environment with a suitably strict watch-dog. Then, infinite loops may be made impossible and every constraint becomes fully computable. This is basically computation within the realm of strictly recursive functions, rather than the larger class of partial recursive functions. So, you may be in trouble if the program you need to write is a partial recursive function. There's some interesting semantics of programming language being built on top of Topological Fixed Point Theory. I read about it briefly, but can't really comment on how well it addresses this problem. It seems to be a promising possibility, though. See Nielson for more. ciao, -nash "Semantics with Applications", Nielson & Nielson, Wiley, 1992. Available as a PDF here: http://www.daimi.au.dk/~bra8130/Wiley_book/wiley.html ** By "embedded" I mean in the strict mathematical sense, but in this case the formal languages do not differ, so we can be a bit loose. It is not necessary that this happen, though. The Arithmetization technique used by Goedel gives us nice ways of embedding theories from other languages into a larger theory. Also, I think this is more or less what Cohen does with Forcing languages. **** In fact, all of mathematics is considered (by logicians) to be embedded inside what's called Set Theory (typically given by an axiom system called ZFC). Set Theory is very powerful and is hence, incomplete. But, there are lots of theories in mathematics that are complete. The Theory of the Real Field, the above Number Theory, and others. Here are some references: http://en.wikipedia.org/wiki/Zermelo-Fraenkel_set_theory http://www.solace.net/nash/math/Set_Theory/zfc_axioms.pdf "The Handbook of Mathematical Logic", Jon Barwise, North Holland Publishing Co., 1977. ISBN 0 444 86388 5. (No longer in print, but you may find a copy at your local Univ. library) > > > I really do find this line of argument rather irritating; the > > theoretical limits of proof are quite a different thing from the > > practical application of proof-based technology in a suitably > > constrained environment. > > Entirely true. But if you use theoretical language like "proof", you > have to expect to be held to a theroetical standard of correctness. > > /~\ The ASCII der Mouse > \ / Ribbon Campaign > X Against HTML [EMAIL PROTECTED] > / \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B -- An ideal world is left as an exercise for the reader. - Paul Graham