From: Thomas Walker Lynch Date: Mon, 27 Jul 2026 10:55:27 +0000 (+0000) Subject: RT code commas X-Git-Url: https://git.reasoningtechnology.com/%27%20%20%20window.RT.dirpr_library%20%20%20%27/%7Bstyle.link%7D?a=commitdiff_plain;h=0bf954378e962bb884ea6ef52b57f3004cae34fc;p=TM-2026 RT code commas --- diff --git a/document/book/TM-2026.html b/document/book/TM-2026.html index 6bc6046..f244e5d 100644 --- a/document/book/TM-2026.html +++ b/document/book/TM-2026.html @@ -1,5 +1,3 @@ - - @@ -22,6 +20,7 @@ + Preface

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

@@ -33,6 +32,7 @@

In the prior edition of this book, the preface included a discussion on the meaning of the word "may" according to RFC 2119, the guidelines for specification writing. There is an important distinction between the 'may' of options or permission, and the 'may' of probability. However, distinguishing between the two was too much of an ask of readers, most of whom skip the preface anyway. So in this edition, I avoid the temptation to use 'may' and replace it with a direct statement of what I mean. "It is of high probability that..." or "There are options for...". Directly saying what is meant—who would have thought of it? The RFC 2119 authors have clearly struggled with this as well, as they now require the words they discuss to be strictly capitalized to prove they have a proscribed meaning.

+ The search that led to the Turing Machine

@@ -53,7 +53,7 @@

- In 1908 Ernst Zermelo published an alternative system designed to avoid the known paradoxical statements of the time, even though absolute consistency remained unproven. In Zermelo's set theory, a mathematician first starts with an existing set, and then applies the Axiom of Separation using definite properties to partition out subsets Ernst Zermelo, "Untersuchungen über die Grundlagen der Mengenlehre I," Mathematische Annalen 65 (1908): 261 281.. To see how this works, consider the expression \{x \mid P(x)\}. Under unrestricted comprehension, a logician is permitted to define the predicate P(x) as x \notin x. This produces Russell's Paradox, so the set fails to be defined. In contrast, consider the same predicate, though restricted by Zermelo's Axiom of Separation over a predefined set S, written as \dot{R} = \{x \mid x \in S \wedge x \notin x\}. The only thing a person needs to know about S here is that it has already been successfully defined. So let us ask, is \dot{R} in \dot{R}? If we assume \dot{R} is a member of S, evaluating the second term forces the familiar fatal loop: if \dot{R} is in \dot{R}, it shouldn't be, and if it isn't, it should be. Thus if we assume that \dot{R} is in S, then \dot{R} can not be defined, but by definition, S is defined, and thus its members are defined. As we arrived at a contradiction, the original assumption must be false, i.e. it is wrong to assume that \dot{R} is in S. As \dot{R} is definitively not a member of \dot{R}, the first term of the set comprehension rule, x \in S is false, and the paradox vanishes. + In 1908 Ernst Zermelo published an alternative system designed to avoid the known paradoxical statements of the time, even though absolute consistency remained unproven. In Zermelo's set theory, a mathematician first starts with an existing set, and then applies the Axiom of Separation using definite properties to partition out subsets Ernst Zermelo, "Untersuchungen über die Grundlagen der Mengenlehre I," Mathematische Annalen 65 (1908): 261 281.. To see how this works, consider the expression \{x \mid P(x)\}. Under unrestricted comprehension, a logician is permitted to define the predicate P(x) as x ∉ x. This produces Russell's Paradox, so the set fails to be defined. In contrast, consider the same predicate, though restricted by Zermelo's Axiom of Separation over a predefined set S, written as \dot{R} = \{x \mid x ∈ S ∧ x ∉ x\}. The only thing a person needs to know about S here is that it has already been successfully defined. So let us ask, is \dot{R} in \dot{R}? If we assume \dot{R} is a member of S, evaluating the second term forces the familiar fatal loop: if \dot{R} is in \dot{R}, it shouldn't be, and if it isn't, it should be. Thus if we assume that \dot{R} is in S, then \dot{R} can not be defined, but by definition, S is defined, and thus its members are defined. As we arrived at a contradiction, the original assumption must be false, i.e. it is wrong to assume that \dot{R} is in S. As \dot{R} is definitively not a member of \dot{R}, the first term of the set comprehension rule, x ∈ S is false, and the paradox vanishes.

@@ -110,6 +110,7 @@ The academic community was thus equipped with three mathematically equivalent foundations for computation theory: recursive functions, the lambda calculus, and the Turing Machine. While all three frameworks remain active subjects of study, Turing's model is unique in providing practical intuition through the abstraction of physical machines and programs. This made it the foundation of choice for computation theory textbooks by Stephen Kleene Stephen C. Kleene, Introduction to Metamathematics (Amsterdam: North Holland, 1952)., Martin Davis Martin Davis, Computability and Unsolvability (New York: McGraw Hill, 1958)., and Marvin Minsky Marvin L. Minsky, Computation: Finite and Infinite Machines (Englewood Cliffs: Prentice Hall, 1967)., leading to the modern standard presentations by authors such as John Hopcroft and Jeffrey Ullman John E. Hopcroft and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation (Reading: Addison Wesley, 1979)., as well as Harry Lewis and Christos Papadimitriou Harry R. Lewis and Christos H. Papadimitriou, Elements of the Theory of Computation (Englewood Cliffs: Prentice Hall, 1981)..

+ The Turing Machine transforms mathematics into computing

@@ -147,6 +148,7 @@

+ The computer design abstraction stack

The six levels

@@ -221,6 +223,7 @@ The Turing Machine is a computation theory object that is suggestive of a simple architecture, and a computer organization. A person who has had to do homework problems centered on Turing Machines will have tracked the flow of data through the machine, i.e. worked at the register transfer level. However, a little work is needed to complete the architecture analog. The fundamentals are present, the read/write head, the tape, the procedure for using the tape, but other components are missing. The manipulation of symbols remains ungrounded. The tape is not well defined. The use of emptiness is non architectural like. The tape transport is not articulated, though it is implied. The read buffer that is required, so the programmed controller can do a write without clobbering the read data needed for the next transition, is not identified as a component. As we proceed, we will likely discover other missing components.

+ Computation theoretic consequentiality

@@ -339,6 +342,7 @@ then we can say without qualification that T is computation theoretic inconsequential. Though still implied are the sets of machines and tapes.

+ The conventional Turing Machine

This definition comes from Hopcroft and Ullman's book with minor terminology changes to make it flow into the text here John E. Hopcroft and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation (Reading: Addison Wesley, 1979).. @@ -380,10 +384,10 @@

- X_1 X_2 \cdots X_{i-1} q X_i X_{i+1} \cdots X_n \underset{M}{\vdash} X_1 X_2 \cdots X_{i-2} p X_{i-1} Y X_{i+1} \cdots X_n + X_1 X_2 ⋯ X_{i-1} q X_i X_{i+1} ⋯ X_n \underset{M}{⊢} X_1 X_2 ⋯ X_{i-2} p X_{i-1} Y X_{i+1} ⋯ X_n -

So first the tape is X_1 X_2 \cdots X_{i-1} X_i X_{i+1} \cdots X_n, with the head over X_i, and in state q. Then after a step of the machine, the tape is X_1 X_2 \cdots X_{i-1} Y X_{i+1} \cdots X_n, with the head over X_{i-1}, and in state p. Thus X_i was overwritten with Y, and the head stepped left. +

So first the tape is X_1 X_2 ⋯ X_{i-1} X_i X_{i+1} ⋯ X_n, with the head over X_i, and in state q. Then after a step of the machine, the tape is X_1 X_2 ⋯ X_{i-1} Y X_{i+1} ⋯ X_n, with the head over X_{i-1}, and in state p. Thus X_i was overwritten with Y, and the head stepped left.

The reverse machine example

@@ -409,43 +413,43 @@ # Check for an empty string; exit if true. Otherwise, scan right. q1: ' ' : {L: done} - [0, 1]: {R: q_scan} + [0 ,1]: {R: q_scan} # Scan to the rightmost digit and place the EOM terminator 'E' q_scan: - [0, 1]: R - ' ' : {write: 'E', L: q2} + [0 ,1]: R + ' ' : {write: 'E' ,L: q2} # process the rightmost unmarked digit, writing the uniform marker '*' q2: - 0 : {write: '*', R: s0} - 1 : {write: '*', R: s1} + 0 : {write: '*' ,R: s0} + 1 : {write: '*' ,R: s1} ' ': {R: q5} # all digits processed, begin cleanup # carry '0' to the right end s0: - ['*', 'E', 0, 1]: R - ' ' : {write: 0, L: q3} + ['*' ,'E' ,0 ,1]: R + ' ' : {write: 0 ,L: q3} # carry '1' to the right end s1: - ['*', 'E', 0, 1]: R - ' ' : {write: 1, L: q3} + ['*' ,'E' ,0 ,1]: R + ' ' : {write: 1 ,L: q3} # return all the way to the left blank space q3: - ['*', 'E', 0, 1]: L + ['*' ,'E' ,0 ,1]: L ' ' : {R: q4} # step right to find the next unmarked digit q4: - [0, 1] : R - ['*', 'E']: {L: q2} + [0 ,1] : R + ['*' ,'E']: {L: q2} # erase the markers and EOM terminator, leaving only the reversed string q5: - ['*', 'E'] : {write: ' ', R: q5} - [0, 1, ' ']: {L: done} + ['*' ,'E'] : {write: ' ' ,R: q5} + [0 ,1 ,' ']: {L: done} done: @@ -576,7 +580,7 @@ - def write(c, x): + def write(c ,x): if not is_empty(c): c.pop() # Clear the cell if it holds something if x != 'empty': @@ -613,6 +617,8 @@

For the modified computational Turing machine presented later in this chapter, there will be a separate control alphabet of predefined symbols, as for the Hopcroft-Ullman interpretation. However, so as to support recursion, and because the current scheme does not achieve protocol guarantees, the predefined alphabet will be part of the alphabet Σ rather than distinct from it. Programmers then must explicitly design communication protocols that suit the problems they are working on, and those protocols become opaque for examination by a higher authority. Note that this does not preclude a programmer from using SP as an EOM marker, rather it removes the embedding of that protocol from the Turing Machine definition.

+ + The computation theoretic TTCA Machine

This chapter presents a modified computation theoretic Turing Machine with three structural additions. First, it separates control flow from data flow, ensuring that payload symbols do not needlessly expand the control state machine. Second, it unifies the control and data symbol sets into a single alphabet to natively support explicit communications protocols even in the presence of recursion and self-recursion. Finally, it implements a cascading next-state evaluation hierarchy, permitting the programmer to formally define and handle meta-symbols such as unspecified, while also making it more convenient to code communication protocols.

@@ -827,7 +833,7 @@

During the action phase, the executor looks up the operation mapped to the current state.

  1. Locate the current state q within the programmed actions set λP.
  2. -
  3. Perform the associated action a \in AF.
  4. +
  5. Perform the associated action a ∈ AF.

Phase 2: The state transition

@@ -850,8 +856,8 @@ # TTCA Machine String Reverse # Domains: - # ΣP = {0, 1, EOM, EOR, SP} - # Σ_data = ΣP \ {EOM, EOR, SP} + # ΣP = {0 ,1 ,EOM ,EOR ,SP} + # Σ_data = ΣP \ {EOM ,EOR ,SP} # input: (σ ∈ Σ_data)* EOM (starting on the leftmost cell) # output: SP* EOM (σ ∈ Σ_data in reverse)* EOR @@ -1126,7 +1132,7 @@ Q·Copy_Erase Q·Copy_Erase: - λ: write_σ(0, SP) + λ: write_σ(0 ,SP) δ: Q·Copy_Write @@ -1147,7 +1153,7 @@ # Phase 4: Final Symbol and Clean Halt Q·Copy_Last_Erase: - λ: write_σ(0, SP) + λ: write_σ(0 ,SP) δ: Q·Copy_Last_Write @@ -1162,7 +1168,7 @@ Q·Write_EOR_Done Q·Write_EOR_Done: - λ: write_σ(1, EOR) + λ: write_σ(1 ,EOR) δ: Q·Done @@ -1195,7 +1201,7 @@ status(0); if(g == leftmost){ right(1); - write_σ(1, EOR); + write_σ(1 ,EOR); return; } @@ -1210,17 +1216,17 @@ // Break out to process the final character if(g == leftmost) break; - write_σ(0, SP); + write_σ(0 ,SP); write_d(1); right(1); left(0); } // Phase 4: Final character, advance, and clean halt - write_σ(0, SP); + write_σ(0 ,SP); write_d(1); right(1); - write_σ(1, EOR); + write_σ(1 ,EOR); return; } @@ -1233,6 +1239,7 @@

Adding heads is not a general method for improving performance complexity. A quadratic performance improvement does not always occur and when it does it is not strong enough to change the asymptotic performance if there are higher-order terms in a step count polynomial. Furthermore, eliminating shuttling will never reduce a linear step count to a constant time step count; the simple reason is that n is unbounded, while adding k heads can only divide the work by a fixed constant k. Consequently, while the transformation is consequential in specific cases, it cannot change the broader time complexity class.

+ The TTCA Machine design
@@ -1464,6 +1471,7 @@

Then the clock rises, and the cycle repeats.

+ The TTCA stored program

Symbol in mathematics

@@ -1723,6 +1731,7 @@

An example of a non-Turing tape like model is the Emacs vertical line cursor model, where a cursor is said to be between characters. An ASCII file offers no such feature as 'in between' characters. Like a Turing Machine tape, a medial character in an ASCII file has a left neighbor and a right neighbor character. Any attempt to represent an in between cursor within the file itself would require inserting more characters into the file under the same model of every medial character having a left and a right character. Consequently, though emacs presents a model where cursor is located in between two characters, this model is only due to the interpretation of the functions' actual effects presented to users in the documentation. For example, instead of saying a cursor is located upon a character, and that inserting a character inserts the character to the right of the given character, the manual gives the description that the new character is inserted at the cursor location, where said cursor is in between the given character and its right neighbor. Thus the documentation presents the user with one model, which by necessity of using standard library calls to work with files, is built upon another model.

+ Or, does it go the other way? Computational Naturalism

@@ -1778,6 +1787,7 @@

+ Computational Analysis

Definition

@@ -2273,11 +2283,11 @@ \begin{bmatrix} D_{0,0} \\ D_{0,1} \\ D_{0,2} \\ \vdots \\ D_{0,\omega} \end{bmatrix} = \begin{bmatrix} - 0! S(0,0) & 0! S(1,0) & 0! S(2,0) & \cdots & 0! S(\omega,0) \\ - 0 & 1! S(1,1) & 1! S(2,1) & \cdots & 1! S(\omega,1) \\ - 0 & 0 & 2! S(2,2) & \cdots & 2! S(\omega,2) \\ + 0! S(0,0) & 0! S(1,0) & 0! S(2,0) & ⋯ & 0! S(\omega,0) \\ + 0 & 1! S(1,1) & 1! S(2,1) & ⋯ & 1! S(\omega,1) \\ + 0 & 0 & 2! S(2,2) & ⋯ & 2! S(\omega,2) \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ - 0 & 0 & 0 & \cdots & \omega! S(\omega,\omega) + 0 & 0 & 0 & ⋯ & \omega! S(\omega,\omega) \end{bmatrix} \begin{bmatrix} a_0 \\ a_1 \\ a_2 \\ \vdots \\ a_\omega \end{bmatrix} @@ -2640,6 +2650,7 @@

+ Address @@ -2871,6 +2882,7 @@

+ Area and partitioning

@@ -3020,6 +3032,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos

  • For the Active area partition, the right empty tail is similarly a finite set extending to the rightmost boundary of the virtual tape. If the rightmost alphabet cell occupies the rightmost cell of the virtual tape, the right empty tail does not exist.
  • + Metrics

    Address defined area

    @@ -3128,6 +3141,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos

    Consider the case of a partitioned tape. Then consider that we write a gasket, such that we have a higher level Turing Machine that considers each of the areas of the partition as a cell. So then, initially the Turing machine starts with its head on the leftmost area, stepping right steps to the right neighbor area etc. In this manner we abstract the concept of a cell to areas. A length then becomes a count of areas; however the size remains a count of the cells. Something similar is done in the C language, where the length of an array is a count of the elements in the array, but the size of the array is a count of bytes. A byte being an addressable unit in physical memory, and thus the underlying cell that everything is built up from.

    + Multiple machines and sharing tapes

    Suppose we unmount a tape from a halted Turing Machine, say machine T0, and then mount the tape on another Turing Machine as input, say machine T1. Suppose we do this so that machine T1 may calculate the length of the output made by the first machine. When we do this, we run into some problems.

    @@ -3183,6 +3197,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos When the base machine tape cells behind an abstract area are physically contiguous, we say that the abstract area is compact. In the odd even tape partition example, the abstract areas lack compactness.

    + Zero length is a second order concept

    Suppose we have a Turing Machine that is designed to mark an area based on some property of the symbols.

    @@ -3335,6 +3350,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos
    + Some properties of Turing Machines

    For a given Turing Machine, the input is the sole determiner of the output. I.e. each time the same input is given, we get the same output. The input and output are mathematical objects, hence Turing Machines are functions. However, it is common in computer science to speak of Turing Machines as 'solving problems' rather than saying they are functions. This is because we often think of the inputs and outputs of Turing Machines as being something other than mathematical objects. For example, when a Turing Machine sorts sequences found on its input, we might say that it solves a sorting problem.

    @@ -3365,6 +3381,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos
    + Performance Analysis

    An interesting aspect of the Turing Machine procedure is that it introduces the concept of stepping the machine. With the addition of some simple constraints it becomes possible to map the parts of the Turing Machine abstraction to the parts of some real machines. These constraints may take the form of such things as bounds on the length of the inputs, or the addition of out-of-resource errors. Because such constraints do not affect the 'normal' workings of the machine, the derived relationship between a Turing Machine step, and that of a unit of real time might not be that complicated. Indeed, except for some enumerable cases this relationship might even be so simple as to assign to a step an approximately constant amount of time.

    @@ -3383,6 +3400,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos
    + Conventional Turing Machine variations

    In the first section of this chapter we gave a rather conventional definition for a Turing Machine. In the prior section, Complexity, we noted that we can analyze Turing Machines to find their time and space complexities. In this section we will discuss some variations that a person finds in the literature.

    @@ -3553,6 +3571,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos

    The original Turing Machine had an infinite tape. In contrast the TTCA machine has a surprising property: for computational problems all of its components remain finite. This follows from the fact that during computation a machine makes a finite number of steps, so the tape can only be expanded to be a finite size.

    + Consequentiality across the design abstraction stack @@ -3670,6 +3689,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos
    + TTCA Turing Machine in Lisp

    Because our TTCA Turing Machine has finite sized components, we may create a software model for the TTCA Turing Machine without having to make assumptions of the sort that ‘very large approximates the infinite’. Rather we can show a one-to-one mapping of code and data in the software model and the TTCA variation of the Turing Machine. Consequently, the software model and theoretic model are isomorphic.

    @@ -3921,8 +3941,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos
  • [f g h] – indirect function call. f is a variable replaced by its value, and that value is then looked up and called as a function. g and h are variables replaced by their values and passed as arguments. The result of the function replaces the entire form.
  • - - + Appendix: The Tension Between Formal Methods and Practical Architecture

    Does computation theory matter to computing?

    @@ -4043,7 +4062,8 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos This continuous tension between pure formal models and practical execution speed remains a defining characteristic of the field, driving the structural logic behind modern mechanisms dealing with instruction pipelines, branch prediction, and memory aliasing.

    - Appendix: Stirling Numbers + + Appendix: Stirling Numbers

    James Stirling introduced these numbers in his 1730 publication, Methodus Differentialis, a text that directly expanded upon the foundational work laid by Newton. @@ -4068,7 +4088,7 @@ Now suppose defining a Turing Machine that initially has the head on the leftmos

    - t^{\underline{n}} = t(t - 1)(t - 2) \cdots (t - n + 1) + t^{\underline{n}} = t(t - 1)(t - 2) ⋯ (t - n + 1)