
- •Введение
- •Глава 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. Экстраалгоритм и три неразрешимые проблемы
Вернемся на время к нормальным алгоритмам. Мы помним, что запись нормального алгоритма в алфавите А содержит, кроме букв в А, еще две буквы: «→» и «→•».Введем временно еще одну букву, не одинаковую ни с одной из указанных двух букв и не являющуюся буквой
в А.
Пусть это будет для определенности л. Запись нормального алгоритма можно превратить в слово, выписывая его формулы одну за другой и разделяя их буквами X. Такое слово очень легко снова превратить в запись нормального алгоритма (столбец формул). Теперь можно придумать некоторый прием кодирования, в результате которого полученное слово станет словом в А, конечно при условии, что алфавит А состоит не менее, чем из двух букв. Этот способ кодирования, например, может быть следующим. Перенумеруем все буквы алфавита. Пусть при этом будут использованы номера 1, 2..... k (k — число букв, входящих в А). Далее, букве «→» присвоен номер k+1, букве «→•»— номер k+2, а букве k — номер k+3. Возьмем теперь какие-либо две буквы в А. Пусть для определенности это будут а и b. Будем кодом j-й буквы (по нашей нумерации) считать слово в А, начинающееся буквой а, содержащее затем j букв b и кончающееся снова буквой а. Например, код четвертой буквы будет иметь вид
a b b b b а.
Заменяя в слове, которое мы получили из записи нормального алгоритма, все буквы их кодами, получим (новое) слово в А, являющееся кодом нормального алгоритма.
Условимся говорить, что алгоритм F: а) применим к алгоритму Ф, если он применим к его коду, и б) неприменим к алгоритму Ф, если он неприменим к его коду. Теперь можно говорить о самоприменимости нормального алгоритма или о его несамоприменимости.
Легко убедиться в том, что нормальный алгоритм в алфавите А, применимый ко всем несамоприменимым и только несамоприменимым алгоритмам, невозможен (не существует). Если бы он существовал, то не мог бы быть самоприменимым, так как он применим только к несамоприменимым алгоритмам. Одновременно он не мог бы быть и несамоприменимым, так как он применим ко всем несамоприменимым, а значит, и к себе.
Такой нормальный алгоритм, назовем его нормальным экстраалгоритмом в А15, не существует. Можно доказать, что не существует и нормального экстраалгоритма над А.
He может существовать и какой-нибудь алгоритм из других классов алгоритмов, который был бы применим ко всем несамоприменимым нормальным алгоритмам в Л (его будем называть экстраалгоритмом). Это вытекает из принципа нормализации, который гласит, что в этом случае существовал бы эквивалентный ему нормальный алгоритм над алфавитом А, мы же знаем, что такого нормального алгоритма нет. Но из невозможности указанного экстраалгоритма вытекает ряд интересных следствий.
Оказывается, что невозможен алгоритм, который распознавал бы несамоприменимость нормальных алгоритмов. Такой алгоритм, если бы он существовал, должен бы быть применимым к любому нормальному алгоритму и перерабатывать его в некоторое определенное слово, если он несамоприменим. Это определенное слово, если оно получится, будет обозначать ответ «да».
В случае отрицательного ответа может получаться либо какое-нибудь определенное слово, либо любое слово, отличное от слова, имеющего смысл «да» (естественно считать, что если не «да», то «нет»). В дальнейшем для краткости условное слово, обозначающее «да», будем называть словом «да».
Докажем, что алгоритм распознавания несамоприменимости нормальных алгоритмов невозможен. Для этого предположим, что такой алгоритм существует. Назовем его В. Тогда можно построить следующий алгоритм (обозначим его С):
1. Выполнить алгоритм В. Перейти к следующему пункту.
2. Если получен ответ «да», то перейти к п. 3, иначе перейти к п. 4.
3. Окончить процесс.
4. Перейти к п. 4.
Алгоритм С применим к каждому несамоприменимому нормальному алгоритму (и дает для него результат «да»), а в случае, когда алгоритм несамоприменим (ответ «да» алгоритмом В не получен), его выполнение продолжается бесконечно (он «зацикливается» на п. 4). Но тогда С применим ко всем несамоприменимым и только несамоприменимым нормальным алгоритмам в А. Он, следовательно, является экстраалгоритмом. Значит, разрешимость проблемы распознавания несамоприменимости привела бы к абсурду. Поэтому указанная проблема неразрешима.
Но теперь ясно, что неразрешима и проблема распознавания самоприменимости. В самом деле, если бы существовал алгоритм D, распознающий самоприменимость, то существовал бы и алгоритм, гласящий:
1. Выполнить алгоритм D. Перейти к п. 2.
2. Если получено слово «да», перейти к п. 3, иначе перейти к п. 4.
3. Написать «нет». Конец.
4. Написать «да». Конец.
Но последний алгоритм распознавал бы несамоприменимость нормальных алгоритмов в А. Как мы знаем, это невозможно, значит, невозможен и алгоритм D.
Наконец, справедлива теорема:
Проблема распознавания применимости произвольного нормального алгоритма в А к произвольному слову в А неразрешима.
Допустим противное. Пусть существует алгоритм Е, который по заданному алгоритму в A и заданному слову в А распознает, применим ли указанный алгоритм к указанному слову.
Но отличить, является ли слово в A кодом заданного нормального алгоритма или не является, нетрудно. Будем считать, что для этого нами построен некоторый алгоритм G.
Тогда можно построить алгоритм Н:
1. Применить G к заданному слову в А. Перейти к п. 2.
2. Если G дал слово «да», перейти к п. 3, иначе перейти к п. 4.
3. Выполнить алгоритм Е. Конец.
4. Перейти к выполнению п. 4.
Алгоритм Н является алгоритмом, распознающим самоприменимость нормальных алгоритмов в А. Следовательно, он невозможен. Но тогда невозможен и алгоритм Е, так как предположение о его возможности привело к противоречию. Тем самым теорема доказана.
Читатель видит, что некоторые массовые проблемы, вовсе не имеющие абсурдного характера, неразрешимы потому, что из их разрешимости можно было бы вывести абсурд. Нужно заметать, что неразрешимость (массовой) проблемы распознавания применимости нормального алгоритма в А к слову в А совсем не означает, что мы вообще не можем распознавать применимость конкретного алгоритма к конкретному слову или к различным словам. Например, нормальный алгоритм «→•» применим к любому слову в Л, и это сразу видно. Любой алгоритм «→•α», где α — буква А, тоже применим к любому слову в Л. Наоборот, алгоритм «→α» неприменим ни к какому слову в А (он порождает бесконечный процесс приписывания букв а слева к преобразуемому слову).
Неразрешимость проблемы распознавания применимости нормального алгоритма к слову в А означает отсутствие общего метода, который для любого алгоритма и любого слова в А мог бы дать интересующий нас ответ. Ограничивая класс алгоритмов -или класс обследуемых слов, или и то и другое, можно в некоторых случаях получить разрешимые массовые проблемы.
Не значит ли это, что неразрешимость связана с тем, что исследуемая проблема является «слишком массовой»? Нет, не значит, потому что, вводя ограничения на алгоритмы или на слова, или и на то и другое, можно все множество одиночных проблем, входящих в состав массовой проблемы, оставить бесконечным (счетным), имеющим то же кардинальное число, что и исходное множество, но тем не менее получить разрешимую проблему. В некоторых случаях множество одиночных проблем неразрешимой проблемы оказывается подмножеством аналогичного множества одиночных проблем, образующих разрешимую проблему.
Заметим еще, что неразрешимость проблемы применимости нормальных алгоритмов легко переносится на любой другой достаточно четко описанный класс алгоритмов, если только для алгоритмов этого класса можно придумать такой способ кодирования, при котором коды алгоритмов оказывались бы допустимыми исходными данными для таких алгоритмов.
В частности, для машин Тьюринга неразрешимость проблемы распознавания их применимости к словам в А выражалось бы следующей теоремой:
Невозможна машина Тьюринга с внешним алфавитом А, распознающая применимость произвольной машины Тьюринга с внешним алфавитом А к произвольному слову в А (при условии, что А содержит не менее двух букв).