<RT·TOC level="1-2"></RT·TOC>
+ <RT·chapter>Preface</RT·chapter>
+
+ <p>A note specifically to my Zen master, and friend. With this volume I present the answer to the koan you gave me, "What is emptiness?". I hope you are pleased with it.</p>
+
+
<RT·chapter>The search that led to the Turing Machine</RT·chapter>
<p>
<p>Although by definition each state transition matches one value under the head, as a practical matter, disjunctive selection is allowed via a comma list. A conjunctive phrasing for the state transition proposition would require stringing intermediate states in series.</p>
-<h2>The empty symbol</h2>
+ <h2>The empty symbol</h2>
- <p>An initial tape is often said to be empty when every square holds an empty symbol.</p>
+ <p>Turing described a clerk writing symbols into squares, with the option to erase them. He states, "In some of the configurations in which the scanned square is blank (i.e. bears no symbol) the machine writes down a new symbol on the scanned square: in other configurations it erases the scanned symbol."<RT·endnote>Alan M. Turing, "On Computable Numbers, with an Application to the Entscheidungsproblem," Proceedings of the London Mathematical Society, Series 2, Volume 42 (1936): 231.</RT·endnote> So the original paper uses <em>blank</em> to mean <em>no symbol</em>. Turing fairly consistently refers to "blanks" rather than to a symbol that represents a blank. However, thirty pages in, he does say this, "for in the complete configuration the symbols are all blanks"<RT·endnote>Alan M. Turing, "On Computable Numbers, with an Application to the Entscheidungsproblem," Proceedings of the London Mathematical Society, Series 2, Volume 42 (1936): 261.</RT·endnote>.</p>
+
+ <p>The more abstract concept here is that of a container. A piece of paper is a container for symbols. When it contains no symbols, the container is empty. Only when we say the container is a piece of paper does it make sense to call it blank. But we are speaking of abstractions, not of paper. The question is not one of blankness, rather it is the more abstract question of emptiness. When computation theory texts are translated into French, the blank symbol is called the "symbole vide", or literally "empty symbol". Hence, in the French context, paper as a container does not carry with it a distinct term for being empty, so there would be no need for this discussion.
+ </p>
- <p>In some proofs, an empty symbol is written over a data symbol on the tape to erase it. Thus, a machine allows the replacement symbol specified in a state transition to be the empty symbol.</p>
+ <p>So the actual question, which dates back to the very definition of the Turing Machine, is this: when a <em>square</em> from Turing's paper has not yet been written to, does it hold an empty symbol, or is it actually empty?</p>
- <p>Computational theorists often describe a two-step process. First, a Turing Machine writes an input string onto a tape that was initially filled with all empty symbols, and second, another Turing Machine recognizes if said <em>input</em> string fits a particular pattern. In this manner, a tape is used as a communication medium, and it follows that communication theory can be applied to this messaging scenario. Messages sent on a channel must be formatted so they can be placed on the channel and later recovered. Such an organization is called a communication <RT·term>protocol</RT·term>. The protocol implies a higher authority, as both the sender and the receiver must have knowledge of the same designed-in protocol. In a sense, a protocol is the meta-message sent before the message itself.</p>
+ <p>Imagine a tape machine, called machine A, where, upon attempting to read an empty cell, the machine returns a control symbol representing that the cell was empty. Furthermore, suppose the inverse process also worked. Upon an attempt to write the empty symbol, the machine would take action, removing and disposing of the cell's contents.</p>
+
+ <p>Now imagine machine B, where a cell of a tape holds a symbol called the empty symbol. Because it is just another symbol, reads and writes occur exactly as they do for other symbols.</p>
+
+ <p>As long as the cost is constant time, the differences between machine A and machine B are computationally inconsequential. However, for machine A, the mathematician is greatly inconvenienced if he cares to write down the contents of the tape, as he will need some means of communicating that a tape cell is empty. As a mathematician is wont to do, he would probably invent a symbol to express this meaning. Given that at this level of analysis all of this is abstraction, machines A and B are in fact the same. Thus, we will recognize that an empty tape, one that has not been written to, is full of empty symbols.</p>
+
+ <p>Computational theorists often describe a two-step process. First, a Turing Machine writes an input string onto a tape that was initially filled with all empty symbols, and second, another Turing Machine recognizes if said <em>input</em> string fits a particular pattern. In this manner, a tape is used as a communication medium, and it follows that communication theory can be applied to this messaging scenario. Messages sent on a channel must be formatted so they can be placed on the channel and later recovered. The specification for such structuring is called a communication <RT·term>protocol</RT·term>. The protocol implies a higher authority, as both the sender and the receiver must have knowledge of the same designed-in protocol. In a sense, a protocol is the meta-message sent before the message itself.</p>
<p>The intention of placing the empty symbol in <RT·math>\Gamma</RT·math> but not in <RT·math>\Sigma</RT·math> appears to be that of reserving the empty symbol as a control component in a communications protocol. This protocol was designed by mathematicians with the intention of making it impossible for programmers to define input tape messages that cannot be recovered by a receiving recognizer Turing Machine. In short, the empty symbol is used as an in-band EOT (end of transmission) symbol.</p>
<p>In this sense then, a Turing Machine is always empty, as no symbol on the tape presents an obstacle to writing a new symbol.</p>
- <p>There are some concepts that cannot be represented as a symbol. For example, the concept of a symbol that remains on the tape as an obstacle to further writes to the same tape cell is not representable with the current Turing Machine design. It is not beyond our imagination to modify the Turing Machine to facilitate such a feature; a person could set aside a control symbol that, once written, the machine would refuse to overwrite. However, the Turing Machine as defined does not support such a symbol.</p>
+ <p>There are some concepts that cannot be represented as a symbol on a Turing Machine. For example, the concept of a symbol that remains on the tape as an obstacle to further writes to the same tape cell. It is not beyond our imagination to modify the Turing Machine to facilitate such a feature; a person could set aside a control symbol that, once written, the machine would refuse to overwrite it. However, the Turing Machine as defined can not provide such meaning.</p>
- <p>Another concept that cannot be represented with a symbol on a Turing Machine is that of the unknown. The very workings of the Turing Machine depend upon state transitions based on matching a symbol. A person could modify a Turing Machine to non-deterministically explore all possible branches upon seeing such a symbol, but that is mathematically flawed; a cell with an unknown value actually holds only one specific value, the problem being that the value remains unrevealed. There is no general concept built into the Turing Machine of taking multiple branches and then, through some means, testing to see which was the correct branch. Any attempt to do this will have to incorporate a testing concept. The <em>unknown</em> is not merely a theoretical curiosity, because this is how real computer memories are initialized.</p>
+ <p>Another concept that cannot be embodied as a symbol on a Turing Machine is that of the unknown. The very workings of the Turing Machine depend upon state transitions based on matching a symbol. A person could modify a Turing Machine to non-deterministically explore all possible branches upon seeing such a symbol, but that is mathematically flawed; a cell with an unknown value actually holds only one specific value, the problem being that the value remains unrevealed. There is no general concept built into the Turing Machine of taking multiple branches and then, through some means, testing to see which was the correct branch. Any attempt to do this will have to incorporate a testing concept. The <em>unknown</em> is not merely a theoretical curiosity, because this is how real computer memories are initialized.</p>
<p>Emptiness is another concept which a Turing Machine symbol cannot represent. As mentioned above, all symbols can be written with equal ease to the tape. A state machine could have an arc where, upon reading an empty symbol, the machine goes to the error state, indicating that the read failed, but this is not the definition given for the computational Turing Machine.</p>
<h2>The <RT·code>singular-unknown</RT·code></h2>
- <p>In the first edition of this book, I introduced a "no read until after write" rule so as to side step the empty symbol issue. This did not displace the need for a communication protocol when tapes were sent as messages, but it did make it possible to remove the empty symbol from programmed controller definitions.</p>
+ <p>In the first edition of this book, I introduced a "no read until after write" rule so as to sidestep the empty symbol issue. This did not displace the need for a communication protocol when tapes were sent as messages, but it did make it possible to remove the empty symbol from programmed controller definitions.</p>
+
+ <p>The standard 9-track tape introduced by IBM in 1964 came from the factory unformatted. The format operation would write a header and an EOF marker to mark the end of the device file. Then, a standard library call such as open(), followed by write(), would write over the EOF marker, continue writing data, and finally append a new EOF marker, essentially pushing the EOF boundary back. EOF could be pushed back until the physical EOT marker was struck. This matches, in some ways, how the empty symbol is used on the computation theoretic Turing Machine in the Hopcroft and Ullman book if we consider it to be an EOF marker. However, a difference exists in that the real machine would never use an EOF to erase data characters.</p>
- <p>The standard 9 track tape introduced by IBM in 1964 came from the factory unformatted, the format operation would then write a header and an EOF marker, to mark the end of the device file. Then when an standard library call, such as open(), followed by write(), would writer over the EOF marker, and continue to write the data, then would write a new EOF marker, essentially pushing back the EOF marker. EOF could be pushed back until the physical EOT marker was struck. This is similar in some ways to the how the empty symbol is being used on the computation theoretic Turing Machine as we see in the Hopcroft and Ullman book if we consider the blank to be an EOF marker. However, there is a difference in that the real machine would never use an EOF to erase data characters. Note then while using the standard library, the blank part of the tape could not be read until after it was written, so early tapes indeed enforced the "no read until after a write" rule.</p>
+ <p> While using the standard library to write tapes the empty part of the tape could not be read until after it was written, so early tape machines indeed enforced the "no read until after a write" rule. However, if the programmer were to seek the head back into the device file to perform a write, the device EOF would be nowhere in sight. The burden of the "no read until after a write" rule would then fall on the shoulders of the programmer, as would the organization of the data.</p>
- <p>Note, however, if the programmer seeked the head back into the device file to do write the device EOF would be nowhere in site. The burden of the "no read until after a write" rule would then fall on the shoulders of the programmer, as would the structuring of the data.</p>
+ <p>Core memory, and later system memory, was random access and initially fully accessible. The data would be whatever scrambled mess the machine booted with, or in early virtual memory systems, whatever was left over from the prior use of the page. The approach of recycling pages was a security hazard, so today a page is initially allocated from a read-only zero page, and due to a copy-on-write trap, a new page will be created in memory then scrubbed with zeros. If the computational Turing Machine's empty symbol maps to a word of zeros, then the empty symbol remains a poor model, because generally the data message, say sent between the <em>input</em> writer and the <em>recognizer</em> receiver, will also contain many zeros. The advantage is that if a programmer attempts to dereference a zero pointer, a segmentation fault occurs. So in this system, the program is again burdened with maintaining the "no read until after a write" rule.</p>
- <p>Core memory, and then system memory, was random access and initially fully accessible. The data would be whatever scrambled mess the machine booted with, or in early virtual memory systems, whatever was left over from the prior use of the page. That approach; however, was a security hazard, so today a page is initially allocated from a read only zero page, and due to a copy on write trap, a new page is created in memory then scrubbed with zeros. If the computational Turing Machine's blank symbol maps to a word of zeros, then the blank symbol would still not be a good model, because generally the data message, say sent between the <em>input</em> writer, and the <em>recognizer</em> receiver, will also contain many zeros. The nice part is if a programmer attempts to dereference a zero pointer, there will be a segment fault. So in this system the program is again burdened with maintaining the "no read until after a write" rule. </p>
+ <p>The computation theoretic Turing Machine can instruct computer architecture through a detection of failure of "read after write" if, instead of an empty symbol, the machine is modified to support the <RT·code>singular-unknown</RT·code> symbol.</p>
- <p>The computation theoretic Turing Machine can instruct computer architecture through a detection of failure of "read after write" if instead of an empty symbol, the machine is modified to support the <RT·code>singular-unknown</RT·code> symbol.</p>
+ <p>A singular unknown is a valid single value read from the tape, but despite being able to discern it as a symbol, no decision can be based on its value. However, it is a valid operation to copy it to another cell on the tape. The current computer-theoretic Turing Machine definition has no ability to effect this specification. By the current definition, every state transition reads the value under the head and then gates to the next state based on that value. Hence, there is no escape from making a decision based on the value under the head, and as each state transition comes with a mandatory step, a different value will reside under the head in the next state.</p>
- <p>A singular unknown is a valid single value read from the tape, but despite being able to discern it as a symbol, no decision can be based on its value. However, it is a valid operation to copy it to another cell on the tape. The current computer theoretic Turing Machine definition has no ability to effect his specification. By the current definition, every state transition reads the value under the head, and then gates to the next state based on that value. Hence, there is no escape from making a decision based on the value under the head, and as each state transition comes with a mandatory step, there will be a different value under the head in the next state.</p>
+ <p>A Turing Machine could be modified to have explicit actions, and a read for control action could then be distinguished from a read action where the read value is not used for control. In addition to facilitating a <RT·code>singular-unknown</RT·code> symbol, this would make it possible to do things such as reversing a string without having to integrate the data values being reversed into the machine's control structure.</p>
<h2>The TTCA computation theoretic Turing Machhine</h2>