Сидоров А.В. Теория алгоритмов

реклама
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Костромской государственный университет имени Н. А. Некрасова
А. В. Сидоров
ТЕОРИЯ АЛГОРИТМОВ: МАШИНЫ ТЬЮРИНГА
Учебно-методическое пособие
Кострома
2010
ББК 22.127я73-1
С347
Печатается по решению редакционно-издательского совета
КГУ им. Н. А. Некрасова
Рецензент
К. Е. Ширяев, кандидат физико-математических наук, доцент
Сидоров А. В.
С347
Теория алгоритмов: машины Тьюринга : учеб.-метод. пособие
[Текст] / А. В. Сидоров. – Кострома : КГУ им. Н. А. Некрасова,
2010. – 26 с.
В учебно-методическом пособии рассматривается первый раздел курса
теории алгоритмов – машины Тьюринга. Теоретический материал представлен
в параграфе «Машина Тьюринга», методика решения задач – в параграфе
«Вычислимые по Тьюрингу функции». В пособии приводится список задач для
самостоятельного решения.
Для студентов физико-математического факультета специальностей:
32100.00 «Математика» с дополнительной специальностью «Информатика»,
030100.00 «Информатика» с дополнительной специальностью «Математика»,
010200 «Прикладная математика и информатика», а также студентов заочного
отделения специальности 32100 «Математика».
ББК 22.127я73-1
© А В. Сидоров, 2010
© КГУ им. Н. А. Некрасова, 2010
2
ОГЛАВЛЕНИЕ
Предисловие……………………………………………………....
4
1. Машина Тьюринга……………………………………………..
6
2. Вычислимые по Тьюрингу функции…………………………
9
3. Задания для самостоятельного решения…………………….. 23
Заключение……………………………………………………….
24
Библиографический список……………………………………... 25
3
ПРЕДИСЛОВИЕ
Дисциплина «Теория алгоритмов» имеет своей целью построить
строго математическое уточнение понятия алгоритма. Очевидно, что
понятие алгоритма, известное нам еще со школы, не является строго
математическим. Под алгоритмом понимается точное предписание,
которое задает вычислительный процесс, начинающийся с произвольного
исходного
данного
и
направленный
на
получение
полностью
определяемого этим исходным данным результата. Это так называемое
интуитивное понятие алгоритма. Интуитивного понятия алгоритма
достаточно, если стоит задача построения конкретного алгоритма или
доказательства алгоритмической разрешимости конкретной задачи. Другое
дело, если надо доказать, что алгоритма не существует. Ведь если не
удается построить алгоритма для конкретной задачи, то это не может
служить доказательством того, что алгоритма не существует. Здесь-то и
нужно строго математическое уточнение понятия алгоритма.
Понятие алгоритма в его общем виде принадлежит к числу
основных, неопределяемых понятий математики, поэтому всевозможные
уточнения понятия алгоритма приводят, вообще говоря, к некоторому
сужению этого понятия. Следовательно, на роль уточнения может
претендовать такое уточнение, когда у нас будет убеждение в том, что для
каждого
алгоритма
в
интуитивном
смысле
может
быть
указан
эквивалентный ему уточненный алгоритм.
В
настоящее
время
наибольшее
распространение
получили
следующие строго математические уточнения понятия алгоритма: машины
Тьюринга, общерекурсивные функции, нормальные алгоритмы. Доказано,
что все эти уточнения эквивалентны между собой, и есть сильная
убежденность, что эти уточнения не сужают интуитивного понятия
4
алгоритма. Имеются серьезные основания считать, что интуитивное
понятие алгоритма и произведенное с помощью понятия машины
Тьюринга являются адекватными, т. е., считается справедливым тезис
Тьюринга: для всякого алгоритма в некотором алфавите существует
тьюринговский алгоритм, дающий при одинаковых начальных данных тот
же результат, что и исходный алгоритм. Тезис Тьюринга достаточно
убедителен, так как производя вычисления согласно выбранному плану,
математик работает сходным с машиной Тьюринга образом.
Теоретический
материал
дисциплины
«Теория
алгоритмов»
достаточно абстрактен и труден для понимания студентами, поэтому
следует изучать его с построением большого количества машин Тьюринга
для конкретных функций и задач. Только после этого у студентов
появляется уверенность в решении задач, в понимании сути машин
Тьюринга,
и
только
теперь
появляется
возможность
показать
существование неразрешимых алгоритмических проблем в математике.
Неразрешимые алгоритмические проблемы обнаружены во многих
разделах математики (алгебра, теория чисел, математическая логика и др.),
и они связаны с очень распространенными и фундаментальными
понятиями математики.
5
1. МАШИНА ТЬЮРИНГА
Под машиной Тьюринга понимается разбитая на ячейки лента,
потенциально бесконечная влево и вправо, вдоль которой перемещается
читающее устройство (см. схематичное изображение, представленное
ниже). Читающее устройство может находиться в разных состояниях.
Для обозначения разных состояний используют букву q с индексами: q1 ,
q2 , … , qn , … Множество этих символов называют внутренним алфавитом
машины Тьюринга. В ячейки ленты записывают некоторые символы. Их
обозначают буквой S с индексами: S 0 , S1 , S 2 , … , S n , … Множество этих
символов называют внешним алфавитом машины Тьюринга. В каждый
конкретный момент времени на ленте находится конечное число ячеек,
заполненных S-символами, читающее устройство находится в конкретном
q-состоянии и обозревает одну из этих ячеек.
Определение. Конфигурацией
или
мгновенным
изображением
машины Тьюринга называется слово вида Aqi B , где A состоит из
S-символов, выписанных с ленты подряд слева направо до
обозреваемой ячейки, qi – состояние читающего устройства, B
состоит из S-символов, выписанных с ленты подряд слева направо
начиная с обозреваемой ячейки. Для обозначения конфигураций
используют букву U с индексами: U 1 , U 2 , … , U n , … Слово A в
конфигурации может и отсутствовать.
6
Примеры:
U 1 = S1S3 q3 S 2 S1 S1 S 4
1.
U 2 = q2 S 4 S 0 S1 S3 S5
2.
Читающее устройство может выполнять некоторые действия. Таких
действий три. Каждое действие записывается словом, состоящим из
четырех символов.
qi S j S k ql .
(1)
Это слово описывает следующее действие: читающее устройство
находится в состоянии qi и обозревает ячейку с символом S j , символ S j
меняется на символ S k , а читающее устройство переходит в состояние ql
(читающее устройство остается на той же ячейке). Разновидности слова
(1) – qi S j S j ql , qi S j S k qi , qi S j S j qi .
qi S j Rql .
Этим
(2)
словом
описывается
следующее
действие:
читающее
устройство находится в состоянии qi и обозревает ячейку с символом S j ;
читающее устройство перемещается вправо на соседнюю ячейку и
переходит в состояние ql (на ленте при этом ничего не меняется). Частный
случай слова (2) – qi S j Rqi .
7
qi S j Lql .
(3)
Этим словом описывается действие, аналогичное предыдущему,
только читающее устройство перемещается влево на соседнюю ячейку.
Определение. Четверки вида (1), (2) и (3) называют командами
машины Тьюринга.
Определение. Говорят, что команда применима к конфигурации,
если в команде первые два символа qi S j , а конфигурация имеет вид
Aqi S j ...
Каждая команда, применимая к конфигурации, переводит эту
конфигурацию в другую (это будет записываться как U i ⇒ U i +1 ).
Определение (машины
Тьюринга). Машиной
Тьюринга
называется конечное непустое множество команд, среди которых
нет разных команд, начинающихся с первых двух одинаковых
символов.
Последнее требование в определении машины Тьюринга задаёт
однозначность действия в каждой конкретной ситуации.
Определение. Работой машины Тьюринга будем называть переход
от одной конфигурации к другой с помощью команд этой машины.
Определение. Конфигурацию
Uk
в процессе работы машины
Тьюринга будем называть заключительной или конечной, если в
машине Тьюринга не найдется команды, применимой к этой
конфигурации.
8
Определение машины Тьюринга и было предложено математиками в
качестве точного строго математического уточнения понятия алгоритма:
алгоритм – это машина Тьюринга.
Теперь для каждого раздела математики можно, конкретизировав
внешний алфавит, строить алгоритмы решения задач или доказывать их
отсутствие.
2. ВЫЧИСЛИМЫЕ ПО ТЬЮРИНГУ ФУНКЦИИ
В качестве иллюстрации рассмотрим функции от конечного числа
переменных, определенные на множестве натуральных чисел с нулем
(N ∪ { 0 }) , значения которых принадлежат этому же множеству. Покажем,
что находить значения каждой такой функции можно с помощью машины
Тьюринга, соответствующей этой функции.
Оказывается, что для реализации поставленной цели внешний
алфавит машины Тьюринга можно ограничить двумя символами: S 0 = 0 и
S1 = 1 . Натуральное число n на ленте будем обозначать с помощью n + 1 -й
единиц, записанных подряд по одной в
ячейках
без
пропусков.
Например,
натуральное число 5 изображается с
помощью шести единиц. Сокращенно это будем записывать 16 .
Набор из двух чисел ( m , n ) будем на ленте изображать следующим
образом: берем изображение числа m , затем в следующую ячейку
помещаем 0, затем берем изображение числа n . Черта над набором сверху
будет
означать
( m, n ) =1
изображение
набора
на
ленте.
Таким
01n+1 . В общем случае ( x1 , x2 , ... , xn ) = 1x +101x +10...01x +1 .
m +1
1
Приняты следующие договоренности:
9
2
n
образом,
1) каждая машина Тьюринга начинает работу, находясь в состоянии
q1 и обозревая самую левую единицу, имеющуюся на ленте;
2) если в процессе работы машины Тьюринга нужно выполнить
сдвиг вправо, а читающее устройство обозревает самую правую ячейку на
ленте (или сдвиг влево, а читающее устройство обозревает самую левую
ячейку на ленте), то автоматически справа (или слева) достраивается
ячейка с символом 0, на которую и перемещается читающее устройство.
Если
машина
( x , x , ... , x ),
1
2
n
Тьюринга
применяется
к
набору
длины
n
то первая конфигурация имеет вид U 1 = q1 ( x1 , x2 , ... , xn ) =
= q11x +101x +10 ... 01x +1 . Результатом применения машины Тьюринга будем
1
2
n
считать число оставшихся на ленте 1 в конечной конфигурации U k .
. С машиной
Обозначать это будем следующим образом –
Тьюринга T , применяемой к набору длины n , свяжем функцию
ψ T ( x1 , x2 , ... , xn ) , которая определяется следующим образом: значение
ψ T ( x1 , x2 , ... , xn ) равно числу единиц в конечной конфигурации, если
такая конфигурация существует; если же такой конфигурации не
существует (т. е. машина Тьюринга работает бесконечно долго), то
функция считается на данном наборе неопределенной.
.
Определение. Функцию f ( x1 , x2 , ... , xn ) будем называть вычислимой
по Тьюрингу, если существует машина Тьюринга T такая, что
ψ T ( x1 , x2 , ... , xn ) = f ( x1 , x2 , ... , xn ) .
Чтобы
доказать
вычислимость
функции
по
Тьюрингу, надо
построить машину Тьюринга, после работы которой в конечной
конфигурации оставалось бы количество единиц, равное значению
10
функции на данном наборе. Как построить такую машину? Сначала надо
придумать
план,
который
бы
позволил
преобразовать
первую
конфигурацию в конечную. (От плана зависит очень много. Чем проще
план, тем проще построить машину.) Затем надо построить машину, т. е.
реализовать план с помощью команд. И, наконец, следует сделать
проверку: надо убедиться, что на конкретных наборах чисел результат
работы машины Тьюринга будет соответствовать значению функции.
Рассмотрим несколько примеров. Для всех следующих функций надо
доказать их вычислимость по Тьюрингу.
Пример 1. f ( x ) ≡ 0 .
Первая конфигурация для всех функций от одной переменной
согласно договоренности (1) имеет вид U 1 = q11x+1 , т. е. на ленте находится
сколько-то единиц. Сколько точно – неизвестно. Надо заменить их все на
нули (коротко, стереть единицы). Как это сделать?
План. Стираем первую единицу. Сдвигаемся вправо и возвращаемся
в состояние q1 .
Строим машину.
T = { q110q2 , q2 0 Rq1 } .
Проверка. Пусть
x = 3 , тогда U 1 = q114 . Применяем команды
машины Тьюринга.
U 1 = q114 ⇒ q2 013 ⇒ 0q113 ⇒ 0q2 012 ⇒ 00q112 ⇒ 00q2 01 ⇒
⇒ 000q11 ⇒ 000q2 0 ⇒ 0000q1 0 = U k .
Машина остановилась, так как в списке команд машины Тьюринга
нет команды, начинающейся с q1 0 .
, что соответствует значению функции
f ( x )≡ 0.
11
Замечание. Если в конфигурации крайний слева или справа символ 0, а
читающее устройство обозревает не эту ячейку, то символ 0 можно в
конфигурации опустить, так как согласно договоренности (2) при
необходимости этот 0 автоматически восстановится.
Пример 2. f ( x , y ) = y .
Первая конфигурация для всех функций от двух переменных имеет
вид U 1 = q11x+101y +1 . На ленте следует оставить y единиц.
План. Первую группу единиц стираем, переходим через 0 между
группами и стираем первую единицу во второй группе.
T = { q110q2 , q2 0 Rq1 , q1 0 Rq3 , q310q4 }.
Проверка. Пусть x = 2 , y = 5 .
U 1 = q113016 ⇒ q2 012 016 ⇒ 0q112 016 ⇒ q2 01016 ⇒ q11016 ⇒
⇒ q2 0016 ⇒ q1 016 ⇒ q316 ⇒ q4 015 = U k .
, что соответствует значению функции
f ( x , y ) = y на наборе ( 2 , 5 ) .
Пример 3. f ( x , y ) = x + y .
U 1 = q11x+101y +1 . В первой конфигурации на ленте x + y + 2 единицы.
Надо две единицы стереть.
План. Стираем первую единицу в группе x , сдвигаемся вправо.
Если есть еще единица в группе x – стираем ее. Если второй единицы в
группе x нет, то переходим через 0 (между группами) и стираем первую
единицу группы y .
T = { q110q2 , q2 0 Rq3 , q310q4 , q3 0 Rq5 , q510q6 }.
Проверка. Надо проверить два случая: когда в группе x только
одна единица, и когда их больше.
а) x = 0 ; y = 3 .
12
U 1 = q11014 ⇒ q2 0014 ⇒ q3 014 ⇒ q514 ⇒ q6 013 = U k .
.
б) x = 3 ; y = 7 .
U 1 = q114 018 ⇒ q2 013018 ⇒ q313018 ⇒ q4 012 018 = U k .
.
Определение. Часть команд машины Тьюринга называют циклом,
если эти команды работают неоднократно, а кратность зависит
от набора.
Например, цикл образуют две команды { qi 10qi +1 , qi +1 0 Rqi } – стирание
единиц, записанных подряд. Цикл образует одна команда
{ q 1Rq }
i
i
–
пропускаются все единицы, записанные подряд.
Пример 4. f ( x , y ) = x − y .
U 1 = q11x+101y +1 . В первой конфигурации на ленте x + y + 2 единицы, а
оставить надо x − y единиц, если x ≥ y . Таким образом, надо убрать с
ленты x + y + 2 − ( x − y ) = 2 y + 2 = 2 ( y + 1 ) единиц. Если y > x , то функция
не определена.
План. Стираем в цикле по одной единице в каждой группе: в группе
x слева, а в группе y справа. Если группа y заканчивается раньше, то
машину останавливаем. Если раньше заканчивается группа
x , то
зацикливаем машину на бесконечную работу.
T = { q110q2 , q2 0Rq3 , q31Rq3 , q3 0Rq4 , q41Rq4 , q4 0Lq5 , q510q6 , q6 0Lq7 ,
q7 1Lq8 , q81Lq8 , q8 0Lq9 , q9 00q9 , q91Lq10 , q101Lq10 , q10 0Rq1
Проверка. В проверке нуждаются два случая: x ≥ y и x < y .
а) x = 5 ; y = 1 .
13
}.
U 1 = q116 012 ⇒ q2 015012 ⇒ q315 012 ⇒ 1q314 012 ⇒ ... ⇒
⇒ 15 q3 012 ⇒ 15 0q412 ⇒ 15 01q41 ⇒ 15 012 q4 0 ⇒ 15 01q51 ⇒
⇒ 15 01q6 0 ⇒ 15 0q71 ⇒ 15 q8 01 ⇒ 14 q9101 ⇒ 13 q1012 01 ⇒
⇒ 12 q101301 ⇒ ... ⇒ q10 015 01 ⇒ q11501 ⇒ q2 014 01 ⇒
⇒ q314 01 ⇒ 1q31301 ⇒ ... ⇒ 14 q3 01 ⇒ 14 0q41 ⇒ 14 01q4 0 ⇒
⇒ 14 0q51 ⇒ 14 0q6 0 ⇒ 14 q7 0 = U k .
.
б) x = 2 ; y = 4 .
U 1 = q113015 ⇒ q2 012 015 ⇒ q312 015 ⇒ 1q31015 ⇒ 12 q3 015 ⇒
⇒ 12 0q415 ⇒ 12 01q414 ⇒ ... ⇒ 12 015 q4 0 ⇒ 12 014 q51 ⇒
⇒ 12 014 q6 0 ⇒ 12 013 q71 ⇒ 12 012 q812 ⇒ 12 01q813 ⇒ ... ⇒
⇒ 12 q8 014 ⇒ 1q91014 ⇒ q1012 014 ⇒ q10 012 014 ⇒ q112 014 ⇒
⇒ q112 014 ⇒ ... (еще один цикл работы) ... ⇒ q11013 ⇒
⇒ q2 0013 ⇒ q3 013 ⇒ q413 ⇒ 1q412 ⇒ ... ⇒ 13 q4 0 ⇒ 12 q51 ⇒
⇒ 12 q6 0 ⇒ 1q71 ⇒ q812 ⇒ q8 012 ⇒ q9 0012 ⇒ q9 0012 ⇒
⇒ ... ⇒ q9 0012 ⇒ ...
Машина работает бесконечно.
Пример 5. f ( x , y ) =
x
.
y
Если x не делится на y нацело, то функция не определена. Надо
узнать, сколько раз число y укладывается в числе x .
U 1 = q11x+101y +1 .
План. Убираем в группах x и y по одной лишней единице, в группе
x слева, в y – справа. Если в y больше единиц нет, то функция не
определена ( y = 0 ) . Если в y единицы есть, то выходим на начало группы
14
y (проверив, что в x есть единицы). Далее в цикле: стираем в y единицу,
смотрим, есть ли в y еще единицы; а) если есть, то идем в начало группы
x , стираем там единицу, если больше единиц в x нет, то зацикливаем
машину на бесконечную работу, если единицы есть, то возвращаемся в
группу y , восстанавливаем стертую единицу, сдвигаемся вправо и входим
в цикл; б) если единиц в y больше нет, то сразу восстанавливаем стертую
единицу в y , идем в группу x и отсоединяем в x слева одну единицу.
Если в группе x после этого единиц не осталось, кроме отсоединённых, то
стираем группу y . Если же единицы остались, пропускаем их, выходим на
начало группы y и снова входим в цикл.
T = { q110q2 , q2 0Rq3 , q31Rq3 , q3 0Rq4 , q41Rq4 , q4 0Lq5 , q510q6 , q6 0Lq7 ,
q7 00q7 , q7 1Lq8 , q81Lq8 , q8 0Lq9 , q9 0Rq10 , q10 0Rq11 , q1110q12 , q12 0Rq11 , q91Rq12 ,
q12 0Rq13 , q1310q14 , q14 0Rq15 , q151Lq16 , q16 0Lq17 , q171Lq17 , q17 0Lq18 , q181Lq18 ,
q18 0Rq19 , q1910q20 , q20 0Rq21 , q21 00q21 , q211Rq22 , q221Rq22 , q22 0Rq23 , q231Rq23 ,
q23 01q24 , q241Rq13 , q15 0Lq25 , q25 01q26 , q261Lq26 , q26 0Lq27 , q27 1Lq27 , q27 01q28 ,
q281Rq29 , q2910q30 , q30 0Rq31 , q31 0Rq11 , q311Rq32 , q321Rq32 , q32 0Rq13 }.
Проверка. Надо проверить три случая:
а) y = 0 ;
б) x делится на y нацело;
в) x не делится на y нацело.
а) x = 3 ; y = 0 .
U 1 = q114 01 ⇒ q2 01301 ⇒ q31301 ⇒ 1q312 01 ⇒ ... ⇒ 13 q3 01 ⇒
⇒ 130q41 ⇒ 1301q4 0 ⇒ 130q51 ⇒ 130q6 0 ⇒ 13 q7 0 ⇒ 13 q7 0 ⇒
⇒ ... ⇒ 13 q7 0 ⇒ ...
Машина работает бесконечно.
б) x = 4 ; y = 2 .
15
U 1 = q115013 ⇒ q2 014 013 ⇒ q314 013 ⇒ 1q313013 ⇒ ... ⇒
⇒ 14 q3 013 ⇒ 14 0q413 ⇒ 14 01q412 ⇒ ... ⇒ 14 013 q4 0 ⇒
⇒ 14 012 q51 ⇒ 14 012 q6 0 ⇒ 14 01q7 1 ⇒ 14 0q812 ⇒ 14 q8 012 ⇒
⇒ 13 q91012 ⇒ 14 q12 012 ⇒ 14 0q1312 ⇒ 14 0q14 01 ⇒ 14 00q151 ⇒
⇒ 14 0q16 01 ⇒ 14 q17 001 ⇒ 13 q181001 ⇒ 12 q1812 001 ⇒ ... ⇒
⇒
q18 014 001 ⇒
q1914 001
⇒
q20 013001 ⇒
q2113001
⇒
⇒ 1q2212 001 ⇒ 12 q221001 ⇒ 13 q22 001 ⇒ 130q23 01 ⇒ 130q2412 ⇒
⇒ 1301q131 ⇒ 1301q14 0 ⇒ 13010q15 0 ⇒ 1301q25 0 ⇒ 1301q261 ⇒
⇒ 130q2612 ⇒ 13 q26 012 ⇒ 12 q27 1012 ⇒ 1q27 12 012 ⇒ ... ⇒
⇒
q27 013012
⇒
q2814 012
⇒
1q2913012
⇒ 1q30 012 012
⇒
⇒ 10q3112 012 ⇒ 101q321012 ⇒ 1012 q32 012 ⇒ 1012 0q1312 ⇒
⇒ 1012 0q14 01 ⇒ 1012 00q151 ⇒ 1012 0q16 01 ⇒ 1012 q17 001 ⇒
⇒ 101q181001 ⇒ 10q1812 001 ⇒ 1q18 012 001 ⇒ 10q1912 001 ⇒
⇒ 10q20 01001 ⇒ 100q211001 ⇒ 1001q22 001 ⇒ 10010q23 01 ⇒
⇒ 10010q2412 ⇒ 100101q131 ⇒ 100101q14 0 ⇒ 1001010q15 0 ⇒
⇒ 100101q25 0 ⇒ 100101q261 ⇒ 10010q2612 ⇒ 1001q26 012 ⇒
⇒ 100q27 1012 ⇒ 10q27 01012 ⇒ 10q2812 012 ⇒ 101q291012 ⇒
⇒ 101q30 0012 ⇒ 1010q31 012 ⇒ 10100q1112 ⇒ 10100q12 01 ⇒
⇒ 101000q111 ⇒ 101000q12 0 ⇒ 1010000q11 0 = U k .
.
в) x = 3 ; y = 2 .
U 1 = q114 013 ⇒ q2 013013 ⇒ q313013 ⇒ ... ⇒ 13 q3 013 ⇒
⇒ 130q413 ⇒ ... ⇒ 13013 q4 0 ⇒ 13012 q51 ⇒ 13012 q6 0 ⇒
⇒ 1301q7 1 ⇒ 130q812 ⇒ 13 q8 012 ⇒ 12 q91012 ⇒ 13 q12 012 ⇒
16
⇒ 130q1312 ⇒ ... (сработает полный цикл, см. случай б) ... ⇒
⇒ 1010q1312 ⇒ 1010q14 01 ⇒ 10100q151 ⇒ 1010q16 01 ⇒
⇒ 101q17 001 ⇒ 10q181001 ⇒ 1q18 01001 ⇒ 10q191001 ⇒
⇒ 10q191001 ⇒ 10q20 0001 ⇒ 100q21 001 ⇒ 100q21 001 ⇒
⇒ ... ⇒ 100q21 001 ⇒ ...
Машина работает бесконечно.
⎧0 , x = 0
(знак числа)
Пример 6. f ( x ) = sgn x = ⎨
⎩ 1, x > 0
U 1 = q11x+1 . Если на ленте одна единица, то ее надо стереть, если
единиц больше одной, то надо одну оставить, остальные стереть.
Построим для данной функции две разные машины Тьюринга.
Первый план. Стираем первую единицу, сдвигаемся вправо. Если
второй единицы нет, останавливаемся. Если вторая единица есть,
пропускаем ее, все остальные стираем.
T = { q110q2 , q2 0 Rq3 , q31Rq4 , q410q5 , q5 0 Rq4 }.
Проверка. Проверить надо два случая: x = 0 и x > 0 .
а) x = 0 .
U 1 = q11 ⇒ q2 0 ⇒ 0q3 0 = U k .
.
б) x = 10 .
U 1 = q1111 ⇒ q2 0110 ⇒ q3110 ⇒ 1q419 ⇒ 1q5 018 ⇒ 10q418 ⇒
⇒ ... ⇒ 109 q4 0 = U k .
.
Второй план. Первую единицу пропускаем, все остальные стираем.
Если второй единицы нет, то возвращаемся влево и стираем оставленную
единицу.
17
T = { q11Rq2 , q2 0Lq3 , q310q4 , q210q5 , q5 0Rq6 , q610q5 }.
Проверка. а) x = 0 .
U 1 = q11 ⇒ 1q2 0 ⇒ q31 ⇒ q4 0 = U k
.
б) x = 15 .
U 1 = q1116 ⇒ 1q2115 ⇒ 1q5 0114 ⇒ 10q6114 ⇒ 10q5 0113 ⇒ ... ⇒
⇒ 1015 q6 0 = U k .
.
Пример 7. f ( x , y , z ) = x − y ⋅ sgn z .
Распишем функцию f ( x , y , z ) по переменной z .
⎧ x − y , если z > 0,
f ( x, y, z ) = ⎨
⎩ x , если z = 0.
U 1 = q11x+101y +101z +1 .
План. Пропускаем группы x и y . В группе z стираем первую
единицу. Если второй единицы в z нет, то возвращаемся влево, стираем
группу y и одну единицу в группе x . Если в z есть вторая единица, то
стираем всю группу z , возвращаемся влево на группу y . Далее в цикле
стираем последнюю единицу в группе y и первую в группе x . Если
раньше заканчивается группа x , то зацикливаем машину на бесконечную
работу. Если раньше заканчивается группа y , то переходим в группу x ,
стираем там одну единицу и останавливаемся.
T = { q11Rq1 , q1 0Rq2 , q21Rq2 , q2 0Rq3 , q310q4 , q4 0Rq5 , q5 0Lq6 , q6 0Lq6 ,
q610q7 , q7 0Lq8 , q810q7 , q8 0Lq9 , q910q10 , q510q11 , q11 0Rq12 , q1210q11 ,
q12 0Lq13 , q13 0Lq13 , q1310q14 , q14 0Lq15 , q15 0Lq9 , q151Lq16 , q161Lq16 ,
18
q16 0Lq17 , q171Lq17 , q17 0Rq18 , q1810q19 , q19 0Rq20 , q201Rq21 , q211Rq21 ,
q21 0Rq22 , q221Rq22 , q22 0Lq13 , q20 00q20 } .
Проверка. Поскольку машину
x− y
мы уже проверяли, то
проверим только случаи z = 0 и z > 0 .
а) x = 5 ; y = 3 ; z = 0 .
U 1 = q116 014 01 ⇒ 1q115014 01 ⇒ ... ⇒ 16 0q214 01 ⇒ 16 0q214 01 ⇒
⇒ 16 01q21301 ⇒ ... ⇒ 16 014 q2 01 ⇒ 16 014 0q31 ⇒ 16 014 0q4 0 ⇒
⇒ 16 014 00q5 0 ⇒ 16 014 0q6 0 ⇒ ... ⇒ 16 013 q61 ⇒ 16 013 q7 0 ⇒
⇒ 16 012 q81 ⇒ 16 012 q7 0 ⇒ ... ⇒ 16 q8 0 ⇒ 15 q91 ⇒ 15 q10 0 = U k .
б) x = 5 ; y = 3 ; z = 10 .
U 1 = q116 014 0111 ⇒ … (как в случае а)) … ⇒ 16 014 0q3111 ⇒
⇒
16 014 0q4 0110
⇒
16 014 00q5110
⇒
16 014 0 2 q11 019
⇒
⇒ 16 014 03 q1219 ⇒ 16 014 03 q11 018 ⇒ ... ⇒ 16 014 012 q12 0 ⇒
⇒ 16 014 011 q13 0 ⇒ 16 014 010 q13 0 ⇒ ... ⇒ 16 013 q131 ⇒ 16 013 q14 0 ⇒
⇒ 16 012 q151 ⇒ 16 01q1612 ⇒ 16 0q1613 ⇒ 16 q16 013 ⇒ 15 q17 1013 ⇒
⇒ 14 q17 12 013 ⇒ ... ⇒ q17 016 013 ⇒ q1816 013 ⇒ q19 015013 ⇒
⇒ q2015 013 ⇒ 1q2114 013 ⇒ 12 q2113013 ⇒ ... ⇒ 15 q21 013 ⇒
⇒ 15 0q2213 ⇒ 15 01q2212 ⇒ ... ⇒ 15 013 q22 0 ⇒ 15 012 q131 ⇒
⇒ … (цикл сработает еще два раза) … ⇒ 130q131 ⇒ 130q14 0 ⇒
⇒ 13 q15 0 ⇒ 12 q91 ⇒ 12 q10 0 = U k .
Пример 8. f ( x ) = 2 x .
U 1 = q11x+1 .
19
Первый план (в цикле). Стираем первую единицу в x ; смотрим,
есть ли еще. Если нет, то останавливаемся. Если есть, то пропускаем все
единицы группы x , пропускаем 0, пропускаем единицы, вписанные ранее,
дописываем две единицы. Идем влево. Пропускаем все, что вписали,
пропускаем 0, пропускаем остатки группы x , выходим на первую из
оставшихся в x единиц и входим в цикл.
T = { q110q2 , q2 0Rq3 , q31Rq4 , q41Rq4 , q4 0Rq5 , q51Rq5 , q5 01q6 , q61Rq7 ,
q7 01q8 , q81Lq8 , q8 0Lq9 , q91Lq9 , q9 0Rq1 }.
Проверка. x = 5 .
U 1 = q116 ⇒ q2 015 ⇒ q315 ⇒ 1q414 ⇒ 11q413 ⇒ ... ⇒ 15 q4 0 ⇒
⇒ 150q5 0
⇒ 15 0q61 ⇒ 15 01q7 0
⇒ 15 q8 012
⇒ 14 q91012
⇒ 15 01q81 ⇒ 150q812
⇒ 13 q912 012
⇒ ... ⇒
q9 015 012
⇒
⇒
⇒ q115012 ⇒ … (цикл сработает еще 4 раза) … ⇒ q110110 ⇒
⇒ q2 00110 ⇒ q3 0110 = U k .
Второй план (в цикле). Стираем первую единицу в x ; смотрим,
есть ли еще. Если нет, то останавливаемся. Если есть, то пропускаем все
единицы группы x , пропускаем 0, пропускаем единицы, вписанные ранее,
дописываем единицу. Идем влево. Пропускаем все, что вписали,
пропускаем 0, пропускаем единицы группы x , восстанавливаем стертую
единицу, сдвигаемся вправо и входим в цикл.
T = { q110q2 , q2 0Rq3 , q31Rq4 , q41Rq4 , q4 0Rq5 , q51Rq5 , q5 01q6 , q61Lq6 ,
q6 0Lq7 , q7 1Lq7 , q7 01q8 , q81Rq1 }.
Проверка. x = 5 .
U 1 = q116 ⇒ q2 015 ⇒ q315 ⇒ 1q414 ⇒ 12 q413 ⇒ ... ⇒ 15 q4 0 ⇒
⇒ 150q5 0 ⇒ 15 0q61 ⇒ 15 q6 01 ⇒ 14 q7 101 ⇒ 13 q7 12 01 ⇒
20
⇒ ... ⇒ q7 015 01 ⇒ q816 01 ⇒ 1q11501 ⇒ … (цикл сработает
еще 4 раза) … ⇒ 15 q11015 ⇒ 15 q2 0015 ⇒ 15 0q3 015 = U k .
Пример 9. f ( x , y ) = x ⋅ y .
U 1 = q11x+101y +1 .
План. Стираем в x первую единицу, в y последнюю. Если в какойто группе единиц не осталось, то стираем другую группу (это случаи x = 0
или y = 0 ). В противном случае дублируем группу x влево y раз: в цикле
стираем в y последнюю единицу, если больше нет, то останавливаемся.
Если есть еще, пропускаем все имеющиеся на ленте группы единиц,
двигаясь влево. Последнюю группу дублируем через 0 влево. После этого
возвращаемся вправо в конец группы y и входим в цикл.
T = { q110q2 , q2 0Rq3 , q3 0Rq4 , q410q5 , q5 0Rq4 , q31Rq6 , q61Rq6 , q6 0Rq7 ,
q71Rq7 , q7 0Lq8 , q810q9 , q9 0Lq10 , q10 0Lq11 , q1110q12 , q12 0Lq11 , q1010q13 ,
q13 0Lq14 , q141Lq15 , q151Lq15 , q15 0Lq16 , q1611q15 , q16 0Rq17 , q17 0Rq18 ,
q1810q19 , q19 0Lq20 , q201Lq20 , q20 0Lq21 , q211Lq21 , q21 01q22 , q221Rq22 ,
q22 0Rq23 , q231Rq23 , q23 01q24 , q241Rq18 , q18 0Rq25 , q251Rq25 , q25 0Rq26 ,
q2611q25 , q26 0Lq27 , q27 0Lq10 }.
Проверка. а) x = 0 ; y = 5 .
U 1 = q11016 ⇒ q2 0016 ⇒ q3 016 ⇒ q416 ⇒ q5 015 ⇒ q415 ⇒
⇒ ... ⇒ q4 0 = U k .
б) ; y = 0 .
21
U 1 = q115 01 ⇒ q2 014 01 ⇒ q314 01 ⇒ 1q61301 ⇒ 12 q612 01 ⇒
⇒ ... ⇒ 14 q6 01 ⇒ 14 0q7 1 ⇒ 14 01q7 0 ⇒ 14 0q81 ⇒ 14 0q9 0 ⇒
⇒ 14 q10 0 ⇒ 13 q111 ⇒ 13 q12 0 ⇒ 12 q111 ⇒ ... ⇒ q11 0 = U k .
в) x = 2 ; y = 3 .
U 1 = q113014 ⇒ q2 012 014 ⇒ q312 014 ⇒ 1q61014 ⇒ 12 q6 014 ⇒
⇒ 120q714 ⇒ 12 01q7 13 ⇒ ... ⇒ 12 014 q7 0 ⇒ 12 013 q81 ⇒
⇒ 12 013 q9 0 ⇒ 12 012 q101 ⇒ 12 012 q13 0 ⇒ 12 01q141 ⇒ 12 0q1512 ⇒
⇒ 12 q15 012 ⇒ 1q161012 ⇒ 1q151012 ⇒ q1512 012 ⇒ q15 012 012 ⇒
⇒
q16 0012 012
⇒
q17 012 012
⇒
q1812 012
⇒
q19 01012
⇒
⇒ q20 001012 ⇒ q21 0001012 ⇒ q221001012 ⇒ 1q22 001012 ⇒
⇒ 10q23 01012 ⇒ 10q2412 012 ⇒ 101q181012 ⇒ 101q19 0012 ⇒
⇒ 10q2010012 ⇒ 1q20 010012 ⇒ q211010012 ⇒ q21 01010012 ⇒
⇒ q2212 010012 ⇒ 1q221010012 ⇒ 12 q22 010012 ⇒ 12 0q2310012 ⇒
⇒ 12 01q23 0012 ⇒ 12 01q241012 ⇒ 12 012 q18 012 ⇒ 12 012 0q2512 ⇒
⇒
12 012 01q251
⇒
12 012 012 q25 0
⇒
12 012 012 0q26 0
⇒
⇒ 12 012 012 q27 0 ⇒ 12 012 01q101 ⇒ … (цикл сработает еще раз)
… ⇒ 12 012 012 0q101 ⇒ 12 012 012 0q13 0 ⇒ 12 012 012 q14 0 = U k .
Рассмотренные примеры показывают, что если у нас есть план
нахождения значений функции, то этот план реализуется некоторой
машиной Тьюринга. Если теперь рассмотреть произвольную вычислимую
функцию (т. е. функцию, значения которой на любом наборе мы можем
находить, если они существуют), то это означает, что есть какой-то список
указаний (правил, формул и т. д.), позволяющий находить значения
22
функции, т. е. мы можем составить план нахождения значений, а значит, и
построить машину Тьюринга, соответствующую этой функции. Поэтому в
математике считается справедливым следующий тезис.
Тезис Тьюринга. Класс вычислимых функций совпадает с классом
функций, вычислимых по Тьюрингу.
Из тезиса Тьюринга следует, что понятие вычислимой по Тьюрингу
функции
является
интуитивного
точным
понятия
строго
«вычислимая
математическим
функция»,
а
уточнением
следовательно,
определение «машина Тьюринга» – это точное строго математическое
уточнение понятия «алгоритм».
Доказать тезис Тьюринга нельзя, поскольку понятие «вычислимая
функция» не является строго математическим. В правильности тезиса нас
убеждает практика, исторический опыт. Математики в своих рассуждениях
и доказательствах смело используют этот тезис.
Более полное и глубокое изложение основ машин Тьюринга и их
дальнейшее применение можно найти в библиографическом списке,
приведенном в пособии.
3. ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО РЕШЕНИЯ
Доказать вычислимость функций по Тьюрингу
1. f ( x ) ≡ 1.
2. f ( x , y ) ≡ 2 .
3. f ( x ) =
x
.
2
4. f ( x ) =
x
.
3
5. f ( x , y ) =
x y
+ .
2 2
23
6. f ( x , y , z ) =
x+ y
.
z
7. f ( x , y , z ) =
x− y
.
sgn z
8. f ( x ) = sgn ( x ) .
9. f ( x , y , z ) =
z−y
.
sgn x
10. f ( x , y , z ) = ( x − z ) ⋅ sgn ( y − z ) .
11. f ( x , y , z ) = ( x + z ) ⋅ y .
12. f ( x , y ) = x y .
13. f ( x , y ) = x − y .
14. f ( x ) = x .
Построить машины Тьюринга, переводящие первую
конфигурацию во вторую
1. q11x+101y +1 ⇒ qi 1y +101x+1 .
2. q11x+101y +1 ⇒ qi 1y +101x+1 (не занимая новых ячеек).
3. q11x+101y +101z +1 ⇒ 1x+1 qi 01y +101x +101z +1 .
4. q11x+101y +101z +1 ⇒ 1x+1 qi 01y +101x +101z +1 (используя только один цикл).
ЗАКЛЮЧЕНИЕ
Теория, задачи и методы, которые рассмотрены в данном пособии, не
столько трудные, сколько просто новые, и следует поначалу привыкнуть к
новой
терминологии
и
обозначениям.
Однако
если
аккуратно
и
последовательно разобраться в теории и в решении приведенных в
пособии заданий, то, без сомнения, каждый может научиться решать
задачи такого типа. Более серьезные задания можно найти в [1], [2], [3].
24
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Гаврилов Г. П. Сборник задач по дискретной математике /
Г. П. Гаврилов, А. А. Сапоженко. – М. : Наука, 1977. – 368 с.
Лавров И. А. Задачи по теории множеств, математической логике и
теории алгоритмов / И. А. Лавров, Л. А. Максимова. – М. : Наука, 1975. –
223 с.
Мендельсон
Э.
Введение
в
математическую
логику
/
Э. Мендельсон. – М. : Наука, 1976. – 320 с.
Мальцев А. И. Алгоритмы и рекурсивные функции / А. И. Мальцев. –
М. : Наука, 1965. – 220 с.
25
Учебное издание
Сидоров Александр Васильевич
ТЕОРИЯ АЛГОРИТМОВ: МАШИНЫ ТЬЮРИНГА
Учебно-методическое пособие
Редактор и корректор Г. Д. Неганова
Компьютерный набор О. А. Козыревой
Подписано в печать 08.06.2010.
Формат 60х90/16.
Уч.-изд. л. 1,3.
Тираж 100 экз.
Изд. № 27.
Костромской государственный университет имени Н. А. Некрасова
156961, г. Кострома, ул. 1 Мая, 14
26
Скачать