
- •Введение
- •Глава 1
- •§ 1. «Алгоритмические джунгли»
- •§ 2. Исходные данные и результаты. Массовость алгоритма
- •§ 4. Понятность алгоритма
- •§ 5. Рекурсивные определения
- •§ 6. Определенность алгоритма
- •§ 7. Выводы
- •Глава 2 создание алгоритмов
- •§ 1. Роль алгоритмов в науке и технике
- •§ 2. Как возникают алгоритмы
- •§ 3. Алгоритмы в математике
- •§ 4. Алгоритм Евклида
- •§ 5. Решето Эрагосфена
- •§ 6. Алгоритм разложения на простые множители. Определение наименьшего кратного двух чисел
- •§ 7. Распознавание алгебраического тождества
- •§ 8. Задачи на построение алгоритмов
- •Глава 3 кризис математики в начале XX века
- •§ 1. Арифметизация математики
- •§ 2. Теория множеств
- •§ 3. Кардинальные числа
- •§ 4. Антиномии
- •§ 5. Выводы из антиномий
- •Глава 4 логические теории алгоритмов
- •§ 1. Рекурсивные функции
- •§ 2. Машины Тьюринга
- •§ 3. Нормальные алгоритмы Маркова
- •§ 4. Эквивалентность описанных теорий
- •Глава 5
- •§ 1. Массовые проблемы. Неразрешимость проблем
- •§ 2. Экстраалгоритм и три неразрешимые проблемы
- •§ 3, Некоторые замечания
- •Глава 6 электронные вычислительные машины и программирование
- •§ 1. Устройство эвм
- •§ 2. Процессоры эвм. Рабочий цикл
- •§ 3. Что такое программа
- •§ 4. Особенности современных эвм
- •§ 5. Входные языки программирования
- •§ 6. Необходимость содержательной теории алгоритмов. Какой она должна быть
- •Г л а в а 7 формальные языки
- •§ 1. Анализ естественного языка
- •§ 2. Искусственные языки. Формальные языки
- •§ 3. Буквы, связи, оболочки, конструкции
- •§ 4. Формальные грамматики
- •§ 5. Нотация Бекуса. Тезаурусы
- •§ 1. Что такое операция?
- •§ 2. Натуральные операции
- •§ 4. Первичные алгоритмы
- •§ 5. Натуральные алгоритмы
- •§ 6. Ограничения на структуру исходных данных сняты
- •§ 8. Соотношение с алгоритмами в интуитивном смысле
- •§ 10. Исследование тупиков (клинчей)
- •§ 11. Формальная семантика формального языка
- •Глава 9 математическое обеспечение эвм
- •§ 1. Анализ эвм и программ
- •§ 2. Что такое математическое обеспечение эвм
- •§ 3. Функциональная классификация программ математического обеспечения эвм
- •§ 4. Операционные системы
- •И автоматизация процессов
- •§ I. Использование эвм для управления
- •§ 2. Информационные системы
- •§ 3. Алгоритмизация процессов
- •§ 4. Язык алгоритмизации процессов
- •§ 5. Наука и искусство алгоритмизации
- •Заключение
- •§ 1. Может ли машина мыслить? Может ли человек решить алгоритмически неразрешимую проблему?
- •§ 2. Детерминированность машин. Самообучение
- •§ 3. Сознание машин. Алгоритмическое моделирование
§ 2. Машины Тьюринга
Английский математик А. Тьюринг в 1937 г. опубликовал работу, в которой он уточнял понятие алгоритма, прибегая к воображаемой вычислительной машине, известной теперь под названием машины Тьюринга. Идея А. Тьюринга возникла еще до появления электронных вычислительных машин и потому, по-видимому, совершенно не зависит от них.
А. Тьюринг решил, что особого внимания заслуживает поведение исполнителя алгоритма, поэтому его нужно особенно точно и ясно описать. Из первой главы мы помним, что исполнитель должен действовать совершенно механически, не вкладывая в свою работу никакой инициативы.
Но что или кто может в наибольшей степени обладать таким свойством? Конечно, машина. Но ресурсы реальной машины ограничены, а при выполнении алгоритмов мы их считаем неограниченными. Поэтому машина должна быть воображаемой. При желании можно будет создать реальную модель машины Тьюринга, но эта модель уже будет располагать, конечно, только ограниченными ресурсами.
Итак, машина должна перерабатывать какие-то объекты в искомые результаты. Наиболее простыми объектами являются строки, составленные из символов. Символы, из которых образуют строки, называют в теории алгоритмов буквами. Значение этого слова отличается от общепринятого. Мы знаем, что только некоторые символы называют буквами. Именно символы, служащие для записи слов естественного языка (читатель знает русские буквы, латинские буквы, греческие буквы). Кроме таких символов, известны еще символы, применяемые для записи чисел; их называют цифрами. Наконец, читателю известны многие знаки, которые в обиходе не называют ни буквами, ни цифрами. Таковы знаки препинания, знаки математических действий и т. п. В теории алгоритмов любые неделимые и не изменяющие своего вида знаки называют буквами.
Строки букв в теории алгоритмов называют словами. Этот термин по своему смыслу тоже отличен от общепринятого. Например, строку букв «аАлбмв» не считают словом. В теории алгоритмов это — слово. Точно так же словом является строка букв (знаков) .6;+ М— !?
В жизни принято считать словами строчки букв, являющиеся словами языка, в частности, наделенные смыслом. В теории алгоритмов понятие слова не связывают с наличием в нем смысла. Это не значит, что слова должны быть бессмысленными. Они могут иметь смысл и даже обычно имеют какой-то смысл. Но термин «слово» означает лишь структуру объекта, построенного из символов-букв: это строка букв. Чем же обусловлен выбор слов в качестве объектов для применения к ним машин? Для их записи можно ограничиться наиболее простым техническим устройством — бумажной (или магнитной, или какой-нибудь другой) лентой. Ленту будем считать бесконечной в обе стороны и разбитой на клетки равной величины. В каждой клетке может быть записана в точности одна буква. Для удобства можно считать, что пустота клетки означает наличие в ней «пустой буквы». Обозначим пустую букву значком йо. Кроме этой буквы для данной машины должны быть допустимы еще какие-то (уже не пустые) буквы. Допустим, что таких разных между собой букв еще п. Обозначим их а1, а2, ..., ап.
Итак, мы имеем алфавит а0, а1, а2, ..., ап букв, которые могут быть записаны на ленте. Этот алфавит называют внешним алфавитом машины Тьюринга.
Для того чтобы передвигать ленту, машина Тьюринга снабжена простым лентопротяжным механизмом, который может либо быть неподвижным (при этом и лента неподвижна), либо перемещать ленту на одну клетку — вправо или влево.
Для того чтобы читать написанное на ленту или писать что-либо на ней, машина Тьюринга имеет головку чтения-записи. При этом считают, что головка может за один прием прочитать только одну букву, написанную в той клетке ленты, которая расположена под головкой. Чтение буквы не изменяет того, что написано в клетке. Головка записывать может за один прием тоже только одну букву в той клетке ленты, которая стоит под головкой. При этом она сперва стирает прежнюю букву, а затем на ее месте записывает новую (может быть, в частности, одинаковую с прежней).
Наконец, основной частью машины является логический блок. На этом блоке имеется кнопка, при нажиме которой он принимает исходное (для работы) состояние и начинает работать. Кнопка при этом остается утопленной до тех пор, пока машина не остановится сама. Тогда она «выскакивает», и машину можно использовать для новой работы. Одновременно с «выскакиванием» кнопки машина подает достаточно громкий и не очень продолжительный сигнал.
Работает логический блок следующим образом.
1) Он заставляет головку прочитать букву, которая стоит на ленте под нею.
2) В зависимости от прочитанной буквы и того состояния, в котором находится он сам, а) заставляет головку записать на ленте в той клетке, которая находится под головкой, некоторую букву; б) заставляет лентопротяжный механизм передвинуть ленту вправо, влево или остаться на месте, опять-таки в зависимости от прочитанной буквы и своего состояния; в) изменяет свое собственное состояние.
3) Если в результате действий, указанных в п. 2, буква, расположенная под головкой, положение ленты и состояние логического блока машины окажутся теми же, которые были непосредственно перед выполнением этих действий, машина останавливается. В остальных случаях логический блок возвращается к выполнению п. 1.
Логический блок способен находиться в каждый момент в- .одном из определенных состояний. Обозначим его возможные состояния символами р1, р2, ..., рт. Последовательность этих символов называют внутренним алфавитом (состояний) машины.
Введем еще обозначения d-1, d0, d1 соответственно для обозначения движения ленты влево, стояния ленты на месте и движения ленты вправо. Теперь можно описать поведение машины при выполнении логическим блоком п. 2 так: если головка читает букву ai и блок находится в состоянии pj, то поведение машины определяет запись axdypz, означающую: «записать на ленте вместо ai букву аx, совершить перемещение ленты dy, логическому блоку перейти в состояние pz».
Очевидно, различные машины Тьюринга отличаются друг от друга тем, как они реагируют на сочетания аi, рj -для разных i и j. Наиболее компактно можно представить все случаи сочетаний аi, pj и все виды реакций машины на них, если составить так называемую функциональную таблицу с двумя входами, в клетках которой стоят тройки символов вида axdypz.
Читатель, наверное, обратил внимание на то, что в машине Тьюринга можно различить две части: постоянную, которая одинакова для всех машин (устройство машины), и переменную, отличающую одну машину от другой (внутренний и внешний алфавиты и функциональная таблица).
Таблица 1
Функциональная таблица
-
p1
p2
…
pj
…
pm
a0
a1
.
.
.
ai
axdypz
.
.
.
an
Если записать на ленте машины Тьюринга некоторое слово в алфавите А (внешнем), составленное из букв а1, а2, ..., ап, и установить начальную букву этого слова под читающей головкой, или оставить ленту пустой (т. е. установить пустое слово), а затем нажать пусковую кнопку, машина начнет действовать. При этом возможны два случая: 1) работа машины после конечного числа шагов прекратится с выдачей сигнала; 2) машина никогда не остановится; никакого результата она не даст. В первом случае говорят, что машина применима к исходному данному, во втором случае — что она к исходному данному неприменима.
Если машина применима к исходному данному, то она приводит к результату: а) пустому слову, если под головкой находится буква а0; б) слову из букв а1, а2, ..., ап, ограниченному с двух сторон пустыми буквами, если одна из букв (непустая) этого слова находится под головкой.
Соответствие, устанавливаемое машиной Тьюринга между теми исходными данными, к которым она применима, и результатами ее работы, представляет собой некоторую функцию (в математическом смысле).
Если для функции f(x) имеется машина, реализующая ее, то говорят, что f(x) вычислима по Тьюрингу. Функцию, для вычисления которой существует алгоритм, называют вычислимой. Тьюринг высказал предположение (мы будем его называть основным тезисом Тьюринга), что любая вычислимая функция вычислима по Тьюрингу. Другими словами: для любой вычислимой функции можно построить машину Тьюринга, реализующую ее.
Для примера опишем машину Тьюринга, которая вычисляет функцию λ(х)=х+1, уже знакомую нам из предыдущего параграфа (это одна из базисных рекурсивных функций). Эта функция имеет определенные значения только для целых неотрицательных значений х. Условимся значения х записывать на ленте машины в виде строки, состоящей из букв | (палочек). Кроме этих букв, нам нужна еще одна (пустая) буква. Обозначим ее знаком □ (на ленте она будет изображаться пустой клеткой). Число нуль будем изображать «пустой» строкой палочек.
Записав значение х (если оно не является нулем) в виде строки палочек на ленте машины и расположив ленту так, чтобы самая левая палочка была под головкой чтения-записи, пустим машину (нажимом кнопки).
Логический блок в начальный момент примет состояние р1 Нужно чтобы он, если головка прочитает букву |, заставил ее снова записать эту же букву, ленту — продвинуться влево, а сам перешел снова в первое состояние (т. е. сохранил его). Если же головка прочитает букву □, а логический блок при этом будет находиться в состоянии Pi, то он должен заставить головку написать |, ленту — остаться на месте, а сам перейти в состояние р2.
Находясь в этом состоянии, он при чтении головкой буквы | должен заставлять ее опять писать букву |, ленту — стоять на месте, а сам сохранять свое состояние р2. Мы видим, что при этом машина остановится и подаст сигнал. Какое бы число мы ни записали на ленте, машина Тьюринга, двигая ленту влево, просмотрит все палочки, потом продвинет ленту еще на один шаг, припишет к числу еще одну палочку и остановится. Функциональная таблица машины Тьюринга, вычисляющей значения функции λ(х), представлена в табл. 2.
Таблица 2
Описание работы машины Тьюринга, реализующей функцию λ(х)
-
p1
p2
□
| d0p2
|
| d-1p1
| d0p2
В пустой клетке таблицы можно записать что угодно, потому что ее содержимое не влияет на работу машины. Из этой таблицы видно, что машина будет давать правильный результат и при х=0. При этом под головкой машины нужно установить клетку с буквой □ (а на ленте не должно быть ни одной буквы |). После пуска машины она запишет вместо этой буквы букву | и остановится.
Машины Тьюринга не только соответствуют некоторым алгоритмам специального вида, но и сами являются ими. Действительно, читатель уже понял, что машины Тьюринга — это воображаемые машины, существующие не физически, а «идеально», в наших мыслях, а точнее — в виде некоторых текстов на естественном языке. Сконструировать машину Тьюринга — значит составить ее описание, а не изготовить техническое устройство. Работа машины Тьюринга заключается в том, что человек выполняет определенные действия, руководствуясь описанием машины Тьюринга и ее функциональной таблицей, имея заданное начальное (подлежащее преобразованию) слово и получая на очередном шаге промежуточный результат.
Таким образом, машины Тьюринга — это тексты на некотором языке, а вовсе не машины в обычном смысле слова. Эти тексты имеют «естественный смысл», присущий им как текстам естественного языка, «смысл» описаний некоторых устройств и выполняемых ими действий. Но они имеют и второй «смысл» — математический, определяющий действия человека, якобы наблюдающего за работой машины Тьюринга, а в действительности выполняющего определяемый ее «конструкцией» процесс. При этом основной частью, определяющей действия исполнителя, следует считать функциональную таблицу, так как именно она определяет конкретный процесс преобразования исходного данного. Таким образом, машина Тьюринга представляет собой алгоритм, записью которого можно считать функциональную таблицу, а правилом (алгоритмом) выполнения — описание ее устройства. Приведенный выше пример показывает, что, в частности, можно строить машины Тьюринга для вычисления рекурсивных функций.
Основной тезис Тьюринга является аналогом уже знакомого нам тезиса Черча. Может показаться, что машины Тьюринга приводят к более широкому понятию вычислимости, чем рекурсивные функции. Но это не так, потому что буквы любого алфавита можно закодировать с помощью двух символов 1 и 2 (метод такого кодирования описан в § 2 гл. 5) и тем самым установить соответствие между преобразованиями слов, осуществляемыми машинами Тьюринга, и некоторыми неотрицательными целочисленными функциями неотрицательных целочисленных аргументов.