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.
+
@@ -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 . To see how this works, consider the expression . Under unrestricted comprehension, a logician is permitted to define the predicate as . 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 , written as . The only thing a person needs to know about here is that it has already been successfully defined. So let us ask, is in ? If we assume is a member of , evaluating the second term forces the familiar fatal loop: if is in , it shouldn't be, and if it isn't, it should be. Thus if we assume that is in , then can not be defined, but by definition, 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 is in . As is definitively not a member of , the first term of the set comprehension rule, 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 . To see how this works, consider the expression . Under unrestricted comprehension, a logician is permitted to define the predicate as . 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 , written as . The only thing a person needs to know about here is that it has already been successfully defined. So let us ask, is in ? If we assume is a member of , evaluating the second term forces the familiar fatal loop: if is in , it shouldn't be, and if it isn't, it should be. Thus if we assume that is in , then can not be defined, but by definition, 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 is in . As is definitively not a member of , the first term of the set comprehension rule, 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 , Martin Davis , and Marvin Minsky , leading to the modern standard presentations by authors such as John Hopcroft and Jeffrey Ullman , as well as Harry Lewis and Christos Papadimitriou .
+
@@ -147,6 +148,7 @@
+
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.
+
@@ -339,6 +342,7 @@
then we can say without qualification that is . Though still implied are the sets of machines and tapes.
+
This definition comes from Hopcroft and Ullman's book with minor terminology changes to make it flow into the text here .
@@ -380,10 +384,10 @@
-
So first the tape is , with the head over , and in state . Then after a step of the machine, the tape is , with the head over , and in state . Thus was overwritten with , and the head stepped left.
+
So first the tape is , with the head over , and in state . Then after a step of the machine, the tape is , with the head over , and in state . Thus was overwritten with , 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 @@