From: Thomas Walker Lynch Date: Thu, 16 Jul 2026 05:10:26 +0000 (+0000) Subject: whaddamess X-Git-Url: https://git.reasoningtechnology.com/%27%20%20%20window.RT.dirpr_library%20%20%20%27/Hindu-Arabic%20number%20fig%203.png?a=commitdiff_plain;h=c64596e6ab47468948b5262bcd5a393e45b4f612;p=TM-2026 whaddamess --- diff --git a/document/book/TM-2026.html b/document/book/TM-2026.html index f96ae4c..6d14c18 100644 --- a/document/book/TM-2026.html +++ b/document/book/TM-2026.html @@ -21,7 +21,7 @@ Preface -

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.

+

Dear Zen master, here I submit my thesis for your consideration.

The search that led to the Turing Machine @@ -443,63 +443,66 @@

So the actual question, which dates back to the very definition of the Turing Machine, is this: when a square from Turing's paper has not yet been written to, does it hold an empty symbol, or is it actually empty?

-

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.

+

As defined in texts such as Hopcroft and Ullman, a Turing Machine cannot function when tape cell does not read a symbol, because the next state function is defined such it must be given a symbol. If a cell were to be void of symbols the machine would break.

-

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.

+

Imagine a tape machine, called machine A, where, upon attempting to read an empty cell, the machine head instead returns a control symbol representing that the cell was empty. To accomplish this, the head would have to do some work, and it would have to be able to detect emptiness, and then chose to return the empty symbol instead of a read value. This feature would fix the problem of not having any defined next state behavior for an empty cell. Furthermore, suppose the inverse process was also special in that upon attempting to write the empty symbol, the machine takes action, and empties the cell out. This would facilitate an erase operation.

-

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.

+

Now imagine machine B, where a yet to be used cell on a tape directly holds the symbol. Because it is merely another symbol, reads and writes occur exactly as they do for other symbols.

-

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.

+

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. The cup, empty box, or null set symbol are all possible choices. + However, 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 in the abstract, machines A and B are in fact the same, the only difference being that the description for machine A is less elegant. Thus, we will recognize that an empty tape, one that has not been written to, is full of empty symbols.

-

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 input 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 protocol. 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.

+

Computational theorists often describe a two-step process. First, a Turing Machine writes a string to be studied onto a tape that was initially filled with all empty symbols, and second, the tape is moved to another Turing Machine who's purpose is to recognize a property of the string being studied. In this process, 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 protocol. 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.

-

The intention of placing the empty symbol in \Gamma but not in \Sigma 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.

+

The intention of placing the empty symbol in \Gamma but not in \Sigma appears to be that of making the empty symbol serve double duty. Firstly that of a default value for a cell that has never been written, and secondly as a structural component of a communications protocol. This protocol was designed by mathematicians with the intention of making it impossible for programmers to send studied string messages that can always 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.

-

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.

+

However, if this is the intention, the protocol is flawed, 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 an arbitrary number of empty symbols to separate the elements of a variable length array. A receiving machine could then not know how many elements it should try to recover, or when to say a separator is sufficiently long that it isn't looking at a separator. Nothing in the Turing Machine definition prevents this.

-

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.

+

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. Consequently, 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.

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.

-

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 \Sigma rather than distinct from it. Programmers are then free to design communication protocols that suit the problem they are working on.

+

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 \Sigma rather than distinct from it. Programmers then must explicitly design communication protocols that suit the problem they are working on, and those protocols become opaque for examination by a higher authority.

The unspecified

-

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.

+

In the first edition of this book, I introduced a "no read until after write" rule while working towards an architectural Turing Machine so as to sideline the empty symbol, because real machines do not have them. 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.

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.

-

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.

+

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 do fresh work and perform reads and writes, 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.

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 input writer and the recognizer 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.

-

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 unspecified symbol.The unspecified symbol would be part of the predefined control alphabet, but unlike other symbols, it has additional meaning. An unspecified 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.

+

A violation of "read only after a write" could be detected by a modified computation theoretic Turing Machine, if, instead of an empty symbol, the initial tape is filled with the unspecified symbol. The end objective is to detect an erroneous condition, which is useful for debugging and testing. Normally Turing Machine design does not concern itself with those design steps, as it is busy answering questions about known working programs. Though perhaps an algorithm could be studied for this very quality, of not ever making decisions based on unspecified data. Nor do real machines have an unspecified symbol, rather a program reads garbage from memory locations with unspecified data. However, there is some precedent with hardware simulators, which typically support an x, standing for 'unknown' logic value.

- ----- +

Like empty symbol, unspecified is a meta symbol. It is describes the data, or lack thereof, rather than being the data. Specifically, the unspecified symbol says that there is a singular alphabet symbol at the memory location, but the machine is not being instructed as to which symbol it is. Because the Turing Machine state transition function requires being given specific symbol value, and a single symbol value is not specified, reading a unspecified would break the machine. Of course, that would be a bad thing, so some sort of modification to the Turing Machine definition is required for working with an unspecified symbol.

+

The three reasons that data can be unspecified is because it was not was not initialized, that the history that lead up to it is unknown by the program doing the read, or that it was written from the output of a true random number generator. Technically, the output of a psuedo random number generator belongs in the 'unknown history' category. An example of purposefully ignoring history would be a program that reverse a string without looking at the values being reversed. A reverse string program need not be apprised of the value of the string being reversed, it need only be aware of the structure give to according to the protocol followed by the machine that wrote the string.

-

The unknown 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.

+

Given the conventional Turing Machine definition it is not possible to write a string verse function that does not look at the value of the data being reversed. This is because the read of the value under the head is integrated into the machine definition, so it always happens, and it always gates the next state transition function.

-

The singular-unknown-symbol is a symbol in the predefined control alphabet, but unlike other symbols, it has additional meaning. A singular-unknown stands as a placeholder for another symbol from the alphabet, but which symbol from the alphabet is not determined.

- -

The singular-unknown-symbol 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 singular-unknown with another symbol does not resolve to True or False, rather it would resolve to a singular-unknown-Bool, something which is not part of finite state automata theory, which would thus break the Turing Machine model.

- -

Because there can be only one next state transition away from a state that reads a singular-unknown-symbol, the action and next state are completely determined, as though the value were not even read. - -... +

The TTCA computation theoretic Turing Machhine

-symbol represents a single, but undetermined, symbol from the machine alphabet. +

A goal of the computation theorist in defining a Turing Machine is to make the math concise and elegant as they can make it. This notation qualifies. However, the goal of the computer architect is to make an intuitive to design and test machine that performs well. Perhaps if a computer architect were to define the computational Turing Machine, this change in emphasis would favor a different definition.

+

The following modifications will be made to the computation theoretic Turing Machine definition so as to support the uspecified symbol.

+
    +
  1. Move to a Moore style programmed state controller, so that actions can be managed separately from state transitions.
  2. +
  3. Among the new explicit actions, to have two read instructions, one the control read that reads a value that is used by the next state function, and the data reads, which stores a value for later use.
  4. +
  5. To match the two read functions, the right function can specify either the control read symbol buffer, or the data read symbol buffer.
  6. +
  7. If uspecified +
-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

+

For ease of programming the new machine will have three layers of next state functions. First used is the state function that takes into account both the current state, and the control read value. If no next state is defined by it, then a second next state function is called, in this case, the current state is not an operand. This is for defining default arcs. If a next state is still not defined, then we move to a third next state function which is unconditional. This is the state the machine goes to if there is no next state specified and there is no default next state defined.

-

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 singular-unknown 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.

+

For clarity of presentation purposes, the definition will be split into two parts, that which is programmable, and that which is fixed as part of the Turing Machine definition.

-

The TTCA computation theoretic Turing Machhine

+

There is a mechanical procedure for converting a Moore Machine into a Mealy Machine, and the reverse. Two such converted machines are equally expressive. Making read an explicit action, instead of having it implied by a state transition, increases the number of states in a controller, and consequently the numbers of steps that must be taken. However, the new machine can do in two steps, anything the former machine could do in one, consequently this change affects the multiplier constant on the linear term of the step count formula, but does not change the computation complexity class determined from such a step count. The three layers of next state functions are equivalent to one layer, where the missing arguments are filled in with all possible values. This potentially increases the number of state transition arcs that must be specified, but the state transition logic and the number of states remain unchanged. Giving the specification in two parts does not change the total specification. Hence, + these modifications are computationally inconsequential.

-

A goal of the computation theorist in defining a Turing Machine is to make the math concise and elegant as they can make it. This notation qualifies. However, the goal of the computer architect is to make an intuitive to design and test machine that performs well. Perhaps if a computer architect were to define the computational Turing Machine, this change in emphasis would favor a different definition.

+

Turing Machine Definition, the programmable part

M = (Q, \Sigma, κ, A, \lambda, \delta, q_0, q_h, q_e)