{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Week 9: Universal TMs and undecidability" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from tock import *\n", "# Tock's native notation for TMs is different; use Sipser's\n", "# If you get an error here, please upgrade to the latest Tock\n", "settings.display_direction_as = 'alpha' " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "" ] }, { "attachments": { "image.png": { "image/png": "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paylxJWsW7dOPfXUU3aNw4YNU1tssYUdZwABBBBAAAEEyhOgXS7Pugpr6roznnfccYfacccd7b8zzzyzCvuBOiKAAAIIINCVArTLXblbm96orjvj+d577zWN0QsLXnjhhWrp0qXhpu62227qtNNO64XNZhsRQAABBNokQLtcH77X2uWuCzzr717mLliwQMk/SQcddBCBJ18JBBBAAAEE2ijQa+1y111qb+N3h1UjgAACCCCAAAII1BEg8KyDwywEEEAAAQQQQACB4gQIPIuzpCQEEEAAAQQQQACBOgI9e4+n3OwsXTxI6u/vV+uvv344/NZbb6lFixaFXTK9+eabatddd1V77bVX+JT8euulx+lr165V77//fliG5Ntggw3CYfnv6aefVgMDA+qxxx5Tu+++u5o8ebLaaqut7Py0ASlPypUk9ZN61ktuHSTfhhtuGGZfs2aNCoIgHDbbLCMyvHr16nC6/Oc62IkMIIAAAgggUIIA7XKPtMs6IOmq9Jvf/EYiLPvvm9/8ZuL27bTTTjbPxRdfHLzzzjvBSSedFAwdOtROd8sZNWpUcP311yeWJRP1gzp2uenTpwf6AArL0wGmne6Wp7t8CmbPnh2uN63Qvffe2y4rebPSySefbPNvueWWNvv2229vp7t1iA/PnTvXLsMAAggggAACRQjQLn8Qk9Auf/BtSj+Fp6OSbk460LSb98Ybb6hPfOIT6oILLlByljMprVy5Uh111FHq7LPPTpqt3n77bTt91apV6vDDDw/Le/HFF+10d+CJJ55Q8+fPD58sdzu8d/NIOSQEEEAAAQR6QYB2uRf2slI9G3i6u/eUU04JL4WbaSNGjFAHHnhgeEl8o402MpPDz+9973vq2WefjUyLjyxcuFDdeuutdnJfX5/ac8891T777FNzufzee+9VkyZNUo8++qjNX/TA8OHDiy6S8hBAAAEEEPAmQLvsjbbtBRN4Ortgl112Ubfffrt65ZVX1G233abuvvtu9cgjj4RnJU02uSdSOnvNk+S+TDmL+tJLL6mHHnpILVmyRL322mvq8ssvV5tssoktQs6m+nzD0l133aVeeOGF8N8BBxxg17v//vvb6TL/hBNOsPMYQAABBBBAoN0CtMvd1y4TeH54VH30ox9Vv//979Wf/MmfRI6zMWPGqKuvvlptttlmdvr9999vh9MG5MGea665Rp144omRd8VLwHnMMceo3/3ud0rf72EXv+qqq9SDDz5ox4sc2HTTTZW+RzX8527HkCFD7HSZ7wbDRa6fshBAAAEEEGhUgHa5O9tlAs8Pj4TzzjtP6QeLEo+LbbbZJrwH1MyUp9Sz0nHHHac++9nPpmaTy+vf/va37Xx5wvycc86x4wwggAACCCDQywK0y9259wk89X7VT5irT3/603X3sJzuN0kuS9dLck+nnOnMSscff3zkbOg999yTtQjzEUAAAQQQ6HoB2uXu3cUEnnrf7rHHHpl72PTzKRl1hwB188uDRHnKlEvghx56qC1LnnQ3/XbaiQwggAACCCDQYwJ52lDa5Wp+KQg89X6Tv6yKTDvssEPu4nbeeWebVzrPleCThAACCCCAQC8L0C53794n8NT71n3LUBG72n1oKKu8jTfe2GaRv97effddO84AAggggAACvShAu9y9e53A08O+zboH1F2lvKLTJHlFZisHm5wxJSGAAAIIIIBAVIB2OerRzjECTw/6jVwuf/LJJ20N5B3v+lWedrzRgccff7zRRciPAAIIIIBA1wvQLnfOLibw9LAvli1bph544IHMkuU1mzfddJPNp9+prqRvTZMkEDUpz0NHDz/8sMnOJwIIIIAAAgh8KEC73DlfhcHIpnPqVPmayFPv559/fuZ2SKfxr776qs0nr9R009Zbb21Hs16puWDBAq+v3bQVYQABBBBAAIGKCdAud84OI/D0tC+uuOIKdeWVV6aWLq/QPOOMMyLzTz/99Mj4dtttZ8flVZ5PPfWUHXcHXn/9dTVnzhx3Uq5hHmTKxUQmBBBAAIEuEKBd7oydSODpaT/Igz4zZ84M38HuvulIHib69a9/raZOnaqee+45u/YjjjhCffzjH7fjMvCxj33Mjstyn/vc55RcLjBJ3nb029/+NsyX93Wbm2++uVlcyas/5bWey5cvV3KvqQSwJAQQQAABBLpRgHa5M/YqgafH/SCn9s8++2wl927K2UsJJEeMGKE+85nPqJdeesmuWd6fnvS6zNmzZ0fen3733XervffeW40fP15NnjxZDR8+XB1yyCG27095Y1JWcvsYXb16dRjM7rrrrkqmX3TRRVmLMx8BBBBAAIHKCtAut3/XEXh62AfTpk1TBx98cKTkZ555JjzDGH9ISILIgYGBMJiMLKBHRo0apc466yzlBpTy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AAIIIICAFwECTy+sFIoAAggggAACCCAQFyDwjIswjgACCCCAAAIIIOBFgMDTCyuFIoAAAggggAACCMQFCDzjIowjgAACCCCAAAIIeBEg8PTCSqEIIIAAAggggAACcQECz7gI4wgggAACCCCAAAJeBAg8vbBSKAIIIIAAAggggEBcgMAzLsI4AggggAACCCCAgBcBAk8vrBSKAAIIIIAAAgggEBcg8IyLMI4AAggggAACCCDgRYDA0wsrhSKAAAIIIIAAAgjEBQg84yKMI4AAAggggAACCHgRIPD0wkqhCCCAAAIIIIAAAnEBAs+4COMIIIAAAggggAACXgQIPL2wUigCCCCAAAIIIIBAXIDAMy7COAIIIIAAAggggIAXAQJPL6wUigACCCCAAAIIIBAXIPCMizCOAAIIIIAAAggg4EWAwNMLK4UigAACCCCAAAIIxAUIPOMijCOAAAIIIIAAAgh4ESDw9MJKoQgggAACCCCAAAJxAQLPuAjjCCCAAAIIIIAAAl4ECDy9sFIoAggggAACCCCAQFyAwDMuwjgCCCCAAAIIIICAFwECTy+sFIoAAggggAACCCAQFyDwjIswjgACCCCAAAIIIOBFgMDTCyuFIoAAAggggAACCMQFCDzjIowjgAACCCCAAAIIeBEg8PTCSqEIIIAAAggggAACcQECz7gI4wgggAACCCCAAAJeBAg8vbBSKAIIIIAAAggggEBcoD8+oejxN998U61atSp3sZtssonaaqutcucnIwIItC7Acdq6ISUgULbAunXr1FNPPWVXO2zYMLXFFlvYcQYQ6EQB74HnlVdeqf7mb/6moW0fPny42nXXXdXee++t/uEf/kHtscceDS1PZgQQaEyA47QxL3Ij0AkCd9xxhzrooINsVb75zW+qf/3Xf7XjDCDQiQIdean99ddfVwMDA+rSSy9V48ePD4PPd999txP9qBMCPSvAcdqzu54N7xCB9957r201ufDCC9VXv/rV8N8///M/t60evbbibnD3fsaz1S+FHFjnnnuuksDzX/7lX1otjuURQMCDAMepB1SK7DiB5cuXq7Fjx3ZcvdpRoQULFij5J0nOup522mntqEbPrbMb3EsPPOXLOXPmzJovSxAE6oUXXlBPPvmkuu2229Tll1+u1q5da/PNnz9ffelLX1ITJkyw0xhAAAE/AhynflwptdoC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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "## Tuesday\n", "\n", "### Universal Turing machines\n", "\n", "
\n", "

Read page 202, just from \"Before we get to the proof...\" to \"...stored-program computers.\"

\n", "

Watch W9E1: Universal Turing Machines.

\n", "
\n", "\n", "Most of you are familiar with the idea of a programming language *interpreter*, which takes a program and some input to the program, and produces the same output that the program itself would have:\n", "\n", "![image.png](attachment:image.png)" ] }, { "attachments": { "image.png": { "image/png": "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gEBnCLz88svm1Vdf9SczbNgws8QSS/j5RibeeustM2fOHJ91+PDhZrHFFvPzRUxof9qv0sCBA82KK65YxG4os4pA+J0pwp4azyroLEIAAQQQQKATBE466SQzYsQI/3Prrbc2fVq33HKL315lTZo0qekymt1gv/328/v8/Oc/3+zm5O+BQNH2BJ49uDhsigACCCCAQLcJvPHGG912yl11vu+++26h50vgWSgvhSOAAAIIIIAAAgg4AQJPJ8EnAggggAACCPQ5gWbbpPa5E+CAEgJ0LkpwMIMAAggggAACvS3w+9//3rz33nvxYRTdkam3z7Xb9k/g2W1XnPNFAAEEEECgjwsMGDCgjx8hh9eqAIFnq3JshwACCCCAAAKxgDqkvP/++/F0//79zaKLLhpPqyPSHXfcYZ566inz+uuvm3XWWcd85CMfiXusL7JIdmu/+fPn+xpP5XO1ntpH2Pll8cUXN/369at7Fd555x2fJyzPLwwmtO8ZM2aYqVOnGh3/qquuatZdd10zcuTIIFf1yXA/OubwHO+55x4zc+ZMM3v2bDNhwoTEEFH/+c9/zLRp08wTTzxhXnjhBbPccsuZlVZayay++uoN7Tc8GpX1z3/+0zzzzDPxj3yGDBkS72/LLbdsejitsOxcpqMPki3MTfKJQOkF+D6X/hJyAgh0vUAev8eOPfbYSOW4n+uvv75pV/vY22+vco477riKMtZcc02f55e//GVkx+CMjjrqqGjQoEF+uTsGfdrxRCOVm5U+/elP++3GjRvns6nMsJyrr77ar8uasIFeZANAv50dLqhqVhv4RdqXHbvS5w33NWbMmOiGG26ouq0W2oA1sd0f/vCHOK8+R40alVhng9p43YMPPhgdfPDBkW3Hmlgf7tcGvNHkyZMjG3DH22T9o+M/5JBDMo9fZS611FLRXnvtFT3//PNZxUQ77rijP5bQPnODBldo/0rZf27YHCQEEEAAAQQQQKCegBvsXflee+01o5q1U089Na7lrLatBojfbbfdzA9/+MNqq/3g8emV48ePTyy69NJLE/PVZq666ipfG6v1//Vf/1WR7cwzzzSbbrqpuf32283bb79dsV4LVAOqY77sssuqrq+28LzzzjO77rprXJuZXv+Pf/zDbLHFFuacc87JPF9to9rXI4880nzhC19Q5JYuJp6/8cYbzejRo82vf/3r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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "The universal TM (UTM) $U$ defined on page 202 is TM that is a TM interpreter. It can simulate any other TM. We've seen machines that simulate other machines (for example, the intersection of two DFAs $M_1$ and $M_2$ simulates both $M_1$ and $M_2$), but in those cases, the simulated machine was always hard-coded into the simulator. A universal TM is different because the code of the simulated machine is *part of the input*. That is, it takes as input both the code of a TM $M$ and an input string $w$, and simulates what $M$ would do on $w$.\n", "\n", "![image.png](attachment:image.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This concept is important because it is used in some of the undecidability proofs we'll see soon, and also because it's related to the concept of a *stored-program computer*." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The so-called implementation given in the book does not provide much insight into how one might actually write a UTM. We've seen one instance already: last class, we ran a C-to-TM compiler on a TM simulator written in C. The resulting (huge) Turing machine is a UTM." ] }, { "attachments": { "image.png": { "image/png": "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CCgC7YeACsf2e+faY0VAEUiAgArHBCBpEUVAEWg/BFQ4tt87z63HZ5xxhjn77LNzq18rVgTqiYCa8tQT7Uhbf//9t3nrrbfMBx98YD766CPz77//mjnmmMPMNddcZrXVVjPTTz995Ilin/7222/mhBNOcEwecsghuTPbavjlDpg2kAoBFY6p4Mqm8E8//WQuvfRSc+6555pPP/00ttIZZpjBDBgwwDAbQ1g2Ew0ZMsSxm5eAbHX8muldtzKvKhzr/HY//vhjs9Zaa7mZYqWmMSC+9tprzbPPPmvGjx9vunXrVql44e7lJSDbBb/CvdA2ZEj3HOv40j///HPTv3//DoJxwQUXNOuuu67ZYIMNzDzzzBPiiGX3mWeeGbrWLCcIyCz3INsNv2Z5z63KpwrHOr7Z008/3bz77rulFldeeWXz9NNPm/fee8888MAD5t577zWTJk0yI0eONNNMM02p3COPPFI6braDLAVkO+LXbO+7lfjVZXWd3ibKlhtuuKHUWu/evd1yuUuXLqVrHEw22WRmp512Mrfeeqv749orr7zCR6b0888/m6233tpYazOr94033oitK4sldtHwi+2oXmwpBBomHJlBPfHEE24m9c477xj+cNJnr40/NJEIDhQTOOvPP//8ZpFFFnF/Sy65pFl99dWbSpv70ksvmS+++KL05Tn44INd/0oXIgdBTfXss88eudv5019//dXcd999na8oYQ0ISBRLO+ywQ8InwsWKhl+YOz0rh8DXX39tHn30UfP222+7Mc44ZxygVGOcY+HAd51xPtNMM5m5557bLLzwwm6c9+rVy/Tp08dZcJSrP8/rdROOzFRuueUWNyAnTJhgpphiCrPOOuuYhRZayGy66aZmscUWM0QtAST+WFbyjAcQYeqF6NixY80zzzxjlllmGafc2Hbbbc3yyy+fJ06drhv+/vvvv1I9zBDL0Ysvvmjuvvvu0m32JJud5ptvPmeeVGs/2h2/WnGr93P//POP2yJijCIUP/vsMzfOF110UbPqqqu6VdG8885bmvgw1v2EiB/sTz75pDRhYntpt912c8pIhCTWG+utt56Zcsr6iK1cW0EY3H777U7rev/995t+/fqZgQMHmmHDhpmePXtWfW8zzzyz4Q9i1rjRRhuVnvnjjz/MU089ZRC0LA8BDCG55557mh49epTKFekgKBDB5ssv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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "But let's think about a more conventional implementation of a UTM. First, we have to show how to encode a TM as a string. Here's Turing's original encoding:\n", "\n", "- If the states in $Q$ are numbered $q_1, q_2, \\ldots$, then state $q_i$ is encoded as $\\mathtt{DA}^i$. The start state is $q_1$. Turing's definition didn't have accept or reject states, but we just have to fix some convention, like $q_2$ is the accept state and $q_3$ is the reject state.\n", "- If the symbols in $\\Gamma$ are numbered $a_0, a_1, \\ldots$, where $a_0$ is the blank symbol, then symbol $a_i$ is encoded as $\\mathtt{DC}^i$. \n", "- Then, the transition \n", "![image.png](attachment:image.png)\n", "is encoded as $\\mathtt{DA}^i \\mathtt{DC}^j \\mathtt{DC}^l \\mathtt{L} \\mathtt{DA}^k$, and similarly if the move is R or N (for \"no move,\" equivalent to the book's S).\n", "- The machine is encoded as $əT_1;T_2;\\cdots;T_n⸬$ where the $T_i$ are the transitions of the machine." ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "Second, we have to show the universal TM itself. It is often constructed as a TM with three tapes:\n", "\n", "1. An encoding of $M$, the machine being simulated.\n", "2. The tape of $M$.\n", "3. The state of $M$.\n", "\n", "![image.png](attachment:image.png)\n", "\n", "An implementation description would be: On input $\\langle M, w\\rangle$, where $M$ is a TM and $w$ is a string:\n", "\n", "1. Split the input into $M$ on tape 1 and $w$ on tape 2.\n", "2. Initialize tape 3 to the start state of $M$.\n", "3. Repeat:\n", " 1. If the state (tape 3) is the accept state, *accept*; if it is the reject state, *reject*.\n", " 2. Search on tape 1 for an instruction that matches the current state (encoded on tape 3) and current input symbol (encoded on tape 2).\n", " 3. Write the new state to tape 3 and the new symbol to tape 2.\n", " 4. Move the head on tape 2 to the left or right as indicated by the instruction." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The smallest UTM\n", "\n", "There's a cottage industry of seeing who can make the smallest universal TM. The [current record holder](https://web.archive.org/web/20161226084440/http://alvyray.com/CreativeCommons/BizCardUniversalTuringMachine_v2.2.pdf), due to Rogozhin, is this (I modified it slightly for Sipser's definition of TM):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "%3\n", "\n", "\n", "\n", "_START\n", "\n", "\n", "\n", "0\n", "\n", "q0\n", "\n", "\n", "\n", "_START->0\n", "\n", "\n", "\n", "\n", "\n", "0->0\n", "\n", "\n", "1 → 1,R\n", "2 → 2,R\n", "4 → 4,R\n", "\n", "\n", "\n", "2\n", "\n", "q1\n", "\n", "\n", "\n", "0->2\n", "\n", "\n", "5 → 2,R\n", "\n", "\n", "\n", "1\n", "\n", "\n", "accept\n", "\n", "\n", "\n", "2->2\n", "\n", "\n", "_ → _,L\n", "1 → 4,L\n", "2 → 3,R\n", "3 → 2,L\n", "4 → _,R\n", "\n", "\n", "\n", "3\n", "\n", "q4\n", "\n", "\n", "\n", "2->3\n", "\n", "\n", "5 → _,R\n", "\n", "\n", "\n", "3->1\n", "\n", "\n", "4 → 4\n", "\n", "\n", "\n", "3->3\n", "\n", "\n", "1 → _,R\n", "3 → 4,R\n", "5 → 2,R\n", "\n", "\n", "\n", "5\n", "\n", "q2\n", "\n", "\n", "\n", "3->5\n", "\n", "\n", "_ → 5,L\n", "2 → 5,L\n", "\n", "\n", "\n", "4\n", "\n", "q3\n", "\n", "\n", "\n", "4->1\n", "\n", "\n", "4 → 4\n", "\n", "\n", "\n", "4->3\n", "\n", "\n", "2 → 4,R\n", "\n", "\n", "\n", "4->4\n", "\n", "\n", "1 → 1,R\n", "3 → 2,R\n", "\n", "\n", "\n", "4->5\n", "\n", "\n", "_ → 5,R\n", "\n", "\n", "\n", "5->4\n", "\n", "\n", "2 → 3,L\n", "\n", "\n", "\n", "5->5\n", "\n", "\n", "_ → 1,L\n", "1 → _,R\n", "3 → 4,R\n", "4 → 3,L\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "u = read_csv('utm.csv')\n", "u" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The reason it can be so small is that the way it \"encodes\" a TM is actually to convert it into a simpler (but still Turing-equivalent) formalism called a _2-tag system_. Here's an example TM, Sipser's $M_2$:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "%3\n", "\n", "\n", "\n", "_START\n", "\n", "\n", "\n", "0\n", "\n", "q1\n", "\n", "\n", "\n", "_START->0\n", "\n", "\n", "\n", "\n", "\n", "2\n", "\n", "q2\n", "\n", "\n", "\n", "0->2\n", "\n", "\n", "0 → _,R\n", "\n", "\n", "\n", "3\n", "\n", "reject\n", "\n", "\n", "\n", "0->3\n", "\n", "\n", "x → x,R\n", "_ → _,R\n", "\n", "\n", "\n", "1\n", "\n", "\n", "accept\n", "\n", "\n", "\n", "2->1\n", "\n", "\n", "_ → _,R\n", "\n", "\n", "\n", "2->2\n", "\n", "\n", "x → x,R\n", "\n", "\n", "\n", "4\n", "\n", "q3\n", "\n", "\n", "\n", "2->4\n", "\n", "\n", "0 → x,R\n", "\n", "\n", "\n", "4->4\n", "\n", "\n", "x → x,R\n", "\n", "\n", "\n", "5\n", "\n", "q4\n", "\n", "\n", "\n", "4->5\n", "\n", "\n", "0 → 0,R\n", "\n", "\n", "\n", "6\n", "\n", "q5\n", "\n", "\n", "\n", "4->6\n", "\n", "\n", "_ → _,L\n", "\n", "\n", "\n", "5->3\n", "\n", "\n", "_ → _,R\n", "\n", "\n", "\n", "5->4\n", "\n", "\n", "0 → x,R\n", "\n", "\n", "\n", "5->5\n", "\n", "\n", "x → x,R\n", "\n", "\n", "\n", "6->2\n", "\n", "\n", "_ → _,R\n", "\n", "\n", "\n", "6->6\n", "\n", "\n", "0 → 0,L\n", "x → x,L\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "m2 = read_csv('tm-m2.csv')\n", "m2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This machine converts to a 2-tag system with 450 rules. The rules look like CFG rules, but they work differently. (Match the first symbol with a rule's left-hand side, remove the first *two* symbols, and append the right-hand side.)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "('A',_0,_1) -> ('C',_0,_1) x ('c',_0,_1) x\r\n", "('α',_0,_1) -> ('c',_0,_1) x ('c',_0,_1) x\r\n", "('B',_0,_1) -> ('S',_0,_1)\r\n", "('β',_0,_1) -> ('s',_0,_1)\r\n", "('C',_0,_1) -> ('D',_(0,_'read1'),_1) ('D',_(0,_'read1'),_0)\r\n", "('c',_0,_1) -> ('d',_(0,_'read1'),_1) ('d',_(0,_'read1'),_0)\r\n", "('S',_0,_1) -> ('T',_(0,_'read1'),_1) ('T',_(0,_'read1'),_0)\r\n", "('s',_0,_1) -> ('t',_(0,_'read1'),_1) ('t',_(0,_'read1'),_0)\r\n", "('D',_0,_1) -> ('A',_0,_1) x\r\n", "('d',_0,_1) -> ('α',_0,_1) x\r\n", "('T',_0,_1) -> ('B',_0,_1) x\r\n", "('t',_0,_1) -> ('β',_0,_1) x\r\n", "('D',_(0,_'read1'),_0) -> x ('A',_(0,_'read1'),_0) x\r\n", "('d',_(0,_'read1'),_0) -> ('α',_(0,_'read1'),_0) x\r\n", "('T',_(0,_'read1'),_0) -> ('B',_(0,_'read1'),_0) x\r\n", "('t',_(0,_'read1'),_0) -> ('β',_(0,_'read1'),_0) x\r\n", "('A',_(0,_'write0',_'move+2'),_1) -> ('C',_(0,_'write0',_'move+2'),_1) x\r\n", "('α',_(0,_'write0',_'move+2'),_1) -> ('c',_(0,_'write0',_'move+2'),_1) x ('c',_(0,_'write0',_'move+2'),_1) x\r\n", "('B',_(0,_'write0',_'move+2'),_1) -> ('S',_(0,_'write0',_'move+2'),_1)\r\n", "('β',_(0,_'write0',_'move+2'),_1) -> ('s',_(0,_'write0',_'move+2'),_1)\r\n", "('C',_(0,_'write0',_'move+2'),_1) -> ('D',_(0,_'move+1'),_1) ('D',_(0,_'move+1'),_0)\r\n", "('c',_(0,_'write0',_'move+2'),_1) -> ('d',_(0,_'move+1'),_1) ('d',_(0,_'move+1'),_0)\r\n", "('S',_(0,_'write0',_'move+2'),_1) -> ('T',_(0,_'move+1'),_1) ('T',_(0,_'move+1'),_0)\r\n", "('s',_(0,_'write0',_'move+2'),_1) -> ('t',_(0,_'move+1'),_1) ('t',_(0,_'move+1'),_0)\r\n", "('D',_(0,_'write0',_'move+2'),_1) -> ('A',_(0,_'write0',_'move+2'),_1) x\r\n", "('d',_(0,_'write0',_'move+2'),_1) -> ('α',_(0,_'write0',_'move+2'),_1) x\r\n", "('T',_(0,_'write0',_'move+2'),_1) -> ('B',_(0,_'write0',_'move+2'),_1) x\r\n", "('t',_(0,_'write0',_'move+2'),_1) -> ('β',_(0,_'write0',_'move+2'),_1) x\r\n", "('A',_(0,_'move+1'),_0) -> ('C',_(0,_'move+1'),_0) x\r\n", "('α',_(0,_'move+1'),_0) -> ('c',_(0,_'move+1'),_0) x ('c',_(0,_'move+1'),_0) x\r\n", "('B',_(0,_'move+1'),_0) -> ('S',_(0,_'move+1'),_0)\r\n", "('β',_(0,_'move+1'),_0) -> ('s',_(0,_'move+1'),_0)\r\n", "('C',_(0,_'move+1'),_0) -> ('D',_1,_1) ('D',_1,_0)\r\n", "('c',_(0,_'move+1'),_0) -> ('d',_1,_1) ('d',_1,_0)\r\n", "('S',_(0,_'move+1'),_0) -> ('T',_1,_1) ('T',_1,_0)\r\n", "('s',_(0,_'move+1'),_0) -> ('t',_1,_1) ('t',_1,_0)\r\n", "('D',_(0,_'move+1'),_0) -> x ('A',_(0,_'move+1'),_0) x\r\n", "('d',_(0,_'move+1'),_0) -> ('α',_(0,_'move+1'),_0) x\r\n", "('T',_(0,_'move+1'),_0) -> ('B',_(0,_'move+1'),_0) x\r\n", "('t',_(0,_'move+1'),_0) -> ('β',_(0,_'move+1'),_0) x\r\n", "('A',_1,_0) -> ('C',_1,_0) x\r\n", "('α',_1,_0) -> ('c',_1,_0) x ('c',_1,_0) x\r\n", "('B',_1,_0) -> ('S',_1,_0)\r\n", "('β',_1,_0) -> ('s',_1,_0)\r\n", "('C',_1,_0) -> ('D',_(1,_'read0'),_1) ('D',_(1,_'read0'),_0)\r\n", "('c',_1,_0) -> ('d',_(1,_'read0'),_1) ('d',_(1,_'read0'),_0)\r\n", "('S',_1,_0) -> ('T',_(1,_'read0'),_1) ('T',_(1,_'read0'),_0)\r\n", "('s',_1,_0) -> ('t',_(1,_'read0'),_1) ('t',_(1,_'read0'),_0)\r\n", "('D',_1,_0) -> x ('A',_1,_0) x\r\n", "('d',_1,_0) -> ('α',_1,_0) x\r\n", "('T',_1,_0) -> ('B',_1,_0) x\r\n", "('t',_1,_0) -> ('β',_1,_0) x\r\n", "('A',_(1,_'read0'),_0) -> ('C',_(1,_'read0'),_0) x\r\n", "('α',_(1,_'read0'),_0) -> ('c',_(1,_'read0'),_0) x ('c',_(1,_'read0'),_0) x\r\n", "('B',_(1,_'read0'),_0) -> ('S',_(1,_'read0'),_0)\r\n", "('β',_(1,_'read0'),_0) -> ('s',_(1,_'read0'),_0)\r\n", "('C',_(1,_'read0'),_0) -> H H\r\n", "('c',_(1,_'read0'),_0) -> ('d',_-1,_1) ('d',_-1,_0)\r\n", "('S',_(1,_'read0'),_0) -> ('T',_-1,_1) ('T',_-1,_0)\r\n", "('s',_(1,_'read0'),_0) -> ('t',_-1,_1) ('t',_-1,_0)\r\n", "('D',_(1,_'read0'),_0) -> x ('A',_(1,_'read0'),_0) x\r\n", "('d',_(1,_'read0'),_0) -> ('α',_(1,_'read0'),_0) x\r\n", "('T',_(1,_'read0'),_0) -> ('B',_(1,_'read0'),_0) x\r\n", "('t',_(1,_'read0'),_0) -> ('β',_(1,_'read0'),_0) x\r\n", "('A',_(1,_'read0'),_1) -> ('C',_(1,_'read0'),_1) x ('c',_(1,_'read0'),_1) x\r\n", "('α',_(1,_'read0'),_1) -> ('c',_(1,_'read0'),_1) x ('c',_(1,_'read0'),_1) x\r\n", "('B',_(1,_'read0'),_1) -> ('S',_(1,_'read0'),_1)\r\n", "('β',_(1,_'read0'),_1) -> ('s',_(1,_'read0'),_1)\r\n", "('C',_(1,_'read0'),_1) -> ('D',_1,_1) ('D',_1,_0)\r\n", "('c',_(1,_'read0'),_1) -> ('d',_1,_1) ('d',_1,_0)\r\n", "('S',_(1,_'read0'),_1) -> ('T',_1,_1) ('T',_1,_0)\r\n", "('s',_(1,_'read0'),_1) -> ('t',_1,_1) ('t',_1,_0)\r\n", "('D',_(1,_'read0'),_1) -> ('A',_(1,_'read0'),_1) x\r\n", "('d',_(1,_'read0'),_1) -> ('α',_(1,_'read0'),_1) x\r\n", "('T',_(1,_'read0'),_1) -> ('B',_(1,_'read0'),_1) x\r\n", "('t',_(1,_'read0'),_1) -> ('β',_(1,_'read0'),_1) x\r\n", "('A',_1,_1) -> ('C',_1,_1) x ('c',_1,_1) x\r\n", "('α',_1,_1) -> ('c',_1,_1) x ('c',_1,_1) x\r\n", "('B',_1,_1) -> ('S',_1,_1)\r\n", "('β',_1,_1) -> ('s',_1,_1)\r\n", "('C',_1,_1) -> ('D',_(1,_'read1'),_1) ('D',_(1,_'read1'),_0)\r\n", "('c',_1,_1) -> ('d',_(1,_'read1'),_1) ('d',_(1,_'read1'),_0)\r\n", "('S',_1,_1) -> ('T',_(1,_'read1'),_1) ('T',_(1,_'read1'),_0)\r\n", "('s',_1,_1) -> ('t',_(1,_'read1'),_1) ('t',_(1,_'read1'),_0)\r\n", "('D',_1,_1) -> ('A',_1,_1) x\r\n", "('d',_1,_1) -> ('α',_1,_1) x\r\n", "('T',_1,_1) -> ('B',_1,_1) x\r\n", "('t',_1,_1) -> ('β',_1,_1) x\r\n", "('D',_(1,_'read1'),_0) -> x ('A',_(1,_'read1'),_0) x\r\n", "('d',_(1,_'read1'),_0) -> ('α',_(1,_'read1'),_0) x\r\n", "('T',_(1,_'read1'),_0) -> ('B',_(1,_'read1'),_0) x\r\n", "('t',_(1,_'read1'),_0) -> ('β',_(1,_'read1'),_0) x\r\n", "('A',_(1,_'write0',_'move+2'),_1) -> ('C',_(1,_'write0',_'move+2'),_1) x\r\n", "('α',_(1,_'write0',_'move+2'),_1) -> ('c',_(1,_'write0',_'move+2'),_1) x ('c',_(1,_'write0',_'move+2'),_1) x\r\n", "('B',_(1,_'write0',_'move+2'),_1) -> ('S',_(1,_'write0',_'move+2'),_1)\r\n", "('β',_(1,_'write0',_'move+2'),_1) -> ('s',_(1,_'write0',_'move+2'),_1)\r\n", "('C',_(1,_'write0',_'move+2'),_1) -> ('D',_(1,_'move+1'),_1) ('D',_(1,_'move+1'),_0)\r\n", "('c',_(1,_'write0',_'move+2'),_1) -> ('d',_(1,_'move+1'),_1) ('d',_(1,_'move+1'),_0)\r\n", "('S',_(1,_'write0',_'move+2'),_1) -> ('T',_(1,_'move+1'),_1) ('T',_(1,_'move+1'),_0)\r\n", "('s',_(1,_'write0',_'move+2'),_1) -> ('t',_(1,_'move+1'),_1) ('t',_(1,_'move+1'),_0)\r\n", "('D',_(1,_'write0',_'move+2'),_1) -> ('A',_(1,_'write0',_'move+2'),_1) x\r\n", "('d',_(1,_'write0',_'move+2'),_1) -> ('α',_(1,_'write0',_'move+2'),_1) x\r\n", "('T',_(1,_'write0',_'move+2'),_1) -> ('B',_(1,_'write0',_'move+2'),_1) x\r\n", "('t',_(1,_'write0',_'move+2'),_1) -> ('β',_(1,_'write0',_'move+2'),_1) x\r\n", "('A',_(1,_'move+1'),_1) -> ('C',_(1,_'move+1'),_1) x ('c',_(1,_'move+1'),_1) x\r\n", "('α',_(1,_'move+1'),_1) -> ('c',_(1,_'move+1'),_1) x ('c',_(1,_'move+1'),_1) x\r\n", "('B',_(1,_'move+1'),_1) -> ('S',_(1,_'move+1'),_1)\r\n", "('β',_(1,_'move+1'),_1) -> ('s',_(1,_'move+1'),_1)\r\n", "('C',_(1,_'move+1'),_1) -> ('D',_2,_1) ('D',_2,_0)\r\n", "('c',_(1,_'move+1'),_1) -> ('d',_2,_1) ('d',_2,_0)\r\n", "('S',_(1,_'move+1'),_1) -> ('T',_2,_1) ('T',_2,_0)\r\n", "('s',_(1,_'move+1'),_1) -> ('t',_2,_1) ('t',_2,_0)\r\n", "('D',_(1,_'move+1'),_1) -> ('A',_(1,_'move+1'),_1) x\r\n", "('d',_(1,_'move+1'),_1) -> ('α',_(1,_'move+1'),_1) x\r\n", "('T',_(1,_'move+1'),_1) -> ('B',_(1,_'move+1'),_1) x\r\n", "('t',_(1,_'move+1'),_1) -> ('β',_(1,_'move+1'),_1) x\r\n", "('A',_2,_0) -> ('C',_2,_0) x\r\n", "('α',_2,_0) -> ('c',_2,_0) x ('c',_2,_0) x\r\n", "('B',_2,_0) -> ('S',_2,_0)\r\n", "('β',_2,_0) -> ('s',_2,_0)\r\n", "('C',_2,_0) -> ('D',_(2,_'read0'),_1) ('D',_(2,_'read0'),_0)\r\n", "('c',_2,_0) -> ('d',_(2,_'read0'),_1) ('d',_(2,_'read0'),_0)\r\n", "('S',_2,_0) -> ('T',_(2,_'read0'),_1) ('T',_(2,_'read0'),_0)\r\n", "('s',_2,_0) -> ('t',_(2,_'read0'),_1) ('t',_(2,_'read0'),_0)\r\n", "('D',_2,_0) -> x ('A',_2,_0) x\r\n", "('d',_2,_0) -> ('α',_2,_0) x\r\n", "('T',_2,_0) -> ('B',_2,_0) x\r\n", "('t',_2,_0) -> ('β',_2,_0) x\r\n", "('D',_(2,_'read0'),_0) -> x ('A',_(2,_'read0'),_0) x\r\n", "('d',_(2,_'read0'),_0) -> ('α',_(2,_'read0'),_0) x\r\n", "('T',_(2,_'read0'),_0) -> ('B',_(2,_'read0'),_0) x\r\n", "('t',_(2,_'read0'),_0) -> ('β',_(2,_'read0'),_0) x\r\n", "('D',_(2,_'write0',_'move-2'),_0) -> x ('A',_(2,_'write0',_'move-2'),_0) x\r\n", "('d',_(2,_'write0',_'move-2'),_0) -> ('α',_(2,_'write0',_'move-2'),_0) x\r\n", "('T',_(2,_'write0',_'move-2'),_0) -> ('B',_(2,_'write0',_'move-2'),_0) x\r\n", "('t',_(2,_'write0',_'move-2'),_0) -> ('β',_(2,_'write0',_'move-2'),_0) x\r\n", "('D',_(2,_'move-1'),_0) -> x ('A',_(2,_'move-1'),_0) x\r\n", "('d',_(2,_'move-1'),_0) -> ('α',_(2,_'move-1'),_0) x\r\n", "('T',_(2,_'move-1'),_0) -> ('B',_(2,_'move-1'),_0) x\r\n", "('t',_(2,_'move-1'),_0) -> ('β',_(2,_'move-1'),_0) x\r\n", "('D',_(2,_'move-1'),_1) -> ('A',_(2,_'move-1'),_1) x\r\n", "('d',_(2,_'move-1'),_1) -> ('α',_(2,_'move-1'),_1) x\r\n", "('T',_(2,_'move-1'),_1) -> ('B',_(2,_'move-1'),_1) x\r\n", "('t',_(2,_'move-1'),_1) -> ('β',_(2,_'move-1'),_1) x\r\n", "('A',_(2,_'read0'),_1) -> ('C',_(2,_'read0'),_1) x ('c',_(2,_'read0'),_1) x\r\n", "('α',_(2,_'read0'),_1) -> ('c',_(2,_'read0'),_1) x ('c',_(2,_'read0'),_1) x\r\n", "('B',_(2,_'read0'),_1) -> ('S',_(2,_'read0'),_1)\r\n", "('β',_(2,_'read0'),_1) -> ('s',_(2,_'read0'),_1)\r\n", "('C',_(2,_'read0'),_1) -> ('D',_2,_1) ('D',_2,_0)\r\n", "('c',_(2,_'read0'),_1) -> ('d',_2,_1) ('d',_2,_0)\r\n", "('S',_(2,_'read0'),_1) -> ('T',_2,_1) ('T',_2,_0)\r\n", "('s',_(2,_'read0'),_1) -> ('t',_2,_1) ('t',_2,_0)\r\n", "('D',_(2,_'read0'),_1) -> ('A',_(2,_'read0'),_1) x\r\n", "('d',_(2,_'read0'),_1) -> ('α',_(2,_'read0'),_1) x\r\n", "('T',_(2,_'read0'),_1) -> ('B',_(2,_'read0'),_1) x\r\n", "('t',_(2,_'read0'),_1) -> ('β',_(2,_'read0'),_1) x\r\n", "('A',_2,_1) -> ('C',_2,_1) x ('c',_2,_1) x\r\n", "('α',_2,_1) -> ('c',_2,_1) x ('c',_2,_1) x\r\n", "('B',_2,_1) -> ('S',_2,_1)\r\n", "('β',_2,_1) -> ('s',_2,_1)\r\n", "('C',_2,_1) -> ('D',_(2,_'read1'),_1) ('D',_(2,_'read1'),_0)\r\n", "('c',_2,_1) -> ('d',_(2,_'read1'),_1) ('d',_(2,_'read1'),_0)\r\n", "('S',_2,_1) -> ('T',_(2,_'read1'),_1) ('T',_(2,_'read1'),_0)\r\n", "('s',_2,_1) -> ('t',_(2,_'read1'),_1) ('t',_(2,_'read1'),_0)\r\n", "('D',_2,_1) -> ('A',_2,_1) x\r\n", "('d',_2,_1) -> ('α',_2,_1) x\r\n", "('T',_2,_1) -> ('B',_2,_1) x\r\n", "('t',_2,_1) -> ('β',_2,_1) x\r\n", "('A',_(2,_'read1'),_0) -> ('C',_(2,_'read1'),_0) x\r\n", "('α',_(2,_'read1'),_0) -> ('c',_(2,_'read1'),_0) x ('c',_(2,_'read1'),_0) x\r\n", "('B',_(2,_'read1'),_0) -> ('S',_(2,_'read1'),_0)\r\n", "('β',_(2,_'read1'),_0) -> ('s',_(2,_'read1'),_0)\r\n", "('C',_(2,_'read1'),_0) -> ('D',_3,_1) ('D',_3,_0)\r\n", "('c',_(2,_'read1'),_0) -> ('d',_3,_1) ('d',_3,_0)\r\n", "('S',_(2,_'read1'),_0) -> ('T',_3,_1) ('T',_3,_0)\r\n", "('s',_(2,_'read1'),_0) -> ('t',_3,_1) ('t',_3,_0)\r\n", "('D',_(2,_'read1'),_0) -> x ('A',_(2,_'read1'),_0) x\r\n", "('d',_(2,_'read1'),_0) -> ('α',_(2,_'read1'),_0) x\r\n", "('T',_(2,_'read1'),_0) -> ('B',_(2,_'read1'),_0) x\r\n", "('t',_(2,_'read1'),_0) -> ('β',_(2,_'read1'),_0) x\r\n", "('A',_3,_0) -> ('C',_3,_0) x\r\n", "('α',_3,_0) -> ('c',_3,_0) x ('c',_3,_0) x\r\n", "('B',_3,_0) -> ('S',_3,_0)\r\n", "('β',_3,_0) -> ('s',_3,_0)\r\n", "('C',_3,_0) -> ('D',_(3,_'read0'),_1) ('D',_(3,_'read0'),_0)\r\n", "('c',_3,_0) -> ('d',_(3,_'read0'),_1) ('d',_(3,_'read0'),_0)\r\n", "('S',_3,_0) -> ('T',_(3,_'read0'),_1) ('T',_(3,_'read0'),_0)\r\n", "('s',_3,_0) -> ('t',_(3,_'read0'),_1) ('t',_(3,_'read0'),_0)\r\n", "('D',_3,_0) -> x ('A',_3,_0) x\r\n", "('d',_3,_0) -> ('α',_3,_0) x\r\n", "('T',_3,_0) -> ('B',_3,_0) x\r\n", "('t',_3,_0) -> ('β',_3,_0) x\r\n", "('A',_(3,_'read0'),_1) -> ('C',_(3,_'read0'),_1) x ('c',_(3,_'read0'),_1) x\r\n", "('α',_(3,_'read0'),_1) -> ('c',_(3,_'read0'),_1) x ('c',_(3,_'read0'),_1) x\r\n", "('B',_(3,_'read0'),_1) -> ('S',_(3,_'read0'),_1)\r\n", "('β',_(3,_'read0'),_1) -> ('s',_(3,_'read0'),_1)\r\n", "('C',_(3,_'read0'),_1) -> ('D',_3,_1) ('D',_3,_0)\r\n", "('c',_(3,_'read0'),_1) -> ('d',_3,_1) ('d',_3,_0)\r\n", "('S',_(3,_'read0'),_1) -> ('T',_3,_1) ('T',_3,_0)\r\n", "('s',_(3,_'read0'),_1) -> ('t',_3,_1) ('t',_3,_0)\r\n", "('D',_(3,_'read0'),_1) -> ('A',_(3,_'read0'),_1) x\r\n", "('d',_(3,_'read0'),_1) -> ('α',_(3,_'read0'),_1) x\r\n", "('T',_(3,_'read0'),_1) -> ('B',_(3,_'read0'),_1) x\r\n", "('t',_(3,_'read0'),_1) -> ('β',_(3,_'read0'),_1) x\r\n", "('A',_3,_1) -> ('C',_3,_1) x ('c',_3,_1) x\r\n", "('α',_3,_1) -> ('c',_3,_1) x ('c',_3,_1) x\r\n", "('B',_3,_1) -> ('S',_3,_1)\r\n", "('β',_3,_1) -> ('s',_3,_1)\r\n", "('C',_3,_1) -> ('D',_(3,_'read1'),_1) ('D',_(3,_'read1'),_0)\r\n", "('c',_3,_1) -> ('d',_(3,_'read1'),_1) ('d',_(3,_'read1'),_0)\r\n", "('S',_3,_1) -> ('T',_(3,_'read1'),_1) ('T',_(3,_'read1'),_0)\r\n", "('s',_3,_1) -> ('t',_(3,_'read1'),_1) ('t',_(3,_'read1'),_0)\r\n", "('D',_3,_1) -> ('A',_3,_1) x\r\n", "('d',_3,_1) -> ('α',_3,_1) x\r\n", "('T',_3,_1) -> ('B',_3,_1) x\r\n", "('t',_3,_1) -> ('β',_3,_1) x\r\n", "('D',_(3,_'read1'),_0) -> x ('A',_(3,_'read1'),_0) x\r\n", "('d',_(3,_'read1'),_0) -> ('α',_(3,_'read1'),_0) x\r\n", "('T',_(3,_'read1'),_0) -> ('B',_(3,_'read1'),_0) x\r\n", "('t',_(3,_'read1'),_0) -> ('β',_(3,_'read1'),_0) x\r\n", "('A',_(3,_'write0',_'move+2'),_1) -> ('C',_(3,_'write0',_'move+2'),_1) x\r\n", "('α',_(3,_'write0',_'move+2'),_1) -> ('c',_(3,_'write0',_'move+2'),_1) x ('c',_(3,_'write0',_'move+2'),_1) x\r\n", "('B',_(3,_'write0',_'move+2'),_1) -> ('S',_(3,_'write0',_'move+2'),_1)\r\n", "('β',_(3,_'write0',_'move+2'),_1) -> ('s',_(3,_'write0',_'move+2'),_1)\r\n", "('C',_(3,_'write0',_'move+2'),_1) -> ('D',_(3,_'move+1'),_1) ('D',_(3,_'move+1'),_0)\r\n", "('c',_(3,_'write0',_'move+2'),_1) -> ('d',_(3,_'move+1'),_1) ('d',_(3,_'move+1'),_0)\r\n", "('S',_(3,_'write0',_'move+2'),_1) -> ('T',_(3,_'move+1'),_1) ('T',_(3,_'move+1'),_0)\r\n", "('s',_(3,_'write0',_'move+2'),_1) -> ('t',_(3,_'move+1'),_1) ('t',_(3,_'move+1'),_0)\r\n", "('D',_(3,_'write0',_'move+2'),_1) -> ('A',_(3,_'write0',_'move+2'),_1) x\r\n", "('d',_(3,_'write0',_'move+2'),_1) -> ('α',_(3,_'write0',_'move+2'),_1) x\r\n", "('T',_(3,_'write0',_'move+2'),_1) -> ('B',_(3,_'write0',_'move+2'),_1) x\r\n", "('t',_(3,_'write0',_'move+2'),_1) -> ('β',_(3,_'write0',_'move+2'),_1) x\r\n", "('A',_(3,_'move+1'),_1) -> ('C',_(3,_'move+1'),_1) x ('c',_(3,_'move+1'),_1) x\r\n", "('α',_(3,_'move+1'),_1) -> ('c',_(3,_'move+1'),_1) x ('c',_(3,_'move+1'),_1) x\r\n", "('B',_(3,_'move+1'),_1) -> ('S',_(3,_'move+1'),_1)\r\n", "('β',_(3,_'move+1'),_1) -> ('s',_(3,_'move+1'),_1)\r\n", "('C',_(3,_'move+1'),_1) -> ('D',_2,_1) ('D',_2,_0)\r\n", "('c',_(3,_'move+1'),_1) -> ('d',_2,_1) ('d',_2,_0)\r\n", "('S',_(3,_'move+1'),_1) -> ('T',_2,_1) ('T',_2,_0)\r\n", "('s',_(3,_'move+1'),_1) -> ('t',_2,_1) ('t',_2,_0)\r\n", "('D',_(3,_'move+1'),_1) -> ('A',_(3,_'move+1'),_1) x\r\n", "('d',_(3,_'move+1'),_1) -> ('α',_(3,_'move+1'),_1) x\r\n", "('T',_(3,_'move+1'),_1) -> ('B',_(3,_'move+1'),_1) x\r\n", "('t',_(3,_'move+1'),_1) -> ('β',_(3,_'move+1'),_1) x\r\n", "('A',_4,_0) -> ('C',_4,_0) x\r\n", "('α',_4,_0) -> ('c',_4,_0) x ('c',_4,_0) x\r\n", "('B',_4,_0) -> ('S',_4,_0)\r\n", "('β',_4,_0) -> ('s',_4,_0)\r\n", "('C',_4,_0) -> ('D',_(4,_'read0'),_1) ('D',_(4,_'read0'),_0)\r\n", "('c',_4,_0) -> ('d',_(4,_'read0'),_1) ('d',_(4,_'read0'),_0)\r\n", "('S',_4,_0) -> ('T',_(4,_'read0'),_1) ('T',_(4,_'read0'),_0)\r\n", "('s',_4,_0) -> ('t',_(4,_'read0'),_1) ('t',_(4,_'read0'),_0)\r\n", "('D',_4,_0) -> x ('A',_4,_0) x\r\n", "('d',_4,_0) -> ('α',_4,_0) x\r\n", "('T',_4,_0) -> ('B',_4,_0) x\r\n", "('t',_4,_0) -> ('β',_4,_0) x\r\n", "('A',_(4,_'read0'),_0) -> ('C',_(4,_'read0'),_0) x\r\n", "('α',_(4,_'read0'),_0) -> ('c',_(4,_'read0'),_0) x ('c',_(4,_'read0'),_0) x\r\n", "('B',_(4,_'read0'),_0) -> ('S',_(4,_'read0'),_0)\r\n", "('β',_(4,_'read0'),_0) -> ('s',_(4,_'read0'),_0)\r\n", "('C',_(4,_'read0'),_0) -> ('D',_1,_1) ('D',_1,_0)\r\n", "('c',_(4,_'read0'),_0) -> ('d',_1,_1) ('d',_1,_0)\r\n", "('S',_(4,_'read0'),_0) -> ('T',_1,_1) ('T',_1,_0)\r\n", "('s',_(4,_'read0'),_0) -> ('t',_1,_1) ('t',_1,_0)\r\n", "('D',_(4,_'read0'),_0) -> x ('A',_(4,_'read0'),_0) x\r\n", "('d',_(4,_'read0'),_0) -> ('α',_(4,_'read0'),_0) x\r\n", "('T',_(4,_'read0'),_0) -> ('B',_(4,_'read0'),_0) x\r\n", "('t',_(4,_'read0'),_0) -> ('β',_(4,_'read0'),_0) x\r\n", "('D',_(4,_'read0'),_1) -> ('A',_(4,_'read0'),_1) x\r\n", "('d',_(4,_'read0'),_1) -> ('α',_(4,_'read0'),_1) x\r\n", "('T',_(4,_'read0'),_1) -> ('B',_(4,_'read0'),_1) x\r\n", "('t',_(4,_'read0'),_1) -> ('β',_(4,_'read0'),_1) x\r\n", "('D',_(4,_'write0',_'move-2'),_0) -> x ('A',_(4,_'write0',_'move-2'),_0) x\r\n", "('d',_(4,_'write0',_'move-2'),_0) -> ('α',_(4,_'write0',_'move-2'),_0) x\r\n", "('T',_(4,_'write0',_'move-2'),_0) -> ('B',_(4,_'write0',_'move-2'),_0) x\r\n", "('t',_(4,_'write0',_'move-2'),_0) -> ('β',_(4,_'write0',_'move-2'),_0) x\r\n", "('D',_(4,_'move-1'),_0) -> x ('A',_(4,_'move-1'),_0) x\r\n", "('d',_(4,_'move-1'),_0) -> ('α',_(4,_'move-1'),_0) x\r\n", "('T',_(4,_'move-1'),_0) -> ('B',_(4,_'move-1'),_0) x\r\n", "('t',_(4,_'move-1'),_0) -> ('β',_(4,_'move-1'),_0) x\r\n", "('D',_(4,_'move-1'),_1) -> ('A',_(4,_'move-1'),_1) x\r\n", "('d',_(4,_'move-1'),_1) -> ('α',_(4,_'move-1'),_1) x\r\n", "('T',_(4,_'move-1'),_1) -> ('B',_(4,_'move-1'),_1) x\r\n", "('t',_(4,_'move-1'),_1) -> ('β',_(4,_'move-1'),_1) x\r\n", "('A',_4,_1) -> ('C',_4,_1) x ('c',_4,_1) x\r\n", "('α',_4,_1) -> ('c',_4,_1) x ('c',_4,_1) x\r\n", "('B',_4,_1) -> ('S',_4,_1)\r\n", "('β',_4,_1) -> ('s',_4,_1)\r\n", "('C',_4,_1) -> ('D',_(4,_'read1'),_1) ('D',_(4,_'read1'),_0)\r\n", "('c',_4,_1) -> ('d',_(4,_'read1'),_1) ('d',_(4,_'read1'),_0)\r\n", "('S',_4,_1) -> ('T',_(4,_'read1'),_1) ('T',_(4,_'read1'),_0)\r\n", "('s',_4,_1) -> ('t',_(4,_'read1'),_1) ('t',_(4,_'read1'),_0)\r\n", "('D',_4,_1) -> ('A',_4,_1) x\r\n", "('d',_4,_1) -> ('α',_4,_1) x\r\n", "('T',_4,_1) -> ('B',_4,_1) x\r\n", "('t',_4,_1) -> ('β',_4,_1) x\r\n", "('D',_(4,_'read1'),_0) -> x ('A',_(4,_'read1'),_0) x\r\n", "('d',_(4,_'read1'),_0) -> ('α',_(4,_'read1'),_0) x\r\n", "('T',_(4,_'read1'),_0) -> ('B',_(4,_'read1'),_0) x\r\n", "('t',_(4,_'read1'),_0) -> ('β',_(4,_'read1'),_0) x\r\n", "('D',_(4,_'write1',_'move-2'),_1) -> ('A',_(4,_'write1',_'move-2'),_1) x\r\n", "('d',_(4,_'write1',_'move-2'),_1) -> ('α',_(4,_'write1',_'move-2'),_1) x\r\n", "('T',_(4,_'write1',_'move-2'),_1) -> ('B',_(4,_'write1',_'move-2'),_1) x\r\n", "('t',_(4,_'write1',_'move-2'),_1) -> ('β',_(4,_'write1',_'move-2'),_1) x\r\n", "(\"S'\",_0,_1) -> ('B',_0,_1) x\r\n", "(\"s'\",_0,_1) -> ('β',_0,_1) x\r\n", "('A',_(0,_'read1'),_0) -> ('C',_(0,_'read1'),_0)\r\n", "('α',_(0,_'read1'),_0) -> ('c',_(0,_'read1'),_0)\r\n", "('B',_(0,_'read1'),_0) -> (\"S'\",_(0,_'write0',_'move+2'),_1) (\"S'\",_(0,_'write0',_'move+2'),_0)\r\n", "('β',_(0,_'read1'),_0) -> (\"s'\",_(0,_'write0',_'move+2'),_1) (\"s'\",_(0,_'write0',_'move+2'),_0) (\"s'\",_(0,_'write0',_'move+2'),_1) (\"s'\",_(0,_'write0',_'move+2'),_0)\r\n", "('C',_(0,_'read1'),_0) -> ('A',_(0,_'write0',_'move+2'),_1) ('A',_(0,_'write0',_'move+2'),_0)\r\n", "('c',_(0,_'read1'),_0) -> ('α',_(0,_'write0',_'move+2'),_1) ('α',_(0,_'write0',_'move+2'),_0)\r\n", "(\"S'\",_(0,_'read1'),_0) -> x ('B',_(0,_'read1'),_0) x\r\n", "(\"s'\",_(0,_'read1'),_0) -> ('β',_(0,_'read1'),_0) x\r\n", "(\"S'\",_(0,_'write0',_'move+2'),_1) -> ('B',_(0,_'write0',_'move+2'),_1) x\r\n", "(\"s'\",_(0,_'write0',_'move+2'),_1) -> ('β',_(0,_'write0',_'move+2'),_1) x\r\n", "(\"S'\",_(0,_'move+1'),_0) -> x ('B',_(0,_'move+1'),_0) x\r\n", "(\"s'\",_(0,_'move+1'),_0) -> ('β',_(0,_'move+1'),_0) x\r\n", "(\"S'\",_1,_0) -> x ('B',_1,_0) x\r\n", "(\"s'\",_1,_0) -> ('β',_1,_0) x\r\n", "(\"S'\",_(1,_'read0'),_0) -> x ('B',_(1,_'read0'),_0) x\r\n", "(\"s'\",_(1,_'read0'),_0) -> ('β',_(1,_'read0'),_0) x\r\n", "(\"S'\",_(1,_'read0'),_1) -> ('B',_(1,_'read0'),_1) x\r\n", "(\"s'\",_(1,_'read0'),_1) -> ('β',_(1,_'read0'),_1) x\r\n", "(\"S'\",_1,_1) -> ('B',_1,_1) x\r\n", "(\"s'\",_1,_1) -> ('β',_1,_1) x\r\n", "('A',_(1,_'read1'),_0) -> ('C',_(1,_'read1'),_0)\r\n", "('α',_(1,_'read1'),_0) -> ('c',_(1,_'read1'),_0)\r\n", "('B',_(1,_'read1'),_0) -> (\"S'\",_(1,_'write0',_'move+2'),_1) (\"S'\",_(1,_'write0',_'move+2'),_0) (\"s'\",_(1,_'write0',_'move+2'),_1) (\"s'\",_(1,_'write0',_'move+2'),_0)\r\n", "('β',_(1,_'read1'),_0) -> (\"s'\",_(1,_'write0',_'move+2'),_1) (\"s'\",_(1,_'write0',_'move+2'),_0) (\"s'\",_(1,_'write0',_'move+2'),_1) (\"s'\",_(1,_'write0',_'move+2'),_0)\r\n", "('C',_(1,_'read1'),_0) -> ('A',_(1,_'write0',_'move+2'),_1) ('A',_(1,_'write0',_'move+2'),_0)\r\n", "('c',_(1,_'read1'),_0) -> ('α',_(1,_'write0',_'move+2'),_1) ('α',_(1,_'write0',_'move+2'),_0)\r\n", "(\"S'\",_(1,_'read1'),_0) -> x ('B',_(1,_'read1'),_0) x\r\n", "(\"s'\",_(1,_'read1'),_0) -> ('β',_(1,_'read1'),_0) x\r\n", "(\"S'\",_(1,_'write0',_'move+2'),_1) -> ('B',_(1,_'write0',_'move+2'),_1) x\r\n", "(\"s'\",_(1,_'write0',_'move+2'),_1) -> ('β',_(1,_'write0',_'move+2'),_1) x\r\n", "(\"S'\",_(1,_'move+1'),_1) -> ('B',_(1,_'move+1'),_1) x\r\n", "(\"s'\",_(1,_'move+1'),_1) -> ('β',_(1,_'move+1'),_1) x\r\n", "(\"S'\",_2,_0) -> x ('B',_2,_0) x\r\n", "(\"s'\",_2,_0) -> ('β',_2,_0) x\r\n", "('A',_(2,_'read0'),_0) -> ('C',_(2,_'read0'),_0)\r\n", "('α',_(2,_'read0'),_0) -> ('c',_(2,_'read0'),_0)\r\n", "('B',_(2,_'read0'),_0) -> (\"S'\",_(2,_'write0',_'move-2'),_1) (\"S'\",_(2,_'write0',_'move-2'),_0)\r\n", "('β',_(2,_'read0'),_0) -> (\"s'\",_(2,_'write0',_'move-2'),_1) (\"s'\",_(2,_'write0',_'move-2'),_0) (\"s'\",_(2,_'write0',_'move-2'),_1) (\"s'\",_(2,_'write0',_'move-2'),_0)\r\n", "('C',_(2,_'read0'),_0) -> ('A',_(2,_'write0',_'move-2'),_1) ('A',_(2,_'write0',_'move-2'),_0)\r\n", "('c',_(2,_'read0'),_0) -> ('α',_(2,_'write0',_'move-2'),_1) ('α',_(2,_'write0',_'move-2'),_0)\r\n", "(\"S'\",_(2,_'read0'),_0) -> x ('B',_(2,_'read0'),_0) x\r\n", "(\"s'\",_(2,_'read0'),_0) -> ('β',_(2,_'read0'),_0) x\r\n", "('A',_(2,_'write0',_'move-2'),_0) -> ('C',_(2,_'write0',_'move-2'),_0)\r\n", "('α',_(2,_'write0',_'move-2'),_0) -> ('c',_(2,_'write0',_'move-2'),_0)\r\n", "('B',_(2,_'write0',_'move-2'),_0) -> (\"S'\",_(2,_'move-1'),_1) (\"S'\",_(2,_'move-1'),_0)\r\n", "('β',_(2,_'write0',_'move-2'),_0) -> (\"s'\",_(2,_'move-1'),_1) (\"s'\",_(2,_'move-1'),_0) (\"s'\",_(2,_'move-1'),_1) (\"s'\",_(2,_'move-1'),_0)\r\n", "('C',_(2,_'write0',_'move-2'),_0) -> ('A',_(2,_'move-1'),_1) ('A',_(2,_'move-1'),_0)\r\n", "('c',_(2,_'write0',_'move-2'),_0) -> ('α',_(2,_'move-1'),_1) ('α',_(2,_'move-1'),_0)\r\n", "(\"S'\",_(2,_'write0',_'move-2'),_0) -> x ('B',_(2,_'write0',_'move-2'),_0) x\r\n", "(\"s'\",_(2,_'write0',_'move-2'),_0) -> ('β',_(2,_'write0',_'move-2'),_0) x\r\n", "('A',_(2,_'move-1'),_0) -> ('C',_(2,_'move-1'),_0)\r\n", "('α',_(2,_'move-1'),_0) -> ('c',_(2,_'move-1'),_0)\r\n", "('B',_(2,_'move-1'),_0) -> (\"S'\",_4,_1) (\"S'\",_4,_0)\r\n", "('β',_(2,_'move-1'),_0) -> (\"s'\",_4,_1) (\"s'\",_4,_0) (\"s'\",_4,_1) (\"s'\",_4,_0)\r\n", "('C',_(2,_'move-1'),_0) -> ('A',_4,_1) ('A',_4,_0)\r\n", "('c',_(2,_'move-1'),_0) -> ('α',_4,_1) ('α',_4,_0)\r\n", "(\"S'\",_(2,_'move-1'),_0) -> x ('B',_(2,_'move-1'),_0) x\r\n", "(\"s'\",_(2,_'move-1'),_0) -> ('β',_(2,_'move-1'),_0) x\r\n", "('A',_(2,_'move-1'),_1) -> ('C',_(2,_'move-1'),_1)\r\n", "('α',_(2,_'move-1'),_1) -> ('c',_(2,_'move-1'),_1)\r\n", "('B',_(2,_'move-1'),_1) -> (\"S'\",_4,_1) (\"S'\",_4,_0) (\"s'\",_4,_1) (\"s'\",_4,_0)\r\n", "('β',_(2,_'move-1'),_1) -> (\"s'\",_4,_1) (\"s'\",_4,_0) (\"s'\",_4,_1) (\"s'\",_4,_0)\r\n", "('C',_(2,_'move-1'),_1) -> ('A',_4,_1) ('A',_4,_0)\r\n", "('c',_(2,_'move-1'),_1) -> ('α',_4,_1) ('α',_4,_0)\r\n", "(\"S'\",_(2,_'move-1'),_1) -> ('B',_(2,_'move-1'),_1) x\r\n", "(\"s'\",_(2,_'move-1'),_1) -> ('β',_(2,_'move-1'),_1) x\r\n", "(\"S'\",_(2,_'read0'),_1) -> ('B',_(2,_'read0'),_1) x\r\n", "(\"s'\",_(2,_'read0'),_1) -> ('β',_(2,_'read0'),_1) x\r\n", "(\"S'\",_2,_1) -> ('B',_2,_1) x\r\n", "(\"s'\",_2,_1) -> ('β',_2,_1) x\r\n", "(\"S'\",_(2,_'read1'),_0) -> x ('B',_(2,_'read1'),_0) x\r\n", "(\"s'\",_(2,_'read1'),_0) -> ('β',_(2,_'read1'),_0) x\r\n", "(\"S'\",_3,_0) -> x ('B',_3,_0) x\r\n", "(\"s'\",_3,_0) -> ('β',_3,_0) x\r\n", "(\"S'\",_(3,_'read0'),_1) -> ('B',_(3,_'read0'),_1) x\r\n", "(\"s'\",_(3,_'read0'),_1) -> ('β',_(3,_'read0'),_1) x\r\n", "(\"S'\",_3,_1) -> ('B',_3,_1) x\r\n", "(\"s'\",_3,_1) -> ('β',_3,_1) x\r\n", "('A',_(3,_'read1'),_0) -> ('C',_(3,_'read1'),_0)\r\n", "('α',_(3,_'read1'),_0) -> ('c',_(3,_'read1'),_0)\r\n", "('B',_(3,_'read1'),_0) -> (\"S'\",_(3,_'write0',_'move+2'),_1) (\"S'\",_(3,_'write0',_'move+2'),_0) (\"s'\",_(3,_'write0',_'move+2'),_1) (\"s'\",_(3,_'write0',_'move+2'),_0)\r\n", "('β',_(3,_'read1'),_0) -> (\"s'\",_(3,_'write0',_'move+2'),_1) (\"s'\",_(3,_'write0',_'move+2'),_0) (\"s'\",_(3,_'write0',_'move+2'),_1) (\"s'\",_(3,_'write0',_'move+2'),_0)\r\n", "('C',_(3,_'read1'),_0) -> ('A',_(3,_'write0',_'move+2'),_1) ('A',_(3,_'write0',_'move+2'),_0)\r\n", "('c',_(3,_'read1'),_0) -> ('α',_(3,_'write0',_'move+2'),_1) ('α',_(3,_'write0',_'move+2'),_0)\r\n", "(\"S'\",_(3,_'read1'),_0) -> x ('B',_(3,_'read1'),_0) x\r\n", "(\"s'\",_(3,_'read1'),_0) -> ('β',_(3,_'read1'),_0) x\r\n", "(\"S'\",_(3,_'write0',_'move+2'),_1) -> ('B',_(3,_'write0',_'move+2'),_1) x\r\n", "(\"s'\",_(3,_'write0',_'move+2'),_1) -> ('β',_(3,_'write0',_'move+2'),_1) x\r\n", "(\"S'\",_(3,_'move+1'),_1) -> ('B',_(3,_'move+1'),_1) x\r\n", "(\"s'\",_(3,_'move+1'),_1) -> ('β',_(3,_'move+1'),_1) x\r\n", "(\"S'\",_4,_0) -> x ('B',_4,_0) x\r\n", "(\"s'\",_4,_0) -> ('β',_4,_0) x\r\n", "(\"S'\",_(4,_'read0'),_0) -> x ('B',_(4,_'read0'),_0) x\r\n", "(\"s'\",_(4,_'read0'),_0) -> ('β',_(4,_'read0'),_0) x\r\n", "('A',_(4,_'read0'),_1) -> ('C',_(4,_'read0'),_1)\r\n", "('α',_(4,_'read0'),_1) -> ('c',_(4,_'read0'),_1)\r\n", "('B',_(4,_'read0'),_1) -> (\"S'\",_(4,_'write0',_'move-2'),_1) (\"S'\",_(4,_'write0',_'move-2'),_0) (\"s'\",_(4,_'write0',_'move-2'),_1) (\"s'\",_(4,_'write0',_'move-2'),_0)\r\n", "('β',_(4,_'read0'),_1) -> (\"s'\",_(4,_'write0',_'move-2'),_1) (\"s'\",_(4,_'write0',_'move-2'),_0) (\"s'\",_(4,_'write0',_'move-2'),_1) (\"s'\",_(4,_'write0',_'move-2'),_0)\r\n", "('C',_(4,_'read0'),_1) -> ('A',_(4,_'write0',_'move-2'),_1) ('A',_(4,_'write0',_'move-2'),_0)\r\n", "('c',_(4,_'read0'),_1) -> ('α',_(4,_'write0',_'move-2'),_1) ('α',_(4,_'write0',_'move-2'),_0)\r\n", "(\"S'\",_(4,_'read0'),_1) -> ('B',_(4,_'read0'),_1) x\r\n", "(\"s'\",_(4,_'read0'),_1) -> ('β',_(4,_'read0'),_1) x\r\n", "('A',_(4,_'write0',_'move-2'),_0) -> ('C',_(4,_'write0',_'move-2'),_0)\r\n", "('α',_(4,_'write0',_'move-2'),_0) -> ('c',_(4,_'write0',_'move-2'),_0)\r\n", "('B',_(4,_'write0',_'move-2'),_0) -> (\"S'\",_(4,_'move-1'),_1) (\"S'\",_(4,_'move-1'),_0)\r\n", "('β',_(4,_'write0',_'move-2'),_0) -> (\"s'\",_(4,_'move-1'),_1) (\"s'\",_(4,_'move-1'),_0) (\"s'\",_(4,_'move-1'),_1) (\"s'\",_(4,_'move-1'),_0)\r\n", "('C',_(4,_'write0',_'move-2'),_0) -> ('A',_(4,_'move-1'),_1) ('A',_(4,_'move-1'),_0)\r\n", "('c',_(4,_'write0',_'move-2'),_0) -> ('α',_(4,_'move-1'),_1) ('α',_(4,_'move-1'),_0)\r\n", "(\"S'\",_(4,_'write0',_'move-2'),_0) -> x ('B',_(4,_'write0',_'move-2'),_0) x\r\n", "(\"s'\",_(4,_'write0',_'move-2'),_0) -> ('β',_(4,_'write0',_'move-2'),_0) x\r\n", "('A',_(4,_'move-1'),_0) -> ('C',_(4,_'move-1'),_0)\r\n", "('α',_(4,_'move-1'),_0) -> ('c',_(4,_'move-1'),_0)\r\n", "('B',_(4,_'move-1'),_0) -> (\"S'\",_4,_1) (\"S'\",_4,_0)\r\n", "('β',_(4,_'move-1'),_0) -> (\"s'\",_4,_1) (\"s'\",_4,_0) (\"s'\",_4,_1) (\"s'\",_4,_0)\r\n", "('C',_(4,_'move-1'),_0) -> ('A',_4,_1) ('A',_4,_0)\r\n", "('c',_(4,_'move-1'),_0) -> ('α',_4,_1) ('α',_4,_0)\r\n", "(\"S'\",_(4,_'move-1'),_0) -> x ('B',_(4,_'move-1'),_0) x\r\n", "(\"s'\",_(4,_'move-1'),_0) -> ('β',_(4,_'move-1'),_0) x\r\n", "('A',_(4,_'move-1'),_1) -> ('C',_(4,_'move-1'),_1)\r\n", "('α',_(4,_'move-1'),_1) -> ('c',_(4,_'move-1'),_1)\r\n", "('B',_(4,_'move-1'),_1) -> (\"S'\",_4,_1) (\"S'\",_4,_0) (\"s'\",_4,_1) (\"s'\",_4,_0)\r\n", "('β',_(4,_'move-1'),_1) -> (\"s'\",_4,_1) (\"s'\",_4,_0) (\"s'\",_4,_1) (\"s'\",_4,_0)\r\n", "('C',_(4,_'move-1'),_1) -> ('A',_4,_1) ('A',_4,_0)\r\n", "('c',_(4,_'move-1'),_1) -> ('α',_4,_1) ('α',_4,_0)\r\n", "(\"S'\",_(4,_'move-1'),_1) -> ('B',_(4,_'move-1'),_1) x\r\n", "(\"s'\",_(4,_'move-1'),_1) -> ('β',_(4,_'move-1'),_1) x\r\n", "(\"S'\",_4,_1) -> ('B',_4,_1) x\r\n", "(\"s'\",_4,_1) -> ('β',_4,_1) x\r\n", "('A',_(4,_'read1'),_0) -> ('C',_(4,_'read1'),_0)\r\n", "('α',_(4,_'read1'),_0) -> ('c',_(4,_'read1'),_0)\r\n", "('B',_(4,_'read1'),_0) -> (\"S'\",_(4,_'write1',_'move-2'),_1) (\"S'\",_(4,_'write1',_'move-2'),_0)\r\n", "('β',_(4,_'read1'),_0) -> (\"s'\",_(4,_'write1',_'move-2'),_1) (\"s'\",_(4,_'write1',_'move-2'),_0) (\"s'\",_(4,_'write1',_'move-2'),_1) (\"s'\",_(4,_'write1',_'move-2'),_0)\r\n", "('C',_(4,_'read1'),_0) -> ('A',_(4,_'write1',_'move-2'),_1) ('A',_(4,_'write1',_'move-2'),_0)\r\n", "('c',_(4,_'read1'),_0) -> ('α',_(4,_'write1',_'move-2'),_1) ('α',_(4,_'write1',_'move-2'),_0)\r\n", "(\"S'\",_(4,_'read1'),_0) -> x ('B',_(4,_'read1'),_0) x\r\n", "(\"s'\",_(4,_'read1'),_0) -> ('β',_(4,_'read1'),_0) x\r\n", "('A',_(4,_'write1',_'move-2'),_1) -> ('C',_(4,_'write1',_'move-2'),_1)\r\n", "('α',_(4,_'write1',_'move-2'),_1) -> ('c',_(4,_'write1',_'move-2'),_1)\r\n", "('B',_(4,_'write1',_'move-2'),_1) -> (\"S'\",_(4,_'move-1'),_1) (\"S'\",_(4,_'move-1'),_0) (\"s'\",_(4,_'move-1'),_1) (\"s'\",_(4,_'move-1'),_0)\r\n", "('β',_(4,_'write1',_'move-2'),_1) -> (\"s'\",_(4,_'move-1'),_1) (\"s'\",_(4,_'move-1'),_0) (\"s'\",_(4,_'move-1'),_1) (\"s'\",_(4,_'move-1'),_0)\r\n", "('C',_(4,_'write1',_'move-2'),_1) -> ('A',_(4,_'move-1'),_1) ('A',_(4,_'move-1'),_0)\r\n", "('c',_(4,_'write1',_'move-2'),_1) -> ('α',_(4,_'move-1'),_1) ('α',_(4,_'move-1'),_0)\r\n", "(\"S'\",_(4,_'write1',_'move-2'),_1) -> ('B',_(4,_'write1',_'move-2'),_1) x\r\n", "(\"s'\",_(4,_'write1',_'move-2'),_1) -> ('β',_(4,_'write1',_'move-2'),_1) x\r\n" ] } ], "source": [ "%cat tm-m2.tag" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This 2-tag system, together with the input string $\\texttt{0}$, are encoded into a string with 6.5 million symbols. Running the UTM is very slow. I had to write a special simulator that enables it to \"fast-forward\" in certain cases, and found that it accepts after **46 trillion moves**." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The real numbers are uncountable\n", "\n", "Now we shift for the moment to a totally different topic, the uncountability of the real numbers. The concept of an uncountable infinity, and the associated proof technique of diagonalization, was discovered by Georg Cantor. Unfortunately, it also drove him crazy.\n", "\n", "
\n", "

Read subsection \"The Diagonalization Method,\" from page 202 to the table at the top of page 206.

\n", "

Watch W9E2: Diagonalization.

\n", "
\n", "\n", "Suppose that there are countably many real numbers. Then there is a way to enumerate all the real numbers in $[0,1)$. We can write the digits after the decimal point in a table like this:\n", "\n", "| | | | | | |\n", "|-----|-|-|-|-|--------|\n", "|$x_1$|.1|4|1|5|$\\cdots$|\n", "|$x_2$|.5|5|5|5|$\\cdots$|\n", "|$x_3$|.1|2|3|4|$\\cdots$|\n", "|$x_4$|.5|0|0|0|$\\cdots$|\n", "|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$|\n", "\n", "Then we can form a new real number by taking the diagonal and changing every digit (but avoid 0 and 9, as explained in the book):\n", "\n", "| | | | | | |\n", "|-----|-|-|-|-|--------|\n", "|$x_1$|.**1**|4|1|5|$\\cdots$|\n", "|$x_2$|.5|**5**|5|5|$\\cdots$|\n", "|$x_3$|.1|2|**3**|4|$\\cdots$|\n", "|$x_4$|.5|0|0|**0**|$\\cdots$|\n", "|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$|\n", "|$x'$|.2|6|4|1|$\\cdots$|\n", "\n", "\n", "This new number cannot be equal to any row of the table, which is a contradiction." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### There are uncountably many languages\n", "\n", "We can adapt Cantor's argument for the uncountability of the reals to an argument for the uncountability of the set of all languages. Our proof is different from the book's proof of Corollary 4.18 (page 206), and I think it should be okay just to read ours.\n", "\n", "Suppose that there are countably many languages over a finite alphabet $\\Sigma$. Then we can number them $L_1, L_2, L_3, \\ldots$. \n", "\n", "We can number all strings in $\\Sigma^\\ast$ in [shortlex order](https://en.wikipedia.org/wiki/Shortlex_order). Call the $j$th string in this ordering $w^{(j)}$. (We use this notation to avoid confusion with the notation $w_j$ for the $j$th symbol of $w$.)\n", "\n", "Imagine a big table whose $i$th row is $L_i$ and whose $j$th column is $w^{(j)}$, and cell $(i,j)$ says whether $w^{(j)} \\in L_i$. For illustration's sake, we assume $\\Sigma = \\{\\mathtt{0}, \\mathtt{1}\\}$. \n", "\n", "| | $\\varepsilon$ | $\\mathtt{0}$ |$\\mathtt{1}$ | $\\mathtt{00}$ | $\\cdots$ |\n", "|-----|-------|-------|-------|-------|--------|\n", "|$L_1$| _no_ | _yes_ | _no_ | _yes_ | $\\cdots$ |\n", "|$L_2$| _no_ | _yes_ | _yes_ | _no_ | $\\cdots$ |\n", "|$L_3$| _yes_ | _no_ | _yes_ | _no_ | $\\cdots$ |\n", "|$L_4$| _no_ | _no_ | _no_ | _yes_ | $\\cdots$ |\n", "|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$| |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we can form a new language by taking all the diagonal entries of this table and inverting them (yes to no and no to yes):\n", "\n", "| | $\\varepsilon$ | $\\mathtt{0}$ |$\\mathtt{1}$ | $\\mathtt{00}$ | $\\cdots$ |\n", "|-----|-------|-------|-------|-------|--------|\n", "|$L_1$| **no** | _yes_ | _no_ | _yes_ | $\\cdots$ |\n", "|$L_2$| _no_ | **yes** | _yes_ | _no_ | $\\cdots$ |\n", "|$L_3$| _yes_ | _no_ | **yes** | _no_ | $\\cdots$ |\n", "|$L_4$| _no_ | _no_ | _no_ | **yes** | $\\cdots$ |\n", "|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$| |\n", "|$L'$| _yes_ | _no_ | _no_ | _no_ | $\\cdots$ |\n", "\n", "More formally,\n", "$$L' = \\{ w^{(i)} \\mid w^{(i)} \\not\\in L_i \\}.$$\n", "\n", "This language $L'$ cannot be equal to any row of the table, because for any $i$, either $w^{(i)} \\in L'$ but $w^{(i)} \\not\\in L_i$, or $w^{(i)} \\not\\in L'$ but $w^{(i)} \\in L_i$.\n", "\n", "But the table supposedly contains all possible languages, which is a contradiction. Therefore there are uncountably many languages." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Thursday\n", "\n", "Today's topic is undecidability: is there such a thing as a language that can't be decided by a Turing machine (and therefore, by any computer program as we know it)?\n", "\n", "The answer is yes, and not only so, but *almost all* languages are undecidable.\n", "\n", "
\n", "

Watch W9E3: Undecidable Languages.

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### There is an undecidable language\n", "\n", "Since Turing machines can be encoded as strings, there _is_ a way to number all possible Turing machines $M_1, M_2, M_3, \\ldots$ (e.g., sort their encodings in shortlex order and then number them consecutively). It follows that there are languages (in fact, almost all languages) which cannot be decided by any Turing machine. But we'd like a proof that explicitly constructs such a language.\n", "\n", "Imagine a big table whose $i$th row is $M_i$ and whose $j$th column is $w^{(j)}$, and cell $(i,j)$ says whether $w^{(j)} \\in \\mathcal{L}(M_i)$ (that is, it says \"yes\" if $M_i$ accepts $w^{(j)}$, but \"no\" if $M_i$ rejects _or_ loops on $w^{(j)}$.)\n", "\n", "| | $\\varepsilon$ | $\\mathtt{0}$ |$\\mathtt{1}$ | $\\mathtt{00}$ | $\\cdots$ |\n", "|-----|-------|-------|-------|-------|--------|\n", "|$M_1$| _no_ | _yes_ | _no_ | _yes_ | $\\cdots$ |\n", "|$M_2$| _no_ | _yes_ | _yes_ | _no_ | $\\cdots$ |\n", "|$M_3$| _yes_ | _no_ | _yes_ | _no_ | $\\cdots$ |\n", "|$M_4$| _no_ | _no_ | _no_ | _yes_ | $\\cdots$ |\n", "|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$| |\n", "\n", "We can again form a new language by taking all the diagonal entries of this table and inverting them:\n", "\n", "$$L_D = \\{w^{(i)} \\mid \\text{$M_i$ does not accept $w^{(i)}$}\\}$$\n", "\n", "And this language again cannot be equal to any row of the table, because for any $i$, either $w^{(i)} \\in L_D$ but $M_i$ does not accept $w^{(i)}$, or $w^{(i)} \\not\\in L_D$ but $M_i$ accepts $w^{(i)}$.\n", "\n", "This means that there is no such thing as a Turing machine that decides $L_D$. (In fact, there isn't even one that recognizes it.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The undecidable language $A_{\\mathsf{TM}}$\n", "\n", "The book's first example of an undecidable language is\n", "\n", "$$A_{\\mathsf{TM}} = \\{ \\langle M, w \\rangle \\mid \\text{$M$ accepts $w$} \\}.$$\n", "\n", "This language will be very useful for proving other undecidable languages. We can prove $A_{\\mathsf{TM}}$ undecidable by continuing our proof above. Suppose that there exists a decider $H$ that decides $A_{\\mathsf{TM}}$. \n", "\n", "Then we would be able to compute the value of any cell of the above table since $H$ is supposedly a decider. But that would enable us to define a decider for $L_D$. Namely, define a TM $D$ that, on input $w$, \n", "\n", "1. Find $i$ such that $w = w^{(i)}$.\n", "2. Construct machine $M_i$.\n", "3. Run $H$ on input $\\langle M_i, w^{(i)} \\rangle$.\n", "4. If $H$ accepts, *reject*, and if $H$ rejects, *accept*.\n", "\n", "But we know this is impossible, either by using the undecidability of $L_D$ as shown above, or we can repeat the argument again. If $D$ exists, then for some $i$, $D = M_i$. If $D$ accepts $w^{(i)}$, then (by the definition of $D$) we know that $H$ rejects $\\langle D, w^{(i)}\\rangle$, but (by the definition of $H$) it was supposed to accept. Similarly, if $D$ rejects $w^{(i)}$, then (by the definition of $D$) we know that $H$ accepts $\\langle D, w^{(i)}\\rangle$, but (by the definition of $H$) it was supposed to reject. Therefore, $D$ cannot exist, and $A_{\\mathsf{TM}}$ is undecidable.\n", "\n", "
\n", "

Read: If the above isn't clear, try the book's proof on pages 207–209.

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The halting problem\n", "\n", "
\n", "

The rest of this notebook can be read after Thursday's class.

\n", "

Watch W9E4: The Halting Problem.

\n", "
\n", "\n", "Most books use the following language as their first undecidable language:\n", "\n", "$$\\mathit{HALT}_{\\mathsf{TM}} = \\{ \\langle M, w \\rangle \\mid \\text{$M$ halts on $w$} \\}.$$\n", "\n", "This is probably the most well-known undecidable problem: Can you write a program that looks at another program $M$ and input $w$ and decides whether $M$ halts or loops on $w$?\n", "\n", "**Question:** Adapt the above diagonalization argument to prove that $\\mathit{HALT}_{\\mathsf{TM}}$ is undecidable.\n", "\n", "For fun, you can read Geoff Pullum's \"[Scooping the Loop Snooper](http://www.lel.ed.ac.uk/~gpullum/loopsnoop.html): A proof that the Halting Problem is undecidable.\"\n", "\n", "The following table may help. Unlike our proof above (and like Sipser's), the columns of the table are not the strings in shortlex order, but the encodings of $M_1, M_2, \\ldots$.\n", "\n", "| | $M_1$ | $M_2$ |$M_3$ | $M_4$ | $\\cdots$ | $Q$ | $\\cdots$ |\n", "|-----|-------|-------|-------|-------|--------|-|-|\n", "|$M_1$| _bad!_ | _good!_ | _bad!_ | _good!_ | $\\cdots$ | _good!_ | $\\cdots$ |\n", "|$M_2$| _bad!_ | _good!_ | _good!_ | _bad!_ | $\\cdots$ | _bad!_ | $\\cdots$ |\n", "|$M_3$| _good!_ | _bad!_ | _good!_ | _bad!_ | $\\cdots$ | _good!_ | $\\cdots$ |\n", "|$M_4$| _bad!_ | _bad!_ | _bad!_ | _good!_ | $\\cdots$ | _good!_ | $\\cdots$ |\n", "|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$|$\\vdots$| $\\ddots$ | _bad!_ | $\\cdots$ |\n", "|$Q$| _good!_ | _bad!_ | _bad!_ | _bad!_ | $\\cdots$ | ??? | $\\cdots$ |" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

Read the subsection \"A Turing-Unrecognizable Language.\"

\n", "
\n", "\n", "![image.png](attachment:image.png)" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "### A first look at reducibility\n", "\n", "Now that we've proven that one language ($A_{\\mathsf{TM}}$) is undecidable, we can use it to prove that other languages are undecidable.\n", "\n", "
\n", "

Read pages 215–217, up to \"via the diagonalization method.\"

\n", "
\n", "\n", "The first example is the halting problem $\\mathit{HALT}_{\\mathsf{TM}}$. In many textbooks (and the poem \"Scooping the Loop Snooper\"), the halting problem is actually the prototypical undecidable language, but Sipser does things a little differently.\n", "\n", "To prove that the halting problem is undecidable, you assume that it *is* decidable, that is, there is a TM $R$ that decides it. Then, you show that armed with such a TM, you could implement another TM, $S$, that decides $A_{\\mathsf{TM}}$, which is a contradiction because we know that $A_{\\mathsf{TM}}$ is undecidable.\n", "\n", "![image.png](attachment:image.png)\n", "\n", "Remember that the direction of the reduction is the opposite of what most people intuitively think of first. If you want to show that the halting problem is undecidable, you do _not_ reduce the halting problem to $A_{\\mathsf{TM}}$; you reduce $A_{\\mathsf{TM}}$ to the halting problem. To avoid confusion (and, you will see that the potential for confusion grows below), we give a nickname to each TM to help you remember which is which. Call $R$ the \"loop snooper,\" in homage to Pullum, and $S$ the \"universal decider\" (because it's a universal TM but it always halts).\n", "\n", "So, suppose that we had a TM $R$ (the loop snooper) that decides the halting problem $\\mathit{HALT}_{\\mathsf{TM}}$. Then, designing a universal decider $S$ would be easy: $S =$ \"On input $\\langle M, w\\rangle$,\n", "\n", "1. Use the loop snooper $R$ to check whether $M$ loops on $w$.\n", "2. If a loop is detected, *reject*.\n", "3. If no loop is detected, we can safely simulate $M$ on $w$.\n", "4. If it accepts, *accept*.\n", "5. If it rejects, *reject*.\n", "\n", "But last time we showed (by diagonalization) that the universal decider $S$ does not exist. Therefore, the loop snooper $R$ cannot exist either." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The Penrose-Lucas argument (optional)\n", "\n", "
\n", "

Watch (optional) W9E5: The Penrose-Lucas Argument.

\n", "
\n", "\n", "Turing machines were invented as a model of what it means for *humans*, not computing machines, to compute, and so a natural question is, can Turing machines serve as a model for *all* human reasoning? I want to present to you one argument for the \"no\" position. Turing called it \"the mathematical objection\" and it is usually known today as the Penrose-Lucas argument. This version, which is an interesting variation on the diagonalization argument for the undecidability of the halting problem, is due to Penrose and comes from [an article criticizing him](http://www.ihmc.us/users/phayes/pub/lafortehayesford.pdf). Although I agree with the conclusion, I don't agree with the argument -- what do you think about it?\n", "\n", "Let $R$ be a \"partial loop-snooper,\" a decider TM that detects _some_ cases of looping. That is, on input $\\langle M, w\\rangle$, if $R$ accepts, then $M$ loops on input $w$. But if $R$ rejects, it doesn't mean anything.\n", "\n", "Now we go through the usual diagonalization argument; the only difference is that it doesn't lead to a contradiction, but to a machine/input pair that is beyond $R$'s detection abilities. Assume an ordering $M_1, M_2, \\ldots$ on Turing machines and an ordering $w^{(1)}, w^{(2)}, \\ldots$ on strings. We can build a big table with the results of $R$ on all machines and inputs:\n", "\n", "| | $\\varepsilon$ | $\\mathtt{0}$ |$\\mathtt{1}$ | $\\mathtt{00}$ | $\\cdots$ |\n", "|:-|:------------|:-----------|:------------|:------------|:-------|\n", "|$M_1$| _don't know_ | _loops_ | _don't know_ | _loops_ | |\n", "|$M_2$| _don't know_ | _loops_ | _loops_ | _don't know_ | |\n", "|$M_3$| _loops_ | _don't know_ | _loops_ | _don't know_ | |\n", "|$M_4$| _don't know_ | _don't know_ | _don't know_ | _loops_ | |\n", "|$\\vdots$| | | | | | |\n", "\n", "We define $D$ to be the Turing machine that _does_ the opposite of the diagonal of this table. That is, on input $w$:\n", "\n", "1. Find $i$ such that $w = w^{(i)}$.\n", "2. Run $R$, the partial loop-snooper, on $\\langle M_i, w^{(i)}\\rangle$.\n", "3. If $R$ detected an infinite loop, _accept_.\n", "4. Otherwise, go into an infinite loop.\n", "\n", "Now, there must be an $i$ such that $D = M_i$. We claim that $D$ loops on $w^{(i)}$ but $R$ does not detect it. \n", "\n", "- For if $R$ accepts $\\langle D, w^{(i)}\\rangle$, then $D$ must not loop on $w^{(i)}$, but that would be a contradiction. \n", "- But if $R$ rejects $\\langle D, w^{(i)}\\rangle$, then $D$ must loop on $w^{(i)}$, which is *not* a contradiction. \n", "\n", "So, in fact, $D$ does loop on $w^{(i)}$, but $R$ does not detect it.\n", "\n", "It's critical that you understand the argument thus far before moving on.\n", "\n", "Suppose that you are equivalent to a Turing machine. You have a partial ability to detect looping. So it should be possible to construct a Turing machine $Y$ that accepts $\\langle M, w\\rangle$ in exactly those cases when you are able to detect that $M$ loops on input $w$.\n", "\n", "Then, by the above argument, there is a machine/input pair $\\langle D, w^{(i)}\\rangle$ that loops, but $Y$ rejects it. By the definition of $Y$, you are not able to detect that $\\langle D, w^{(i)}\\rangle$ loops. But if you understood the above argument, then you know that $\\langle D, w^{(i)}\\rangle$ does loop. This is a contradiction! Therefore, congratulations! You are not equivalent to a Turing machine." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.1" } }, "nbformat": 4, "nbformat_minor": 2 }