Анимация
JavaScript
|
Главная Библионтека гл. V. АЛГОРИТМЫ и МАШИНЫ ТЫОРИНГА § 12. МАШИНЫ ТЫОРИНГА Отметим следу10И];ее очевидное положение: если иро- грамма машины содержит команду qiL, то 1дД gOl Аналогично, если программа машины содержит коман- ду дД qiR, то дД . . . 10 1 1 . . . IgO. Ниже указывается серия машин Тьюринга, нреобра-i зуюш;их машинные слова одного заданного вида в машин-, ные слова другого заданного вида. Программы машин! пишутся столбцами. Для контроля против некоторых команд указываются те машинные слова, в которые перехо-i дит первоначальное заданное машинное слово после вы- полнения всех предыдуш;их команд, включая в их число: и стояш;ую слева команду.Выписанные нин-ге программы отнюдь не самые короткие, но в каком-то смысле естественные. A) Перенос нуля: gOOlO И ggOlOO. Имеем: дО -> qR OggOlO gO -> ggl ggl -> qR Oll-ggO ggO -> qjj qd ~> q,0 Ol-gOO gO -> goL gel -> q,L ge01•"00 gsO -> goO goOl-ОО. Б-) Л e в ы Й сдвиг: OlgjO => goOlO. Имеем; gO ggL gal gaL gOl-O gaO goO goOlO. Б+) П p a в Ы Й сдвиг: giOTO И OlgoO. Програмлха этой машины получается из предыдуш;ей програмлш заменой символа L символом i?. B) Транспозиция: OTgOlO И 01%01-""0. Сначала переводим слово OlgiOr-О в слово 01gl00. При г/ > О это достигается следуюш;ей очевидной программой: Б+ : 0101"дз0 дзО -> qiL qd -qfi gsO qaL gel qoL 0Гдв01У-100 geO qA 01=g7l00. Чтобы получить слово Olg? 1"00 и при у = О, добавляем команду дО-дтО Oiqdm {у > 0). Теперь из подслова перебрасываем один символ 1 п промежуток между двумя последними нулями. Очевидно, это достигается следуюш;ей программой: д,1 -> qsL OligellOO gel -> двО двО gioi? giol qioR Ol--iOlgioOO gioO gill gial gisO 01-Ю1У-1д1з010 gisO -> quL qui->quL Ol-guOl-OlO guO gisl Ol-igislOlO. Мы достигли своей цели, но в предположении а; ]> О, У>0. Чтобы тот же результат получился и прп у - К), добавляем к записанной программе еш;е приказы дтО giel giel QnL gnl gi50 01-3gi5l010 (ж > 0, г/ > 0). Теперь «зацпкливаею программу приказами giol g7l . giO дтО Ol-igTlOlO. Если X - 1 > О, то, как легко видеть, слово 01•-lg7l010 переработается в слово 01*--g7l0110. Если а; - 2 > О, то процесс дальнейшей переработки даст слово М--ЭдДуоИЮ и т. д. Через х «циклов» получим слово Og7l01"0, которое после выполнения приказа дЛ -5- gsL (если г/ > 0) или приказов g0 -> gii и т. д. (если I У = 0) перейдет в слово g-sOlOl или в слово qnOWb. Чтобы получить требуемое слово, далее присоединяем 5 приказы gsO gisR qui -> gisR gisO-geO 01>01«0 (г/> 0) gijO -> guR gigl goO OlOlO (y = 0). Г) Удвоение: gi01=0+3 s) goOlOlOO. Полагаем: gO -> giR gi gR 01"g20"3. Полученное слово 01*20+ представляем в виде, 01g200°00°0+i и далее пишем программу, для которой 1 при X - iQ Полагаем: gO gL 01-("l)gзl0101"0 ggl giO g40 gR gsO gel gel gsi? 0-(+l)01+lgв010 goO g-iR дЛ -> gri? g70 -> ggl gel ggb gsO ggL gel gL 01--*--(i)g901+i01i. Теперь приказом geO gaO 01•-(+l)g201+Юl+l зацикливаем программу п машина, пользуясь фиксированными выше приказами, начинает перерабатывать указанное слово. Еслп X - (i -Ь 1) > О, то после цикла работы машины ползится слово 01-<2)201+-01+2 и т. д. Заметим, что в течение каждого цикла машина вводит в игру новую ячейку лентыснрава, беря ее из того запаса пустых ячеек 0*+ который нами был заранее написан в исходном слове. Если этого не было Бы сделано, то машина пристраивала бы сама по одной новой пустой ячейке в каждом цикле работы. Итак, имея начальное состояние gi01"0+3 указанную выше программу, машина через х циклов работы придет в состояние OgaOlOlO. Приказ q-J) -> gL переведет машину в состояние ggOOlOlO. Производя теперь перенос нуля А, затем правый сдвиг Б"*", еш;е раз перенос нуля А и, наконец, левый сдвиг Б", получим требуемое слово goOrOl00. Комбинируя между собой машины А, Б+, Б , В, Г, легко получить машины, выполняюш;ие более сложные преобразования слов. Так, например, имеем: ББ*) Двойной перенос: Б+Б+: giOlOlON 01010. Ц) Циклический сдвиг: Ц = ВБ~В. Ц: OlOlgiOlN 01go01=01"0. Гг) Копирование: Гг = Б+ВГВБ+ВГВ. Гг: giOlOl" Н OrOlgoOlW. Проверка того, что указанные композиции машин действительно выполняют заданные преобразования машинных слов, очевидна. Как уже говорилось, для доказательства основной тео-релш нам достаточно назгчиться строить машины, правильно вьгчисляюш;ие простейшие функции и функции, возникающие пз правильно вычислимых функций с помощью операций суперпозиции, примитивной рекурсии и минимизации. К этим построениям мы теперь и перейдем. Лемма 2. Функции о (х) = О, s (х) =х + i, d {х) = X - i правильно вычислимы. Программы машин, правильно вычисляющих указанные функцпп, пишутся очевидным образом: о (х) = 0: giOlO 1=. goOO+i giO gsR дЛ дгй Ol-gaO gaO -> дзЬ ggl -> giO Ol--igiOO giO gsL gsOO+i gsO goO goOO-+i d (х) = X i: некоторых слов uq, bo, йу, Ъу, . ., ut, bi в алфавите {О, 1} н каких-то машин U, V, . . ., W uogibo iU)iaiqbi (FjeOagyba. . • (W)6uiqJ>i, aagiboiiUV)...W}uig,bi. Докажем теперь оставшиеся нужные нам леммы. Лемма 3. Простейшие функции /< (ху, . . ., х) = - Xi {s i; S, t == i, 2, . . .) правильно вычислимы. Укажем, наприлшр, программу для J. Символы А, Б, В, Г, {О), . . . обозначают программы рассмотренных ](ыше машин. Очевидно, giOlOl! (BOlgpOl" (B)pOlJgOl (О)уОРдвО ... О (Б-)бде01". Таким образом, искомой машиной, вьг1зисляюш;ей правильно функцию ll, является композиция Б* * В * (0) * Б~. Лемма 4. Если частичные функции g {ху, . . ., Xs), III [xi, . . ., Xt), . . ., hs {xi, . . Xi) правильно вычислимы, то суперпозиция / ii, . . .,xt) = g {hy {xy, . . ., Xt), . . .,K [xy, . . ., Xt)) -также правильно вычислимая частичная функция. Пусть {g), {hy), . . ., {hs) - программы машин, правил ьно вычисляющих указанные функцип. Если g - одноместная функция, то из giOT"... Oit {hy)ygff)i..... (g)egvO№ видно, что машпна (AJ * () правильно вычисляет нужную нам функцию g {hy). Чтобы не писать излишне длинных выражений, рассмотрим еще лишь случай, когда заданные частичные функции g, hy, /г-з двуместны. Пользуясь введенньиш выше машинами сдвига, транспозиции, удвоения и нулевой функции, получим gi01--01(rr)i 01-01g„01=01« {hi)a 01-01!gp01.(=. У) (Ц)в OIW. !)gvO101! (/i2)v •01W.J)g601W».s) (Б-)в ggOl.e. у)01л=(--. У) (g)e д.01(л„/.) g.,0-goO до01г(Л..л,). s{x) = х + I: giOlO im goOl+i qyO -> qR qd qR OiqO З2О 9з1 giOl0 goOlOO qyO -H. дЛ gl -> дЛ OlgO gaO -> qsL ggl -> giO 01«-ig400 qS -qL q,i -> q,L gOl-iOO ggO goO для a; = 0. Выше прослен<ен процесс переработки слова gjiOlO для ж > 1. Легко убедиться, что результатом переработки указанного слова по изложенной программе для х = О будет требуемое слово доОО. .Для того чтобы легче было следить за работой машин в оставшихся более сложных случаях, введем следуюш;ие обозначения. Пусть Т - программа какой-то машины с алфавитами - внешним О, 1 и внутренним gg, gi, . . ., g„, причем go - символ заключительного состояния. Пусть а - положительное натуральное число. Заменяя в записи команд программы Т символы д, . . ., д„ соответственно символами да, . . ., ga+n-i, а символ до символом д+п, получим программу машины с тем же внешним алфавитом {О, 1} и внутренним алфавитом (д, g<x+i, • • , Яа+п}, причем заключительным символом теперь служит символ да+п Эту новую программу будем обозначать через Та илп, подробнее, через Тр, где чпсло р = а + /г целиком определяется машиной Т п числом а. Условимся также писать еслп машпна Т, начав работать в состоянпи адаЬ, переходит через некоторое врелш в заключительное состояние %?pbiO ... О прп условпи, что в процессе работы лента не надстраивалась слева. Вспоминая теперь опреде.ление композиции машин, непосредственно видим, что еслп для 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 [ 38 ] 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |