A reformulation of reducibilityI found the theory of computation books very imprecise about their descriptions of Turing machines and reductions. They usually start with something precise and mathematical, for example they would define a Turing machine as a 7-tuple, but after that, everything about decidability and reduction is described with impenetrable paragraphs in natural languages. I believe that the use of natural languages leads to most of the confusion in theory of computation because natural languages are inherently imprecise and ambiguous. There are too many ways to say the same thing. For example, you can find these sentences which mean exactly the same in the books:
The pronouns and references are even more confusing. For example:
What is "just described", and do M and w here mean the same things as in the earlier paragraph? Another serious problem is that natural languages are very weak at representing the notion of "interpretation", which underlies much of theory of computation. For example, a Turing machine simulates another Turing machine, which again contains and simulates yet another one. After some thought, I found that we could use something precise such as mathematical notations combined with programming languages to describe the concepts. As an example, I'll show here how the notion of reduction can be defined precisely as a homomorphism which can be instantiated for reducing one problem to another. Definition 1 (reduction): A reduction (as in theory of computation) is a homomorphism (as in universal algebra): Reduce(TM, I) = (TM', I') satisfying the property TM @ I = TM' @ I' where
End of Definition 1. Notice that the simulation
For convenience, we let
Now the reduction can be fully described by the following homomorphism: Reduce(DATM, (M,w)) = (DHALT, (M',w)) where M' = <if (M @ w) then accept else loop> satisfying DATM @ (M,w) = DHALT @ (M',w) Yes, that's an all-inclusive formal proof that Let me explain it a bit. The first line says that there exists a function (named Now let's look at the last line: DATM @ (M,w) = DHALT @ (M',w) It says: if we have a decider for Why this is a valid defintion for <if (M @ w) then accept else loop> we know that:
Notice from the colored words that So if If you wonder how this proof corresponds to Definition 1, here is some details how it is instantiated:
This is a lot more concise, accurate and easier to understand than a paragraph: F = "On input |