diff --git a/sections/section4/section4.pdf b/sections/section4/section4.pdf index 207432f..0de136d 100644 Binary files a/sections/section4/section4.pdf and b/sections/section4/section4.pdf differ diff --git a/sections/section4/section4.tex b/sections/section4/section4.tex index e37917e..b5992a3 100644 --- a/sections/section4/section4.tex +++ b/sections/section4/section4.tex @@ -198,9 +198,9 @@ \subsection{Theorem: existence of an uncomputable function} \end{theorem} $\emph{Intuition.}$ -It is important to get the intuition here. There are infinitely many binary strings in $\{0, 1\}^*$, while there are -finite number of strings in $\{ 0, 1\}^n$. And that's precisely what makes it impossible to compute some functions since -NAND-TM programs are finite objects. +It is important to get the intuition here. Part of the difficulty of expanding the domain of functions from $\{0,1\}^n$ to $\{0,1\}^*$ is that there are only finitely many strings of $n$ bits but infinitely many of arbitary length. This difference explains why we cannot apply the same approach to computing every function that we used with functions on $\{0,1\}^n$, which relied on enumerating the finite set of outputs. + +However, there is another distinction which suggests why there are some functions we cannot compute: NAND-TM consists of objects with finite descriptions, while functions $\{0,1\}^* \to \{0,1\}$ have infinitely long description lengths. We can imagine a NAND-TM program as a compressed representation of the functions with ``nice patterns'', but the number of possible functions is so large that it overwhelms the ability of a finitely-described NAND-TM program to capture all of them. \subsection{Proof:} @@ -259,6 +259,9 @@ \subsection{Exercise} Consider the set $P(\mathbb{N})$ of all subsets of $\mathbb{N}$. Show that there is no one-to-one and onto function between $\mathbb{N}$ and $P(\mathbb{N})$. +\subsection{Exercise} +Is the set of NAND-TM programs countable? What about the set of functions $\{0,1\}^* \to \{0,1\}$? How can we get an alternate proof of Theorem 1 using these facts? + \section{Reduction} In the preceding section, we showed that there is some function from $\{0, 1\}^*$ to $\{0, 1\}$ that can't be simulated by any NAND-TM program, i.e. an uncomputable function. However, the uncomputable function that we constructed seemed rather contrived. diff --git a/sections/section4/section4_sol.pdf b/sections/section4/section4_sol.pdf index 1d30922..2224090 100644 Binary files a/sections/section4/section4_sol.pdf and b/sections/section4/section4_sol.pdf differ diff --git a/sections/section4/section4_sol.tex b/sections/section4/section4_sol.tex index 90e598e..33f2fb1 100644 --- a/sections/section4/section4_sol.tex +++ b/sections/section4/section4_sol.tex @@ -199,9 +199,9 @@ \subsection{Theorem: existence of an uncomputable function} \end{theorem} $\emph{Intuition.}$ -It is important to get the intuition here. There are infinitely many binary strings in $\{0, 1\}^*$, while there are -finite number of strings in $\{ 0, 1\}^n$. And that's precisely what makes it impossible to compute some functions since -NAND-TM programs are finite objects. +It is important to get the intuition here. Part of the difficulty of expanding the domain of functions from $\{0,1\}^n$ to $\{0,1\}^*$ is that there are only finitely many strings of $n$ bits but infinitely many of arbitary length. This difference explains why we cannot apply the same approach to computing every function that we used with functions on $\{0,1\}^n$, which relied on enumerating the finite set of outputs. + +However, there is another distinction which suggests why there are some functions we cannot compute: NAND-TM consists of objects with finite descriptions, while functions $\{0,1\}^* \to \{0,1\}$ have infinitely long description lengths. We can imagine a NAND-TM program as a compressed representation of the functions with ``nice patterns'', but the number of possible functions is so large that it overwhelms the ability of a finitely-described NAND-TM program to capture all of them. \subsection{Proof:} @@ -289,6 +289,18 @@ \subsection{Solution} sequence that you get by flipping all the green bits. Then $S$ is not in $P(S)$ and therefore the assumption that the listing is complete was false. Hence, it had to be the case that there is no one-to-one and onto function between $\mathbb{N}$ and $P(\mathbb{N})$. +\subsection{Exercise} +Is the set of NAND-TM programs countable? What about the set of functions $\{0,1\}^* \to \{0,1\}$? How can we get an alternate proof of Theorem 1 using these facts? + +\emph{Solution.} +As suggested by the proof above, the set of NAND-TM programs is countable, as we can lexicographically enumerate them using their finite encodings. + +On the other hand, we saw earlier in the course that $\{0,1\}^\infty$, the set of functions $\mathbb{N} \to \{0,1\}$, is uncountable, by diagonalization! But the set of functions from $\mathbb{N} \to \{0,1\}$ is equivalent to the set of functions from $\{0,1\}^* \to \{0,1\}$, as we can identify each string in $\{0,1\}^*$ with a natural number, bijectively. So the set of all functions $\{0,1\}^* \to \{0,1\}$ is uncountable. + +Since the space of functions is definitively bigger than the set of NAND-TM programs by the measure of countability, there cannot be any surjective mapping from NAND-TM programs to functions. In particular, the map we have from NAND-TM programs to the functions they compute is not surjective, so there must exist a function that isn't computed by any NAND-TM program. + +Note that this proof isn't actually different than the one given above; this one just disguises the diagonalization argument that the other proof made explicit, by reframing things in terms of uncountability. They both rely on showing that in any possible enumeration of elements in the countable set, we can extract some element from the other set that isn't covered by this enumeration. + \section{Reduction} In the preceding section, we showed that there is some function from $\{0, 1\}^*$ to $\{0, 1\}$ that can't be simulated by any NAND-TM program, i.e. an uncomputable function. However, the uncomputable function that we constructed seemed rather contrived.