whaddamess
authorThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Wed, 15 Jul 2026 15:56:12 +0000 (15:56 +0000)
committerThomas Walker Lynch <eknp9n@reasoningtechnology.com>
Wed, 15 Jul 2026 15:56:12 +0000 (15:56 +0000)
document/book/TM-2026.html

index a328165..f96ae4c 100644 (file)
 
       <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>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 terminology.
       </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>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>A tape cell on a Turing machine can not be empty in the sense of not having a symbol in it, because a Turing Machine next state function is defined against symbols. If a cell were to be void of symbols the machine definition would go unsatisfied.</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>Imagine a tape machine, called machine A, where, upon attempting to read an empty cell, the machine head returned a control symbol representing that the cell was empty. This would fix the problem of not having any defined behavior for an empty cell. 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. This would facilitate an erase operation.</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>Now imagine machine B, where a cell of a tape holds a symbol called the empty symbol. Because it is merely another symbol, reads and writes occur exactly as they do for other symbols.</p>
+
+      <p>As long as the cost of the empty cell fix 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. 
+      Let us not lose sight of the level of analysis we are doing. We are discussing the computation theoretic Turing Machine, and doing so in the realm of forms. Given that our discussion is that of abstract level analysis, 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>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 making the empty symbol serve double duty. Firstly that of a cell that has never been written, and secondly as a control structural component of 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 also being used as an in-band EOT (end of transmission) symbol.</p>
 
-      <p>If so, this protocol fails to prevent programmers from defining Turing Machines that output messages that cannot be recovered by a receiving Turing Machine, because the Turing Machines were bestowed with the ability to erase characters. An input machine could, for example, happily output an array of strings while using the empty symbol to separate the elements of the array. Nothing in the Turing Machine definition prevents this.</p>
+      <p>However, this protocol fails to prevent programmers from defining Turing Machines that output messages that cannot be recovered by a receiving Turing Machine, because Turing Machines are bestowed with the ability to erase characters. An input machine could, for example, happily output an array of strings while using the empty symbol to separate the elements of the array. Nothing in the Turing Machine definition prevents this.</p>
       
-      <p>Furthermore, the Universal Turing Machine can act as the aforementioned higher authority. In this case, Turing Machines, and sometimes their tapes, are written to a Universal Turing Machine's tape. Hence, it is not only possible to want to terminate strings, as mentioned in the prior paragraph; the termination issue itself is embedded in proofs such as the Halting Problem.</p>
+      <p>Furthermore, the Universal Turing Machine can act as the aforementioned higher authority. In this case, Turing Machines, and sometimes their tapes, are written to a Universal Turing Machine's tape. Hence, it is not only possible to want to terminate multiple strings in series, as mentioned in the prior paragraph; the termination issue itself is embedded in proofs such as the Halting Problem.</p>
 
       <p>A common technique programmers use for embedding strings with terminators within other strings is to embed escape characters. This is another in-band protocol, and it is inefficient. The escape sequences grow exponentially with nesting levels. Also, such strings with embedded escape sequences cannot be interpreted without knowledge of the intended nesting level of the string author, which requires the interpreter of the string to know the author's intentions.</p>
 
-      <p>If we are to design communication protocols, there are better ways to do it. Out-of-band control, such as packet communication or run-length encoding, has superior characteristics.</p>
+      <p>For the modified computational Turing machine presented later in this chapter there will be a separate control alphabet, as for the Hopcroft Ullman interpretation. However, due to the reasons presented in this section, that alphabet will be part of the alphabet <RT·math>\Sigma<RT·math> rather than distinct from it. Programmers are then free to design communication protocols that suit the problem they are working on.</p>
 
-      <p>But if the empty symbol is merely an EOT encoding, then why call it <em>empty</em>?</p>
 
-      <p>A bookshelf is said to be empty when there is no obstacle to enshelving a book or other object on it. This is not to say there is nothing there in the first place. Air gets displaced; if the bookshelf is underwater, it can still be empty because a book can be placed on it. The air, or the water, does not present an obstacle. If the bookshelf is limited to only hold books, then a shelf is empty when no book is available, and not empty otherwise. Attempting to pull a book from an empty shelf simply fails, rather than yielding a volume titled <em>Meditations upon Emptiness</em>.</p>
+      <h2>The <RT·code>unspecified</RT·code></h2>
 
-      <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>In the first edition of this book, I introduced a "no read until after write" rule so as to sideline the empty symbol while working towards an architectural Turing Machine. This did not replace the need for a communication protocol for sending messages between machines, but it did make it possible to remove the empty symbol from programmed controller definitions.</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>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>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> 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>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>
+      <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>For reasons of supporting recursion, the computation theoretic Turing Machine given in the next section will have a set of predefined symbols that are included with the alphabet of symbols, rather than being excluded. Where a communication protocol is required, the Turing Machine programmer must define it. It might be that surrounding an input string with empty symbols is a well-suited protocol; however, while the formal definition initializes the tape this way, treating those symbols as a structural boundary is a programmed behavior, not something built into the machine's definition.</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>unspecified</RT·code> symbol.The <RT·code>unspecified</RT·code> symbol would be part of the predefined control alphabet, but unlike other symbols, it has additional meaning.  An <RT·code>unspecified</RT·code> symbol must be treated as though it is a symbol from alphabet, but in a manner that its identity is never required. Hence, a decision can not be based upon it.</p>
 
-      <p>For reasons of supporting recursion, the computation theoretic Turing Machine given in the next section will have a set of predefined symbols that are included with the alphabet of symbols. Where a communication protocol is required, the Turing Machine programmer must define it. It might be that surrounding an input string with empty symbols, is a well suited protocol, but this is not built into the machine definition.</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 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 <em>unknown</em> cannot be embodied as a symbol on the currently defined Turing Machine, because the very workings of the Turing Machine are going to attempt to match the symbol under the head at each step, but no decision can be made against an unknown. Turing Machine programs could incorporate an arc to send machine to an error state upon reading an unknown, but this would then halt the machine in circumstances where the program otherwise would not have made any decision based on the unknown. Sometimes it is proposed that upon reading an unknown that the control should become nondeterministic, and thus explore all possible matches, but 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 of non-deterministic execution and then, through some means, testing to see which was the correct branch. There are classes of problems where the testing function is 'reaches the halt state', but that is not always the appropriate 'correct branch' of execution test, and indeed such a test might not exist.</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 <RT·code>singular-unknown-symbol</RT·code> is a symbol in the predefined control alphabet, but unlike other symbols, it has additional meaning.  A <RT·code>singular-unknown</RT·code> stands as a placeholder for another symbol from the alphabet, but which symbol from the alphabet is not determined.</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>The <RT·code>singular-unknown-symbol</RT·code> can not appear as a symbol that gates a state transition, unless there is only one state transition specified, and that state transition is based upon it. This is because it a comparison of the <RT·code>singular-unknown</RT·code> with another symbol does not resolve to <RT·code>True</RT·code> or <RT·code>False</RT·code>, rather it would resolve to a <RT·code>singular-unknown-Bool</RT·code>, something which is not part of finite state automata theory, which would thus break the Turing Machine model.</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>Because there can be only one next state transition away from a state that reads a <RT·code>singular-unknown-symbol</RT·code>, the action and next state are completely determined, as though the value were not even read.
+
+...
+
+symbol represents a single, but undetermined, symbol from the machine alphabet. 
 
-      <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>
+A singular unknown is a valid single value read from the tape, but despite being able to discern it as a symbol, no decision next state transition arc can be ecan be based on its value. However, it is valid to copy it to another cell on the tape. 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. Say for example</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>