Справочник от Автор24
Поделись лекцией за скидку на Автор24

Теория алгоритмов

  • ⌛ 2006 год
  • 👀 560 просмотров
  • 📌 489 загрузок
  • 🏢️ Государственное образовательное учреждение высшего профессионального образования «Уральский государственный педагогический университет
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Теория алгоритмов» pdf
Министерство образования и науки Российской Федерации Государственное образовательное учреждение высшего профессионального образования «Уральский государственный педагогический университет» А.П. Ильиных Т ЕОРИЯ АЛГОРИТМОВ Учебное пособие Екатеринбург 2006 УДК 510.5 И 45 РЕЦЕНЗЕНТ: член-корреспондент РАН, доктор физико-математических наук, профессор А.А.Махнев. И 45 Ильиных А.П. Теория алгоритмов: учебное пособие / Урал. гос. пед. ун-т.– Екатеринбург, 2006. – 149 с. Пособие является курсом лекций по теории алгоритмов и предназначено для студентов дневного и заочного отделений математических факультетов педагогических вузов. УДК 510.5 c Уральский государственный  педагогический университет, 2006 c Ильиных А.П., 2006  Содержание Лекция 1. Алгоритмы в математике. Основные черты алгоритмов . . . 4 Лекция 2. Числовые функции и алгоритмы их вычисления . . . . . . . . . 11 Лекция 3. Примитивно рекурсивные функции . . . . . . . . . . . . . . . . . . . . . 19 Лекция 4. Частично рекурсивные функции. Тезис Черча . . . . . . . . . . . 28 Лекция 5. Машины Тьюринга . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .35 Лекция 6. Машины с неограниченными регистрами . . . . . . . . . . . . . . . 42 Лекция 7. Вычислимость частично рекурсивных функций на МНР 53 Лекция 8. Нумерации . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Лекция 9. Универсальные функции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Лекция 10. Нормальные алгорифмы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 Лекция 11. Неразрешимые алгоритмические проблемы . . . . . . . . . . 104 Лекция 12. Алгоритмические проблемы в логике и математике . . . 119 Лекция 13. Разрешимые и множества и предикаты . . . . . . . . . . . . . . . 130 Лекция 14. Перечислимые и диофантовы множества . . . . . . . . . . . . . 137 Литература . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Лекция 1. Алгоритмы в математике. Основные черты алгоритмов Алгоритмы в математике. Понятие алгоритма является одним из основных понятий современной науки. Во многих разделах математики, логики и информатики возникают вычислительные процедуры механического характера. В них требуется найти решение конкретной задачи по некоторому общему правилу (алгоритму) для решения задач данного класса. Алгоритмом является, например, правило сложения натуральных чисел, записанных в десятичной системе счисления. Оно описывает способ для вычисления суммы произвольных натуральных чисел. Зная общее правило, мы применяем его к конкретной паре чисел, например, к 5627, y 4283, и получаем их сумму. В алгебре рассматчислам x ривается алгоритм Евклида для нахождения НОД целых чисел или многочленов, в информатике — алгоритм обхода вершин графа и т.д. Рассмотрим неформальное определение понятия алгоритма. Это определение не является строгим математическим определением, а является лишь разъяснением понятия на интуитивном уровне. Алгоритм — это точное предписание, которое задает вычислительную процедуру. Данная процедура перерабатывает исходный набор данных P (входной объект) и направлена на получение обусловленного этими данными результата Q (объекта на выходе). Она состоит из отдельных, элементарных шагов — тактов работы алгоритма. Каждый шаг заключается в смене одного набора данных другим набором (объектом, состоянием). Переход от предыдущего состояния к последующему происходит по заранее заданному, конечному набору инструкций. Эти инструкции не должны предполагать никаких догадок и вероятностных соображений со стороны человека или машины, нужно только точно их исполнять. Некоторые состояния опознаются как заключительные, при которых процесс вычислений заканчивается. При этом на основе некоторой инструкции определяется, что считать результатом вычислений. Пусть алгоритм A имеет исходный набор данных P . Возможны следующие три случая протекания алгоритмического процесса. 1. На некотором шаге возникает состояние, опознаваемое как заключительное. При этом происходит остановка вычислений и выдается результат Q. 2. Каждое очередное состояние сменяется последующим до бесконечности, т.е. процесс вычислений никогда не останавливается. 3. При некотором состоянии возникает ситуация, когда процесс вычислений обрывается без выдачи результата (например, не срабатывает инструкция для определения результата вычислений). Тем самым нет перехода к следующему шагу и нет результата вычислений. В этом случае говорим, что произошла безрезультатная остановка. Считается, что алгоритм A применим к исходному набору данных P тогда и только тогда, когда выполнен случай 1, т.е. когда процесс вычислений заканчивается и получен результат вычислений Q. Этот результат будем обозначать через AP . В случаях 2 и 3 результат AP  не существует. Само слово «алгоритм» происходит от латинской транслитерации «alchorismi» или «algorismi» арабского имени среднеазиатского ученого ал-Хорезми́ Мухаммеда бен Муса (780–847). По латинским переложениям арифметического трактата ал- Хорезми средневековая Европа познакомилась с индийской десятичной позиционной системой счисления. Основные черты алгоритмов. Итак, мы привели разъяснение, а не строгое определение алгоритма. Отметим некоторые характерные черты понятия алгоритма. Дискретность алгоритма. Процесс последовательного преобразования исходного набора данных в алгоритмическом процессе происходит по тактам (шагам): такт 1, такт 2,. . . . Каждый такт является сменой одного набора данных другим набором. Детерминированность алгоритма. В алгоритмическом процессе происходит преобразование объекта P на входе в объект Q на выходе алгоритма. При этом все шаги алгоритма A, величины промежуточных вычислений и выходной объект Q однозначно обусловлены заданием пары A, P . Это свойство – детерминированность алгоритма. Детерминированность алгоритма означает, что при повторном выполнении A с объектом P на входе снова получится объект Q. Тем самым обеспечивается возможность сообщения алгоритма одним лицом другому лицу. При этом другое лицо сможет выполнять алгоритм без участия первого. В частности, возможна передача выполнения алгоритма компьютеру. Массовость алгоритма. Говоря об алгоритме, мы уже отмечали такое его свойство, как массовость — требование найти единый алгоритм для решения не отдельной задачи, а серии задач из некоторого класса. Отдельные задачи класса получаются при варьировании входных данных. Поэтому для каждого алгоритма существует некоторая фиксированная, потенциально бесконечная совокупность X возможных начальных данных. Из этой совокупности выбирается объект P , поступающий на вход алгоритма. Например, в алгоритме сложения натуральных чисел в качестве X выступает множество всех пар a, b, где a, b – произвольные натуральные числа. Изучая алгоритмы, мы придерживаемся некоторых соглашений — абстракций теории алгоритмов. В качестве примера рассмотрим абстракцию потенциальной осуществимости. Как уже отмечалось, алгоритмический процесс при выработке результата Q из исходных данных P совершает несколько отдельных шагов. Число таких шагов может быть настолько велико, что достижение результата Q является практически неосуществимым. Однако в общей теории алгоритмов мы не учитываем практическую осуществимость и считаем возможным выполнить любое конечное число шагов. Это положение называется абстракцией потенциальной осуществимости. Это же положение предполагает, что мы можем оперировать со сколько угодно большими объектами, например, сколь угодно длинными словами и т.п. Американский математик Эдвард Каснер назвал число 10100 «гуголом». Гугол больше, чем количества элементарных частиц в известной нам части Вселенной. Поэтому мы не можем практически осуществить работу со словом из 10100 букв. Однако абстракция потенциальной осуществимости разрешает нам оперировать с такими большими объектами. Теория алгоритмов, как и любая дисциплина, кроме связи с другими дисциплинами имеет собственную проблематику. Рассмотрим в качестве примера следующий вопрос. Пусть имеется алгоритм A с множеством начальных данных X. Объект P  X поступает на вход алгоритма A. К нему применяются инструкции данного алгоритма с намерением получить результат вычислений. Возможно, что на выходе алгоритма получится результат вычислений AP , а возможно такого результата нет. Поэтому в произвольном алгоритме наряду с множеством начальных данных X имеется подмножество D в X, состоящее в точности из тех объектов P  X, для которых существует результат вычислений AP . Множество D называется областью применимости алгоритма. Считаем, что алгоритм A реализуется некоторой машиной M . Поместим в нее входной объект P и запустим машину. После миллиона тактов работы машины мы начинаем подозревать, что машина никогда не остановится. Но, может быть, нам нужно подождать, машина совершит еще несколько тактов работы и выдаст результат? Как нам заранее знать, что остановка машины все же произойдет? Для этого нужно придумать алгоритм B, который по объекту P и программе машины определяет, остановится M или нет. Тем самым алгоритм B для P  X определяет, верно ли, что P  D или нет. Было бы хорошо, если бы алгоритм B всегда существовал. К сожалению, это не так, что будет установлено в дальнейших лекциях. Необходимость уточнения понятия алгоритма. Длительное время интуитивного понятия алгоритма было вполне достаточно для задач математики и логики. Пусть имеется некоторая алгоритмическая проблема, т.е. необходимо найти алгоритм для решения определенного класса задач. Если такой алгоритм найден, то предложенный способ для решения задачи признается всеми как алгоритм, исходя из их собственного интуитивного представления об алгоритме. Поэтому не требуется точного определения понятия алгоритма. Однако ситуация становится противоположной, если у нас после длительных, безуспешных попыток нахождения алгоритма возникает гипотеза, что такого алгоритма не существует. Чтобы иметь возможность доказывать несуществование алгоритма, мы должны математически точно определить объект, существование которого будет опровергаться. Для доказательства несуществования алгоритма необходимо располагать точным определением понятия алгоритма. Формализации Черча, Тьюринга и Маркова. В двадцатых годах XX века задача точного определения понятия алгоритма стала одной из центральных математических проблем. Она заключалась в попытке дать строгое математическое определение алгоритма, которое соответствовало бы имевшимся в то время интуитивным представлениям об алгоритме. Решение данной проблемы было получено в первой половине XX века. Мы рассмотрим следующие три варианта определения алгоритма. 1) С точки зрения А.Черча и С. Клини, в алгоритмическом процессе вычисляется значение некоторой функции f x1 , x2 , . . . , xn , определенной на множестве натуральных чисел. Строгое определение алгоритма, предложенное Черчем и Клини, основано на понятии частично рекурсивной функции. Они предложили отождествить интуитивное понятие «алгоритм» со строгим математическим понятием «частично рекурсивная функция». 2) С точки зрения английского математика А.Тьюринга алгоритмический процесс — это работа некоторой воображаемой вычислительной машины — машины Тьюринга. Он предложил отождествить интуитивное понятие «алгоритм» с точным понятием «машина Тьюринга». В качестве вычислительной машины будет также рассмотрена машина с неограниченными регистрами (МНР). Это абстрактная машина, более сходная с реальным компьютером по сравнению с машиной Тьюринга. 3) Третий вариант определения алгоритма предложил в 1947 г. российский математик А.А.Марков. С его точки зрения, алгоритмический процесс – это переработка слов некоторого алфавита с помощью точно описанных правил переработки. Вместо интуитивного понятия «алгоритм» А.А.Марков вводит строгое понятие «нормальный алгорифм». Каждый из трех вариантов определения понятия алгоритма фиксирует свой класс K рассматриваемых объектов, свои правила переработки, окончания и опознания результата. Однако эти три варианта определения понятия алгоритма равносильны. Это означает, что при подходящей кодировке объекты из K можно трактовать в виде объектов, с которыми работают при другом определении алгоритма. То же самое с правилами переработки, правилами окончания и опознания результата. При этом оказывается, что для всех определений и утверждений при одном определении алгоритма возникают аналогичные определения и утверждения при другом определении. Поэтому мы имеем взаимную моделируемость этих понятий. Это указывает на то, что мы открыли некоторую самостоятельную сущность — понятие алгоритма, а три различных определения отражают в разных формах это понятие. В последующих лекциях будут подробно изучены данные три формы точного определения понятия алгоритма. Упражнения к лекции 1 З АДАЧА 1. Рассмотрим в качестве алгоритма A одну из следующих операций: сложение, вычитание, умножение, деление натуральных чисел. В каждом случае описать множество объектов на входе и на выходе алгоритма A. Верно ли, что объект AP  на выходе алгоритма A существует для произвольного объекта P ? З АДАЧА 2. Среди инструкций алгоритма A имеется следующая. Нужно подбросить игральную кость и в зависимости от того, какое число выпало, четное или нечетное, выполнить одну из двух соответствующих инструкций. Какому необходимому требованию, предъявляемому к понятию алгоритма, не удовлетворяет данный набор инструкций? З АДАЧА 3. Задан алгоритм A, на вход которого поступает произвольное натуральное число n. Требуется определить, является ли число n простым числом. Считаем шагами работы алгоритма A проверку делимости числа n на 2, на 3, . . . 1 Приведите оценку для числа шагов, достаточных для получения результата. 2 Пусть Q AP  — объект на выходе алгоритма A. Как можно описать объект Q? К какому типу данных естественно отнести объект Q? Есть ли этот тип данных в языках программирования? З АДАЧА 4. В лекции 1 обсуждалась следующая задача. Указать некоторый алгоритм B, который по произвольному объекту P , предъявленному на вход алгоритма A, определяет, будет ли получен результат вычислений Q AP . Верно ли, что B существует в случае, когда A— алгоритм нахождения обратной матрицы? З АДАЧА 5. Пусть A — произвольный алгоритм. Какой из вариантов утверждений правильный? 1 В алгоритме A обязана (не обязана) иметься граница для размера входного объекта P ? 2 Число инструкций алгоритма A всегда конечно (возможно бесконечное число инструкций). З АДАЧА 6. Возможна ли ситуация, когда для исполнения алгоритма нужна информация, отличная от инструкций алгоритма и его входного объекта? З АДАЧА 7. В каком из следующих пунктов речь идет об абстракции потенциальной осуществимости? Указать в этом случае правильный вариант ответа. Подтвердить этот вариант ответа на конкретном алгоритме. 1 В алгоритме рассматривается правило для решения не отдельной задачи, а правило для решения серии задач. 2 Число шагов конкретного алгоритма может быть произвольным натуральным числом (число шагов конкретного алгоритма ограничено некоторым числом n, так как при большем количестве шагов невозможна их практическая реализация). 3 По произвольному объекту P , предъявленному на вход алгоритма A, мы должны знать о количестве шагов, за которые получим AP . 4 Количество инструкций алгоритма конечно, но может быть сколько угодно большим натуральным числом. З АДАЧА 8. Какой из пунктов а) или б) нужно выбрать в предложениях 1 и 2? 1 Пусть имеется некоторое правило, и нам нужно признать это правило в качестве алгоритма для решения некоторого класса задач. Для этого: а) мы должны располагать точным определением алгоритма; б) нам достаточно интуитивного представления о понятии алгоритма. 2 Пусть нам требуется проверить доказательство несуществования некоторого алгоритма. Для этого: а) мы должны располагать точным определением алгоритма; б) нам достаточно интуитивного представления о понятии алгоритма. 1, 2, 3, . . . нужЗ АДАЧА 9. Пусть для произвольного числа n но найти цифру с номером n после запятой в десятичной дроби, изображающей число π. Существует ли алгоритм для выполнения поставленной задачи? З АДАЧА 10. Для произвольного алгоритма A возможны три случая завершения работы: 1 работа с выдачей результата; 2 бесконечная работа алгоритма; 3 безрезультатная остановка. Показать, что случай 3 введением некоторой дополнительной инструкции можно свести к случаю 2. Лекция 2. Конструктивные объекты. Числовые функции и алгоритмы их вычисления Конструктивные объекты. В современной математике, в особенности в теории алгоритмов, нужно четко представлять различие между «конструктивными» и «неконструктивными» подходами в рассмотрении объектов и законов логики. Для того чтобы правильного понимать понятие алгоритма, нужно ответить на следующий вопрос. Какие объекты поступают на вход алгоритма, какие объекты возникают в процессе вычислений и на выходе алгоритма? Ответ следующий — конструктивные объекты. Слова «вычислительная процедура» в определении алгоритма нужно понимать в широком смысле, а не только как числовые вычисления. Исходными и промежуточными данными, а также и результатом алгоритмического процесса являются конструктивные объекты. Понятие конструктивного объекта является первичным, неопределяемым понятием теории алгоритмов, которое разъясняется далее на ряде примеров. Простейшим примером конструктивных объектов являются слова в некотором алфавите. Пусть A a, b, c, . . .  конечное множество, которое назовем алфавитом. Элементы множества A будем называть буквами или символами. Можно рассматривать и счетные алфавиты. В таком случае буквами являются также знаки вида a1 , b , c и т.п. Словом в алфавите A называется конечная последовательность  u a1 a2 . . . an (2.1) букв алфавита A . Натуральное число n  0 называется длиной слова u. В теории алгоритмов число 0 удобно считать натуральным числом. Поэтому множество натуральных чисел имеет вид N 0, 1, 2, . . .. Слово длины 0 называется пустым словом. Оно не имеет ни одной буквы и обозначается через Λ. Покажем, что сложение натуральных чисел можно рассматривать как алгоритм переработки слов. Пусть, например, на входе алгоритма имеет12  24 длины 5. Тогда на выходе получим слово Q 36. ся слово P Оба слова P и Q являются словами в алфавите A 0, 1, . . . , 9, , состоящем из 11 символов — цифр и знака +. Поэтому алгоритм сложения натуральных чисел перерабатывает конструктивные объекты — слова в алфавите A . Можно указать другие конструктивные объекты: натуральные числа, записанные в какой-либо системе счисления; слова в естественном языке; формулы в алгебре высказываний. В школьном курсе алгебры рассматриваются буквенные выражения, в высшей алгебре — матрицы, а в дискретной математике — графы, в информатике — программы на каком-либо языке программирования. В случае нелинейной записи, например, записи матрицы в виде A 10 12     3 24 6 5  5Æ 7 ÆÆ 3 легко перейти к линейной записи матрицы в виде слова A 10, 12, 5 , 3, 24, 7 , 6, 5, 3 . Это запись матрицы A в компьютерной системе GAP, предназначенной для вычислений в дискретной математике. Конструктивный объект A можно представить сконструированным из подобъектов A1 , A2 , . . .. Эти подобъекты также собраны из меньших частей B1 , B2 , . . . и т.д. Наконец, мы доходим до частей, не составленных из меньших частей. Это символы, распознаваемые в один прием. Они образуют алфавит, в котором рассматриваемые объекты можно выразить в виде слов с помощью линейной записи. Именно так мы поступили с матрицей A, перейдя к линейной записи матрицы в виде сло10, 12, 5 , 3, 24, 7 , 6, 5, 3 . При этом частями матрицы были ва A строки. Они образованы из своих частей — элементов строк. Элементы строк составлены из символов алфавита 0, 1, . . . , 9, . Итак, мы установили следующее утверждение. Конструктивные объекты при подходящей записи могут быть представлены словами в некотором конечном алфавите. Оперируя с конструктивным объектом A по заданным инструкциям алгоритма, мы делаем определенные преобразования этого объекта. Данные преобразования учитывают расчлененность, дискретное построение объекта A из своих частей и состоят в локальной замене некоторых ча- стей на другие части. Например, в матрице можно заменить строку, а в слове заменить первую букву. Следующие объекты не являются конструктивными объектами. Мы не можем представить их в виде слов в некотором конечном алфавите. 1) Действительное число α, являющееся бесконечной десятичной дробью. 2) Произвольная функция f x из N в N. Счетные множества. Напомним некоторые сведения о счетных множествах. Множество A называется равномощным множеству B, если существует биективное (взаимно однозначное) отображение множества A во множество B. Если A равномощно B, то B равномощно A. Множество A называется счетным множеством, если оно равномощно множеству натуральных чисел N. В этом случае существует биекA и элемент a с условием f n a можно обозначить через ция f : N aj при i j. Обратно, an . Получим запись A a0 , a1 , a2 , . . . , где ai из такой записи следует счетность множества A. Получили следующее утверждение. П РЕДЛОЖЕНИЕ 2.1. Множество A счетно, тогда и только тогда, когда его элементы можно представить в виде бесконечной последовательности без повторений A a0, a1, a2, . . . , где ai aj при i j. (2.2) Пример. Множество целых чисел Z счетно, так как целые числа можно расположить в виде последовательности 0, 1, 1, 2, 2, 3, 3, . . . . Отметим следующие известные свойства счетных множеств. П РЕДЛОЖЕНИЕ 2.2 . 1 Подмножество счетного множества конечно или счетно. 2 Объединение конечного или счетного числа конечных или счетных множеств конечно или счетно. 3 Множество действительных чисел не является счетным множеством. 4 Множество M , состоящее из всех строк x1 , x2 , . . . , xn  произвольной длины n  0, где xi  N, является счетным множеством. 5 Пусть A — конечный алфавит и X — множество всех слов в алфавите A. Тогда множество X является счетным множеством. Пусть M — бесконечное множество конструктивных объектов, являющихся множеством входных объектов некоторого алгоритма. Множество M можно рассматривать как множество слов в некотором алфавите. По пункту 5) предложения 2.2 множество M является счетным множеством. Алгоритмы и функции. Вариант строгого определения алгоритма, предложенный Черчем и Клини, рассматривает алгоритмический процесс как процесс вычисления значений некоторой функции f , определенной на множестве N. Рассмотрим обоснование такой позиции. Пусть имеется некоторый алгоритм A. На его вход поступает объект P — набор данных u1 , u2 , . . . , un . Каждый конструктивный объект ui есть слово в некотором алфавите A . Слова в алфавите A образуют счетное множество и занумерованы натуральными числами. Поэтому каждый конструктивный объект u имеет номер x  N . Такая операция присвоения номеров называется кодированием объектов. Число x, присвоенное объекту, называется его кодовым номером. Отметим, что определение номера по объекту и восстановление объекта по номеру должно осуществляться с помощью некоторых алгоритмов. Подробно нумерации рассматриваются в лекции 8. Вместо конструктивных объектов u1 , u2 , . . . , un во всевозможных вычислениях можно рассматривать их кодовые номера x1 , x2 , . . . , xn . Предположим на вход алгоритма A поступила строка конструктивных объектов u1 , u2 , . . . , un , а на выходе алгоритма получен объект v с номером y. Переходя к кодовым номерам, можно считать, что на входе была строка x1, x2, . . . , xn из n натуральных чисел, а на выходе число y  N . x1, x2, . . . , xn Инструкции алгоритма y Инструкции алгоритма рассматриваем как «правило по которому строке x1 , x2 , . . . , xn  сопоставляем элемент y  N ». Если учесть обычное определение функции f x1 , x2 , . . . , xn  на множестве N как «правило, которое каждому набору аргументов x1 , x2 , . . . , xn  ставит в соответствие значение функции», то получаем следующую возможную точку зрения на понятие алгоритма. Алгоритм A вычисляет некоторую n-арную функцию f x1 , x2 , . . . , xn , определенную на множестве N. Слова «определенную на множестве N» означают, что вместо переменных подставляются натуральные числа. Из вышесказанного понятно, почему в теории алгоритмов функции, определенные на множестве натуральных чисел, являются одним из основных предметов обсуждения. Частичные функции. При наших рассмотрениях нужно учесть следующий факт. Когда имеется какой-либо объект P на входе алгоритма, то совсем необязательно, что он переработается в некоторый объект Q на выходе алгоритма. Следовательно, функция f , которую вычисляет алгоритм A такова, что ее значения могут быть определены не для всех наборов аргументов. В связи с этим возникает понятие частичной функции. Пусть n  N. О ПРЕДЕЛЕНИЕ 2.1 . Частичной n-арной функцией f , заданной на множестве натуральных чисел, называется правило, которое некоторым наборам x1 , x2 , . . . , xn  натуральных чисел ставит в соответствие однозначно определенное число f x1 , x2 , . . . , xn   N. Итак, значение функции f x1 , x2 , . . . , xn  может не существовать. Множество X, состоящее из всех наборов x1 , x2 , . . . , xn , для которых существует значение функции, называется областью определения функции f и обозначается через Dom(f ). Множество всех значений функции f называется областью значений функции f и обозначается через Ran(f ). 1, 2, , . . . , n, Множество всех строк x1 , x2 , . . . , xn , где xi  N для i n обозначается через N и называется n -ной степенью множества N. Поэтому Domf   Nn и Ran(f )  N. При этом Domf  Ranf  x1, x2, . . . , xn  f x1, x2, . . . , xn существует, f x1, x2, . . . , xn  x1, x2, . . . , xn  N. (2.3) (2.4) Тем самым n-арная частичная функция f — это отображение некоторого подмножества X Domf  из Nn во множество N . Отсюда следует Пусть f — n-арная частичная функция с З АМЕЧАНИЕ 2.1 . условием Domf  . Тогда число n определено однозначно. Наряду со словами f — n-арная функция, будем говорить также, что f — функция от n переменных (от n аргументов). Назовем функцию f всюду определенной, если ее значение определено при любом наборе аргументов. Поэтому частичная функция f x1 , x2 , . . . , xn  всюду определена тогда и только тогда, когда Dom(f)=Nn . При n 0 мы будем рассматривать всюду определенную нуль-арную функцию f , не имеющую аргументов. Тогда значения функции f не могут изменяться и равны некоторому числу a. В этом случае функция f (функция выделения числа a) отождествляется с числом a. Приведенные выше определения дословно переносятся на случай, когда вместо множества N выступает произвольное множество A. Если задана функция f , сопоставляющая элементам множества A элементы мноB. Если при жества B, то применяем краткую запись: функция f : A этом Domf  A, то говорим также, что f — отображение множества A во множество B. В дальнейшем слово «функция», если не оговорено противное, означает произвольную частичную функцию от нескольких переменных, принимающих значения во множестве натуральных чисел. Значение функции также должно быть натуральным числом. О ПРЕДЕЛЕНИЕ 2.2. Функция f x1 , x2 , . . . , xn  называется вычислимой, если существует алгоритм A, вычисляющий функцию f . Слова «алгоритм A вычисляет функцию f » означают следующее. 1) Если на вход алгоритма A поступает набор аргументов x1, x2, . . . , xn из области определения функции f , то алгоритм останавливается и выдает результат f x1 , x2 , . . . , xn . 2) Если на вход алгоритма A поступает набор аргументов вне области определения функции f , то алгоритм работает бесконечно или останавливается без выдачи результата. Определение вычислимой функции основывается на понятии алгоритма, которое является интуитивным понятием и не имеет пока строгого определения. Поэтому верно следующее утверждение. Понятие вычислимой функции является интуитивным понятием, не имеющим строгого определения. В следующей лекции интуитивное понятие вычислимой функции будет сопоставлено со строгим математическим понятием частично рекурсивной функции. Упражнения к лекции 2 З АДАЧА 1. Пусть K — множество всех многочленов f x с целыми коэффициентами. 1 Можно ли считать, что K — множество конструктивных объектов? 2 Если да, то какой алфавит A используется для записи элементов из K? 3 Как перейти к линейной записи в алфавите A произвольного многочлена f x axn  bxn 1    c  K? В каком языке программирования применяется данная запись?  З АДАЧА 2. Пусть X — множество всех слов в алфавите a, b, c. Занумеровать элементы из множества X в лексиA кографическом порядке так, чтобы вначале располагалось пустое слово с номером 0, затем слова длины 1, длины 2 и т.д. Какой номер получит слово P aac при данной нумерации? З АДАЧА 3. Построить биективное отображение множества A во множество B, где 1 A N, B x  Z  x  0; 2 A N, B Z; 3 A N, B — множество нечетных натуральных чисел; 4 A — множество нечетных натуральных чисел, B — множество четных целых чисел, меньших 5; x  R  x  0; 5 A R, B R π π , , B R. 6 A  2 2  З АДАЧА 4. Построить биективное отображение множества строк a1 , a2 , . . . , an , где каждая компонента равна 0 или 1, во множество всех подмножеств произвольного множества из n элементов. З АДАЧА 5. Пусть A – конечный или счетный алфавит. Доказать, что множество всех слов в алфавите A счетно. З АДАЧА 6. Доказать, что подмножество счетного множества конечно или счетно. З АДАЧА 7. Доказать, что объединение конечного или счетного числа конечных или счетных множеств конечно или счетно. З АДАЧА 8. Доказать, что множество рациональных чисел является счетным множеством. З АДАЧА 9. Доказать, что множество действительных чисел из интервала a, b не является счетным множеством. З АДАЧА 10. Пусть f x, y  — функция, определенная на множестве N со значениями в N. Описать множества Domf  и Ranf , где 1 f x, y  x  y, 2 f x, y  x y, 3 f x, y  xy, x 4 f x, y  , y 5 f x, y  xy  при этом 00 1, x 6 f x, y  , 2 x1 , 7 f x, y  2 8 f x, y   x y  . Какие из данных функций являются всюду определенными? Лекция 3. Примитивно рекурсивные функции В предыдущей лекции отмечено, что алгоритмический процесс можно рассматривать как процесс вычисления значений некоторой функции f . Такую функцию f мы назвали вычислимой функцией. Интуитивное понятие вычислимой функции мы заменим на точное понятие частично рекурсивной функции. В результате получим строгое определение алгоритма. Исходные функции. Рассмотрим некоторый набор простейших функций, вычислимость которых очевидна. Функция следования. Рассмотрим функцию sx, заданную правилом sx x1 для всех x  N. (3.1) Эта функция очевидно вычислима, т.к. алгоритм ее вычисления состоит из простейшего действия «добавления к x палочкам еще одной палочки». Функция sx называется функцией следования. Нулевая функция. Пусть n  0. Рассмотрим n-арную функцию on x1 , x2 , . . . , xn , заданную правилом on x1 , x2 , . . . , xn  для всех x1 , x2 , . . . , xn  N. (3.2) Данная функция называется нулевой функцией. Нулевая функция, как и функция следования, очевидно вычислима. Нулевую функцию при n 1 обозначаем через ox. Поэтому ox для всех x  N. Нулевая функция при n 0 обозначается через o0 и отождествляется с числом 0. Функция проектирования. Пусть n  1 и 1  m  n. Зададим n функцию проектирования Im x1, x2, . . . , xn правилом n Im x1, x2, . . . , xn xm . (3.3) Данная функция строке аргументов x1 , x2 , . . . , xn  сопоставляет ее компоненту xm с номером m. Вычислимость функции проектирования обеспечивается нашей способностью найти в строке x1 , x2 , . . . , xn  место с номером m и указать число на этом месте. Мы ввели несколько функций и отметили их вычислимость. В результате получили утверждение. П РЕДЛОЖЕНИЕ 3.1. Следующие простейшие функции вычислимы. Функция следования sx x  1. Нулевая функция on x1 , x2 , . . . , xn  0. n x1, x2, . . . , xn Функция проектирования Im xm . Итак, у нас имеется исходный набор простейших (базисных) вычислимых функций. Мы будем пополнять этот набор вычислимых функций. Для этого рассмотрим способы построения из уже имеющихся вычислимых функций новых вычислимых функций. Оператор суперпозиции S. Рассмотрим действие, которое назовем оператором суперпозиции (регулярной суперпозиции). С помощью этого действия из некоторых функций h, g1 , g2 , . . . , gm создается новая функция f . Пусть дана функция h от m переменных и заданы m функций g1 , g2 , . . . , gm от n переменных. При этом m, n  0. Новую функцию f x1 , x2 , . . . , xn  определим по следующему правилу: f x1 , x2 , . . . , xn    h g1 x1 , x2 , . . . , xn , g2 x1 , x2 , . . . , xn , . . . , gm x1 , x2 , . . . , xn  . (3.4) Функция f является частичной функцией от n переменных. Ее значение f x1 , x2 , . . . , xn  определено тогда и только тогда, когда определены все выражения в правой части из (3.4). Если функции h и g1 , g2 , . . . , gm вычислимы, то и функция f вычислима. Алгоритм ее вычисление описывается правой частью в (3.4). В случае существования значения функции f , мы за конечное число шагов получим число f x1 , x2 , . . . , xn  действиями, соответствующими интуитивному представлению об алгоритме. Если функция f задана правилом (3.4), т.е. получена оператором суперпозиции из функций h и g1 , g2 , . . . , gm , то записываем f S h, g1 , g2 , . . . , gm . (3.5) Пусть m 1, n 1 в равенстве (3.4) и функция f x получена оператором суперпозиции из функций hx и g x. Тогда имеем запись f x   h g x для всех x  N. (3.6) Оператор примитивной рекурсии R. Рассмотрим действие, которое назовем оператором примитивной рекурсии. С помощью оператора примитивной рекурсии мы конструируем функцию f от n  1 переменной из некоторых частичных функций g и h. При этом функция g имеет n  0 переменных, а функция h имеет n  2 переменных. Значения новой функции f вычисляем по двум правилам: f x1 , x2 , . . . , xn , 0 g x1 , x2 , . . . , xn ,  f x1 , x2 , . . . , xn , y  1 (3.7)  h x1 , x2 , . . . , xn , y, f x1 , x2 , . . . , xn , y  . (3.8) Слово рекурсия (recurso на латинском языке — возвращаюсь) означает вычисление значения f x1 , x2 , . . . , xn , y  1 с использованием f x1 , x2 , . . . , xn , y  (возвращением к ранее вычисленному значению). Из (3.7) и (3.8) получаем последовательное вычисление значений функции f : f x1 , x2 , . . . , xn , 0 g x1 , x2 , . . . , xn ,  f x1 , x2 , . . . , xn , 1 f x1 , x2 , . . . , xn , m  1  h x1 , x2 , . . . , xn , 0, f x1 , x2 , . . . , xn , 0 , ...  (3.9)  h x1 , x2 , . . . , xn , m, f x1 , x2 , . . . , xn , m . Если все значения в правых частях равенств существуют, то получим значение функции f x1 , x2 , . . . , xn , m  1. Если какое-то значение не определено, то f x1 , x2 , . . . , xn , m  1 не существует. Поэтому в общем случае мы получаем частичную функцию f x1 , x2 , . . . , xn 1  от n  1 переменной. В случае n 0 функция g из (3.7) имеет 0 переменных и поэтому отождествляется с некоторым числом a. Тогда равенство (3.7) имеет вид  f x1 , x2 , . . . , xn , 0 a. Если функция f получена оператором примитивной рекурсии из функций g и h (т.е. задана правилами (3.7) и (3.8)), то записываем f Rg, h. (3.10) Как и в случае оператора суперпозиции, вычислимость исходных функций g и h влечет вычислимость построенной из них функции f . О ПРЕДЕЛЕНИЕ 3.1 . Функция f называется примитивно рекурсивной, если она может быть получена из простейших функn x  1, on x1 , x2 , . . . , xn  0, Im x1, x2, . . . , xn xm ций sx с помощью конечного числа применений операторов суперпозиции и примитивной рекурсии. Тоже самое можно выразить в виде трех правил. 1 Простейшие функции s x  x  1, on x1 , x2 , . . . , xn  0, n Im x1, x2, . . . , xn xm примитивно рекурсивны. 2 Если функция f получена из примитивно рекурсивных функций с помощью оператора суперпозиции или с помощью оператора примитивной рекурсии, то функция f примитивно рекурсивна. 3 То, что функция f примитивно рекурсивна, устанавливается несколькими применениями правил 1 и 2. Можно представить следующий процесс. В некотором ящике первоначально находятся простейшие функции sx, on x1 , x2 , . . . , xn , n x1, x2, . . . , xn. Эти функции назовем примитивно рекурсивными функIm циями, полученными на шаге 0. Возьмем некоторые функции, полученные на шаге 0, и применим к ним один из операторов суперпозиции или примитивной рекурсии. Получится примитивно рекурсивная функция f шага 1, которую также поместим в данный ящик. Повторяем всевозможные действия данного типа, и пополняем ящик. Функция f примитивно рекурсивна, если она попадет в ящик на некотором шаге данного процесса. Всякой примитивной рекурсивной функции можно приписать n — наименьший номер шага, на котором она может быть получена. x  1, on x1 , x2 , . . . , xn  0, При этом простейшие функции sx n Im x1 , x2 , . . . , xn  — частично рекурсивные функции шага 0. Следовательно, можно проводить доказательство различных утверждений для примитивно рекурсивных функций индукцией по шагу, на котором они получены. Рассмотрим простые примеры примитивно рекурсивных функций. П РЕДЛОЖЕНИЕ 3.2. Функция f x x примитивно рекурсивна. n x1, x2, . . . , xn xm Доказательство. Функция проектирования Im примитивно рекурсивна. Рассмотрим случай n 1 и m 1. Имеем 1 1 x1 . Заменим обозначение I1 на f , а переменную x1 обозначим I1 x1  x. Итак, функция f x x — это через x. Получим функцию f x 1иm 1. Поэтому она примитивно функция проектирования при n рекурсивна. Предложение доказано. П РЕДЛОЖЕНИЕ 3.3. Функция g x на. x  2 примитивно рекурсив- Доказательство. Рассмотрим функцию f x g x  x2 x  1  1 x. Тогда ssx, т.е. g x ssf x. x примитивно рекурсивна по предыдущему предложеФункция f x x  1 примитивно рекурсивна, т.к. явнию. Функция следования sx ляется простейшей функцией. К примитивно рекурсивным функция sx и f x применим оператор суперпозиции. Получим примитивно рекурсивную функцию sf x. Повторно применим оператор суперпозиции к функциям sx и sf x. Получим примитивную рекурсивность функции ssf x, что и нужно. Предложение доказано. П РЕДЛОЖЕНИЕ 3.4 . Постоянная унарная функция f x примитивно рекурсивна. a Доказательство. Имеем запись f x ss. . . s ox a, a раз где функции sx и ox — простейшие функции. Применяя оператор суa примитивно перпозиции несколько раз, получим что функция f x рекурсивна. П РЕДЛОЖЕНИЕ 3.5. Нульарная функция примитивно рекурсивна. Доказательство. Пусть f — нульарная функция, значения которой равны a. Нульарная нулевая функция g o0 имеет 0 переменных и отождествляется с числом 0  N. Она примитивно рекурсивна, т.к. является простейшей функцией. В следующем равенстве функция следования s повторена a раз, т.е. a раз применен оператор суперпозиции   s s. . . sg  a. (3.11) a Следовательно, функция в левой части (3.11) примитивно рекурсивна. Она имеет 0 переменных и тождественно равна a. Эта функция является нульарной функцией f , примитивную рекурсивность которой нам требовалось установить. Предложение доказано. Операция введения фиктивных переменных. Рассмотрим функцию f x, y  x  y. Функция f является функцией от двух переменных. Пусть x  y  z z от z переменная, отличная от x и y. Рассмотрим функцию f трех переменных. Значения новой функции f не зависят от ее переменной z. Такую переменную будем называть фиктивной переменной. По замечанию 2.1 функции f и f — различные функции, т.к. имеют различное число f x, y . переменных. С другой стороны, имеется равенство f x, y, z  Мы будем говорить, что функция f получена из функции f введением фиктивной переменной z. Проверим в общем случае, что примитивная рекурсивность функции f влечет примитивную рекурсивность функции f , полученной введением фиктивной переменной. f x1 , . . . , xn  примитивно рекурсивна. Добавим Пусть функция f в строке переменных x1 , . . . , xn  еще одну переменную xn 1 . Получим x1, . . . , xn 1 из n  1 переменной. Для функций проектистроку x рования очевидны n равенств   x x1, . . . , Inn 1x xn. Введем функцию f x от n  1 переменной правилом   f x1 , . . . , xn , xn 1  f I1n 1 x, . . . , Inn 1 x f x1 , x2 , . . . , xn . I1n  1     Так как функция f примитивно рекурсивна, то и новая функция f примитивно рекурсивна. В дальнейшем мы будем вводить фиктивную переменную, и из примитивно рекурсивной функции от n переменных получать примитивно рекурсивную функцию от n  1 переменной. При такой операции введения фиктивного переменной вместо обозначения f для новой функции будем сохранять обозначение f исходной функции. П РЕДЛОЖЕНИЕ 3.6 . Функция сложения f x, y  тивно рекурсивна. x  y прими- Доказательство. Покажем, что функция сложения f x, y  может быть получена с помощью оператора примитивной рекурсии из двух функций g x и hx, y, z , для которых примитивная рекурсивность уже установлена. Способ для подбора функций g и h в общем случае состоит в выполнении двух действий. 1) Применим правило (3.7), т.е. равенство f x1 , x2 , . . . , xn , 0 g x1 , x2 , . . . , xn , и получим функцию g. 2) Применим правило (3.8), т.е. равенство f x1 , x2 , . . . , xn , y  1   h x1 , x2 , . . . , xn , y, f x1 , x2 , . . . , xn , y  , и получим функцию h. В нашем случае n 1 и f x, y  x  y . f x, 0 x0 x. Получили искомую функцию 1) Имеем g x g x x. То, что функция g x примитивно рекурсивна, уже известно по предложению 3.2. 2) Подберем функцию hx, y, z . Применим правило (3.8) для функции f x, y  x  y. Получим равенства f x, y 1 xy 1 xy1 sxy sf x, y hx, y, f x, y. При этом hx, y, z  sz . Функция hx, y, z  получена из примитивно рекурсивной функции sz  введением двух фиктивных переменных x и y. Поэтому функция hx, y, z  примитивно рекурсивна. Получили, что функция f x, y  x  y примитивно рекурсивна. Предложение доказано. П РЕДЛОЖЕНИЕ 3.7. Функция умножения f x, y  вно рекурсивна. xy примити- Доказательство. Как и в предыдущем предложении подберем функции g x и hx, y, z , применяя правила (3.7) и (3.8). f x, 0 x0 0. Поэтому g x — нулевая функция Имеем g x ox, которая примитивно рекурсивна. Покажем, что в качестве искомой функции hx, y, z  можно взять x  z, которая примитивно рекурсивна, т.к. полуфункцию hx, y, z  чена из функции сложения введением фиктивной переменной y. Имеем f x, y  1 xy  1 x  xy xz при z xy f x, y . Тогда f x, y  1 hx, y, f x, y . Из примитивной рекурсивности функxy примитивно ций g x и hx, y, z  заключаем, что функция f x, y  рекурсивна. Предложение доказано. Упражнения к лекции 3 З АДАЧА 1. Пусть n  N. Доказать примитивную рекурсивность функции f x x  n. З АДАЧА 2. Доказать, что всякая примитивно рекурсивная функция является всюду определенной функцией. З АДАЧА 3. Пусть n — произвольное натуральное число. Доказать примитивную рекурсивность следующих функций 1 f x, y  4 f x, y  x  y  1, xy  где 00 2 f x, y  xy  2, 3 f x 5 f x x2 , 6 f x 1, nx, xn . З АДАЧА 4. Доказать, что следующие функции примитивно рекурсивны 1 sg x 3 x 1 0, если x 1, если x 0, x 1, 0, 0. если x если x 1, если x 0, если x 2 sg x 0, 0. 4 x y 0, x y, 0, 0. если x  y, если x  y. x, З АДАЧА 5. Проверить равенство  x y  x y   y и доказать,что функция f x, y   x y  примитивно рекурсивна. З АДАЧА 6. Проверить равенство maxx, y  x  sg x и доказать, что функция f x, y  на. y   y  sg x y , maxx, y  примитивно рекурсив- З АДАЧА 7. Проверить равенство minx, y  x  sg y и доказать, что функция f x, y  на. x  y  sg y x , minx, y  примитивно рекурсив- З АДАЧА 8. Функция f получена из функций g и h с помощью оператора примитивной рекурсии. Указать формулу для вычисления функции f . 1 g x x, 2 g x 0, 3 g x 1, 4 g o0 , hx, y, z  z  1, hx, y, z  x  z, hx, y, z  xz, hx, y  y, f x, y  ? f x, y  ? f x, y  ? f x ? При этом функция g из пункта 4 является нульарной функцией, равной 0. З АДАЧА 9. Доказать, что функция следования sx не может быть получена из нулевых функций и функций проектирования с помощью операторов суперпозиции и примитивной рекурсии. Указание. Пусть функция f x1 , . . . , xn  получена из нулевых функций и функций проектирования с помощью операторов суперпозиции и примитивной рекурсии. Проверить, что 0. f 0, . . . , 0 З АДАЧА 10. Пусть даны n-арные функции α1 , . . . , αk со следующим условием. Для любого набора переменных x1 , . . . , xn одна и только одна из этих функций равна 0. Скажем, что функция f x1 , . . . , xn  кусочно задана через эти функции, если f x1 , . . . , xn  g1 x1 , . . . , xn , g2x1, . . . , xn, ............. gk x1, . . . , xn, если α1 x1 , . . . , xn  0, если α2 x1 , . . . , xn  0, ....................... если αk x1 , . . . , xn  0. Доказать, что если функции g1 , . . . , gk , α1 , . . . , αk примитивно рекурсивны, то функция f примитивно рекурсивна. Указание. Проверить равенство f x1 , . . . , xn  g1 x1 , . . . , xn   sg α1 x1 , . . . , xn   . . .  gk x1, . . . , xn  sgαk x1, . . . , xn. Лекция 4. Частично рекурсивные функции. Тезис Черча Оператор минимизации M. Пусть дана вычислимая функция g x1 , . . . , xn , y  от n  1 переменной, где n  0. Нам нужно найти наименьшее число y с условием g x1 , . . . , xn , y  0. Введем следующее ограничение. Процедура нахождения числа y должна быть алгоритмом. Поэтому должен быть представлен точный список действий для неинтеллектуального исполнителя (машины) по нахождению y, например, последовательная проверка одного за другим следующих равенств f x1 , x2 , . . . , xn , 0 f x1 , x2 , . . . , xn , 1 ... f x1 , x2 , . . . , xn , y  ... 0, 0, (4.1) 0, Что при этом произойдет? Возможно, вообще нет числа y с условием 0. Тогда не произойдет остановки машины с выдаf x1 , x2 , . . . , xn , y  чей y. Однако отсутствие y возможно по другой причине. Предположим, 0, а значение f x1 , x2 , . . . , xn , 2 не например, что f x1 , x2 , . . . , xn , 5 определено. Пытаясь вычислить f x1 , x2 , . . . , xn , 2, машина будет работать бесконечно и никогда не перейдет к вычислению f x1 , x2 , . . . , xn , 3. Поэтому число y 5 не будет обнаружено. О ПРЕДЕЛЕНИЕ 4.1 . Пусть g — функция от n  1 переменной. Функция f от n переменных получена из функции g с помощью y вероператора минимизации, если равенство f x1 , x2 , . . . , xn  0, а значения но тогда и только тогда, когда f x1 , x2 , . . . , xn , y  f x1 , x2 , . . . , xn , 0, . . . , f x1 , x2 , . . . , xn , y 1 определены и не равны нулю. Тоже самое можно выразить записью f x1 , x2 , . . . , xn  y  0,  f x1, x2,. .. .. . , xn, 0 f x1 , x2 , . . . , xn , y 1 0,  f x , x , . . . , x , y 0, 1 2 n причем значения f x1 , x2 , . . . , xn , 0, . . . , f x1 , x2 , . . . , xn , y  существуют. Если функция f получается из функции g с помощью оператора минимизации, то записываем (4.2) f M g . Ясно, что инструкции для вычисления функции g и проверки (4.1) образуют алгоритм для вычисления значений функции f . Поэтому функция f вычислима. П РИМЕР 4.1. Найти функцию f , полученную из функции ox применением оператора минимизации. Решение. Если функция f получена из функции g с помощью оператора минимизации, то число ее переменных меньше числа переменных функции g на единицу. В данном случае g— это функция ox от одной переменной. Поэтому функция f имеет 0 переменных. Для нахождения значения функции f нужно проверить условия o0 0, o1 0, . . . , oy  0, . . . и выбрать в этих равенствах наименьшее y. Поскольку ox 0 для всех x, то наименьшее число y — это y 0. По определению оператора минимизации полученное y 0 и есть значение функции f . Поэтому функция f — это нульарная функция o0 со значением 0, т.е. помеченный элемент 0. Сформулируем теперь одно из основных определений теории алгоритмов — определение частично рекурсивной функции. О ПРЕДЕЛЕНИЕ 4.2. Функция f называется частично рекурсивной функцией, если она может быть получена из следующих простейших функций: 1 функции следования sx x  1, 2 нулевой функции on x1 , x2 , . . . , xn  0, n 3 функции проектирования Im x1, x2, . . . , xn xm с помощью конечного числа применений операторов суперпозиции, примитивной рекурсии и минимизации. Как и при определении примитивной рекурсивности, можно выразить определение частично рекурсивной функции в виде трех правил. 1 Простейшие функции s x  x  1, on x1 , x2 , . . . , xn  0, n Im x1, x2, . . . , xn xm частично рекурсивны. 2 Если функция f получена из частично рекурсивных функций с помощью операторов суперпозиции, примитивной рекурсии или минимизации, то функция f частично рекурсивна. 3 То, что функция f частично рекурсивна, устанавливается несколькими применениями правил 1 и 2. Всякой частично рекурсивной функции можно приписать n — наименьший номер шага, на котором она может быть получена. В отличие от определения примитивной рекурсивности, где имелись два оператора, теперь имеются три оператора для получения частично рекурсивных функций. Ясно, что всякая примитивно рекурсивная функция является частично рекурсивной функцией. Оператор минимизации может вырабатывать не всюду определенные функции, а примитивно рекурсивные функции всюду определены. Поэтому существуют частично рекурсивные функции, которые не являются примитивно рекурсивными функциями. Ранее мы сформулировали понятие вычислимой рекурсивной функции и отметили, что это нестрогое, интуитивное понятие. Однако для приведенного выше понятия частично рекурсивной функции справедливо следующее утверждение. Понятие частично рекурсивной функции является строгим математическим понятием. О ПРЕДЕЛЕНИЕ 4.3. Всюду определенная, рекурсивная функция называется общерекурсивной функцией. Словосочетание «функция f частично рекурсивна» будем заменять на более краткое словосочетание «f рекурсивна». П РЕДЛОЖЕНИЕ 4.1 . Всякая частично рекурсивная функция f является вычислимой функцией. Доказательство индукцией по шагу m, на котором получена функция f . Пусть m 0. Тогда f совпадает с одной из простейших функций, которые вычислимы. Предположим, что для функций шага m утверждение верно. Пусть f — функция шага m  1. Тогда существует частично рекурсивные функции g1 , g2 , . . . , gk шага m, из которых получена функция f одним из трех действий: с помощью оператора суперпозиции, примитивной рекурсии или минимизации. По предположению индукции частично рекурсивные функции g1 , g2 , . . . , gk шага m вычислимы. Тогда и вычислима функция f . Действительно, как отмечалось при определении операторов, каждый из них, будучи применен к вычислимым функциям, вырабатывает только вычислимые функции. Поэтому f — вычислимая функция. Предложение доказано. Тезис Черча. Итак, мы располагаем некоторым запасом вычислимых функций, а именно частично рекурсивными функциями. Обозначим множество всех вычислимых функций через A, а множество всех частично рекурсивных функций через B. Так как всякая частично рекурсивная функция является вычислимой функцией, то B  A, что отражает следующий рисунок. A f B Частично рекурсивные функции Вычислимые функции Рис. 1 Естественно, мы хотели бы продолжить расширение нашего запаса рекурсивных функций. Для этого нам нужно в разности множеств AB взять некоторую функцию f . Она будет вычислимой, но не частично рекурсивной функцией из совокупности функций, которые используются в математике и признаются всеми как вычислимые функции. Однако нас ждет неожиданное явление, которое было проверено в первой половине 20 в. на многочисленном количестве примеров. Мы не сможем найти ни одного примера вычислимой функции, не являющейся частично рекурсивной. Это наводит на мысль, что разность AB — пуB и любая вычислимая функция частично стое множество. Тогда A рекурсивна. В 1936 г. американский математик Алонзо Черч выдвинул следующее положение. Тезис Черча. Каждая вычислимая функция частично рекурсивна. Сможем ли мы доказать тезис Черча? Нет, т.к. у нас нет точного определения вычислимой функции. Тезис Черча — это просто строгое определение алгоритма. Это положение является соглашением, возникшим в результате длительного исследования интуитивного понятия алгоритма. Показана рекурсивность огромного количества вычислимых функций. Никто не сумел построить вычислимую функцию, рекурсивность которой нельзя было бы доказать, или хотя бы указать правдоподобный метод построения такой функции. Тезис Черча является естественнонаучным фактом, который подтверждается опытом, накопленным математикой за весь период ее развития. Тезис Черча является достаточным средством, чтобы придать необходимую точность формулировкам алгоритмических проблем и делает возможным доказательство их неразрешимости. Заметим, что Черч рассматривал лишь всюду определенные вычислимые функции. С.Клини ввел понятие частично рекурсивной функции и высказал гипотезу, что все частичные функции, вычислимые посредством алгоритма, являются частично рекурсивными. Мы не будем различать тезисы Черча и Клини и под тезисом Черча понимаем более общую формулировку. Упражнения к лекции 4 З АДАЧА 1. Доказать, что следующие функции частично рекурсивны. Какие из этих функции примитивно рекурсивны, а какие частично рекурсивны, но не примитивно рекурсивны? 1 f x, y  4 f x, y  x  y  2, 2 f x, y  x  2y, 5 f x, y  6 f x 7 f x, y  x  xy, 3 f x, y  xy  3,  0, если x 0,  не определено, если x xy  2, 0,  x y, если x  y,  0, не определено, если x  y. Указание. В пунктах 6 и 7 применить оператор минимизации x  y и к функции f x, y, z   x y  z  к функции f x, y  соответственно. З АДАЧА 2. Пусть функция f x не определена ни при одном значении x. Будет ли функция f x примитивно рекурсивной, частично рекурсивной? З АДАЧА 3. Пусть f f x1 , x2 , . . . , xn  частично рекурсивная функция от n аргументов и i1 , i2 , . . . , in  — произвольная перестановка номеров аргументов. Рассмотрим функцию g x1 , x2 , . . . , xn  f xi1 , xi2 , . . . , xin (т.е. функция g получена из f перестановкой аргументов). Доказать, что функция g также частично рекурсивна. З АДАЧА 4. Доказать, что функция f x x! митивно рекурсивна ( по определению 0! 1). 1  2  3 . . . x при- З АДАЧА 5. Привести пример общерекурсивной функции, из которой с помощью оператора минимизации получается не общерекурсивная функция. Пусть x, y  N и y 0. Если для некоторых q, r  Z выполнено равенство, x yq  r, где 0  r  y, то q — частное, r — остаток от деления a на b. Обозначим x q, restx, y  r. y x Доопределим бинарную функцию restx, 0 x. y при y 0 равенством x x. Пусть З АДАЧА 6. Проверить равенство x x y i1 Доказать, что функция f x, y  sg iy x y x. примитивно рекурсивна. З АДАЧА 7. Проверить равенство restx, y  x y x y . Доказать, что функция restx, y  примитивно рекурсивна. З АДАЧА 8. Пусть τ x — количество делителей числа x τ 0 0. Проверить равенство τ x x i1 0 и sg restx, i. Доказать, что функция τ x примитивно рекурсивна. З АДАЧА 9. Пусть σ x — сумма делителей числа x Проверить равенство σ x x i1 0 и σ 0 0. i  sg restx, i. Доказать, что функция σ x примитивно рекурсивна. З АДАЧА 10. К функции f x, y, z   x  1 y  z   применен оператор минимизации. Найти полученную функцию f x, y . Лекция 5. Машины Тьюринга Другой способ для обоснования понятия алгоритма предложили независимо друг от друга и почти одновременно с Черчем и Клини английский математик А. Тьюринг и американский математик Э. Пост. Основная идея Поста и Тьюринга заключалась в том, что алгоритмические процессы — это процессы, которые может совершать некоторая «машина». Машины, введенные Постом и Тьюрингом, имеют не очень существенное различие и обычно называются машинами Тьюринга. Машина Тьюринга — это воображаемое вычислительное устройство, имеющее следующие составные части. Оно имеет ленту, разбитую на ячейки, и каретку, расположенную в каждый конкретный момент работы машины над некоторой ячейкой ленты.  каретка 1 1 ... 0 ...  лента Каждая ячейка содержит ровно один из символов 0 или 1. Лента представляется конечной, но дополняемой в любой момент ячейками слева и справа для записи новых символов 0 или 1. Эта ситуация может возникнуть при сдвиге каретки влево или вправо за край ленты. Тогда наращивается новая клетка с содержимым 0. Это соглашение отражает идею о сколь угодно большой, но конечной памяти. Если каретка, расположена над некоторой ячейкой с символом 0 (с символом 1), то говорим, что каретка обозревает символ 0 (обозревает символ 1). Машина Тьюринга имеет программу. Это конечная последовательность инструкций q0 , q1 , . . . , qn , каждая из которых является строкой из 5 компонент. Пример программы. 0, 0, 0, L, 1 0, 1, 0, R, 1 1, 0, 0, L, 1 2, 0, 0, L, 1 Строка программы машины Тьюринга имеет вид i, a, x, y, z . Первая компонента в строке i — номер инструкции. Поэтому предыдущая программа имеет инструкции с номерами 0, 1 и 2. Вторая компонента a равна 0 или 1. Выполняя инструкцию с номером i, машина смотрит обозреваемый кареткой символ. Если он равен 0, то исполняется команда i, 0, x, y, z  ; если обозреваемый символ равен 1, то исполняется команда i, 1, x, y, z  . Если команды с таким началом нет, то машина останавливается. Это единственное условие остановки машины Тьюринга. Символы x, y, z в исполняемой строке i, a, x, y, z  предписывают соответственно осуществление следующих трех действий. • Запись в обозреваемую ячейку x. При этом x 0 или x 1. Поэтому содержимое обозреваемой ячейки останется прежним или сменится на противоположное, например, 0 заменится на 1. • Сдвиг каретки вправо или влево. Компонента y равна R или L. При R нужно сдвинуть каретку на одну ячейку вправо, при y L y сдвинуть влево. • Переход к инструкции с номером z. Вначале выполняется инструкция с номером 0. Тем самым выполнение первой инструкции — первый такт работы машины Тьюринга, затем выполнение другой инструкции — второй такт и т. д. В начале работы на ленте имеется исходный набор из символов 0,1 — входные данные, а после остановки на ленте выходные данные. П РИМЕР 5.1. Пусть дана машина Тьюринга с программой из одной инструкции 0, 0, 1, R, 0. (5.1) Описать работу машины со следующими входными данными: на ленте во всех ячейках расположен символ 0. Вначале выполняется инструкцию с номером 0. Мы имеем инструкцию (5.1), т.е. инструкцию i, a, x, y, z , где i 0, a 0, x 1, y R, z 0. Обозреваемый кареткой символ равен 0. ... Поэтому нужно выполнить следующие действия: 1) заменить этот символ на 1; 2) сдвинуть каретку вправо; 3) следующей инструкцией выполнить инструкциию с номером 0. Получим следующую конфигурацию 1 ... Итак, возникла одна единица, каретка снова обозревает 0 и заново выполняются действия 1) – 3). Поэтому каретка движется вправо, машина Тьюринга работает бесконечно, заполняя ячейки ленты символом 1. Опишем вычисление значений n-арной функции машиной Тьюринга. Рассмотрим произвольное натуральное число x. Изобразим число x на ленте в виде группы из x  1 единиц. Слева и справа от этой группы расположено число 0.  1 1 ... 1 x1 Данную группу из x1 единиц обозначаем знаком x . Например, группа из 3 единиц 111 изображает число 2, а группа 1 изображает число 0. Для изображения последовательности x1 , x2 , . . . , xn используем последовательность символов, равную 0 x1 0 x2 0 . . . 0 xn 0, где группы единиц разделены символом 0. Например, (1,2) изображаем в виде 01101110. Пусть дана n-арная функция f x1 , x2 , . . . , xn . Будем говорить, что машина Тьюринга M вычисляет функцию f , если выполняются следующие условия. 1. Пусть строка x1 , x2 , . . . , xn  содержится в области определения функции f . Тогда машина M , начиная работать и обозревая левую единицу строки x1 , x2 , . . . , xn  (остальная часть ленты пуста), на некотором шаге останавливается, обозревая левую единицу строки f x1 , x2 , . . . , xn  (часть ленты справа от строки пуста). 2. Пусть строка x1 , x2 , . . . , xn  не содержится в области определения функции f . Тогда машина M работает бесконечно. П РИМЕР 5.2 . Указать машину Тьюринга, вычисляющую функцию f x, y  x  y. Рассмотрим машину M со следующей программой ( рядом с каждой инструкцией — комментарий). 0, 1, 1, R, 0 прохождение через x, 0, 0, 1, R, 1 заполнение промежутка, 1, 1, 1, R, 1 прохождение через y, 1, 0, 0, L, 2 конец y, 2, 1, 0, L, 3 стирание одного символа 1, 3, 1, 0, L, 4 стирание другого символа 1, 4, 1, 1, L, 4 движение назад, 4, 0, 0, R, 5 остановка. Теперь мы располагаем всеми необходимыми определениями для точной формулировки понятия алгоритма. Из определения машины Тьюринга легко убедиться, что ее работа удовлетворяет всем требованиям, предъявляемым к понятию алгоритма. Поэтому произвольная функция, вычислимая на машине Тьюринга, является вычислимой функцией. Рассмотрим обращение этого утверждения. Тезис Тьюринга. Если функция f является вычислимой, то существует машина Тьюринга вычисляющая функцию f . Сможем ли мы доказать тезис Тьюринга? Нет, т.к. у нас нет точного определения понятия вычислимой функции. Тезис Тьюринга является результатом, возникшим из опыта. Тезис Тьюринга — еще один вариант определения алгоритма, поскольку отождествляет интуитивное понятие вычислимой функции со строгим понятием функции, вычислимой на машине Тьюринга. Доказана равносильность тезиса Тьюринга и тезиса Черча. Это подкрепляет уверенность в том, что оба тезиса адекватно отражают понятие алгоритма. Тезисы Тьюринга и Черча можно рассматривать как теоретические границы возможностей реальных вычислительных машин. Другие варианты определения машины Тьюринга. В качестве «механического устройства», осуществляющего алгоритмический процесс, мы выбрали машину Тьюринга, имеющую одну ленту, в ячейки которой заносятся два символа 0 и 1. Возможно другое определение, где в a0, a1, . . . , an. При ячейки ленты заносятся элементы множества A этом помечен один из элементов a0 . Он называется пустым символом и предназначен отображать факт, что ячейка пуста, т.е. не содержит символов a1 , . . . , an . Лента представляется конечной, но дополняемой в любой момент пустыми ячейками слева и справа для записи новых символов. Эта ситуация может возникнуть при сдвиге каретки влево или вправо за край ленты. Тогда каретка окажется над новой пустой клеткой. В любой момент работы машина M находится в одном из состояний q0 , q1 , . . . , qm . При этом q1 — начальное состояние, с которого машина начинает работать; q0 — заключительное состояние, попав в которое, машина останавливается. Итак, мы имеем два конечных, непересекающихся множества A и B, для которых используем следующую терминологию: A Q a0, a1, . . . , an — символы в ячейках (внешний алфавит),  q0 , q1 , . . . , qm — состояния машины (внутренний алфавит). стоп старт Программа машины состоит из mn  1 команд. Команды имеют один из трех видов 1 qi aj qk al , 2 qi aj qk al L, 3 qi aj qk al R, где 1  i  m и 0  j  n. Команда с началом qi aj срабатывает, если машина M находится в состоянии qi и каретка обозревает символ aj . Поэтому в программе должна быть ровно одна команда с началом qi aj . Действия при исполнении данных команд следующие: qk al — машина M переходит в состоянии qk , и одновременно • qi aj содержимое aj обозреваемой ячейки сменяется на al . • qi aj qk al L — машина M переходит в состоянии qk , содержимое aj обозреваемой ячейки сменяется на al , и каретка смещается на одну ячейку влево. qk al R — машина M переходит в состоянии qk , содержимое aj • qi aj обозреваемой ячейки сменяется на al , и каретка смещается на одну ячейку вправо. Машинным словом, или конфигурацией машины M , называется слово вида Aqk al B, где A и B слова в алфавите A . Так изображается содержимое ленты и обозреваемая ячейка. При этом считаем, что машина находится в состоянии qk , а каретка обозревает на ленте символ al . Слова A и B отражают содержимое ленты до и после символа al . Группу из x символов a на ленте будем обозначать через ax . Считаем, что машина M вычисляет функцию f x1 , x2 , . . . , xn , если выполнены следующие два условия. 1. Если f x1 , x2 , . . . , xn  существует, то машина, начиная работу с конфигурации q1 01x1 . . . 01xn 0, останавливается и при этом имеет конфигурацию q0 01f  x1 ,...,xn  0 . . . 0. 2. Если f x1 , x2 , . . . , xn  не существует, то машина работает бесконечно. П РИМЕР. Рассмотрим данный второй вариант определения машины Тьюринга и программу q1 0 q1 1 q2 0 q2 1 q3 1 q3 0 q2 0R, q0 1, q3 1L, q2 1R, q3 1L, q0 0. Нетрудно проверить, что машина вычисляет функцию f x x  1. Подробное описание данного варианта машины Тьюринга в [16], [4] и [3]. Возможен еще вариант, когда машина имеет несколько лент. Однако, кроме технических деталей, ничего нового не возникнет. Эти машины вычисляют тот же самый класс частично рекурсивных функций. Упражнения к лекции 5 В задачах 1–7 нужно составить программу машины Тьюринга для вычисления функции f x от одной переменной. З АДАЧА 1. f x — нулевая функция ox. З АДАЧА 2. f x — функция следования sx З АДАЧА 3. f x 2. З АДАЧА 4. f x x  2. З АДАЧА 5. f x x. З АДАЧА 6. f x x 1. З АДАЧА 7. f x x 1. x  1. В задачах 8–9 нужно составить программу машины Тьюринга для вычисления функции f x, y  от двух переменных. З АДАЧА 8. f x, y  x  1. З АДАЧА 9. f x, y  x  y  1. З АДАЧА 10. Составить программу машины Тьюринга для вычисления функции f x, y, z  x  y  z. Лекция 6. Машины с неограниченными регистрами Машина с неограниченными регистрами (МНР) — это абстрактная машина, более сходная с реальным компьютером по сравнению с машиной Тьюринга. Она имеет следующие составные части. 1) Регистры R1 , R2 , R3 , . . ., в которых содержатся соответственно натуральные числа r1 , r2 , r3 , . . . r1 r2 r3 ... rk 0 ... R 1 R 2 R 3 . . . Rk R k 1 . . . Число регистров бесконечно, но только конечное множество регистров R1 , R2 , . . . , Rk содержит числа, отличные от нуля. Все остальные регистры Rk 1 , Rk 2 , . . . заполнены нулями.    2) Программа машины — это конечная I1 , I2 , . . . , Is из следующих четырех типов команд: последовательность Z n, S n, T m, n, J m, n, q ,  1, 2, . . . . Эти команды выполняют следующие действия. • Команда обнуления Z n делает содержимое регистра Rn равным где m, n, q нулю. • Команда прибавления единицы S n к содержимому регистра Rn прибавляет число 1. • Команда переадресации T m, n заменяет содержимое регистра Rn на содержимое регистра Rm . • Команда условного перехода J m, n, q  сравнивает содержимое rn в качестве следующей команды регистров Rm и Rn . При rm rm , то выполняется выполняется команда с номером q. Если rn следующая по порядку команда программы. Команды обнуления, прибавления единицы и переадресации называются арифметическими командами. Отразим действие команд следующей таблицей (табл. 1). Обозначение команды Действие, производимое МНР при выполнении команды Z n rn : 0 S n rn : rn  1 T m, n rn : rm Если rn  rm , то перейти к выполнению команды с номером q, иначе выполнить следующую по порядку команду. J(m, n, q) Таблица 1: Команды МНР Пусть, например, регистры МНР имеют вид 2 3 1 5 0 ... Выполним команду S 2. Эта команда прибавит 1 к числу 3 в регистре R2 и не затронет остальные регистры. В результате получим следующее содержимое регистров 2 4 1 5 0 ... Выполним затем команду T 2, 1. Содержимое 4 из регистра R2 заменит старое содержимое 2 в регистре R1 . Получим регистры 4 4 1 5 0 ... Машина с неограниченными регистрами, как и произвольный алгоритм, работает по тактам: такт 1, такт 2, . . . Первый такт работы МНР с программой I1 , I2 , . . . , Is — выполнение первой команды I1 . Затем выполняются команды I2 , I3 , . . . Этот последовательный порядок выполнения команд продолжается до тех пор, пока не встретится команда J(m, n, q), которая может изменить естественный порядок выполнения команд. Условие остановки. Машина останавливается тогда и только тогда, когда невозможно выполнить очередную предписанную команду. Это означает, что МНР только что совершила i-вый такт работы и следующим i  1 тактом должна выполнить несуществующую команду. Эта ситуация при выполнении программы I1 , I2 , . . . , Is возникает ровно в одном из трех следующих случаев. I) Если в i-вом такте выполнена Is — последняя команда программы и эта команда не является командой условного перехода, тогда следующим i  1 тактом должна выполняться несуществующая команда Is 1 . 2) Если в i-вом такте выполнена команда условного перехода rn и q  s, тогда следующим i  1 тактом должна J m, n, q , где rm выполняться несуществующая команда Iq . 3) Если в i-вом такте выполнена Is — последняя команда программы и эта команда является командой условного перехода J m, n, q  при rm rn , тогда следующим i  1 тактом должна выполняться несуществующая команда Is 1 . Результат вычислений. Если выполнение программы завершилось, то число r1 из регистра R1 считается результатом применения алгоритма к исходному набору чисел r1 , r2 , . . . . Если выполнение программы никогда не заканчивается, то нет результата вычислений. В этом случае алгоритм неприменим к исходным данным. Тем самым при работе МНР возможно лишь два типа завершения работы: 1) выдача результата и 2) бесконечная работа. Третий случай (безрезультатная остановка) невозможен. Вычисление функций на МНР. Как и в случае машин Тьюринга, мы должны указать, как машина с неограниченными регистрами вычисляет частичную функцию f x1 , . . . , xn  от n аргументов. Рассмотрим набор аргументов x1 , . . . , xn , и разместим число x1 в регистре R1 , число x2 — в регистре R2 , . . . , число xn — в регистре Rn . Все остальные регистры заполнены нулями. Получаем начальную конфигурацию МНР. После окончания работы в регистре R1 должно быть значение функции f x1 , . . . , xn . Если значение f x1 , . . . , xn  не определено, то МНР должна работать бесконечно.   П РИМЕР 6.1 . Составить программу для МНР, которая вычисляет функцию f x x  2. Решение. Рассмотрим работу МНР со следующей программой: I1 S 1 I2 S 1 В регистр R1 перед первым тактом работы машины занесено число x, остальные регистры заполнены нулями. Машина совершит два такта работы, два раза прибавит 1 к числу x в регистре R1 и остановится. Число x  2 — результат вычислений, что и нужно. П РИМЕР 6.2 . Составить программу для МНР, которая вычисляет функцию f x, y  x  y. Решение. Рассмотрим работу МНР со следующей программой: I1 I2 I3 I4 J 2, 3, 5 S 1 S 3 J 1, 1, 1 В регистр R1 перед первым тактом работы машины занесено число x, в R2 — число y, остальные регистры заполнены нулями. x y R1 R2 R3 R4 Первый тактом работы МНР исполняется команда I1 J 2, 3, 5, где R2 сравнивается с R3 , т.е. y сравнивается с числом 0. 2. Поскольку y 0, то вторым тактом Допустим, например, что y работы исполнится команда S 1, а третьим — S 3. В результате к числам в регистрах R1 и R3 добавится число 1, и каждый из них увеличится на 1. x1 y 1 0 R1 R2 R3 R4 Далее команда J 1, 1, 1 сравнивает регистр R1 с самим собой. Получаем равенство и переход к первой команде I1 . Цикл повторится второй раз, и к числам в регистрах R1 и R3 снова добавится число 1. Получим регистры x2 y 2 R1 R2 R3 R4 Далее I4 задает переход к первой команде I1 . Итак, МНР готова выполJ 2, 3, 5 и совершить третий проход цикла. Однако нить команду I1 теперь в регистрах R2 и R3 содержатся равные числа 2 и y. Тогда J 2, 3, 5 вызывает команду с номером 5. Такой команды нет. Поэтому МНР останавливается. В регистре R1 содержится результат x  2. В общем случае произойдет y проходов цикла, добавляющих к числам в регистре R1 и R3 число 1. В начале y  1 прохода цикла в момент исполнения команды I1 J 2, 3, 5 в регистре R1 имеем x  y, в регистре R3 — число y. По команде J 2, 3, 5 МНР останавливается, имея в регистре R1 результат вычислений x  y. Обозначим через F множество всех функций, которые можно вычислить на подходящей машине с неограниченными регистрами. Т ЕОРЕМА 6.1. Следующие функции вычислимы на МНР. 1 Функция следования sx. 2 Нулевая функция on x1 , x2 , . . . , xn . n x1, x2, . . . , xn. 3 Функция проектирования Im Доказательство. Укажем программы для вычисления данных функций. 1) Функция следования sx имеет программу из одной команды S 1. Действительно, если в регистре R1 занесено число x, то МНР выполнит один такт работы, сменит число x в R1 на число x  1 и остановится. 2) Аналогично программа, состоящая из одной команды Z 1, вычисляет нулевую функцию on x1 , x2 , . . . , xn . n x1, x2, . . . , xn применяем про3) Для функции проектирования Im грамму из одной команды T m, 1. МНР выполнит один такт работы, перешлет в регистр R1 число xm и остановится. Теорема доказана. Итак, все простейшие функции из определения частично рекурсивной функции вычислимы на МНР. Далее установим, что все частично рекурсивные функции вычислимы на МНР. Сложная программа часто содержит другие программы в качестве строительных блоков — подпрограмм. Для правильного взаимодействия этих подпрограмм нужно соблюдать некоторые правила. О ПРЕДЕЛЕНИЕ 6.1 . Пусть дана программа для МНР, состоящая из s команд. Будем говорить, что программа имеет стандартный вид, если во всякой команде условного перехода J m, n, q  данной программы выполняется неравенство q  s  1. Если программа P не имеет стандартного вида, то в ней найдется команда вида J m, n, q , где q  s  1. Заменим в программе P эту команду на команду J m, n, s  1. Получим программу P , выполняющую точно такое же действие, как и программа P . Действительно, P и P отличаются лишь командами J m, n, q  и J m, n, s  1. Однако действие этих rn нужно перейти к следующей по порядку команд одинаково: при rm команде, а при rm rn остановиться. О ПРЕДЕЛЕНИЕ 6.2 . Стандартизацией программы I1 , I2 , . . . , Is называется замена в данной программе всех команд J m, n, q , где q  s  1, на команды J m, n, s  1. В результате стандартизации из программы P нестандартного вида получим стандартную программу P с тем же действием. Используя P вместо P , считаем, что все программы, которые мы рассматриваем, стандартны. I1 , I2 , . . . , Is и Q I1 , I2 , . . . , It станПусть даны две программы P дартного вида. Применим следующий прием — соединение программ. О ПРЕДЕЛЕНИЕ 6.3 . Соединением программ P и Q называется программа из s  t команд вида I1, I2, . . . , Is,I s 1, Is 2, . . . , Is t,  P   (6.1) Q где команды Is 1 , Is 2 , . . . , Is t получены из команд I1 , I2 , . . . , It программы Q приращением номеров на число s. При этом каждая команда условного перехода J m, n, q  из Q заменена на команду вида J m, n, q  s.    Замена команды J m, n, q  на команду J m, n, q  s нужна по следующей причине. Номера команд из Q, когда эти команды перемещены на новые позиции в (6.1), подросли на s. Если в команде переадресации J m, n, q  оставлен старый номер q , то вызываемой команды с таким номером q уже нет, т.к. у нее новый номер q  s. Поэтому нужна команда J m, n, q  s. Соединение программ P и Q будем обозначать через P Q. Можно соединить программы P , Q, R и получить программу P QR P QR и т.д. Выделения регистров для подпрограммы. Пусть программа P используется как подпрограмма в основной программе Q. В некоторых регистрах хранятся данные основной программы. При выполнении подпрограммы P можно испортить данные основной программы Q. Для предотвращения такой потери данных делаем так, что основная программа изменяет одну область регистров, а подпрограмма — другую. Произвольная МНР программа P имеет конечное число команд. Команда обнуления Z n и команда прибавления единицы S n действуют только на один регистр Rn . Команде переадресации T m, n и команде условного перехода J m, n, q  для функционирования нужны два регистра Rm и Rn . Если общее число команд обнуления и прибавления единицы равно k, а число команд переадресации и условного перехода равно l, то для работы всей программы P достаточно зарезервировать k  2l регистров. На остальные регистры программа P не действует, и их можно использовать в качестве рабочих регистров основной программы. Поэтому в дальнейшем применяем следующее правило выделения регистров подпрограммы P в программе Q. ρP  число с условием, что действие П РАВИЛО 6.1 . Пусть ρ программы P меняет лишь регистры R1 , . . . , Rρ и не затрагивает регистры Rl для l  ρ. Отводим регистры R1 , . . . , Rρ для работы подпрограммы P , и выделяем регистры Rl при l  ρ в качестве рабочих регистров для остальных команд основной программы Q. Это правило изображено в следующем виде R  1, . . . , Rρ , Rρ 1, . . .  (6.2) регистры для P регистры для Q Если соблюдено правило выделения регистров, то программа P в процессе выполнения меняет лишь регистры R1 , . . . , Rρ , а данные программы Q находятся в регистрах Rρ 1 , . . . и не могут быть затронуты и испорчены программой P . Вставка подпрограммы. Пусть в программе Q имеется подпрограмма P для вычисления функции f x1 , . . . , xn . В подпрограмме P имеются входные данные x1 , . . . , xn и результат вычислений f x1 , . . . , xn . По определению МНР должны соблюдаться следующие требования.  • При старте P аргументы x1 , . . . , xn обязаны находиться в регистрах R1 , . . . , Rn . • После окончания работы подпрограммы P результат f x1 , . . . , xn  должен содержаться в регистре R1 . Однако в ходе работы основной программы Q возможно следующее. Настал момент для старта подпрограммы P , которой нужны аргументы x1 , . . . , xn . В данный момент аргументы хранятся в каких-то регистрах Ri1 , . . . , Rin , а не в регистрах R1 , . . . , Rn , как нужно. Поэтому перед применением подпрограммы P мы должны извлечь аргументы из Ri1 , . . . , Rin и переслать их в регистры R1 , . . . , Rn . Для осуществления такой пересылки аргументов выполняется следующее действие. 1) Перед командами из P размещается набор команд T i1 , 1, . . . , T in , n. Пусть основная программа Q вызвала подпрограмму P и в начало зарезервированных регистров R1 , . . . , Rρ скопированы числа x1 , . . . , xn , с которыми начнет работать подпрограмма P . Однако в регистрах Rn 1 , . . . , Rρ может оставаться мусор — произвольные числа оставшиеся от предыдущей работы Q. По правилам работы МНР в последующих регистрах Rn 1 , . . . , Rk должны быть только одни нули. Поэтому нужно выполнить обнуление этих регистров от мусора, которое осуществляется следующим способом. 2) Выполняется набор команд Z n  1, . . . , Z ρ. После выполнения подпрограммы P результат находится в регистре R1 . Однако регистр R1 нужен для последующих вычислений программы Q. Поэтому из регистра R1 результат выполнения подпрограммы P нужно пересылать для его последующего использования на хранение в некоторый рабочий регистр Ri , где i  ρP . Это можно осуществить следующим способом. 3) Выполняется команда переадресации T 1, i. Итак, для правильной работы подпрограммы P могут потребоваться следующие действия, которые назовем вставкой подпрограммы.   О ПРЕДЕЛЕНИЕ 6.4. Вставка подпрограммы P в основную программу МНР — это выполнение следующих действий 1–5. 1 Распределение памяти. Вычисляется число ρ ρP  и выделяется память R1 , . . . , Rρ , достаточная для работы подпрограммы P . Задается регистр Ri , где i  ρ, для хранения результата работы подпрограммы. 2 Извлечение аргументов. Для этого записываются следующие команды: T i1 , 1, . . . , T in , n для передачи аргументов из места их хранения в регистры R1 , . . . , Rn . 3 Очистка регистров. Для этого записываются следующие команды: Z n  1, . . . , Z ρ. 4 Вставка команд подпрограммы P . 5 Пересылка результата на хранение. Добавляется команда T 1, i. В итоге в основной программе получается следующий фрагмент T i1 , 1 ... T in , n Z n  1 ... Z ρ P T 1, i (6.3) Вставку данного фрагмента в основную программу обозначаем через P i1 , . . . , in i. (6.4) Упражнения к лекции 6 З АДАЧА 1. Составить программу для МНР, вычисляющую функцию f x x  3. З АДАЧА 2. Составить программу для МНР, вычисляющую функцию f x 3. З АДАЧА 3. Составить программу для МНР, вычисляющую функцию f x, y  x  y  1. З АДАЧА 4. Составить программу для МНР, вычисляющую функцию f x, y  y  1. З АДАЧА 5. Рассмотрим МНР со следующей программой I1 S 1 I2 J 1, 1, 1. Пусть в регистре R1 в начале работы находится число x. Какую функцию f x вычисляет данная МНР? З АДАЧА 6. Показать, что МНР со следующей программой I1 I2 I3 I4 I5 I6 I7 J 1, 4, 8 S 3 J 1, 3, 7 S 2 S 3 J 1, 1, 3 T 2, 1 вычисляет функцию x 1 x 1, 0, если x  0, если x 0. З АДАЧА 7. Показать, что МНР со следующей программой I1 J 1, 2, 3 I2 S 2 I3 T 2, 1 вычисляет функцию  0, если x  1, если x sg x 0, 0. З АДАЧА 8. Показать, что МНР со следующей программой I1 I2 I3 I4 I5 I6 J 1, 2, 6 S 3 S 2 S 2 J 1, 1, 1 T 3, 1 вычисляет функцию f x З АДАЧА 9. функцию  12 x, если x — четно,  не определена, если x — нечетно. Составить программу для МНР, вычисляющую f x, y   0, если x  1, если x y, y. З АДАЧА 10. Составить программу для МНР, вычисляющую функцию, не определенную ни для одного значения аргумента. Лекция 7. Вычислимость частично рекурсивных функций на МНР Если функция f вычислима на некоторой машине с неограниченными регистрами, то говорим кратко «Функция f МНР вычислима». В предыдущей лекции установлена МНР вычислимость простейших функций. Теперь проверим, что применение операторов суперпозиции, примитивной рекурсии и минимизации к МНР вычислимым функциям вырабатывает МНР вычислимые функции. В результате получим основной результат — все частично рекурсивные функции вычислимы на МНР. Оператор суперпозиции. Данный оператор выражает функцию f через функции h, g1 , g2 , . . . , gm в следующем виде: f x1 , x2 , . . . , xn    h g1 x1 , x2 , . . . , xn , g2 x1 , x2 , . . . , xn , . . . , gm x1 , x2 , . . . , xn  . (7.1) При этом функция h имеет m переменных, а функции f, g1 , g2 , . . . , gm имеют n переменных. функция f получена из функций Т ЕОРЕМА 7.1 . Пусть h, g1 , g2 , . . . , gm с помощью оператора суперпозиции (7.1). Если функции h, g1 , g2 , . . . , gm МНР вычислимы, то и функция f также МНР вычислима. Доказательство. По условию функции h, g1 , g2 , . . . , gm МНР вычислимы. Пусть H, G1 , G2 , . . . , Gm программы, вычисляющие эти функции. Процесс вычисления функции f x1 , x2 , . . . , xn  состоит в следующем. Последовательно вычисляем числа g1 x1 , x2 , . . . , xn , g2 x1 , x2 , . . . , xn , ... ym gm x1 , x2 , . . . , xn  y1 y2 с помощью соответствующих программ G1 , G2 , . . . , Gm . Затем вычисляем число hy1 , . . . , ym  с помощью программы H. Получаем f x1 , x2 , . . . , xn . Программа для реализации оператора суперпозиции имеет вид. T 1, ρ  1 ... T n, ρ  n G1 ρ  1, ρ  2, . . . , ρ  n ρn1 ... Gm ρ  1, ρ  2, . . . , ρ  n ρnm H ρ  n  1, . . . , ρ  n  m 1 (7.2) Приведем блок-схему и поясним работу программы. Начало Пересылаем аргументы x1 , x2 , . . . , xn на хранение в регистры Rρ 1 , . . . , Rρ n  y1  G1 x1 , x2 , . . . , xn  Rρ n1  ... ym Gm x1 , x2 , . . . , xn  Rρ H y1 , y2 , . . . , ym  R1 nm  Остановка В программе вставлены несколько подпрограмм. Модифицируем правило вставки для случая нескольких подпрограмм. maxn, m, ρG1 , . . . , ρGm , ρH , и произ1) Вычисляем число ρ водим следующее распределение памяти МНР. • Регистры R1 , . . . , Rρ предназначены для работы всех подпрограмм G1 , G2 , . . . , Gm , H. • Последующие регистры Rρ 1 , . . . , Rρ n выделены в качестве постоянного хранилища аргументов x1 , x2 , . . . , xn ; см. пункт 2) из определения (6.4).   • Следующие по порядку регистры Rρ n 1, . . . , Rρ n m являются рабочими регистрами основной программы, в которых сохраняются результаты работы подпрограмм G1 , G2 , . . . , Gm соответственно.     2) Командами T 1, ρ  1, . . . , T n, ρ  n пересылаем аргументы x1 , x2 , . . . , xn на место их постоянного хранения — регистры Rρ 1 , . . . , Rρ n . Из этих регистров в процессе работы подпрограмм несколько раз будут считываться аргументы x1 , x2 , . . . , xn и пересылаться в регистры R1 , . . . , Rn ; см. пункт 3) из определения (6.4). Именно из этих регистров подпрограммы G1 , G2 , . . . , Gm будут извлекать свои аргументы при старте. 1, . . . , m, вставляются в основную про3) Подпрограммы Gi , где i грамму по правилу вставки подпрограмм. Это правило в общем случае i . В нашем случае выполняются выражено в виде строки P i1 , . . . , in следующие действия.   • В регистры R1 , . . . , Rn считываются аргументы x1 , x2 , . . . , xn из их постоянного хранилища — регистров Rρ 1 , . . . , Rρ n .   • Очищаются от мусора остальные регистры Rn 1 , . . . , Rρ .  • Исполняются команды из Gi . • Результат работы, т.е. число yi gi x1 , . . . , xn  переносится в регистр Rρ n i — место хранения результата работы подпрограммы Gi .   Далее вставляется подпрограмма H для вычисления функции h. Аргуg1 x1 , . . . , xn , . . . , ym gm x1 , . . . , xn  и менты функции h равны y1 хранятся в регистрах Rρ n 1, . . . , Rρ n m. Подпрограмма H считывает эти аргументы, затем по правилу (7.1) вычисляет f x1 , x2 , . . . , xn  и пересылает результат в регистр R1 . Затем МНР останавливается. Теорема доказана. Оператор примитивной рекурсии. Рассмотрим функцию f от n  1 аргумента и функции g и h от n и n  2 аргументов соответственно. Напомним, что функция f получена с помощью оператора примитивной рекурсии из функций g и h, если выполнены следующие равенства  f x1 , x2 , . . . , xn , 0 f x1 , x2 , . . . , xn , y  1    g x1 , x2 , . . . , xn ,   h x1 , x2 , . . . , xn , y, f x1 , x2 , . . . , xn , y  . (7.3) Т ЕОРЕМА 7.2. Пусть функция f получена с помощью оператора примитивной рекурсии из функций g и h. Если функции g и h МНР вычислимы, то и функция f также МНР вычислима. Доказательство. По условию функции g и h МНР вычислимы. Пусть G и H программы, вычисляющие эти функции. Выразим кратко процесс выf x1 , x2 , . . . , xn , y . Сравниваем y с числом 0. Есчисления функции f g x1 , x2 , . . . , xn  ли равенство верно, то вычисляем f x1 , x2 , . . . , xn , 0 и останавливаемся. В противном случае несколько раз применяем программу H для последовательного вычисления чисел f x1 , x2 , . . . , xn , k  при k 0, 1, . . . , y. Программа для реализации оператора примитивной рекурсии имеет вид. Iq Ip T 1, ρ  1 ... T n  1, t  1 G 1, 2, . . . , n t3 J t  2, t  1, p H ρ  1, . . . , ρ  n, t  2, t  3 S t  2 J 1, 1, q  T t  3, 1 t3 (7.4) При этом Iq и Ip — просто особо отмеченные команды с некоторыми номерами q и p. Приведем блок-схему и поясним работу программы. Блок-схема программы имеет вид. Начало x1 , x2 , . . . , xn , y Rρ 1 , . . . , Rt  g x1 , x2 , . . . , xn  Rt   1 3 Да k=y Нет k: k1 Rt hx1 , . . . , xn , k, f x1 , . . . , xn , k  Rt  3 R1 Остановка 3  1) Вычисляем число ρ max n  2, ρG, ρH . Обозначим ρ  n Регистры для работы программы распределим следующим способом. t. • R1 , . . . , Rρ — регистры для подпрограмм G и H; • Rρ 1 , . . . , Rt 1 — регистры, для постоянного хранилища аргументов x1 , x2 , . . . , xn , y, см. пункт 2).   • Rt 2 , Rt 3 — два регистра для запоминания промежуточных значе0, 1, . . . , y. Перед перний k и f x1 , x2 , . . . , xn , k  в цикле, где k вым исполнением цикла в регистрах Rt 2 и Rt 3 разместим 0 и f x1 , x2 , . . . , xn , 0.     2) Командами T 1, ρ  1, . . . , T n  1, t  1 пересылаем n  1 аргументов x1 , x2 , . . . , xn , y на место их постоянного хранения — регистры Rρ 1 , . . . , Rt 1. Затем в регистр Rt 3 помещаем число g x1 , x2 , . . . , xn , равное f x1 , x2 , . . . , xn , 0. Это выражено вставкой в программу строки G 1, 2, . . . , n t  3 . Итак, перед первым выполнением команды Iq имеем следующее содержание регистров.    • В регистре Rt нения цикла.  1 число y. Оно не будет изменяется в процессе выпол- • В регистре Rt 2 число k дом проходе цикла.  0. Оно будет наращиваться на 1 при каж- • В регистре Rt 3 число f x1 , x2 , . . . , xn , k  при k наращиваться на 1 при каждом проходе цикла.  0. Число k будет 3) Выполнение команды Iq начинает цикл. Возвращение на повторение этой команды производит команда J 1, 1, q . Сравниваются число k и число rt 1 , всегда равное y. Число rt 2 k принимает значеrt 2 ния 0, 1, . . . , y. Для его приращение на 1 предназначена команда S t  2. Поэтому в цикле последовательно проверяются равенства    y, 1 y, . . . y y. Пусть равенство еще не выполнено. Тогда выполняется вставка t  3 . Она вычисляет функцию H ρ  1, . . . , ρ  n, t  2, t  3 hx1 , x2 , . . . , xn , k, f x1 , x2 , . . . , xn , k , т.е. число f x1 , x2 , . . . , xn , k  1. При этом числа x1 , x2 , . . . , xn извлекаются из хранилища Rρ 1 , . . . , Rρ n , число k — из Rt 2 , число f x1 , x2 , . . . , xn , k  — из Rt 3 . Новое число f x1 , x2 , . . . , xn , k  1 заменяет старое число f x1 , x2 , . . . , xn , k  в регистре Rt 3 . Поэтому при следующем исполнении цикла в Rt 2 будет число k  1, в Rt 3 — число f x1 , x2 , . . . , xn , k  1, что и нужно. Равенство rt 2 и rt 1 в команде Iq сработает лишь тогда, когда в регистре Rt 2 накопится число y. В этот момент в регистре Rt 3 находится число f x1 , x2 , . . . , xn , y . Выполнится переадресация к команде T t  3, 1, которая перешлет f x1 , x2 , . . . , xn , y  в регистр R1 . После этого МНР остановится. Теорема доказана.            Оператор минимизации. Пусть дана вычислимая функция g x1 , x2 , . . . xn 1  от n  1 переменной, где n  0. Напомним определение оператора минимизации. Этот оператор создает из функции g от n  1 переменной новую функцию f от n переменных. Пусть g — функция от n  1 переменной. Функция f от n переменных получена из функции g с помощью оператора миy верно тонимизации, если равенство f x1 , x2 , . . . , xn  0, а значения гда и только тогда, когда g x1 , x2 , . . . , xn , y   g x1 , x2 , . . . , xn , 0, . . . , g x1 , x2 , . . . , xn , y нулю. 1 определены и не равны Т ЕОРЕМА 7.3. Пусть функция f получена из функции g с помощью оператора минимизации. Если функция g является МНР вычислимой, то и функция f также МНР вычислима. Доказательство. Функции g МНР вычислима по условию. Пусть G — программа, вычисляющая эту функцию. Считаем, что программа G приведена к стандартному виду. Искомая программа для функции f будет проверять одно за другим следующие равенства g x1 , x2 , . . . , xn , 0 g x1 , x2 , . . . , xn , 1 ... g x1 , x2 , . . . , xn , y  ..., 0, 0, 0, стремясь найти наименьшее k с условием g x1 , x2 , . . . , xn , k  0. Программа для вычисления функции f x1 , x2 , . . . , xn  имеет вид. Ip Iq T 1, ρ  1 ... T n, ρ  n G ρ  1, ρ  2, . . . , ρ  n  1 J 1, ρ  n  2, q  S ρ  n  1 J 1, 1, p T ρ  n  1, 1 1 При этом Ip является первой командой 1. G ρ  1, ρ  2, . . . , ρ  n  1 Приведем блок-схему, и поясним работу программы. (7.5) подпрограммы Блок-схема программы имеет вид. Начало x1 , x2 , . . . , xn Rρ 1 , . . . , Rρ  g x1 , x2 , . . . , xn , k   n R1 k: k  1 g x1 , x2 , . . . , xn , k  Нет Да k R1 Остановка 1) Рассмотрим число ρ maxn  1, ρG, и произведем следующее распределение памяти МНР. • Регистры R1 , . . . , Rρ предназначены для работы подпрограммы G. • Регистры Rρ 1 , . . . , Rρ n предназначены для постоянного хранения аргументов x1 , x2 , . . . , xn .   • Последующий регистр Rρ n 1 выделен для хранения числа k в проверяемых равенствах g x1 , x2 , . . . , xn , k  0, где k 0, 1, 2, . . . .   2) Командами T 1, ρ  1, . . . , T n, ρ  n пересылаем аргументы x1 , x2 , . . . , xn на место их постоянного хранения — регистры Rρ 1 , . . . , Rρ n . 1 , кото3) Затем работает подпрограмма G ρ  1, ρ  2, . . . , ρ  n  1 рая начинает цикл. Он начинается с первой команды Ip в подпрограмме и заканчивается командой J 1, 1, p. При 1, 2, . . . проходах цикла в регистр R1 заносятся числа g x1 , . . . , xn , 0, g x1 , . . . , xn , 1, . . . . Затем командой   J 1, ρ  n  2, q  эти числа сравнивается с неизменяемым нулем в регистре Rρ n 2. Поэтому в общем случае проверяется равенство g x1 , . . . , xn , k  0, и в этот момент в регистре Rρ n 1 находится число k. 4) Если при проверке командой J 1, ρ  n  2, q  равенства g x1 , . . . , xn , k  0 получили «да», то из регистра Rρ n 1 командой Iq T ρ  n  1, 1 пересылаем найденное число k в R1 и останавливаемся. 0 дает «нет», то наращиЕсли проверка равенства g x1 , . . . , xn , k  ваем командой S ρ  n  1 число k в регистре Rρ n 1 на единицу и переходим к следующей проверке g x1 , . . . , xn , k  1 0. В итоге получим искомое число k, или МНР работает бесконечно. Тогда f x1 , . . . , xn  не существует. Теорема доказана. Как следствие трех полученных выше теорем имеем.         Т ЕОРЕМА 7.4. Всякая частично рекурсивная функция вычислима на некоторой МНР. Учитывая тезис Черча о совпадении класса вычислимых функций с классом частично рекурсивных функций, получаем утверждение. Т ЕОРЕМА 7.5. Функция f является вычислимой функцией тогда и только тогда, когда функция f вычислима на некоторой МНР. Подробное изложение теории алгоритмов на основе понятия машины с неограниченными регистрами можно найти в [13]. Мы будем использовать МНР для нумерации программ и вычислимых функций, а также для построения универсальной функции. Упражнения к лекции 7 В следующих задачах используется общий вид программ (7.2), (7.4) и (7.5) для реализации на МНР операторов суперпозиции, примитивной рекурсии и минимизации. З АДАЧА 1. Выразить функцию умножения f x, y  x  y с помощью оператора примитивной рекурсии через нулевую функцию g и функцию h. Используя общий вид программы (7.4), составить программу для МНР, вычисляющую функцию f x, y . З АДАЧА 2. Рассмотрим функцию f x x! 1  2  . . .  x. При этом 0! 1. Составить программу для вычисления функции f x. Указание. Имеем 0! f x  1 1 x  1! x  1  x! x  1  f x hx, f x для функции hx, y  x  1  y. Поэтому функция f x получена с помощью оператора примитивной рекурсии из нульарной функции g, совпадающей с числом 1, и бинарной функции hx, y  x  1  y. Используя общий вид программы (7.4), составить программу для МНР, вычисляющую функцию f x. З АДАЧА 3. Составить программу для МНР, вычисляющую функцию f x, y  xy . При этом 00 1. З АДАЧА 4. Составить программу для МНР, вычисляющую функцию 1, если x 0, sg x 0, если x 0. З АДАЧА 5. Составить программу для МНР, вычисляющую функцию f x 2x. З АДАЧА 6. Составить программу для МНР, вычисляющую функцию f x, y, z  x  y  z. З АДАЧА 7. Составить программу для МНР, вычисляющую функцию f x, y  xy  3. З АДАЧА 8. Составить программу для МНР, вычисляющую функцию f x x2 . З АДАЧА 9. Составить программу для МНР, вычисляющую функцию x y, если x  y, f x, y  0, если x  y. З АДАЧА 10. Составить программу для МНР, вычисляющую функцию f x, y   x y . Лекция 8. Нумерации Теория нумераций — раздел теории алгоритмов, в котором изучаются свойства классов объектов, занумерованных с помощью натуральных чисел. Присвоив номера объектам (машинам Тьюринга, МНР, частично рекурсивным функциям и т.д. ), мы можем во многих случаях получить глубокие результаты об этих объектах. Идея использования нумерации объектов для получения различных утверждений об этих объектах принадлежит К. Геделю. В данной лекции мы осуществим нумерацию программ МНР и нумерацию множества вычислимых функций. С помощью этих нумераций в лекции 9 будут построены универсальные функции. Пусть A — произвольное непустое конечное или счетное множество. О ПРЕДЕЛЕНИЕ 8.1. Нумерацией множества A называется произвольное сюръективное отображение ν множества натуральных чисел N во множество A. При этом пара A, ν  называется нумерованным множеством. Вместо слов «сюръективное отображение» можно говорить «отображение на». Если отображение ν инъективно (и поэтому биективно), то нумерация ν называется однозначной нумерацией. Пусть ν: N A (8.1) нумерация множества A. Если ν n a, то натуральное число n называется номером элемента a при нумерации ν. Элемент a  A может иметь несколько номеров, поскольку отображение ν не обязательно инъективно. Обозначим элемент a с номером n через an . Тогда элементы нумерованного множества A можно представить в виде последовательности a0 , a1 , a2 , . . . (8.2) В общем случае в этой последовательности возможны повторения, т.е. j. Особый интерес представляют однозначные равенства ai aj при i нумерации, где таких повторений нет. A. Множество A являетПусть дана однозначная нумерация ν : N ся счетным множеством. В теории алгоритмом на отображение ν будем накладывать дополнительные ограничения. О ПРЕДЕЛЕНИЕ 8.2 . Пусть A — множество, состоящее из конструктивных объектов. Множество A называется эффективно счетным множеством, если существует однозначная A такая,что выполнены следующее два условия. нумерация ν : N 1 Существует алгоритм A1 , вычисляющий по элементу a  A его номер ν a  N. 2 Существует алгоритм A2 , устанавливающий по номеру n  N элемент a  A с данным номером. Нумерация ν называется в этом случае геделевской нумерацией. Условия 1) и 2) можем выразить в следующем виде. A и ν Функции ν : N  1 :A N вычислимы. Используя вместо самих объектов их номера при некоторой нумерации, мы сводим рассуждений об этих объектах к рассуждениям о натуральных числах. Пусть A — произвольный алгоритм, перерабатывающий объекты из множества X в объекты множества Y . Пусть ν1 и ν2 — геделевские нумерации множеств X и Y , изображенные на следующем рисунке. X ν1  A / Y  ν2 N f /N Рассмотрим данный набор правил A как процедуру вычисления некоN. Пусть на входе алгоритма A имеется объект торой функции f : N P  X, который перерабатывается в объект Q  Y . Заменим объекты P и Q на их номера n и m при нумерациях ν1 и ν2 . Сопоставляя числу n число N. Из того, что A алгоритм нетрудно полуm, получаем функцию f : N чить вычислимость функции f . Действительно, взяв число n, некоторыми инструкциями найдем объект P с данным номером. Затем алгоритмом A AP  и вычислим номер m объекта Q. При этом f n m. найдем Q Получили алгоритм для вычисления функции f . Рассмотрим примеры геделевских нумерацией и эффективно счетных множеств. Т ЕОРЕМА 8.1 . Множество N  N является эффективно счетным. Доказательство. Рассмотрим отображение π : N следующим правилом: N N, заданное π m, n 2m  2n  1 для всех m, n  N. 1 (8.3) Проверим биективность отображения π, и укажем алгоритмы вычисления функций π и π 1 . а) Инъективность. Пусть π m1 , n1  π m2 , n2 . Тогда  2m1  2n1  1 2m2  2n2  1. m2 . СоИз однозначности канонического разложения получаем m1 2m2 , имеем 2n1  1 2n2  1 и n1 n2 . Получили кратив на 2m1 m1, n1 m2, n2, что и нужно. б) Сюръективность. По элементу a  A найдем пару m, n с условием π m, n a. Обозначим искомые числа m и n в виде π1 a m Тогда и π2 a. n (8.4) a π1a, π2a. Равенство π m, n a означает 2m  2n  1 1 a, т.е. 2m  2n  1 a  1, где a  1  1, 2, . . . . Получили, что m π1 a, где π1 a — число двоек в каноническом разложении числа a  1. Тогда a1 2π a a1 , где a1 a12π a — нечетно. Имеем 2n1 π 1  1  1 откуда n   a  12π π2 a 2 1 a 1 . (8.5) (8.6) (8.7) a1 , (8.8) Итак, мы проверили биективность π и одновременно указали способ для вычисления π 1 a. В формулах (8.3), (8.7) и (8.8) указаны способы для вычисления функций π, π1 , π2 . Из этих формул следует вычислимость данных функций. При этом мы ссылаемся на тезис Черча и не производим непосредственную проверку рекурсивности функций π, π1 , π2 . Поскольку функции π и π 1 вычислимы, то множество N  N является эффективно счетным. Теорема доказана. В дальнейшем будет использоваться множество натуральных чисел без нуля. Введем обозначение этого множества:   N  1, 2, 3, . . . . (8.9) Т ЕОРЕМА 8.2. Множество N счетным.  N N   является эффективно Доказательство. Рассмотрим отображение ζ : N  N  N которое выразим через отображение π следующим равенством  ζ m, n, q   π π m 1, n 1,   1 . q  N, (8.10) Проверим биективность отображения ζ. а) Инъективность. Пусть ζ x ζ y  для x m 1 , n 1 , q 1  и y m2 , n2 , q2 . Покажем, что x y. Из ζ x ζ y  и инъективности π по (8.10) имеем π m1 1, n1 1 π m2 1, n2 1 и q1 1 q2 1. Отсюда q1 q2 . Снова применяем инъективность π. Получаем m1 1, n1 1 m2 1, n2 1, т.е. m1 m2 и n1 n2. б) Сюръективность. Пусть x  N. Проверим правило ζ  1 x  π1 π1 x  1,  π2 π1 x  1, π 2 x   1 , т.е. равенство  ζ π  1π1x  1, m  π2π1x  1, π2x  1 n x. (8.11) (8.12) q Применим определение ζ из (8.10) к равенству (8.12), где помечены числа m и n. Вычислим числа m 1, n 1, и применим равенство a из (8.5). Получим π m 1, n 1 π1 x в (8.12). π π1 a, π2 a Поэтому вместо (8.12) нужно проверить равенство π π1 x, π2 x (8.13) x. Оно верно по (8.5). Из выражений (8.10) и (8.11) для функций ζ и ζ 1 следует их вычислимость. Поэтому множество N  N  N является эффективно счетным. Теорема доказана.     Т ЕОРЕМА 8.3 . Множество A, состоящее из всевозможных конечных последовательностей натуральных чисел, является эффективно счетным. Доказательство. Имеем A a1, a2, . . . , ak   ai  N, k  N .  (8.14) Зададим отображение τ : A a a1 , a2 , . . . , ak   A, то τ a 2a1  2a1 N по следующему правилу: если  2a a a 2      2a a a k 1 1, (8.15) где a1  a1 a2 1  a1 a2 a3 2      a1 a2   ak k 1. Данная запись означает, что число τ a записано в двоичной системе счисления 20  22  23 в порядке возрастания степеней числа 2. Например, a 1  20  0  21  1  22  1  23 — это двоичное число a 10112 .  a2 1 1 2 3 1  2  k  Проверим биективность отображения τ . а) Инъективность. Пусть a, b  A и τ a τ b, где a b b1 , b2 , . . . , al . Покажем, что a b. Имеем τ a  1 2a1  2a1  a2 1  2a a 2b  2b 1 b 2  a1, a2, . . . , ak , τ b  1, т.е.      2a b a k 1 1  2b b b 2      2b b b l 1 . (8.16) b1 . Допустим a1  b1 . Тогда левая часть в 1  2 a3 2 1   1  2  k    1 2 3 1  2  l    Проверим вначале, что a1 (8.16) делится на 2b1 1 , а правая часть не делится, противоречие. Разде2b1 , и затем аналогично получим a2 b2 и т.д. Имеем лим (8.16) на 2a1 a b, что и нужно. б) Сюръективность. Для любого n  N найдем a a1 , a1 , . . . , ak   A с условием τ a n. Для этого запишем n  1 2b1  2b2      2bk , где b1  b2      bk . С учетом (8.15) равенство τ a n запишем в виде  b1 a1 , b2 a1  a2  1, b3 a1  a2  a3  2, .... Отсюда найдем искомые числа a1 , a2 , a3 , . . . правилом a1 b1 , a2 b2 a1 1 b2 b1 1, a3 b3 b2 1, . . . . (8.17) Итак, τ сюръективно и поэтому биективно. Вычислимость функций τ и τ 1 следует из равенств (8.15) и (8.17). Теорема доказана.  Т ЕОРЕМА 8.4 . Множество всех команд МНР является эффективно счетным. Доказательство. Обозначим через K множество всех команд МНР. Элементы из K, т.е команды МНР, имеют один из следующих четырех видов: Z n, S n, T m, n, J m, n, q , где m, n  N .  Разобьем множество K на подмножества K1 , K2 , K3 , K4 следующим способом: K1 K2 K3 K4 Z n  n  N , S n  n  N , T m, n  m, n  N , J m, n, q  m, n  N . Зададим отображение β : K β Z n β S n β T m, n β J m, n, q      N правилом 4n 1, 4n 1  1, 4π m 1, n 1  2, 4ζ m, n, q   3. Проверим биективность отображения β. а) Инъективность. Пусть a, b  K и a b. Проверим, что β a β b. Если a  Ki и b  Kj , где i j, то числа β a и β b имеют разные остатки при делении на 4. Поэтому β a β b. Пусть a, b содержатся в одном и том же множестве Ki . Допустим i 1, т.е. a Z n1 , b Z n2 . Так как b, то n1 n2 . Поэтому, β a β b. Аналогично рассматриваются a случаи i 2, 3, 4. Итак, β инъективно. б) Сюръективность. Пусть l  N. Найдем a  K с условием β a l. 4q, где q  0. Тогда Если l имеет остаток 0 при делении на 4, то l для искомого прообраза a имеем a Z q  1, где q  1  1. Аналогично находим a, если l имеет остаток 1,2 или 3 при делении на 4. Итак, β сюръективно. С учетом а) отображение β биективно. Вычислимость функций β и β 1 следует из полученных выше правил для их вычисления. Теорема доказана.  Т ЕОРЕМА 8.5. Множество P, состоящее из всевозможных программ МНР, является эффективно счетным. Доказательство. Зададим отображение γ : P Программа P имеет вид I1 , I2 , . . . , Is , где sN .  N. Пусть P  P. (8.18) Образ γ P   N элемента P  P вычисляем по правилу   γ P  τ β I1 , β I2 , . . . , β Is  , (8.19) где функции τ и β введены в теоремах 8.3 и 8.4. По этому правилу вначале для последовательности команд I1 ,. . . , Is , используя функцию β, вы числяем строку чисел β I1 , . . . , β Is  . Затем по этой строке, используя функцию τ , находим номер программы γ P . При этом все перечисленные действия образуют некоторый алгоритм, т.е. функция γ вычислима. Проверим биективность отображения γ. P2 . а) Инъективность. Пусть γ P1  γ P2 . Покажем, что P1 Равенство программ понимаем как равенство последовательностей I1, . . . , Ir , P2 J1, . . . , Js и команд этих программ. Имеем P1 γ P1  γ P2 . По (8.19) получаем   τ β I1 , β I2 , . . . , β Ir  Из инъективности τ имеем   β I1 , β I2 , . . . , β Ir    τ β J1 , β J2 , . . . , β Js  .   β J1 , β J2 , . . . , β Js  . Из инъективности β получаем P1 P2 , что нужно. а) Сюръективность. Пусть l  N. Найдем P  P с условием γ P  l. Вначале используем сюръективность τ и по числу l  N находим строку a1, . . . , ak  с условием τ a1, . . . , ak  l. Затем, используя сюръективность β, для каждой компоненты ar  N находим команду МНР Ir с условием β Ir  ar . В итоге получим искомую программу I1 , I2 , . . . , Ik . Итак, γ сюръективно и поэтому биективно. При этом функции γ и γ 1 вычислимы. Теорема доказана. Биекция γ, задаваемая правилом (8.19), существенным образом используется в дальнейших рассуждениях. Программу P с номером n γ P  будем обозначать через Pn .  О ПРЕДЕЛЕНИЕ 8.3. Номер n левым) номером программы P . γ P  называется кодовым (геде- Для множества P, состоящего из всех МНР программ, имеем перечисление (8.20) P P0 , P1 , P2 , . . . . В этом перечислении программы Pm и Pn при m n различны, хотя и могут вычислять одну и ту же функцию. При этом существуют алгоритмы A1 и A2 со следующим условием. • По каждой программе P с помощью алгоритма A1 вычисляется ее кодовый номер n γ P . • По каждому номеру n грамма с номером n.  N с помощью алгоритма A2 находится про- Алгоритм A1 назовем кодированием программ, а алгоритм A2 — декодированием. Нумерация множества вычислимых функций. Используя нумерацию программ, получим теперь нумерацию вычислимых функций. Пусть F — множество всех вычислимых функций. Обозначим через Fn множество всех n-арных вычислимых функций. Зафиксируем число n  N и занумеруем функции из Fn , т.е. занумеруем все n-арные вычислимые функции. Пусть дана программа Pa с номером a при нумерации программ. Обозначим n-арную функцию, значение которой вычисляется МНР с программой Pa через φna . Это означает выполнение условий 1) и 2). 1) Если в начале работы регистры равны x1 , . . . , xn , 0, . . . , и значение функции φna x1 , . . . , xn  существует и равно y, то МНР останавливается и регистре R1 содержится число y. 2) Если φna x1 , . . . , xn  не определено, то МНР работает бесконечно. Если индекс a в программах Pa пробегает все натуральные числа, то функции φna пробегают все n-арные вычислимые функции. Имеем следующую нумерацию νn элементов из Fn : φn0 , φn1 , φn2 , . . . (8.21) В этой последовательности перечислены все n-арные вычислимые функции. Однако две различные программы могут вычислять одну и ту же функцию. Поэтому возможны повторения φna φnb при a b. Для множества всех вычислимых функций от одного аргумента имеем нумерацию ν элементов из F1 : φ10 , φ11 , φ12 , . . . . (8.22) Если значение n фиксировано на протяжении некоторых рассуждений и ясно из контекста, то опускаем верхний индекс n в φna и записываем φa . Вместо (8.21) получаем запись без верхних индексов φ0 , φ1 , (8.23) φ2 , . . . В (8.21) каждого n перечислены все n-арные вычислимые функции. Уберем повторения в перечислении (8.21). Имеем исходную последовательность функций φn0 , φn1 , φn2 , . . . , с повторениями, из которой получим новую последовательность без повторений φnα 0 ,   φnα 1 ,   φnα 2 , . . . (8.24)   Номера α0, α1, α2, . . . получим так. Вначале расположим функцию φn0 . Поэтому α0 0. Затем вычеркиваем в исходной последовательности все вхождения φnα 0 . Берем в качестве α1 номер k первой невычеркнутой функции. Получим α1 k. Затем вычеркиваем φnα 1 и т.д. Получим последовательность (8.24) без повторений, состоящую из всех n-арных вычислимых функций. Поэтому множество n-арных вычислимых функций счетно. Заметим, что у нас нет никаких оснований считать функцию αx вычислимой функцией. N, заданное следующим правилом. Рассмотрим отображение θ : F Пусть f — n-арная вычислимая функция, где n  0. Пусть m — номер места f в последовательности (8.24), т.е. f φnα m . Тогда     θf  π m, n.   (8.25) Т ЕОРЕМА 8.6 . Отображение θ является биекцией множества F во множество N . В частности, множество всех вычислимых функций счетно. Доказательство. Инъективность. Пусть f, g  F , с числом аргументов g. Так как f g, то n1 и n2 и номерами m1 и m2 . Предположим, что f n1 n2 или m1 m2 т.е. m1 , n1  m2 , n2 . Из инъективности π и (8.25) получаем θf  θg . Сюръективность отображения θ непосредственно следует из (8.25) и сюръективности π. Поэтому отображение θ является биекцией. Теорема доказана. Рассмотрим теперь нумерацию ν1 областей определения и нумерацию ν2 областей значений n-арных вычислимых функций. Обозначим соответственно через Da и Ea область определения и область значений функции φna . Сопоставив числу a  N множество Da получим нумерацию ν1 , а сопоставив числу a  N множество Ea получим нумерацию ν2 . Теорема о параметризации. Пусть f x, y  — произвольная вычислимая функция с двумя переменными. Зафиксируем в f x, y  переменную x, полагая вначале x 0, затем x 1, и т.д. 0. Получим функцию g y  f 0, y  от одной переменной. Пусть x Функция g y  является вычислимой функцией, и поэтому присутствует в последовательности φ0 , φ1 , φ2 , . . . на некотором месте, которое обоφk 0 y  для значим k 0. Поэтому g y  есть функция φk 0 и f 0, y  1 получим функцию φk 1 f 1, y  и равенство всех y  N. При x f 1, y  φk 1 y  и т.д. Итак, для любого x  N можно подобрать номер k x с условием         φk x y  f x, y   для всех x, y   N. (8.26) Получили функцию k x из N в N с условием (8.26). Покажем, что в качестве k x можно подобрать вычислимую функцию. Т ЕОРЕМА 8.7 (о параметризации). Пусть f x, y  — вычислимая функция. Существует всюду определенная, вычислимая функция k x с условием, что f x, y  φk x y  для всех x, y  N.   Доказательство. Ясно, что функция k x всюду определена. Нужно только проверить, что функция k x вычислима, т.е. существует алгоритм для получения из числа x числа k x. Укажем программу для этого алгоритма. Пусть P — программа для вычисления функции f x, y . Допустим, что a. Функция φk a f a, y  является вычислимой функцией, и МНР x программа Pk a , вычисляет эту функцию. Укажем алгоритм A получения по числу a программы Pk a . Данную программу Pk a выразим в виде         T 1, 2 Z 1 S 1 ... S 1 a раз P (8.27) В регистр R1 перед первым тактом работы данной программы занесено число y, в остальных регистрах находится число 0. y ... Вначале командой T 1, 2 перенесем число y из R1 в регистр R2 . Затем регистр R1 обнулим и a раз добавим единицу. Перед выполнением подпрограммы P имеем следующий вид регистров a y ... При выполнении подпрограммы P в регистр R1 заносится f a, y  g a и МНР останавливается. Ясно, что данное правило (8.27) получения по числу a  N программы Pk a можно считать алгоритмом. Теорема доказана. Канторовская нумерация пар и произвольных строк натуральных чисел. Рассмотрим еще один важный пример однозначной нумерации пар натуральных чисел. Пусть   A x, y  x, y  N. Элементы множества A расположим в следующем порядке 0, 0, 0, 1, 1, 0, 0, 2, 1, 1, 2, 0, 0, 3, . . . B0 B1 B2 B3 (8.28) Пары в данной последовательности выписаны по блокам B0 , B1 , . . . , так что в каждом блоке Bs помещены пары x, y  с заданной суммой s x  y. Внутри блока пары упорядочены по возрастанию первой компоненты. Ясно, что каждый элемент из множества A имеет однозначно определенный номер и для произвольного натурального числа существует однозначно определенная пара с данным номером. Укажем формулу для определение номера по заданной паре x, y . Считаем, что в последовательности 8.28 номера членов начинаются с 0. Т ЕОРЕМА 8.8. Обозначим через cx, y  номер пары x, y  в последовательности 8.28. Тогда cx, y  x  y2  3x  y . 2 (8.29) Доказательство. Рассмотрим пару x, y . Она содержится в блоке Bs , где s x  y, состоящем из x  y  1 пар и имеющим вид Bs 0, x  y, 1, x  y 1, . . . , x, y , . . . , x  y, 0. (8.30) До блока Bs расположены блоки B0 , B1 , . . . Bx y 1. В них соответственно 1, 2, . . . , x  y пар. Поэтому перед блоком Bs находится   x  y  1x  y 1  2      x  y  2 пар. В самом блоке Bs перед парой x, y  находится x пар 0, x  y , 1, x  y 1, . . . , x 1, y  1. Номера пар в (8.28) начинаются с нуля. Поэтому номер пары равен числу предшествующих пар. Тогда номер пары x, y  равен x  y  1x  y  x x  y2  3x  y . 2 2 Теорема доказана. Итак, мы имеем нумерацию пар натуральных чисел. С помощью этой нумерации получим нумерацию троек, четверок и т.д натуральных чисел. Для этого введем функции c2 x1 , x2  cx1 , x2 ,   3 c3 x1 , x2 , x3  c4 x1 , x2 , x3 , x4    c2 cx1 , x2 , x3   c cx1 , x2 , x3 , x4   c cx1 , x2 , x3 ,    c c c x 1 , x 2 , x 3 , x 4 , ... Если нужно найти номер тройки x1 , x2 , x3 , то вначале находим номер n пары x1 , x2 , а затем номер пары n, x3 . То же для четверок и т.д. Упражнения к лекции 8 З АДАЧА 1. Найти номера пар 1, 1, 0, 4, 4, 0, 2, 3 при нумерации π, заданной равенством (8.3). З АДАЧА 2. Найти пары, имеющие номера 3, 19, 15, 0 при нумерации π. З АДАЧА 3. Найти номера троек 1, 1, 1, 2, 1, 1, 1, 1, 3 при нумерации ζ, заданной равенством (8.10). З АДАЧА 4. Найти тройки, имеющие номера 15, 0, 2 при нумерации ζ. З АДАЧА 5. Найти номер последовательности 1, 0, 2, 3 при нумерации τ , заданной равенством (8.15). З АДАЧА 6. Найти последовательность, имеющую номер 15 при нумерации τ . З АДАЧА 7. Найти номера пар 1, 1, 1, 1, Кантора из (8.28) и (8.29). 2, 3 при нумерации З АДАЧА 8. От нумерации Кантора пар натуральных чисел можно перейти к нумерации троек, четверок и произвольных n-ок натуральных чисел. Для нумерации троек чисел в лекции 8 указана функция c3 x1 , x2 , x3 , заданная правилом c3 x1 , x2 , x3    c cx1 , x2 , x3 . Найти номера троек 0, 0, 0, 1, 1, 1, 2, 3, 1. З АДАЧА 9. Доказать, что множество всех функций f x из N в N несчетно. З АДАЧА 10. Доказать, что множество всех вычислимых функций f x из N в N счетно. Лекция 9. Универсальные функции Вычислимые функции, рассматриваемые в теории алгоритмов, обладают весьма удивительным и необычным свойством. А именно, они в некотором смысле порождаются из одного объекта — универсальной функции. Разумеется, мы не имеем аналогичного объекта для того разнообразия функций: многочленов, показательных, тригонометрических и других функций, изучаемых в общем курсе математики. Предположим, что мы имеем некоторую функцию U t, x от двух переменных. Будем конструировать с помощью U t, x новые функции fa от одной переменной. Для этого фиксируем первый аргумент в функции U t, x. Пусть a  N . Считаем, что t a постоянно в функции U t, x. Получим функцию fa от одной переменной x, которая задается правилом fa x U a, x для всех x  N. (9.1) О ПРЕДЕЛЕНИЕ 9.1 . Функция U t, x от двух переменных является универсальной функцией для класса вычислимых функций от одной переменной, если выполнены следующие два условия. 1 Для каждого a  N функция fa x U a, x (9.2) является вычислимой функцией. 2 Произвольная вычислимая функция от одной переменной является функцией fa x для некоторого a  N. Функция fa x U a, x называется сечением функции U при t a. Так как функция U t, x частичная функция, то и ее сечения в общем случае также частичные функции. Поскольку все вычислимые функции от одной переменной получаются из универсальной функции U t, x в виде сечений, то можно сказать, что функция U их «порождает». Обобщим определение (9.1) на случай частичных функций от n переa в функменных. В этом случае фиксируем значение переменной t ции U t, x1 , . . . , xn  от n  1 переменной. Получаем некоторую функцию fa x1 , . . . , xn  от n переменных, заданную правилом fa x1 , . . . , xn  U a, x1 , . . . , xn . (9.3) О ПРЕДЕЛЕНИЕ 9.2. Функция U t, x1 , . . . , xn  от n  1 переменной называется универсальной функцией для класса вычислимых функций от n переменных, если выполнены следующие два условия. 1 Для каждого a  N функция fa x1 , . . . , xn  U a, x1 , . . . , xn  (9.4) является вычислимой функцией. 2 Произвольная вычислимая функция от n переменных является функцией fa x1 , . . . , xn  для некоторого a  N. Следующая теорема является одним из основных результатов теории вычислимых функций. Т ЕОРЕМА 9.1. Существует вычислимая функция U t, x1 , . . . , xn  от n  1 переменной, являющаяся универсальной функцией для класса всех вычислимых функций от n переменных. Доказательство. Нам нужно построить универсальную функцию. Вначале мы зададим некоторую функцию U t, x1 , . . . , xn , а затем проверим ее универсальность и вычислимость. Для задания функции используем нумерацию φn0 , φn1 , φn2 , . . . всех n-арных вычислимых функций из равенства (8.21) предыдущей лекции. Поскольку у нас число n фиксировано, то опускаем в обозначении функций верхний индекс n. Получаем бесконечную последовательность φ0 , φ1 , (9.5) φ2 , . . . В этой последовательности перечислены с повторениями все n-арные вычислимые функции. Нижний индекс t является номером функции φt . Введем функцию U от n  1 переменной, указав следующее правило для вычисления ее значений: U t, x1 , . . . , xn  φt x1 , . . . , xn  для всех t, x1 , . . . , xn  N. (9.6) Тем самым, чтобы вычислить значение функции U от n  1 переменной t, x1 , . . . , xn , нужно взять в (9.5) n-арную функцию φt с номером t и вычислить ее значение от набора переменных x1 , . . . , xn . Проверим универсальность функции U , используя определение универсальности (9.2), состоящее из двух пунктов 1) и 2). 1) Пусть t a. По (9.6) получим некоторую n-арную функцию φa x1 , . . . , xn , которая вычислима. 2) Если параметр t пробегает все числа из N, то и функции φt x1 , . . . , xn  пробегают все функции из (9.5). Осталось выполнить самое трудное — проверить вычислимость заданной в (9.6) функции U . Эту проверку выполним в несколько шагов. Шаг 1, изображение процесса вычислений. В лекции 8 мы занумеровали все программы и получили последовательность программ МНР P0 , P 1 , P 2 , . . . (9.7) Затем мы обозначили через Mi машину с программой Pi и получили последовательность всех МНР M 0 , M1 , M 2 , . . . (9.8) Эти МНР вычисляют соответственно функции φ0 , φ1 , φ2 , . . . из (9.5). Перед началом вычислений расположим машины из (9.8) в первую строку некоторой таблицы. Машины готовы стартовать. У каждой из них в регистрах набор аргументов x1 , . . . , xn . Машины намерены выполнить команду с номером j 1. После старта все машины совершат один такт работы, изменят содержимое регистров и снова намерены выполнить команду с некоторым очередным номером j (индивидуальным для каждой машины). Изобразим эти машины с новыми состояниями во второй строке таблицы. После второго такта получим третью строку и т.д. Тем самым время течет дискретно по тактам: такт 1, такт 2, . . . В каждый очередной такт времени срабатывает такт работы каждой машины. Возможно, что некоторые машины уже остановились, а другие продолжают работу. Если машина остановилась после такта m, то считаем, что при последующих тактах m  1, m  2, . . . с ее регистрами не происходит никаких изменений и номер очередной команды j, которую она должна исполнить, равен 0. Тем самым все машины, и те, которые работают бесконечно, и те, которые останавливаются, участвуют в каждом такте «течения времени». Однако при этом машины разделены на два типа: 1) машины, работающие бесконечно и 2) машины, которые останавливаются после некоторого такта m. Признак машины типа 2) следующий. Машина Mt имеет тип 2) тогда и только тогда, когда существует номер ее очередной команды j, равный 0. Весь ход вычислений всех машин полностью задается следующей бесконечной вправо и вниз таблицей. M00 M01 M02 ... M10 M11 M12 ... M20 M21 M22 ... M30 M31 M32 ... ... ... ... ... (9.9) Через Mtm изображена машина Mt , совершившая m тактов работы. Каждый столбец отражает ход вычислений конкретной машины Mt . Шаг 2, кодирование вычислений. Пусть машина Mt , совершила m  0 тактов работы. Введем понятие «состояние машины» после m-го такта работы. Для этого вначале определим понятие «конфигурация регистров». Совершив m тактов работы, машина имеет некоторое содержимое регистров, которое является бесконечной последовательностью r1 , . . . , rk , 0, . . . натуральных чисел, где лишь конечное число членов не равно 0. Назовем эту последовательность конфигурацией регистров и обозначим через r. Имеем r1, . . . , rk , 0, . . .  — конфигурация регистров. (9.10) Для следующего m1 такта работы машины имеется j — номер команды, r которую она должна исполнить в этом такте. Назовем текущим состоянием или просто состоянием машины набор из конфигурации регистров и номера очередной команды. Обозначим конфигурацию регистров через r1, . . . , rk , 0, . . . , а номер очередной команды — через j. Получим r изображение состояния машины в виде пары q r, j  — состояние машины. (9.11) Ясно, что пара r, j  однозначно задает следующий такт работы машины. При этом клетки таблицы (9.9) отражают текущие моменты — состояния машин. Наша дальнейшая задача — закодировать состояния машин. При кодировании объектов произвольному объекту a сопоставляем его код — натуральное число, которое обычно обозначаем через a . Кодирование конфигурации регистров. Пусть задана конфигурация регистров r r1 , . . . , rk , 0, . . .  некоторой машины Mt . О ПРЕДЕЛЕНИЕ 9.3 . Кодом конфигурации регистров r называется натуральное число r , задаваемое равенством r 2r1 3r2 . . . prkk 1. (9.12) При этом используется список простых чисел и учитывается, что лишь конечное число регистров не равно 0. Как кодирование (вычисление по r числа r ), так и декодирование (восстановление по данному числу r конфигурации регистров) являются алгоритмами и реализуются некоторым конечным набором инструкций. Далее осуществляем кодирование состояний машины. Пусть дано соr, j . Рассмотрим r — код конфигурации регистров и стояние q j — номер очередной команды. О ПРЕДЕЛЕНИЕ 9.4. Кодом состояния q ло q , вычисляемое по правилу q r, j  называется чис- π r , j . При этом функция π — функция кодирования пар натуральных чисел, определенная равенством (8.3) . Поэтому q π r , j  2r ½  2j  1 1. (9.13) Существует алгоритм, вычисляющий по паре ее код, и существует алгоритм, восстанавливающий по коду саму пару (декодирование). Правило декодирования состояния. Пусть мы знаем число q — код r, j  — сасостояния конкретной машины и нужно восстановить q 1 мо состояние машины. Тогда 1) применяя π , восстановим числа r и j; 2) декодируя r , восстановим конфигурацию регистров r. Шаг 3. Функция σ и ее вычислимость. Построим функцию σ t, x1 , . . . xn , m от n2 переменных. Пусть даны n2 натуральных числа t, x1 , . . . xn , m. Выполним следующие действия. 1) Рассмотрим машину Mt с номером t. 2) Поместим в регистры машины Mt числа x1 , . . . xn , 0, . . . . 3) Совершим m тактов работы машины Mt . 4) Пусть машина Mt совершила m тактов работы и находится в некотором состоянии q. Закодируем это состояние по правилу (9.13) в виде некоторого натурального числа q — кода состояния.  О ПРЕДЕЛЕНИЕ 9.5 . Значение функции σ t, x1 , . . . xn , m равно q — коду состояния машины Mt после m тактов работы с начальными значениями регистров x1 , . . . xn , 0, . . . . σ t, x1 , . . . , xn , m дает ответ на вопрос: какое Декодирование числа q состояние q r, j  у произвольной машины Mt после m тактов работы. r1, . . . , rk , 0, . . .  и номер следуюТак как конфигурация регистров r щей команды j однозначно задают m  1 такт работы Mt , то, имея такую вычислимую функцию σ, мы полностью обозреваем ход вычислений всех машин. Вычислимость функции σ установим, построив ее из вычислимых функций g и h посредством примитивной рекурсии. 1) Укажем функцию g и алгоритм для ее вычисления. Имеσ t, x1 , . . . , xn , 0. Если рассматривается число ем g t, x1 , . . . , xn  0, то машина Mt еще не сделала ни одσ t, x1 , . . . , xn , m при m ного такта работы. Ее регистры равны x1 , . . . xn , 0, . . . и имеют код 2x1 3x2 . . . pxnn 1. Номер следующей команды j 1. По правилу r (9.13) для вычисления числа q имеем g t, x1 , . . . , xn  π r , 1. Из этой записи ясно, что функция g вычислима. 2) Укажем теперь функцию h с условием σ t, x1 , . . . , xn , m  1 ht, x1 , . . . , xn , m, a, где a σ t, x1 , . . . xn , m. Построим алгоритм A вычисления числа b σ t, x1 , . . . , xn , m  1, т.е. укажем инструкции для получения числа b из заданных чисел t, x1 , . . . , xn , m, a. Инструкции I1 , I2 , I3 алгоритма A описывают процесс вычисления функции h. Нам задано число a σ t, x1 , . . . , xn , m. Оно является кодом состояния машины Mt после совершения m тактов работы. Поэтому a π r , j , где r — код конфигурации регистров после m тактов, j — номер команды для исполнения в следующем m  1 такте работы машины. I1 . Применяя инструкции для π 1 , восстанавливаем по числу a числа r и j, а затем по r восстанавливаем конфигурацию регистров r. Если j 0, то машина остановилась. Состояние после такта m  1 то же, что и после такта m (регистры не изменятся и номер следующей команды 0 не изменится). Поэтому σ t, x1 , . . . , xn , m  1 σ t, x1 , . . . , xn , m. Пусть j  0. Мы знаем регистры и знаем номер j следующей команды машины Mt . Нам нужно вычислить σ t, x1 , . . . , xn , m1 — код состояния  машины Mt после m  1-го такта работы. Для этого нам нужно найти состояние регистров и номер следующей команды. I2 . Декодируем с помощью γ 1 число t, т.е. восстанавливаем программу Pt (ее инструкции) по кодовому номеру t. При этом используем нумерацию программ γ из (8.19). Произвольной программе P сопоставляется ее номер γ P , и программа с номером t обозначается через Pt . Мы применили алгоритм декодирования γ 1 . I3 . Среди инструкций программы Pt находим инструкцию с номером j. Если такой инструкции нет, то мы не сможем ее выполнить. После выполнения такта m  1 происходит остановка машины Mt . Регистры те же, что и после такта m. Поэтому σ t, x1 , . . . xn , m  1 π r , 0. Пусть среди инструкций программы Pt есть инструкция с номером j. Зная значения регистров и инструкцию с номером j, мы выполним один такт работы. Если мы представим, что инструкции всех программ Pt собраны в одну программу Q и мы исполняем одну из команд программы Q, то это неправильно. Действительно, Q состоит из бесконечного числа команд, что недопустимо. Любая программа — конечная последовательность команд. При этом команда — это предписание сделать какието действия над объектами. Такое понимание инструкций программы Pt мы сейчас утрачиваем. Инструкции программы Pt в данный момент — просто строки, и сами являются конструктивными объектами, с которыми манипулирует искомый алгоритм A. Поэтому Pt только набор слов в некотором алфавите и инструкцию с номером j будем считать словом A. I2 . Определите, к какому из следующих 4 видов принадлежит слово A   Z n, S n, T m, n, J m, n, q . а) Если A вида Z n, то в конфигурации регистров замените rn на 0. Конфигурация регистров r r1 , . . . , rk , 0, . . .  получена у нас при декодировании числа r . Номер следующей команды равен номеру команды Z n, увеличенному на единицу. б) Если A вида S n, то в конфигурации регистров замените rn на rn  1. Аналогично можно расписать действия в двух оставшихся случаях. Итак, у нас описан алгоритм A для вычисления функции h. Поэтому функция h и функция σ вычислимы. Шаг 4. Вычислимость функции U t, x1 , . . . , xn . Проверим, что из вычислимости функции σ t, x1 , . . . xn , m следует вычислимость универсальной функции U . По определению (9.6) функции U имеем U t, x1 , . . . , xn  φt x1 , . . . , xn , т.е. число U t, x1 , . . . , xn  равно значению функции φt для набора аргументов x1 , . . . , xn . Поэтому имеем три равносильных утверждения: 1) число U t, x1 , . . . , xn  существует. 2) число φt x1 , . . . , xn  существует. 3) машина Mt , стартуя с набором регистров x1 , . . . , xn , останавливается после некоторого m-го такта работы. Пусть j t, x1 , . . . xn , m — это номер j следующей команды для исполнения машины Mt после совершения m тактов работы. Функция σ t, x1 , . . . , xn , m, σ t, x1 , . . . x1 , m тесно связана с функцией j. Если q π r , j , мы получим число j j t, x1 , . . . , xn , m. то, декодируя число q Из вычислимости функции σ получаем вычислимость всюду определенной функции j. Наличие такого m, что j t, x1 , . . . , xn , m 0, (9.14) является условием остановки машины Mt . Причем наименьшее m в этом равенстве (которое находится оператором минимизации) — это номер такта, после которого машина Mt остановилась. Поэтому число m находится посредством алгоритма. При этом U t, x1 , . . . , xn  φt x1 , . . . , xn  σ t, x1 , . . . , xn , m. Поэтому функция U t, x1 , . . . , xn  вычислима. Теорема доказана. Диагональная функция и ее свойства. Пусть U t, x — универсальная функция для класса вычислимых функций от одной переменной. Зададим диагональную функцию dx правилом dx U x, x для всех x  N. (9.15) Зададим еще одну дополнительную функцию d1 x равенством d1 x dx  1 для всех x  N. (9.16) С ВОЙСТВО 1. Диагональная функция dx и функция d1 x являются вычислимыми функциями. Доказательство. Универсальная функция U t, x является вычислимой функцией. Значения диагональной функции dx равны U x, x, т.е. равны   U f x, f x , где f x x вычислимая функция. Поэтому диагональная функция dx вычислима. Функция d1 x выражается через функцию dx следующим равенством: d1 x dx  1 S dx. Поэтому функция d1 x вычислима. Свойство доказано. С ВОЙСТВО 2. Пусть f x — произвольная вычислимая функция. Тогда функция f x и диагональная функция dx совпадают хотя бы при одном значении аргумента. В качестве такого значения аргумента можно взять номер a функции f x при нумерации унарных функций. Доказательство. По условию функция f x вычислима. Поэтому она получена из универсальной функции U t, x при некотором значении переменной t a  N, т.е. f x U a, x для всех x  N. (9.17) По заданию универсальной функции U a, x в (8.22) имеем U a, x φa x. Поэтому функция f x есть функция φa и имеет номер a при нумерации унарных функций. Подставим значение x a в правила для задания функций f x и dx в равенствах (9.17) и (9.15). Получим f a U a, a и da U a, a. Итак, функция f x и диагональная функция dx совпадают при значении аргумента x a, причем a — это номер функции f x при нумерации унарных функций. Свойство доказано. Поскольку мы построили универсальную функцию для класса всех частичных вычислимых функций одного аргумента, то сразу возникает вопрос: можно ли аналогично построить универсальную функцию для класса всюду определенных вычислимых функций? Ответ неожиданный — нельзя. Т ЕОРЕМА 9.2. Не существует вычислимой, всюду определенной функции от двух переменных, универсальной для класса вычислимых, всюду определенных функций от одной переменной. Доказательство. Предположим противное, т.е. существует всюду определенная вычислимая функция U t, x от двух переменных, являющаяся универсальной для класса вычислимых, всюду определенных функций от одной переменной. В классе частичных вычислимых функций рассматривалась диагональная функция dx и функция d1 x. Рассмотрим аналогичную диагональную функцию dx и функцию d1 x в классе всюду определенных вычислимых функций. Пусть dx U x, x, d1 x dx  1 для всех x  N. (9.18) Поскольку универсальная функция U t, x всюду определена, то и функции dx и d1 x являются всюду определенными, вычислимыми функциями. Для функции dx имеем аналогичное свойство 2. Так как функция d1 x вычислима и всюду определена, то она должна совпадать с диагональной функцией dx хотя бы при одном значении аргумента. Однаdx  1 запрещает такое совпадение, противореко равенство d1 x чие. Значит, допущение о существовании универсальной функция U t, x неверно. Теорема доказана. Пусть даны две частичные функции f x и g x из N в N . Функция g x называется продолжением функции f x, если для любого a  N из существования f a следует существование g a и равенство f a g a. При этом возможно, что значение f a не существует, а функция g x при x a имеет некоторое значение. Естественно возникает вопрос: можно ли продолжить произвольную вычислимую функцию f x до всюду определенной вычислимой функции g a, если знаg x? Тем самым должно выполняться равенство f a чение старой функции f a существует, и мы должны как-то определить значение новой функции g a, если f a не существует. Т ЕОРЕМА 9.3 . Существует вычислимая функция f x, которую нельзя продолжить до всюду определенной вычислимой функции g x. Доказательство. Проверим, что в качестве искомой вычислимой функции f x, которую нельзя продолжить до всюду определенной вычислимой функции, можно взять функцию d1 x из (9.16). Предположим противное, существует всюду определенная вычислимая функция g x, которая является продолжением функции d1 x. Поa имеем g a da. кажем, что для произвольного значения x Возможны два случая: 1) da существует или 2) da не существует. da  1 определена при Случай 1), da существует. Тогда d1 a a и d1 a da. Функция g x является продолжением функции x d1 x. Поэтому g a d1 a da. Случай 2), da не существует. В этом случае da не определена при x a, а функция g a определена при x a, поскольку она всюду опреda. Итак, функция g x ни при каком делена. Снова получаем g a значении аргумента не совпадает со значением функции dx. По свойству 2) значения произвольной вычислимой функции хотя бы один раз должны совпадать со значением функции dx. Для вычислимой функции g x это не выполнено, противоречие. Поэтому продолжение g x вычислимой функции d1 x не существует. Теорема доказана. Упражнения к лекции 9 З АДАЧА 1. Найти номера следующих команд при нумерации β: S 3 и T 2, 1. З АДАЧА 2. Найти номера следующих команд при нумерации β: Z 3 и J 3, 2, 1. З АДАЧА 3. Найти кодовый номер программы P при нумерации γ, где P — программа, состоящая из следующих команд: S 2, T 2, 1. З АДАЧА 4. Составить программу P для вычисления функции f x x  2, и найти кодовый номер программы P . З АДАЧА 5. Выписать команды программы P100 . З АДАЧА 6. Выписать команды программы P4127 . З АДАЧА 7. Найти область определения и область значений функций φ14127 и φ24127 . З АДАЧА 8. Дана МНР со следующей программой: I1 S 1 I2 T 1, 2 В регистр R1 перед первым тактом работы машины занесено число 1, остальные регистры заполнены нулями. Найти конфигурацию регистров после 1,2 и 3 тактов работы машины и указать номер j следующей исполняемой команды. Вычислить коды конфигурации регистров и коды состояния машины после данных тактов работы. З АДАЧА 9. Дана МНР со следующей программой: I1 I2 I3 I4 J 2, 3, 5 S 1 S 3 J 1, 1, 1 В регистры R1 и R2 перед первым тактом работы машины занесено число 1, остальные регистры заполнены нулями. Найти конфигурацию регистров после 1,2,4,5 тактов работы машины, и указать номер j следующей исполняемой команды. Вычислить коды конфигурации регистров и коды состояния машины после данных тактов работы. З АДАЧА 10. Приведем заведомо неверное доказательство того, что всякую вычислимую функцию f x можно продолжить до всюду определенной вычислимой функции g x. Пусть D — область определения функции f x. Рассмотрим произвольное x  N. Если x  D (т.е. число f x определено), то считаем, что g x f x. Если x  D (т.е. число f x не определено), то 0. В обоих случаях имеются инструкции для считаем, что g x вычисления числа g x. Поэтому функция g x вычислима. Очевидно, что g x всюду определена и является продолжением функции f x. Итак, произвольная вычислимая функция f x продолжена до всюду определенной вычислимой функции g x. Однако по теореме 9.3 существует вычислимая функция, которую нельзя продолжить до всюду определенной вычислимой функции. Где ошибка в рассуждениях? Лекция 10. Нормальные алгорифмы В данный момент мы располагаем двумя вариантами строгого определения понятия алгоритма. Первый вариант (тезис Черча) выражает понятие алгоритма на языке функций. Вторая формулировка определяет понятие алгоритма с помощью абстрактной вычислительной машины (машины Тьюринга или МНР). Третий вариант формализации понятия алгоритма предложен российским математиком А.А.Марковым [17]. В этом определении считается, что алгоритмический процесс — это процесс переработки слов некоторого алфавита. Действительно, многие алгоритмические процессы можно рассматривать как процессы переработки слов. Проанализируем, например, сложение натуральных чисел. На входе алгоритма поступают два натуральных числа x и y. Пусть числа x и y записаны в десятичной системе счисления, например, x 1253 и y 2754. Мы рассматриваем цифры 0, 1, 2, . . . , 9 и знак сложения ,, ” как буквы. 0, 1, 2, . . . , 9,  из 11 букв. При операции слоПолучаем алфавит A жения на вход алгоритма поступает слово 1253  2754 длины 9. На выходе алгоритма имеем слово 4007 в алфавите A . Поэтому сложение натуральных чисел — это процесс переработки слов в алфавите A . Следуя А.А.Маркову, наряду со словом «алгоритм» будем употреблять также слово «алгорифм». Алгоритмы, которые являются процессами переработки слов, назовем вербальными алгорифмами. Поскольку речь идет о произвольных, а не строго заданных правилах действий со словами, то понятие вербального алгорифма является интуитивным понятием. Среди вербальных алгорифмов выделим некоторые алгорифмы — нормальные алгорифмы со строго заданными правилами переработки слов. Поэтому понятие нормального алгорифма является строгим математическим понятием. Введем это понятие. Алфавит и схема нормального алгорифма. Нормальный алгорифм A задается двумя компонентами: 1) алфавитом алгорифма, 2) схемой алгорифма. 1) Алфавит нормального алгорифма A — это некоторая конечная a1, . . . , am. Элементы из A мы будем насовокупность символов A зывать буквами. Из букв алфавита A составляются слова — конструктивные объекты, которые поступают на вход и перерабатываются в алгорифме A. При этом говорят, что A — алгорифм в алфавите A . 2) Схема нормального алгорифма. Рассмотрим две буквы и , которые не входят в алфавит A. Формулой подстановки назовем выражение v (10.1) u или выражение v, u (10.2) где u и v — произвольные слова в алфавите A. Формула без точки (10.1) называется простой формулой, а формула с точкой (10.2) называется заключительной формулой. В обоих случаях формула имеет левую часть u и правую часть v, которые должны быть и  могут быть любыми буквами вне словами в алфавите A . Знаки алфавита A . Мы могли вместо них использовать, например, греческие буквы α и β. Схема Z нормального алгорифма A — это конечная упорядоченная последовательность формул подстановок  u1 u2  uk v1 v2 (10.3) ... vk , где вместо некоторых формул ui vi могут быть формулы с точкой ui  vi . Например, схема нормального алгорифма может иметь две формулы подстановки  u1  v 1 (10.4)  u2 v2 . обозначаем любую из букв Знаком общий вид схемы можно записать так: u1  u2  uk ... и . . v1 v2 . vk . Поэтому вместо (10.3) (10.5) Формулы ui vi и ui vi рассматриваются как следующая инструкция по переработке произвольного слова P в алфавите A . Находим вхождение слова ui в слово P и заменяем его на vi . Работа нормального алгорифма. Пусть на вход нормального алгорифма A со схемой Z поступило слово P . Начинаем процесс, направленный на получение из исходного слова P некоторого слова Q — результата переработки слова P . Совершаем проход по схеме Z, двигаясь сверху вниз, как показывает стрелка:   u1 . v1  u2 . v2   ...  uk . vk (10.6) Наше намерение — осуществить следующие действия 1)–5). 1) Среди левых частей u1 , u2 , . . . , uk в (10.6) нужно отыскать первое по порядку слово ui , которое входит в слово P . 2) Заменить найденное слово ui в слове P на слово vi , и получить некоторое слово P1 . Возможно несколько вхождений ui в слово P . Тогда заменяется на vi первое вхождение ui в слове P . 3) Если при замене применялась заключительная формула ui vi , то переработка слова P завершена и алгоритм останавливается. Полученное слово P1 — результат переработки слова P . vi , 4) Если при замене применялась незаключительная формула ui то слово P1 заново обрабатывается схемой Z и алгоритм продолжает работу. 5) Возможно, что при проходе по схеме Z вообще не обнаружено ни одного вхождения слов u1 , u2 , . . . , uk в слово P . Тогда результат переработки — само слово P и алгоритм останавливается. Рассмотрим естественность данных правил. Допустим, что при проходе по схеме Z среди слов u1 , u2 , . . . , uk обнаружено несколько вхождений в слово P . Пусть, например, имеются вхождения u2 , u5 , u7 . Мы выбираем первое вхождение, а именно u2 заменяем в слове P на v2 . Такую однозначность, а не произвольный выбор для замены, требует условие детерминированности алгоритма. По этой же причине возникает правило замены конкретного ( первого ) вхождения ui в слове P на vi . Пусть при проходе по схеме Z сверху вниз вообще не обнаружено ни одного вхождения слов u1 , u2 , . . . , uk в слово P . По правилу 5) результат замены — само слово P . Можно сказать, что, не выполнив ни одного действия, мы получили результат. Сравним с работой некоторого исполнителя, которому предписано: «вы должны все черные парты в аудитории пе- рекрасить в белый цвет». Исполнитель, войдя в аудиторию, не обнаруживает черных парт. Поэтому работа выполнена без какого-либо действия и исходное состояние парт в аудитории — результат работы. Невыполнение предписания означает, что в аудитории осталась неперекрашенная черная парта. Условие остановки и результат работы. Проанализируем протекание алгоритмического процесса и его результат. Обозначим дополнительно исходное слово P P0 . Рассмотрим первый проход по схеме (аналогично для других проходов). Имеем две возможности а) и б). а) Нет ни одного вхождения u1 , . . . , uk в слово P P0 . Алгорифм останавливается (1 случай остановки). P0 — результат переработки. P0 . Выполнена заб) Существуют вхождения u1 , . . . , uk в слово P мена ui на vi , и получено слово P1 . Если при замене применялась заключительная формула, то переработка слова P завершена. Алгорифм останавливается (2 случай остановки). P1 — результат переработки. Если при замене применялась незаключительная формула, то полученное слово P1 заново обрабатывается схемой. При втором проходе по схеме из P1 получаем слово P2 , а затем возможно P3 и т.д. В результате получаем ровно один из двух случаев I или II. I. Процесс переработки слов обрывается и получено слово Q AP , т.е. получен результат применения нормального алгорифма A к слову P . II. Процесс переработки слов бесконечен. Тогда нет результата Q AP  и алгорифм A неприменим к слову P . Очевидно, что описанный выше нормальный алгорифм A удовлетворяет всем требованиям, предъявляемым к понятию алгоритма, и является точным математическим понятием. Примеры нормальных алгорифмов. Вначале приведем примеры нормальных алгорифмов для работы с натуральными числами. Алгорифм сложения натуральных чисел. Построим нормальный алгорифм, вычисляющий сумму двух натуральных чисел x и y. Для этого 0, , . Число n  N изобрассмотрим алфавит из трех символов A ражаем словом 0 . . .  n в алфавите A . В этом слове n палочек, перед которыми стоит символ 0. Искомый нормальный алгорифм A имеет схему из одной заключительной формулы подстановки u1  v1 , где u1 0 — слово из двух букв, а v1 Λ — пустое слово. Тем самым схема алгорифма имеет вид  0  Если нужно вычислить сумму x  y, то подаем на вход алгорифма A ее изображение, т.е. слово 0  . . .  0  . . .  P x y Алгоритм A удалит из P подслово 0 и в один шаг переработает входное слово P в выходное слово Q. При этом 0  . . .   . . .  Q x y Итак, на выходе имеем слово Q, изображающее число x  y, что и нужно. Алгоритм умножения чисел гораздо сложнее и рассматривается в задачах 8–10. Вычисление остатка при делении на 4. Построим нормальный алгорифм, который находит остаток от деления натурального числа x на 4. 0, . Для этого рассмотрим алфавит из двух символов A Искомый нормальный алгорифм имеет схему из одной формулы  (простой формулы подстановки, правая часть которой — пустое слово). Пусть на вход алгорифма подается слово P 0  . . .   . . .   q r Оно изображает натуральное число x 4q  r, где r  0, 1, 2, 3 — остаток от деления числа x на 4. После q проходов по схеме в слове P сотрется 4q палочек и останется r палочек. При q  1 проходе замены нет, алгорифм останавливается. Результат переработки Q равен 0  . . .  r и изображает остаток r. В последующих четырех примерах происходит переработка слов в a1, . . . , ak . произвольном алфавите A Тождественный алгорифм. Рассмотрим алгорифм A, который задается схемой a1  a1  a2  a2 (10.7) ...  ak  ak Пусть P — произвольное слово в алфавите A . Алгорифм совершит один проход по схеме, переработает P в P и остановится. Поэтому AP  P . Аннулирующий алгорифм. Полагаем теперь, что нормальный алгорифм A задается схемой a1  a2 (10.8) ...  ak Пусть P ai1 . . . aim — слово на входе. Вначале алгорифм совершит m проходов по схеме, каждый раз стирая в слове по одной букве с наименьшим индексом. При m  1 проходе на входе пустое слово. Алгорифм останавливается. Получаем результат AP  Λ. Алгорифм, применимый лишь к пустому слову. Пусть нормальный алгорифм задается схемой a1 a1 a2  a2  ak ... (10.9) ak Данный алгорифм применим лишь к пустому слову. Как уже отмечалось, не все вербальные алгорифмы являются нормальными алгорифмами. Вербальные алгорифмы реализуют произвольные преобразования слов, а нормальные алгорифмы ограничены преобразованиями слов по заданной схеме. Например, мы можем рассмотреть вербальный алгорифм в алфавиa1, . . . , an, где n  1, с единственным правилом: любое слоте A ai1 . . . aim в алфавите A перерабатывается в перевернутое слово во P Q aim . . . ai1 (обращающий алгорифм). Можно доказать [17, с.170], что не существует нормального алгорифма в алфавите A с данным действием. Поэтому определение алгоритма по Маркову не будет утверждать о совпадении класса нормальных алгорифмов и класса вербальных алгорифмов, а будет иметь другую формулировку. Рассмотрим эту формулировку. Пусть задан алфавит A . Добавим к алфавиту A новые буквы. Получим алфавит A1 с условием A  A1 . О ПРЕДЕЛЕНИЕ 10.1 . Пусть заданы алфавиты A и A1 . Если A  A1 , то алфавит A1 называется расширением алфавита A . О ПРЕДЕЛЕНИЕ 10.2 . Нормальный алгорифм в каком-либо расширении A1 алфавита A называется нормальным алгорифмом над алфавитом A . Покажем, что нормальный алгорифм в каком-либо расширении A1 при действии на словах алфавита A реализует более богатый набор преобразований слов по сравнению с нормальным алгорифмом в алфавите A . Рассмотрим алгорифм A левого присоединения слова v. В нем для любого входного слова u выходным словом должно быть слово vu, которое получено приписыванием к слову u слева слова v. Искомый нормальный алгорифм A имеет простейший вид. Его схема состоит из одной формулы подстановки v Λu. Действительно, пусть имеется входное слово u. Оно имеет вид u Пустое слово Λ заменяется на v. Получается слово vu, что и нужно. Аналогично можно рассмотреть алгорифм A правого присоединения слова v. В нем для любого входного слова u выходным словом должно быть слово uv. Однако здесь нас ждет неожиданное осложнение, и простейшего алгорифма, который мы имели в случае левого присоединения, нет. Для реализации правого присоединения мы расширим алфавит a1, . . . , an. Пусть α — некоторая буква, отличная от всех букв алA A  α  — фавита A . Добавив букву α, получим новый алфавит A1 расширение алфавита A . Рассмотрим нормальный алгорифм A1 в новом алфавите A1 . Тем самым алгорифм A1 — это алгорифм над старым алфавитом A . Его схема имеет следующий вид. αa1   a1 α ... αan α  an α v α (10.10) Рассмотрим действие алгорифма A1 на словах старого алфавита A . Пусть на вход A1 поступило слово u в алфавите A . Оно не содержит буквы α. Поэтому при первом проходе по схеме сработает последняя форα. Пустое слово в начале u заменится на α. В ремула подстановки зультате к слову u слева добавится буква α. При следующих проходах по схеме буква α перемещается несколько раз вправо, пока не станет в конце слова. При следующем проходе буква α заменится на v и алгорифм остановится. Слово u переработалось в слово uv. Таким же образом, добавляя буквы к алфавиту A , мы можем получить схему для операции перевертывания слов в алфавите A — операции, которую нельзя реализовать схемой в алфавите A . Поэтому в данном случае добавление буквы к алфавиту A и рассмотрение расширенного алфавита A1 позволили схемой в A1 реализовать те действия над словами в исходном алфавите A , которые нельзя было реализовать схемой в A . И в других случаях, добавляя новые буквы к алфавиту A , мы получаем нормальный алгорифм A1 в расширенном алфавите A1 , который при ограничении на словах из алфавита A имеет наперед заданное действие. А.А.Марков [17] предложил следующий тезис. Принцип нормализации. Пусть задан произвольный вербальный алгорифм A в алфавите A . Тогда существует расширение A1 алфавита A и нормальный алгорифм A1 в алфавите A1 с условием: произвольное слово P в алфавите A перерабатывается нормальным алгорифмом A1 в тот же самый результат, в который слово P перерабатывается исходным вербальным алгорифмом A. Если мы не используем принцип нормализации, то всякий раз, имея произвольный вербальный алгорифм, мы не в состоянии обозреть все возможные действия A, B, . . . , которые производятся над перерабатываемыми объектами. Однако доказательство несуществования алгоритма A проводится примерно так. Предположим противное, пусть вербальный алгорифм A с заданной переработкой слова P в слово Q существует. Мы знаем (обозреваем) все возможные действия A, B, . . . , которые производятся над P для получения Q. Проверим, что применения A, B, . . . не могут дать Q. Поэтому алгорифма A не существует. Если мы не в состоянии обозреть все возможные действия A, B, . . . , то не сможем подобным образом доказать несуществование алгорифма A. Если мы используем принцип нормализации, то действия в произвольном вербальном алгорифме A обозримы и четко перечислены. Действительно, у нас есть нормальный алгорифм A1 в алфавите A1 и его действия на словах из A1 жестко заданы и обозримы схемой алгорифма A1 . Тем более обозримы ограничения этих действий на словах алфавита A , а это и есть действия вербального алгорифма A. Поэтому принцип нормализации можно рассматривать как способ обозрения всевозможных действий в вербальных алгоритмах. Поскольку эти действия строго заданы, то мы имеем третий вариант определения алгоритма. В результате принятия принципа нормализации мы получили инструмент для доказательства неосуществимости задачи нахождения определенного алгоритма. Поэтому мы можем предсказывать неосуществимость определенных задач. Аналогичный тезис в физике — закон сохранения энергии (сохранение общего количества энергии в замкнутой физической системе). Он предсказывает неосуществимость задачи создания perpetuum mobile (вечного двигателя). Доказано, что данная формулировка понятия алгоритма (принцип нормализации) эквивалентна другим формулировкам понятия алгоритма: тезису Черча, использующему частично рекурсивные функции, и тезису Тьюринга, использующему понятие вычислительной машины. Поэтому еще раз подкрепляется уверенность в том, что мы нашли и выразили в трех формах фундаментальное понятие математики, логики и информатики — понятие алгоритма. При этом частичная рекурсивность, машина Тьюринга, МНР и нормальный алгорифм — лишь различные формы выражения этого самостоятельного понятия. Упражнения к лекции 10 З АДАЧА 1. Нормальный алгорифм A в алфавите из букв кириллицы имеет схему следующего вида:   рез у х жа м л сл е ж зон р лл Описать работу алгорифма A со словом «муха». З АДАЧА 2. В схеме предыдущей задачи заменим в первой формуле букву  для обозначения заключительной формулы подстановки на букву для обозначения простой формулы подстановки. Описать работу полученного алгорифма A со словом «муха». Существует ли слово на выходе алгорифма? В следующих трех задачах рассматривается алфавит из двух символов , α. Число n  N изображается словом  . . .  из n палочек. Пара A чисел m, n изображается в виде слова разделителя α. n  . . .  α  . . .  с использованием m n З АДАЧА 3. Пусть нормальный алгорифм A в алфавите A имеет схему:  α α  α  , α Показать, что если на входе алгорифма A имеется изображение пары m, n, то на выходе алгорифма вырабатывается абсолютная величина  m n  разности чисел m и n. З АДАЧА 4. Пусть нормальный алгорифм A в алфавите A имеет схему: α α  α α α   α , α Показать, что если на входе алгорифма A , α имеется изображение числа n, то на выходе алгорифма получается частное при делении числа n на 4. З АДАЧА 5. Заменим схему из предыдущей задачи на следующую:  α  α α α α Показать, что если на входе алгорифма A имеется изображение числа n, то на выходе алгорифма получается пара — частное и остаток при делении числа n на 4. В задачах 6,7 нужно рассмотреть работу нормального алгорифма с заданной схемой и описать все случаи переработки произвольного входного слова P . З АДАЧА 6. Нормальный алгорифм A имеет схему, состоящую из одной заключительной формулы, т.е. схему   Описать работу алгорифма A с данной схемой. Описать работу алгорифма со схемой, состоящей из незаключительной формулы  З АДАЧА 7. Пусть нормальный алгорифм A в алфавите a1, a2, . . . , an имеет схему одного из трех видов: A 1   a1  a2  ... an  2   a1  a2  ... an  3   a1  a2  ... an   Описать работу алгорифма A в каждом из трех случаев. В следующих трех задачах нужно проанализировать алгорифм умножения натуральных чисел. Введем алфавит из пяти букв A 0, , Æ, a, b. Как и в случае сложения, натуральное число x изображается x палочками с предшествующим символом 0. Буква Æ служит как знак умножения. Буквы a и b — дополнительные символы. Рассмотрим нормальный алгорифм A, имеющий следующую схему: a a b Æ0 00 Æ0 ba b Æ0a 0Æ Æ Æ Æb Æ Æ  (1) (2) (3) (4) (5) (6) (7) (8) (9) Пусть нужно вычислить произведение чисел x и y. Подаем на вход алгорифма слово P , равное 0  . . .  Æ0  . . . . Нужно проверить, что на выx y ходе алгорифма получится слово 0  . . .  — изображение числа xy. Разоxy бьем решение на три случая. З АДАЧА 8. Случай 1. Пусть x P 0, т.е. 0 Æ 0  . . .  (10.11) y Показать, что на выходе алгорифма получается изображение числа 0. Указание. При решении задачи использовать указанную ниже таблицу. При работе алгорифма просматриваем формулы подстановок, отыскивая первую, у которой левая часть входит в P , т.е. первую формулу, которая сработает. Такую формулу назовем активной. На каждом шаге своя активная формула. Таблица подсказывает номера шагов, активную формулу шага и результат ее применения. Номер Вход шага 1 P 2 Активная формула Выход 0 Æ 0  . . .  Æ0 P1 Æ  . . .  00 00 P1 y y 3 0 Æ   ... P2 0Æ Æ  . . .  y P2 0 Æ  . . .  y Æ Æ P3 y ... 00 0 Æ  . . .  y 1 ... 0Æ ... ... Æ  З АДАЧА 9. Случай 2, x  0 и y P 0. Тогда 0  . . .  Æ0 . (10.12) x Используя следующую таблицу, показать, что на выходе алгорифма получается изображение числа 0. Номер Вход шага 1 P Активная формула Выход 0  . . .  Æ0 Æ0 P1 0  . . .  Æ 0 a a Æ0a x 2 P1 x1 P2 x1 ... ... ... ... 0  . . .  Æ 0 a 0  . . .  Æ 0 x1 ... 0Æ0 00Æ 0Æ ... Æ0 00 Æ  ... 00Æ 0Æ 0Æ З АДАЧА 10. Случай 3, x  0 и y P  0. Тогда 0  . . .  Æ0  . . .  . x (10.13) y Используя следующую таблицу, показать, что на выходе алгорифма получается изображение числа xy. Номер Вход Активная форму- шага ла 1 2 0  . . .  Æ0  . . .  P x y 0  . . .  Æ 0 a  . . .  a  P1 ... ... 1 ... 0  . . .  Æ 0 b . . . b a ... a 0  . . .  Æ 0 b . . . b b ... 0  . . .  Æ 0  . . .  b . . . b ... x1 y x1 y y x1 ... ... ... ... b y Æ0 Æ0a Æ Æ ... 0 Æ b . . . b ... Æb ... 0  . . .  Æ ... xy xy y 1 y x1 0  . . .  Æ 0   b b b . . . b y 2 ... 0  . . .  Æ 0a  . . .  b . . . b y x2 0 Æ  . . .  b . . . b y xy 0  . . .  Æ 0  b a  . . .  x1 00 xy y x1 ... 0  . . .  Æ 0 b . . . b 00 Æ  . . .  b . . . b y 0  . . .  Æ 0 a  . . .  P1 x1 ... Æ0 xy ... ... ba ... 0 Æ 0  . . .  b . . . b y ... ... Æ0a y x1 ... ... Æ0 Выход Æ  0Æ Æ y В 1 новый проход буквы a такой же, как в строке 1. Он породит из y символов  y символов  и y символов b. Такие проходы закончатся, когда исчерпаются палочки первого сомножителя. ... 00 Æ  . . .  b . . . b y xy 0 Æ  . . .  b . . . b y xy y 1 xy 0 Æ  . . .  b . . . b ... 0 Æ b . . . b xy 1 ... 0  . . .  xy Лекция 11. Неразрешимые алгоритмические проблемы Различные виды проблемы разрешения. Проблема построения алгоритма, обладающего теми или иными свойствами, называется алгоритмической проблемой. Мы получим решение алгоритмической проблемы, если будет сделано следующее: 1) найден искомый алгоритм (т.е. представлено его описание) или 2) доказано, что такого алгоритма не существует. Следующий рисунок изображает постановку проблемы и два возможных варианта ответа. Алгоритмической проблема. Нужно найти алгоритм A, такой что . . . Алгоритм A найден. Он имеет вид . . . Теорема. Искомого алгоритма A не существует. В зависимости о того, с какими конкретно объектами мы оперируем в алгоритме, получаются различные виды указанной проблемы, которую будем называть проблемой разрешения. Проблемы разрешения для множеств. Пусть E — некоторое множество конструктивных объектов и A — подмножество множества E. О ПРЕДЕЛЕНИЕ 11.1. Разрешающим методом для A в E называется такой метод (алгоритм), с помощью которого для каждого элемента x из E мы можем определить, принадлежит элемент x множеству A или нет. Тем самым алгоритм A должен получать на входе произвольный элемент x из E, а на выходе вырабатывать «да» для элементов x из A и вырабатывать «нет» для элементов x из E A. Если искомый алгоритм A существует, то множество A называется разрешимым в E. Подробно понятие разрешимого множества изучается в лекции 13. Сформулируем аналогичные понятия для функций. Пусть f — произвольная частичная функция. Как всегда, слово функция означает произвольную n-арную частичную функцию, определенную на множестве N и со значениями во множестве N. О ПРЕДЕЛЕНИЕ 11.2. Разрешающим методом для функции f называется такой метод (алгоритм), с помощью которого вычисляется функция f . Как всегда, слова «алгоритм A вычисляет функцию f x1 , x2 , . . . , xn » означают следующее: 1) если на входе алгоритма имеется набор аргументов x1 , x2 , . . . , xn  из области определения функции f , то алгоритм A останавливается и выдает результат f x1 , x2 , . . . , xn ; 2) если на вход алгоритма поступает набор аргументов вне области определения функции f , то или алгоритм A работает бесконечно, или алгоритм останавливается без выдачи результата. Проблема разрешимости для функций следующим образом связана с проблемой разрешимости для множеств. Пусть A — произвольное подмножество множества E. Рассмотрим характеристическую функцию χx подмножества A. Пусть x — произвольный элемент множества E. Тогда χx 1, если x  A, 0, если x  A. Т ЕОРЕМА 11.1. Подмножество A из E является разрешимым в E тогда и только тогда, когда его представляющая функция χx является рекурсивной. Доказательство. Множество A разрешимо тогда и только тогда, когда имеется алгоритм A, умеющий определять для x  E, что верно из следующих двух условий: 1) x  A или 2 ) x  A. Это означает, что алгоритм A умеет вычислять значение представляющей функции χx. Поэтому A разрешимо  функция χx вычислима. С учетом тезиса Черча получаем A разрешимо  функция χx рекурсивна. Предложение доказано. Проблема разрешения для формальных систем. Другой вид проблемы разрешения связан с формальными системами. Приведем определение формальной системы (исчисления). Наряду с понятием алгоритма, понятие формальной системы является одним из основных понятий теории алгоритмов и математической логики [22, с.44], [24, с.13]. Первая часть формальной системы F — ее язык. Чтобы определить язык формальной системы, нужно задать символы этого языка и его формулы. Символы формальной системы могут быть произвольными знаками, например, знаками &, , . Задавая символы, мы получаем алфавит A формальной системы F . Слова в этом алфавите будем называть также выражениями этого языка. Не все выражения в естественном языке являются осмысленными словами. Точно так же в формальной системе лишь часть выражений считается формулами. В каждой формальной системе свои правила образования формул. Вторая часть формальной системы — аксиомы. Задать аксиомы — означает выделить некоторые формулы формальной системы, присвоив им название аксиомы. Третья часть формальной системы — правила вывода. Они имеют вид A1 , A2 , . . . , An , (11.1) B где A1 , A2 , . . . , An и B — формулы формальной теории. При этом формулы A1 , A2 , . . . , An называются посылками, а формула B называется заключением правила вывода. Правила вывода указывают способ для получения теорем (выводимых формул). Вначале все аксиомы объявляются теоремами. Из этого начального списка теорем получаются новые теоремы с помощью правил вывода. Если уже установлено, что A1 , A2 , . . . , An — теоремы, и имеется правило вывода с посылками A1 , A2 , . . . , An , то его заключение B добавляется в список теорем. Получаем следующее определение теоремы формальной системы. 1. Любая аксиома формальной системы F является ее теоремой. 2. Если A1 , A2 , . . . , An — теоремы и (11.1 ) — правило вывода, то B — теорема. 3. То, что формула A является теоремой, устанавливается несколькими применениями правил 1 и 2. Понятие формальной системы непосредственно связано с аксиоматическим методом в математике. Три части формальной системы отражают следующие три требования, предъявляемые к аксиоматическому построению какой-либо математической теории T , например, теории групп. 1) Нам нужно прежде всего создать язык теории T : символы, формулы и т.п., для того чтобы выражать наши мысли про объекты теории. 2) При построении аксиоматической теории некоторые утверждения про ее объекты принимаются без доказательства. Они называются аксиомами теории. Поэтому мы должны задать аксиомы теории T , выделив их среди всех формул теории. Например, группы обычно определяются набором из трех аксиом: ассоциативность операции, наличие единичного элемента и наличие обратного элемента у каждого элемента группы. 3) Нам нужно перечислить логические правила, которые используются при выводе математических теорем. При обычном аксиоматическом, неформализованном изложении теории эти правила вывода основываются на определенной общей договоренности о допустимости какого-либо заключения. Тем самым нет заранее фиксированного, строго заданного списка правил вывода. В противоположность этой ситуации при формализованном изложении теории список правил вывода фиксирован и четко задан. Тем самым процесс доказательства механизируется и может, например, осуществляться компьютером. Такая ситуация соответствует замыслам немецкого философа и математика Г. Лейбница (1646 – 1716) построить универсальный язык для доказательств и «замены идей вычислениями». Более конкретно эта идея отражена в программе Гильберта, где в определенной мере выражена вера в то, что процесс вывода теорем формальной теории F может быть механизирован. Имея формальную систему, можно поставить следующую естественную задачу. Найти алгоритм A, с помощью которого для любой наперед заданной формулы A из F можно выяснить, является ли формула A теоремой формальной системы F . О ПРЕДЕЛЕНИЕ 11.3 . Разрешающим методом для формальной системы (исчисления) F называется такой алгоритм, с помощью которого для любой формулы A из F можно определить, является ли данная формула A теоремой (выводимой формулой ) системы F или нет. Поставив задачу о нахождении алгоритма A, мы получаем проблему разрешения для формальной системы. Заметим, что понятие формальной системы является достаточно широким понятием и может применяться в вопросах, не связанных с аксиоматическим методом. Действительно, в наиболее общем понимании формальной системы мы имеем A — набор исходных элементов в некотором множестве X. Правила вывода трактуем как способы построения новых элементов из исходных элементов и ранее построенных элементов. В итоге возникает множество B  X, которое состоит из всех построенных таким способом элементов. Таким образом рассматривается, например, раздел математической логики «исчисление высказываний». Проблемы, связанные с номерами функций. Рассмотрим несколько конкретных примеров алгоритмически неразрешимых проблем. Вначале рассмотрим проблемы, связанные с нумерациями вычислимых функций. Пусть P множество всех программ для МНР. В лекции 8 мы осуществили следующую нумерацию элементов множества P: P0 , P1 , P2 , . . . . (11.2) Каждая программа P  P имеет некоторый номер a, обозначена через Pa и ровно один раз входит в данную последовательность. Затем для каждого n произведена нумерация множества вычислимых n-арных функций. Зафиксировав натуральное число n, каждой программе Pa мы сопоставили функцию φna от n аргументов, которую вычисляет машина Ma с программой Pa . В результате получили перечисление всех вычислимых n-арных функций φ0 , φ1 , φ2 , . . . , (11.3) где верхний индекс n опущен, а нижний индекс является номером функции. Каждая вычислимая n-арная функция присутствует в данной последовательности. Однако в отличие от нумерации программ функция может иметь несколько номеров, т.е. может несколько раз входить в данную последовательность. Нам хотелось бы разработать алгоритмы для работы с функциями. Однако, как уже отмечалось, функции не являются конструктивными объектами. Поэтому они не могут являться объектами, с которыми непосредственно работает алгоритм. Вместе с тем функции из (11.3) имеют номера. Номерами функций являются натуральные числа — конструктивные объекты. Поэтому возникает идея описывать свойства функций, используя их номера. Приведем список проблем, естественным образом возникающих в связи с данной идеей. 1. Даны номера x и y функций φx и φy из (11.3). Найти алгоритм, который по номерам x и y определяет равенство функций φx и φy . 2. Найти алгоритм, который по номеру x определяет, является ли функция φx постоянной функцией. 3. Найти алгоритм, который по номеру x определяет, будет ли бесконечным множество значений функции φx . 4. Найти алгоритм, который по номерам x и y определяет, входит ли число y в область значений функции φx . 5. Найти алгоритм, который по числам x, y, z определяет равенство φx y  z. 6. Найти алгоритм, который по номеру x определяет, будет ли функция φx всюду определенной функцией. 7. Найти алгоритм для определения включения x  Dx . Рассмотрим ответы на некоторые из сформулированных проблем. Более подробные сведения в [20, с. 54]. Проблема «функция f(x) всюду определена». Пусть n 1. В последовательности всех вычислимых унарных функций (11.3) встречаются как всюду определенные функции φx , так и частичные функции φx , у которых область определения не равна N. Рассмотрим следующую алгоритмическую проблему. Найти алгоритм A, который по номеру x распознает, что данная функция φx всюду определена. Т ЕОРЕМА 11.2. Проблема распознавания всюду определенности функции φx по ее номеру x алгоритмически неразрешима. Доказательство. Предположим противное. Тогда существует алгоритм A, который для любого x  N выясняет: верно или нет, что функция φx всюду определена. Рассмотрим новый алгоритм B. Вначале алгоритм B с помощью инструкций из A для x  N выясняет: верно или нет, что функция φx всюду определена. Затем с помощью следующих дополнительных инструкций алгоритм B задает правило для вычисления новой функции f x. При этом f x φxx  1, 0, если φx всюду определена, если φx не всюду определена. (11.4) В этих, состоящих из конечного числа дополнительных инструкциях нужно уметь вычислять число φx x. Однако φx x U x, x dx, где dx — диагональная функция, которая вычислима по свойству 1 диагональная функции (лекция 9, с. 84). Итак, функция f x вычислима и всюду определена. Так как f x вычислима, то функция f x имеет некоторый номер a при нумерации унарных функций. Тогда f x — функция φa и φa всюду определена. Отсюда f a φa a. Однако по (11.4) f a φa a 1 (мы взяли x a и учли,что функция φa всюду определена). Имеем φa a φa a  1, противоречие. Поэтому алгоритма A не существует. Теорема доказана. Рассмотрим нумерацию вычислимых функций из (11.3) при n 1 φ0 , φ1 , φ2 , . . . . (11.5) Области определения этих функций обозначим соответственно через D0 , D1 , D2 , . . . . (11.6) Рассмотрим следующий вопрос. Проблема x  Dx . Найти алгоритм A, который отвечает на следующий вопрос. Для каких x  N верно условие x  Dx ? Очевидно, что выяснение следующих условий 1)-3) фактически одно и то же. 1) При каких x  N верно x  Dx ? 2) Для каких чисел x определено число φx x? 3) При каких числах x МНР с программой Px останавливается, имея на входе x? Т ЕОРЕМА 11.3. Проблема x  Dx алгоритмически неразрешима. Доказательство. Предположим противное. Тогда существует алгоритм A, который для любого x  N выясняет, верно или нет x  Dx . Для получения противоречия построим функцию g x, где g x 0, если x  Dx , не определена , если x  Dx. (11.7) Функция g x вычислима. Алгоритм ее вычисления следующий. Инструкциями алгоритма A, выясним, что именно верно: 1) x  Dx или 2) x  Dx . Теперь к A добавляем новые инструкции: если 1), то g x 0 и алгоритм останавливается, если 2), то алгоритм зацикливается. Поскольку функции g x вычислима, а в последовательности (11.3) содержатся все вычислимые функции от одного аргумента, то g φm для некоторого m  N. Вместо (11.7) получим φm x 0, если x  Dx , не определена , если x  Dx. (11.8) Возможны два случая: 1) m  Dm или 2) m  Dm . Случай 1), m  Dm . Так как Dm — область определения функции φm , то φm m существует. А по (11.8) φm m не существует, противоречие. Случай 2), m  Dm . Тогда φm m не существует. Однако по (11.8) φm m 0, противоречие. Итак, искомого алгоритма A не существует. Теорема доказана. Проблема остановки МНР. Пусть Mx — произвольная МНР. Поместим в ее регистры некоторые данные y и запустим машину. После длительной работы машины у нас возникает подозрение, что машина M никогда не остановится. Для того, чтобы быть уверенным в остановке машины нужно располагать алгоритмом A, который по машине M и начальному содержимому ее регистров определяет, остановится машина M или нет. Мы будем использовать нумерацию программ (8.20). Пусть P0 , P1 , P2 , . . . — все МНР программы, а M0 , M1 , M2 , . . . — МНР с данными программами. Пусть φ0 , φ1 , φ2 , . . . — соответствующие унарные функции, которые вычисляют данные машины. Пусть стартует машина Mx , имея начальное значение регистра R1 , равное y (начальные данные). Нам по x и y нужно установить, произойдет ли остановка машины. Т ЕОРЕМА 11.4. Не существует алгоритма, который по машине Mx и ее начальным данным y определяет, остановится или нет машина Mx . Доказательство. Предположим противное. Пусть искомый алгоритм A существует. Рассмотрим функцию g x, y , где g x, y  1, если φxy существует, 0, если φxy не существует. (11.9) Слова «φx y  существует» можно заменить на слова «машина Mx с начальными данными y остановится». Слова «φx y  не существует» означают «машина Mx с начальными данными y не остановится». Если алгоритм A выявил факт, что машина Mx с начальными данными y остановится, то выходным объектом считаем число 1. Если алгоритм A выявил факт, что машина Mx с начальными данными y не остановится, то выходным объектом считаем число 0. Следовательно, можно считать, что алгоритм A вычисляет функцию g x, y . Поэтому функция g x, y  вычислима. Тогда вычислима функция g x, x. Равенство g x, x 1 означает, что число φx x сущеf x 0 означает, что число φx x не ствует, т.е. x  Dx . Равенство g x, x существует, т.е. x  Dx . Мы получили существование алгоритма для определения включения x  Dx . Это противоречие, т.к. по предыдущей теореме проблема x  Dx алгоритмически неразрешима. Теорема доказана. Теорема Райса. Мы привели два примера алгоритмически неразрешимых проблем. Укажем богатый источник неразрешимых проблем, связанный с нумерациями функций. Рассмотрим множество F φ0, φ1 , φ2 , . . .  (11.10) всех унарных вычислимых функций. Пусть K — подмножество во множестве F , отличное от пустого множества и самого множества F , т.е. K F и  K F. В перечислении (11.10) каждая функция имеет какое-то множество номеров, в частности, каждая функция из K имеет множество номеров. Объединение всех множеств номеров функций из K обозначим через A. Поэтому A n  N  φn  K . Поставим вопрос о разрешимости множества A. Если множество A разрешимо, то существует алгоритм A, который по номеру n функции φn отвечает «да» или «нет» на вопрос φn  K . Следующая теорема утверждает невозможность такого алгоритма. Т ЕОРЕМА 11.5 (Райс). Пусть K — подмножество во множеK F. стве F всех унарных вычислимых функций, причем  Пусть A — множество всех номеров функций из K . Тогда множество A неразрешимо. Доказательство. Пусть f — нигде не определенная унарная функция. Возможны два случая: 1) f  K , 2) f  K . F , то существует Рассмотрим случай 1), т.е. f  K . Так как K функция g x  F K . Зададим бинарную функцию f n, x правилом f n, x gx, если число φnn определено, не определено, если число φnn не определено. (11.11) Покажем, что функция f n, x вычислима. Алгоритм A для ее вычисления получается соединением инструкций для φn n U n, n с инструкциями для g x. Вычисляем φn n. Если число φn n существует, то инструкциями для вычисления функции g x находим число g x. Если число φn n не существует, то A работает бесконечно, перехода к вычислению g x нет. Итак, функция f n, x вычислима. Применим теорему о параметризации. Получим одноместную, всюду определенную вычислимую функцию k x с условием f n, x φk n x для всех n, x  N. Тогда  gx, если число φnn определено, не определено, если число φnn не определено. φk n x    (11.12) Для n  N возможны случаи а) φn n определено, б) φn n не определено. В случае а) (когда φn n существует) из (11.12) получаем равенство функций φk n x g x. По условию g x  F K . Поэтому   k n  A. В случае б) (когда φn n не существует) получаем равенство функций φk n x f x. При этом f  K . Поэтому   k n  A. Рассмотрим множество K n  N  φnn определено . По теореме 11.3 множество K неразрешимо. Анализ случаев а) и б) привел к следующему заключению: nK  kn  A. (11.13) Из этого условия получаем: если множество A разрешимо, то разрешимо множество K. Однако K неразрешимо, значит и множество A неразрешимо. Итак, мы доказали неразрешимость множества A в случае 1) f  K . Рассмотрим случай 2) f  K . Тогда f  F K . По случаю 1) множество F K неразрешимо. Тогда неразрешимо его дополнение в F , т.е. неразрешимо множество A, что и нужно. Теорема доказана. Проблема самоприменимости. Пусть A — нормальный алгорифм в алфавите A со схемой Z. Слово P , поступающее на вход алгорифма A, и  не содержатся в должно быть словом в алфавите A . Символы алфавите A . Поэтому формулы подстановок в схеме Z не являются словами алфавите A и не могут поступать на вход алгорифма A. Рассмотрим новый способ записи схемы Z в алфавите A . Он основан a1, . . . , an в на следующей идее. Вместо произвольного алфавита A a, b из двух букв. Дейматематике можно использовать алфавит A0 ствительно, можно изобразить буквы a1 , . . . , an алфавита A следующим способом: a1 aba, a2 abba, a3 a b . . . b a. abbba, . . . , an (11.14) n раз Произвольному слову P ai1 . . . aik , где k  0, в алфавите A можно сопоставить кодирующее его слово P . Оно получено из слова P заменой каждой его буквы на ее изображение из (11.14): P a b . . . b aa b . . . b a . . . a b . . . b a. i1 i2 ik (11.15) Слово P — код слова P в алфавите A0 . Обратно, по коду (11.15) легко восстанавливается само слово P в алфавите A . Это замечание показывает, что для всех наших рассмотрений в принципе достаточно алфавита A0 a, b. a1, a2, . . . , an, где Пусть A — нормальный алгорифм в алфавите A n  2. При работе этого алгорифма учитываем, что все слова P в алфавите A можно закодировать в алфавите A0 a, b, где a a1 , b a2 . и  также можно ввести их изображение в алфавите A0. Для букв Поэтому формулы схемы Z можно изобразить словами в алфавите A0 . Введем понятие изображение алгоритма A. Для произвольного алгоритма — это конструктивный объект, например, натуральное число или слово, содержащий в себе полную информацию об алгоритме A. Опишем изображение алгоритма в случае нормального алгорифма. Пусть A — нормальный алгорифм. Изображение AИ алгорифма A получается так. Вводим новую букву γ, закодированную словом в алфавите A0 . Мы будем сцеплять формулы подстановок в одно слово, и эта буква будет служить в качестве разделителя формул подстановок. Схема Z является упорядоченной последовательностью формул подстановок u1  u2  uk ... . . v1 v2 . vk . (11.16) Чтобы получить изображение AИ алгорифма A, соединяем все формулы a, b) подстановок (не слова в алфавите A , а их коды в алфавите A0 v1 и справа к в одно слово. Для этого берем вначале код формулы u1 нему приписываем код буквы γ. Получаем слово в алфавите A0 a, b. К нему справа приписываем формулу u2 v2 , затем букву γ и т.д., пока не закончатся формулы подстановок. Получим слово P в алфавите a, b, которое называется изображением нормального алгорифма A0 A и обозначается через AИ . AИ является словом в алфавите A0 a, b  Поскольку слово P A , то мы можем предъявить это слово на вход нормального алгорифма A. При этом возможны следующие два случая 1) и 2). 1) Алгорифм A перерабатывает слово P в некоторое слово Q и останавливается. Мы выражаем этот факт словами «алгорифм A применим к своему изображению». 2) Алгорифм A работает до бесконечности, и результата переработки AP  нет. Этот факт выражается словами «алгорифм A неприменим к своему изображению». О ПРЕДЕЛЕНИЕ 11.4. Алгорифм A называется самоприменимым, если он применим к своему изображению AИ . В противном случае алгорифм A не самоприменим. Тем самым алгорифм AИ , он A самоприменим, если, получив на входе свое изображение P переработает P в некоторое слово Q. Приведем примеры самоприменимых и несамоприменимых алгорифмов. П РИМЕР 11.1. Пусть A — тождественный алгорифм. Он переработает любое слово P в слово P . Поэтому он применим к любому слову, в частности к слову P AИ . Поэтому тождественный алгорифм самоприменим. П РИМЕР 11.2 . Пусть A — пустой алгорифм. Он неприменим к любому слову, в частности к слову P AИ . Поэтому пустой алгорифм несамоприменим. Поставим следующую задачу. Мы имеем алгорифмы, которые разделены на два типа: самоприменимые и несамоприменимые. Нам хотелось бы иметь способ для определения по записи алгорифма A, какой случай имеет место. Тем самым возникает следующая алгоритмическая проблема самоприменимости. Необходимо найти алгоритм B, который, получив на входе запись произвольного алгорифма A ответит на вопрос: «алгорифм A самоприменим или нет?». Как нам получить ответы «да» или «нет»? Договоримся, что если результат переработки слова P (т.е. некоторое слово Q) — пустое слово, то это означает ответ «да». Если результат переработки слова P является непустым словом, то это означает ответ «нет». Сформулированная выше задача алгоритмически неразрешима. Т ЕОРЕМА 11.6 . Не существует алгоритма B для определения самоприменимости. Доказательство в [16]. Упражнения к лекции 11 З АДАЧА 1. Пусть A1 и A2 — подмножества во множестве E. Предположим, что A1 и A1 — разрешающие методы для подмножеств A1 и A2 . Какие инструкции содержатся в разрешающем методе для следующих подмножеств: 1A1 A2 , 2A1  A2 , 3A1 A2 ? З АДАЧА 2. Построить примеры двух различных МНР программ, которые вычисляют одну и ту же унарную функцию. З АДАЧА 3. Построить пример бесконечного множества различных МНР программ, которые вычисляют одну и ту же унарную функцию. З АДАЧА 4. Указать два различных числа a и b и унарные функцию φa и φb , для которых φa φb . З АДАЧА 5. Привести пример функции φa и бесконечного множества номеров b, для которых φb φa . З АДАЧА 6. Пусть a — некоторое натуральное число и A b  N  φb φa . Верно ли, что множество A неразрешимо? З АДАЧА 7. Рассмотрим алгоритм B, который, получив на входе AИ произвольного алгоритма A, перерабатывает P в запись P выходное слово тогда и только тогда, когда алгоритм A несамоприменим. Тем самым имеем следующее условие. Алгоритм B применим к записи A тогда и только тогда, когда алгоритм A несамоприменим. Показать, что не существует указанного алгоритма B. Рассмотрим кодирование произвольного алфавита A с помощью алфавита из двух букв a, b. Изобразим буквы a1 , . . . , an алфавита A следующим способом: aba, a2 a1 abba, a3 abbba, . . . , an a b . . . b a. n раз З АДАЧА 8. 1 Найти коды следующих слов: u1 a2 a1 a2 , u2 a2 a2 , u3 a1 a1 a3 . 2 Определить слово в алфавите A по его коду: c1 abbbaabba, c2 abbbaaba, c3 abbbba. З АДАЧА 9. Нормальный алгорифм A в алфавите a1 , a2 , a3  имеет схему вида  a1  a2 a1 a3 Закодировать символы алфавита a1 , a2 , a3  в алфавите a, b. Затем закодировать символ , разделитель слов γ и построить изображение AИ нормального алгорифма A. З АДАЧА 10. Является ли алгорифм A из предыдущей задачи самоприменимым? Лекция 12. Алгоритмические проблемы в логике и математике Алгоритмические проблемы, рассмотренные в предыдущей лекции, относятся к самой теории алгоритмов. Наиболее интересны те алгоритмические проблемы, которые возникают в других дисциплинах: математической логике, алгебре и теории чисел. Рассмотрим такие проблемы. Во вводном курсе математики рассматривались формулы алгебры высказываний. Они образованы из переменных X, Y, . . . и логических знаков !, ", , #, с помощью нескольких правил образования формул. Более строго эти правила рассматриваются в курсе математической логики [10], где построение исчисления высказываний осуществляется в виде формальной системы. Примерами формул являются следующие выражения: F1 X " Y  X # Z , F2 X # X. Вторая из этих формул является тождественно истинной формулой, т.е. принимает значение «истина» при всех значениях входящих в нее букв. Тождественно истинные формулы играют важную роль в логике. Поэтому возникает следующая задача. Требуется найти алгоритм, с помощью которого для произвольной формулы F алгебры высказываний можно выяснить ее тождественную истинность. Тем самым у нас имеется следующая алгоритмическая проблема. Проблема разрешимости для исчисления высказываний. Пусть E— множество всех формул алгебры высказываний, A— множество всех тождественно истинных формул. Найти алгоритм для определения, будет ли формула F  E содержаться во множестве A или нет. Эта проблема имеет положительное решение. Действительно, искомый алгоритм существует. Он заключается в нахождении таблицы истинности и проверке того, что во всех ее клетках, где вписываются значения формулы, получено значение «истина». Проблема разрешения для исчисления предикатов. Рассмотрим аналогичную задачу для исчисления предикатов. Проблема разрешимости в исчислении предикатов ставится так же, как и в исчислении высказываний: существует ли алгоритм, позволяющий для любой формулы F исчисления предикатов установить, является ли она тождественно истинной. Т ЕОРЕМА 12.1 . (А.Черч, 1936 г.). Не существует алгоритма, позволяющего для произвольной формулы F исчисления предикатов установить, является ли она тождественно истинной или нет. Тем самым аналогичная задача для исчисления предикатов алгоритмически неразрешима. Десятая проблема Гильберта. Рассмотрим уравнение f x1 , x2 , . . . , xn  0, (12.1) где f x1 , x2 , . . . , xn  — многочлен от n переменных с целыми коэффициентами. Такие уравнения называются диофантовыми в честь греческого математика Диофанта. Простейшее из таких уравнений ax  by c имеет хорошо известный в теории чисел алгоритм для нахождения целочисленных решений. В августе 1900 г. в Париже состоялся II Международный конгресс математиков, на котором немецкий математик Д.Гильберт прочитал доклад «Математические проблемы». Среди 23 проблем, поставленных Гильбертом, десятая проблема может быть сформулирована в следующем виде. Отыскать алгоритм для распознавания по произвольному диофантовому уравнению (12.1) — разрешимо ли это уравнение в целых числах. Разумеется, в то время речь шла лишь о положительном решении проблемы — об «указании способа». То, что «способ решения» может отсутствовать — мысль о такой возможности в 1900 г. никому не приходила в голову. Лишь в 30-х гг. оформилось математически точное понятие алгоритма. К концу 40-х гг. вера в адекватность математически точного понятия алгоритма укоренилась уже настолько, что можно было серьезно ставить вопрос об отрицательном решении десятой проблемы Гильберта и других классических проблем, касающихся существования алгоритмов. В начале 50-х гг. появились работы, направленные на доказательство несуществования такого алгоритма. В 1970 г. российский математик Ю.В. Матиясевич завершил доказательство алгоритмической неразрешимости десятой проблемы Гильберта. Т ЕОРЕМА 12.2 (Ю.В.Матиясевич). Не существует алгоритма для распознавания по произвольному диофантовому уравнению, разрешимо ли это уравнение в целых числах. Полутуэвские процессы. Пусть A a, b, c . . . — некоторый алфавит и X — множество всех слов в этом алфавите. Рассмотрим операцию умножения слов, которая определена следующим образом. Пусть u, v  X, причем u a1 . . . am , v b1 . . . bn . Тогда uv a1 . . . am b1 . . . bn . Тем самым произведение u  v получается выписыванием вначале букв слова u, а затем букв слова v. Ясно, что u  v также слово в алфавите A . Поэтому произведение uv содержится X. Например, при A a, b, c, d, u abd, v aca получим u  v abdaca  X. Итак, мы имеем бинарную алгебраическую операцию на множестве X. Напомним, что множество с некоторым набором алгебраических операций называется алгеброй. Поэтому мы имеем алгебру X, . Т ЕОРЕМА 12.3 . Алгебра X,  является полугруппой с единичным элементом Λ. Доказательство. Напомним, что полугруппа — это множество, на котором определена ассоциативная алгебраическая операция. Поэтому нужно проверить ассоциативность операции . Пусть u, v, w — элементы из X, т.е. слова в алфавите A , u a1 . . . ak , v b1 . . . bl , w c1 . . . cm . При записи произведения u  v будем обычно опускать знак операции. Тогда uv vw a1 . . . ak b1 . . . bl , b 1 . . . bl c 1 . . . cm , uvw uvw a1 . . . ak b1 . . . bl c1 . . . cm . a1 . . . ak b1 . . . bl c1 . . . cm . Получили uv w uvw, т.е. операция  ассоциативна. Полугруппа X,  называется полугруппой с единицей, если в ней существует единичный элемент относительно операции . Проверим, что пуu, т.к. при стое слово Λ является единичным элементом. Имеем uΛ приписывании справа к слову u пустого слова Λ получаем u. Аналогично, Λu u. Итак, Λ — единичный элемент. Теорема доказана. Слова в некотором алфавите представляют собой наиболее простые объекты, а замена в них подслов на другие слово — простейшие действия над объектами. Такие прозрачные конструкции уже приводят к алгоритмически неразрешимым проблемам. О ПРЕДЕЛЕНИЕ 12.1. Полутуэвской продукцией над A (или просто продукцией) называется упорядоченная пара u, v , где u и v являются словами в алфавите A . Такую продукцию будем записывать также в виде u v. Она предназначена для замены в произвольных словах подслова u на слово v и поэтому аналогична формуле подстановки в нормальном алгорифме. О ПРЕДЕЛЕНИЕ 12.2 . Полутуэвским процессом Π над алфавитом A называется всякое конечное непустое множество полутуэвских продукций над A. Поэтому Π u, v, u , v , . . . . Тем самым полутуэвский процесс сходен со схемой нормального алгорифма. Однако в отличие от схемы в полутуэвском процессе нет понятия заключительной подстановки и не важен порядок записи подстановок. v — некоторая полутуэвская продукция из Π. Будем исПусть u пользовать ее для замены произвольного вхождения u в слове P на слово v. Если в результате такой замены из слова P получено слово Q, то записываем P Π Q. Если имеем несколько последовательно выполненных замен P Π P1 , P1 Π P2 , . . . , Pn 1 Π Pn ,  и в результате получаем Pn Q, то записываем этот факт в виде P Π Q. Проблемой слов для данного полутуэвского процесса Π является следующая проблема разрешимости. Требуется найти алгоритм, с помощью которого для произвольных слов P, Q  X можно определить, верно ли, что P Π Q, или нет. Как и в любой проблеме разрешимости, такой алгоритм должен быть представлен или доказано его несуществование. Т ЕОРЕМА 12.4 . Существует полутуэвская система, проблема слов для которой неразрешима. Доказательство этого утверждения достаточно сложно и поэтому опускается. Наметим лишь основные идеи. Алгоритмическая сводимость. Доказательство несуществования алгоритма A наиболее часто проводится одним из двух следующих методов. 1) Диагональный метод. Рассматривается какое-либо построение, связанное с диагональю в некоторой таблице. Такой метод использовался, например, в теореме (9.2) для доказательства несуществования универсальной функции для класса вычислимых, всюду определенных функций. 2) Метод сведения. Пусть нужно доказать неразрешимость некоторой проблемы B. Предположим, что мы уже знаем, что некоторая другая проблема A неразрешима. Мы можем попытаться доказать следующее утверждение. Если проблема B разрешима, то и проблема A разрешима. Если такое утверждение получено, то заведомо зная, что проблема A неразрешима, мы делаем вывод о неразрешимости и проблемы B. В нашем случае можно установить, что для всякой машины Тьюринга M можно построить соответствующую полутуэвскую систему ΠM , такую, что алгоритм для решения проблемы слов для ΠM  может быть также использован для решения проблемы остановки для M . Однако проблема остановки машины Тьюринга алгоритмически неразрешима. Из неразрешимости проблемы A (проблемы остановки) получаем неразрешимость проблемы B (проблемы слов для полутуэвской системы ΠM ). В связи с этим возникает вопрос: нельзя ли неразрешимость всякой неразрешимой проблемы установить сведением к «стандартной неразрешимой проблеме»? Проблема сводимости была решена независимо А.А.Мучником и Р.М.Фридбергом. Показано, что никакая неразрешимая проблема не может служить «стандартной неразрешимой проблемой». Тем самым нельзя доказательство неразрешимости любой неразрешимой проблемы свести к доказательству неразрешимости этой стандартной проблемы. Алгоритмические проблемы в полугруппах. Рассмотрим теперь частный случай полутуэвского процесса. Обратной к полутуэвской проv является продукция v u. дукции u О ПРЕДЕЛЕНИЕ 12.3 . Полутуэвский процесс Π называется туэвским процессом, если для каждой продукции u v обратная проu также находится в Π. дукция v Для туэвского процесса Π вместо P Π Q записываем P $ Q. Т ЕОРЕМА 12.5 . Для любого туэвского процесса Π отношение P $ Q является отношением эквивалентности. Доказательство. Для любого полутуэвского процесса отношение P Π Q очевидно, рефлексивно и транзитивно. Осталось проверить, что P Π Q влечет Q Π P для туэвского процесса. Из P Π Q имеем P Π P1 , P1 Π P2 , . . . , Pn 1 Π Pn , где Pn Q. Тогда имеем Pn Π Pn 1 , . . . , P1 Π P , т.е. Q Π P , что и надо. Теорема доказана. Так как отношение $ является отношением эквивалентности, то можно рассмотреть классы эквивалентных элементов. Класс эквивалентности, содержащий u, будем обозначать через ū. Напомним определение отношения конгруэнтности и его свойства.   О ПРЕДЕЛЕНИЕ 12.4 . Пусть A,  — алгебра с бинарной операцией . Отношение эквивалентности $ на алгебре A,  называется отношением конгруэнтности, если %a, b, c  A a $ b  ac $ bc и ca $ cb. (12.2) Другими словами, при умножении эквивалентных элементов a и b справа на произвольный элемент c должны получаться эквивалентные элементы. То же при умножении слева. Правило умножения классов. Пусть отношение $ является отношением эквивалентности на алгебре A,  и x, y, z, . . . — множество всех классов эквивалентных элементов. Определим операцию умножения классов следующим правилом. Выберем в классе x произвольный элемент a — представитель класса, в классе y выберем представитель b. Вычислим произведение ab элементов a и b в алгебре A. Класс z, содержащий элемент ab, считаем произведением классов x и y. Итак, правило умножения классов имеет вид. Если a  x, b  y, то произведение xy есть класс, содержащий элемент ab. Если x a, y (12.3) b, то по (12.3) получаем xy ab. (12.4) ā b̄ ab. (12.5) То же самое в другой записи Т ЕОРЕМА 12.6. Если $ является отношением конгруэнтности на алгебре A, то произведение xy в (12.4) не зависит от выбора представителей a и b в классах x и y. Доказательство в [12, с.33]. Т ЕОРЕМА 12.7 . Отношение энтности на алгебре X. $ является отношением конгру- Доказательство. Проверим условие конгруэнтности. Пусть a a1 . . . ak , b b 1 . . . bl , c c 1 . . . cn . Самостоятельно проверить, что ac $ bc и ca $ cb. Теорема доказана. Обозначим через S алгебру классов для отношения конгруэнтности $. Т ЕОРЕМА 12.8 . Алгебра классов для отношения конгруэнтности $ является полугруппой. Доказательство в упражнениях к лекции. Если полугруппа S определена таким путем, то туэвский процесс Π называется представлением полугруппы S. Пары u, v  для продукций v называются соотношениями, а символы из A называются обраu vиv u записываем зующими представления. Вместо двух пар u u # v. Как и в случае полутуэвского процесса, имеем следующую проблему разрешимости. Требуется найти алгоритм, с помощью которого для произвольных элементов x и y полугруппы S можно определить, верно ли, что x y или нет. Т ЕОРЕМА 12.9. (Э.Пост, А.А. Марков).Существует представление полугруппы с неразрешимой проблемой слов. Первоначальные конструкции Поста и Маркова являются достаточно громоздкими, с сотнями подстановок. Приведем более простой пример полугруппы с неразрешимой проблемой слов, полученный Г.С.Цейтиным и содержащий всего 7 подстановок. a, b, c, d, e и подстановки В этом примере задан алфавит A ac # ca ad # da bc # cb bd # db eca # ce edb # de cca # ccae Рассмотренные проблемы слов были впервые предложены А. Туэ задолго до появления точного определения понятия алгоритма. Это исторически первый пример проблемы разрешимости, формулировка которой не относилась к логике. Мы рассмотрели алгоритмические проблемы в полугруппах. Аналогичные вопросы, относящиеся к группам, будут рассмотрены в упражнениях. Упражнения к лекции 12 З АДАЧА 1. Пусть A a — алфавит, состоящий из одной букa вы. Зададим полугруппу S туэвским процессом в алфавите A и соотношением aa # Λ. Показать, что в этом случае существует алгоритм для определения равенство слов в полугруппе S. З АДАЧА 2. Зададим полугруппу S туэвским процессом в двубукa, b и соотношениями венном алфавите A ab # ba aa # Λ bb # Λ Показать, что в этом случае существует алгоритм для определения равенства слов в полугруппе S. Пусть отношение $ является отношением конгруэнтности на алгебре A,  и K x, y, z, . . . — множество всех классов эквивалентных элементов. Рассмотрим операцию умножения классов ā b̄ (12.6) ab. З АДАЧА 3. а) Пусть A — алгебра с коммутативной ассоциативной алгебраической операцией и $ является отношением конгруэнтности на алгебре A. Тогда произведение классов коммутативно ассоциативно. б) Пусть алгебра A имеет единичный элемент e. Тогда ē — единичный элемент при умножении классов. Пусть A — алфавит, состоящий из букв x1 , x2 , . . . , xn и букв x1 , x2 1, . . . , xn 1 . Символы xi и xi 1 в дальнейшем будут перемножаться особым образом, а пока это просто буквы. Итак,  1    A Любой символ из A x1, x2, . . . , xn, x1 1, x2 1, . . . , xn 1. (12.7) будем записывать в виде xεi , где 1  i  n и ε &1.    Пусть X — множество всех слов в алфавите A . Рассмотрим обычное произведение слов. Если u, v  X, то uv — слово, полученное из слоx1 x 2 1 и u x2 x3 x1 имеем ва u справа слова v. Например, для u 1 u x1 x2 x2 x3 x1 . Имеем алгебру X,  с операцией  (умножением слов). Введем отношение $ на множестве X. Сотрем или добавим в любом из слов u и v два рядом стоящих символа вида xi и xi 1 или xi 1 и xi . Если из слова u несколькими такими действиями получим v, то записываем u $ v.     З АДАЧА 4. Доказать, что отношение $ на множестве X является отношением эквивалентности. Класс эквивалентных элементов, содержащий слово u  X будем обозначать через u . Множество всех классов для отношения $ обозначим через G. Поэтому (12.8) G  u  u  X . З АДАЧА 5. Доказать, что отношение $ на множестве X является отношением конгруэнтности на алгебре X, . Поскольку отношение $ на множестве X является отношением конгруэнтности на алгебре X, , то можно задать обычным способом произведение классов для данного отношения конгруэнтности: u  v uv . З АДАЧА 6. Множество G является группой относительно данной операции произведения классов. Группа G называется свободной группой с n образующими. З АДАЧА 7. Является ли свободная группа G абелевой, конечной? Описать единичный элемент из G, обратный элемент для элемента u . Теперь получим аналогичным приемом новую группу G1 . В случае свободной группы мы считали равными слова, которые отличаются на сомножители вида xi xi 1 или xi 1 xi . Теперь вместо данных слов рассмотрим множество R, состоящее из произвольного набора слов в алфавите A . Это множество R назовем системой определяющих соотношений. В группе G рассмотрим наименьший   нормальный делитель H, содержащий множество R. Он получится при перемножении соотношений из R, замене r  R на обратный элемент и добавлении сопряженных элементов x 1 rx, x  G. Введем отношение на множестве X. Сотрем или добавим в любом из слов подслово w  H. Если из слова u несколькими такими действиями получим v, то записываем u ' v.  З АДАЧА 8. Доказать, что отношение ' на множестве X является отношением эквивалентности. Класс эквивалентных элементов, содержащий слово u  X, будем снова обозначать через u . Множество всех классов для отношения ' обозначим через G1 . З АДАЧА 9. Доказать, что отношение ' на множестве X является отношением конгруэнтности на алгебре X, . Поскольку отношение ' на множестве X является отношением конгруэнтности на алгебре X, , то можно задать обычным способом произвеuv . дение классов для данного отношения конгруэнтности: u  v З АДАЧА 10. Множество G1 является группой относительно данной операции произведения классов. Группа G1 называется группой с n образующими и системой определяющих соотношений R. Нам хотелось бы иметь алгоритм, который по системе определяющих соотношений R выявляет, равны или нет два элемента группы G1 . Академиком П.С.Новиковым в 1952 г. показано, что данная проблема алгоритмически неразрешима. П.С.Новиков доказал также алгоритмическую неразрешимость проблемы изоморфизма групп. Эта проблема состоит в указании алгоритма для распознавания, изоморфны или нет две группы. Лекция 13. Разрешимые множества и предикаты В данной лекции будет подробно рассмотрено понятие разрешимого множества, введенное в лекции 11. Напомним, что подмножество A множества E называется разрешимым в E, если существует алгоритм A, определяющий для элементов x  E, принадлежит элемент x множеству A или нет. Поэтому, чтобы установить разрешимость множества A в E, нужно найти алгоритм A, на входе которого предъявляются элементы x  E. При этом выполнены следующие два условия: 1) если на входе алгоритма предъявлен элемент x  A, то на выходе должен быть ответ «да»; 2) если на входе алгоритма имеется элемент x  E A, то на выходе должен быть ответ «нет». Разумеется, нужна договоренность, что подразумевать под ответами «да» и «нет». Например, выработка выходного объекта 1 означает «да», а выработка 0 означает «нет». Если такой алгоритм существует, то он называется разрешающим методом для A в E. Если E — множество натуральных чисел, то вместо слов «множество A разрешимо в E» говорим «множество A разрешимо». Задача нахождения алгоритма A или доказательства его несуществования названа в лекции 11 проблемой разрешимости для A. При этом нужно получить конструктивный ответ на проблему разрешимости, т.е. или 1) построить искомый алгоритм, т.е. указать его инструкции; или 2) доказать, что такого алгоритма не существует. Следующее «доказательство разрешимости» множества A неконструктивно и не дает ответа вида 1) или 2). Пусть A — множество тех чисел n  N, для которых в десятичной дроби числа π есть не менее n девяток подряд. Тогда A разрешимо. В самом деле, выполнено одно из утверждений: а) в числе π для любого n  N найдется не менее n девяток подряд, т.е. A N ; либо б) есть не менее n девяток подряд до некоторого значения n, например n 5, но нет n девяток подряд для n  1, n  2, . . . . В случае а) A N и A— разрешимо. В случае б) множество A конечно и предложению 13.1 этой лекции также разрешимо. Итак, в обоих случаях A разрешимо. Тем не менее, мы так и не предъявили инструкций алгоритма, который по n определял бы, есть ли в десятичной дроби числа π не менее n девяток подряд. Примеры разрешимых множеств. Естественность понятия разрешимого множества не вызывает сомнений. Многие математические задачи формулируются в виде «найти алгоритм для выяснения, является или нет элемент x элементом подмножества A». Рассмотрим следующие примеры. 1) Пусть N — множество всех натуральных чисел, A— множество всех простых чисел. Рассматривая вопрос: «указать алгоритм для определения, является ли число x простым или нет», мы тем самым ставим проблему разрешимости для A в N. Ответ положительный, т.е. множество A разрешимо. В качестве необходимого алгоритма можно взять решето Эратосфена [11, с.17]. 2) Пусть E— множество всех формул алгебры высказываний, A— множество всех тождественно истинных формул. Если мы ставим проблему разрешимости для A в E, то мы выясняем наличие алгоритма, с помощью которого для произвольной формулы алгебры высказываний F можно выяснить ее тождественную истинность. Такой алгоритм существует. Это составление таблицы истинности. Установим некоторые свойства разрешимых множеств. П РЕДЛОЖЕНИЕ 13.1. Пусть A — конечное подмножество множества E. Тогда A разрешимо в E. Доказательство. Установим разрешимость конечного множества A a1, a2, . . . , an с помощью следующего алгоритма A. К элементу x  E применяем n инструкций: 1. Проверить x 2. Проверить x ... n. Проверить x a1 , a2 , an . Для произвольного элемента x  E одна из инструкций должна давать на выходе «истина». Каждая из этих инструкций выполнима, т.к. мы умеем для конструктивных объектов x и y за конечное число шагов выявить равенство объектов x и y. Например, определяя равенство двух слов u и v в некотором алфавите, мы последовательно сравниваем первые буквы, вторые буквы и т.д. в словах u и v. За конечное число шагов будет получен ответ x y или x y. Предложение доказано. П РЕДЛОЖЕНИЕ 13.2 . Пересечение, объединение и разность разрешимых в E множеств также разрешимы. Доказательство. Пусть множества A и B разрешимы в E. Проверим, что множество A B разрешимо. Существует алгоритм A1 для ответа на вопрос: «пусть x  E, верно ли, что x  A или нет». Рассмотрим аналогичный алгоритм A2 для множества B. Искомый алгоритм A3 проверяет вначале, что x  A инструкциями алгоритма A1 . Затем проверяется истинность утверждения x  B инструкциями из A2 . В итоге алгоритм A3 , содержащий как инструкции из A1 , так и инструкции из A2 , отвечает на вопрос: «верно или нет утверждение x  A B». Остальные утверждения проверить самостоятельно. Предложение доказано. Обратим внимание, что в данном доказательстве и в других случаях мы используем тезис Черча для упрощения доказательств. Предположим, что в каком-то случае нам нужно установить, что существует некоторый алгоритм A или что некоторая функция f частично рекурсивна. Можно применить непосредственное определение частичной рекурсивности. Однако при этом, как правило, появятся громоздкие и трудные выкладки. Этого можно избежать следующим способом. Конструируем алгоритм A или функцию f в соответствии с интуитивным представлением об алгоритме и вычислимой функции. Затем применяем тезис Черча и получаем, что функция f частично рекурсивна. Разумеется, для строгости рассуждений мы в любой момент можем заменить такое «неформальное» доказательство на доказательство, устанавливающее частичную рекурсивность функции только на основе определения рекурсивности. В таком случае мы не используем тезис Черча. Заметим, что общее понятие разрешимости A в E, когда E— множеN, ство конструктивных объектов, можно свести к случаю, когда E т.е. к случаю, когда A — подмножество во множестве натуральных чисел. Так как E эффективно счетно, то мы можем перенумеровать элементы x множества E натуральными числами g x. Вместо элементов x  E в алгоритмических процессах можно использовать их номера g x  N. При этом мы располагаем алгоритмом A1 , вычисляющим по слову x  E его номер g x, и алгоритмом A2 , вычисляющим по номеру g x элемент x  E. Поэтому при рассмотрении вопросов разрешимости можно ограничиться случаем, когда A — подмножество во множестве N. П РЕДЛОЖЕНИЕ 13.3. Справедливы следующие утверждения: 1 число разрешимых множеств счетно; 2 существует подмножество множества N, которое не является разрешимым множеством. Доказательство. 1) Число алгоритмов, а поэтому и число разрешимых подмножеств счетно. 2) Пусть все подмножества в N разрешимы. Тогда по пункту 1) число всех подмножеств в N счетно, что не так. Предложение доказано. Разрешимые предикаты. Мы рассмотрели понятие разрешимости для множеств. Рассмотрим аналогичные понятия для предикатов. Напомним кратко необходимые сведения о предикатах из вводного курса математики. Пусть задано предложение P x1 , x2 , . . . , xn , содержащее n переменных, принимающих значения из некоторого множества M . Такое предложение названо n-арным предикатом (высказывательной формой) с областью определения M , если при каждой замене переменных x1 , x2 , . . . , xn на элементы из M получается высказывание. Обычно nарный предикат при n 1 называется унарным, а при n 2 — бинарным предикатом. Пример. Рассмотрим предложение x  y 7, которое содержит 2 переменные x и y, принимающие значения из множества натуральных чисел. Это предложение нельзя рассматривать как высказывание, поскольку, не зная конкретного значения переменных x и y, нельзя приписать этому предложению значения «истина» или «ложь». Однако при подстановN получается ке вместо переменных x, y элементов из множества M высказывание. Поэтому предложение x  y 7 — бинарный предикат с областью определения N. Укажем другие примеры предикатов. 1. Уравнение x  y  z 1 является предикатом от трех переменных с областью определения R. 2. Предложение «прямая x параллельна прямой y» — бинарный предикат, определенный на множестве M , где M — множество всех прямых некоторой плоскости. 3. Предложение «x — простое число» является унарным предикатом, определенным на множестве натуральных чисел, больших 1. Нам потребуется теперь более строгое определение предикатов на основе теории множеств. Пусть, например, M — множество всех людей, P x, y  – бинарный предикат: x знает y. Составим список R следующим образом. Просмотрим все a, b, где a, b  M . Если человек a знает b, то пару a, b вносим в список R, если a не знает b, то a, b  R. Свойство «знает» полностью характеризуется списком R. Любой n-арный предикат на множестве M (рассматриваемый как предложение с переменными) может быть подвергнут подобному процессу составления списка R  M    M . Приходим к следующему определению предиката, которое и будем обычно использовать в данном курсе. О ПРЕДЕЛЕНИЕ 13.1 . n-арным предикатом, определенным на множестве M , называется некоторое подмножество P в декартовом произведении M n M      M . Наряду с записью a1 , . . . , an   P для n-арного предиката P применяем также запись P a1 , . . . , an , которая выражает мысль, что отношение P истинно для n-ки a1 , . . . , an . Сформулируем понятие разрешающего метода для предиката. Пусть P — n-арный предикат на множестве A, т.е. P  An . Разрешающим методом для предиката P называется такой алгоритм, с помощью которого для произвольной строки a1 , . . . , an   An можно установить, верно или нет утверждение a1 , . . . , a1   P . Если такой алгоритм существует, то предикат P называется разрешимым (рекурсивным). Учтем, что n-арный предикат на множестве A является подмножеством во множестве An , и рассмотрим характеристическую функцию этого подмножества. Получим характеристическую функцию χ предиката P 1, если P a1, . . . , an, χa1 , . . . , an  0, если (P a1, . . . , an. Отметим, что функция χ является всюду определенной функцией. В лекции 11 доказана теорема: подмножество A из E является разрешимым в E тогда и только тогда, когда его представляющая функция χx является рекурсивной. Рассмотрим аналогичное утверждение для предикатов и другим способом выразим понятие разрешимости предиката. П РЕДЛОЖЕНИЕ 13.4 . Предикат P разрешим тогда и только тогда, когда его характеристическая функция χ рекурсивна. Доказательство. То, что мы нашли разрешающий метод A для функции χ, означает, что посредством A мы умеем вычислять 1 или 0 для произвольной строки a1 , . . . , an . Это означает, что для строки a1 , . . . , an  выявляется факт P a1 , . . . , an  или факт (P a1 , . . . , an . Поэтому A разрешающий метод для предиката P . Обратно, если A разрешающий метод для предиката P , то очевидно, что A разрешающий метод для функции χ. Предложение доказано. В связи с предложением 13.4 естественно возникают следующие два определения. Пусть A  N. О ПРЕДЕЛЕНИЕ 13.2 . Множество A называется примитивно рекурсивным, если его характеристическая функция χ примитивно рекурсивна. О ПРЕДЕЛЕНИЕ 13.3. Предикат P называется примитивно рекурсивным, если его характеристическая функция χ примитивно рекурсивна. Упражнения к лекции 13 З АДАЧА 1. Показать, что множество A разрешимо в E: 1 A — множество четных натуральных чисел, E N; 2 A — множество пар простых чисел близнецов, E N2 ; 3 A — множество квадратов натуральных чисел, E N. З АДАЧА 2. Пусть множества A и B разрешимы. Доказать, что множество A  B разрешимо. З АДАЧА 3. Пусть множества A и B разрешимы. Доказать, что множество AB разрешимо. З АДАЧА 4. Пусть E — множество квадратных матриц порядка n с целыми коэффициентами, A — множество матриц из E, имеющих обратную матрицу. Верно ли, что A разрешимо в E? З АДАЧА 5. Пусть множества A и B отличаются конечным числом элементов. Доказать, что множество A разрешимо тогда и только тогда, когда множество B разрешимо. З АДАЧА 6. Доказать разрешимость следующих предикатов: 1) x — простое число; 2) число x четно; 3) числа x и y взаимно просты. З АДАЧА 7. Пусть предикаты P x1 , x2 , . . . , xn  и Qx1 , x2 , . . . , xn  разрешимы. Доказать разрешимость предикатов P x1 , x2 , . . . , xn  " Qx1 , x2 , . . . , xn  и P x1 , x2 , . . . , xn  ! Qx1 , x2 , . . . , xn . З АДАЧА 8. Пусть предикат P x1 , x2 , . . . , xn  разрешим. Доказать разрешимость предиката (P x1 , x2 , . . . , xn  " Qx1 , x2 , . . . , xn . З АДАЧА 9. Пусть E — бесконечное множество конструктивных объектов. Доказать, что в E существует подмножество A, не являющееся разрешимым подмножеством в E. З АДАЧА 10. Пусть A — подмножество в N, причем дополнение NA конечно. Доказать, что множество A разрешимо. Лекция 14. Перечислимые и диофантовы множества Порождающие процессы и перечислимые множества Рассмотрим работу произвольного алгоритма A. Мы располагаем некоторым множеством E, состоящим из конструктивных объектов, элементы которого поступают на вход алгоритма A. Так как множество E счетно, то его можно представить в виде (14.1) E x0 , x1 , x2 , . . . . Мы используем алгоритм A для создания элементов некоторого множества A. Это создание осуществляется с помощью следующего порождающего процесса. Берем входной объект x0 и с помощью алгоритма получаем объект на выходе Ax0 . Помещаем элемент Ax0  во множество A. Затем вычисляем Ax1 , Ax2  и т.д. Представим себе, что данный процесс завершен. Мы получили множество A, элементы которого входят в последовательность Ax0 , Ax1 , Ax2 , . . . . Какие события могут возникнуть в этом процессе? Во - первых, некоторый элемент Axi  может не существовать, т.к. алгоритм A не применим к xi . Тогда при вычислении Axi  мы не добавим новый элемент к множеству A. Кроме того, возможны повторения, например, Ax2  Ax3 . По определению множества второй экземпляр Ax5  нам учитывать не нужно, т.к. уже имеем, что Ax2   A. Поскольку порядок записи элементов множества не важен, то элементы из A могут располагаться в произвольном порядке. В результате множество A не зависит от того, в каком порядке перебирались элементы из E. Про алгоритм A мы говорим, что он перечисляет множество A. Само множество A называется перечислимым множеством. Рассмотрим следующий пример. Пусть f x1 , x2 , . . . , xn — вычислимая функция, и A — алгоритм, вычисляющий эту функцию. На вход A поступают произвольные строки x1 , x2 , . . . , xn , а множество A, которое возникает в порождающем процессе, есть множество значений функции f A f x1, x2, . . . , xn  x1, x2, . . . , xn  Nn. Можно ограничиться случаем n 1. Действительно, мы можем занумеровать как входные объекты, так и объекты на выходе алгоритма натуральными числами. Рассматривая вместо объектов их номера, мы можем так истолковать описанный выше порождающий процесс: мы имеем некоторую частично рекурсивную функцию f x и создаем множество A, состоящее из всех значений функции f . Тогда A f x  x  N. Итак, мы получили следующее утверждение. П РЕДЛОЖЕНИЕ 14.1 . Множество A  N является перечислимым множеством тогда и только тогда, когда A является множеством значений некоторой частично рекурсивной функции f x1 , x2 , . . . , xn . Кроме того, множествоA  N перечислимо тогда и только тогда, когда для некоторой частично рекурсивной функции f x выполнено равенство A f x  x  N. (14.2) Рассмотрим функцию f , не определенную ни для какого значения аргумента (т.е. функцию с пустой областью определения). Она, очевидно, вычислима и, по тезису Черча, частично рекурсивна. Множество ее значений пусто. Следовательно, пустое множество перечислимо. Рассмотрим отличие понятия разрешимого множества от понятия перечислимого множества. Для этого введем понятия полухарактеристической функции и полуразрешимого множества. Пусть A  E. Наряду с определенной ранее характеристической функцией χx, введем теперь полухарактеристическую функцию χ x множества A. О ПРЕДЕЛЕНИЕ 14.1 . Полухарактеристической функцией множества A называется функция χ , заданная следующим правилом: χ x 1,  не определено, если x  A, если x  EA. (14.3) Рассмотрим теперь множества, являющиеся разрешимыми только наполовину. О ПРЕДЕЛЕНИЕ 14.2. Пусть A  E. Назовем множество A полуразрешимым в E, если существует алгоритм A, который перерабатывает элементы из E, и такой, что выполнены следующие два условия: 1 если на входе алгоритма предъявлен элемент x  A, то на выходе должно быть число 1 (можно истолковывать как ответ «да» на вопрос x  A); 2 если на входе алгоритма имеется элемент x  A (т.е. x  E A), то алгоритм работает бесконечно (и поэтому ничего нет на его выходе). Такой алгоритм A вычисляет значения полухарактеристической функции χ x. Поэтому непосредственно получаем следующее утверждение. П РЕДЛОЖЕНИЕ 14.2 . Множество A полуразрешимо в E тогда и только тогда, когда его полухарактеристическая функция χ x вычислима. Т ЕОРЕМА 14.1. Пусть A — подмножество множества N. Множество A перечислимо тогда и только тогда, когда оно полуразрешимо. Доказательство. Пусть множество A перечислимо. Проверим, что оно полуразрешимо. По (14.2) имеем некоторую частично рекурсивную функцию f с условием (14.4) A f x  x  N. Функция f рекурсивна, т.е. вычисляется некоторым алгоритмом A. Пусть x  N. Приспособим этот же алгоритм A для определения факта x  A. Возьмем элемент x  A. Применим алгоритм A для вычислений чисел f 0, f 1, f 2 . . . . (14.5) Сравниваем по порядку данные элементы с элементом x. Если элемент f i для некоторого i. Тогда после конечного числа испыx  A, то x f i, т.е. факт x  A. Поэтому получили таний обнаружится факт x следующее. 1) Если на входе алгоритма предъявлен элемент x  A, то на выходе получен ответ «да» (который закодируем числом 1). 2) Пусть на входе алгоритма предъявлен элемент x  A, т.е. x  N A. Тогда мы после конечного числа испытаний никогда не обнаружим факт x  A. Пусть мы выполнили m шагов алгоритма. Не обнаружив после f i, мы не знаем: или 1) x  A, или m шагов числа i с условием x 2) x  A, но мы еще не дошли до обнаружения этого факта. Тем самым после любого конечного числа шагов мы ничего не вносим в прояснение вопроса x  A. Наши попытки продолжаются бесконечно и результата на выходе алгоритма нет. Поэтому множество A полуразрешимо. Обратно, дано, что A — полуразрешимо. Тогда по предложению 14.2 полухарактеристическая функция χ x множества A частично рекурсивна. У нас есть алгоритм A для вычисления функции χ x. Для x  A этот алгоритм вырабатывает «да», для x  A алгоритм ничего не вырабатывает. Подправим работу алгоритма A. Если x  A и алгоритм выработал «да», то заменим ответ «да» на значение аргумента x. Получим алгоритм A1 , который вычисляет некоторую функцию f , и множество значений функции f равно множеству A. Получили A — перечислимо, что и нужно. Теорема доказана. Т ЕОРЕМА 14.2. Существует перечислимое, неразрешимое множество. Доказательство. По теореме (9.3) существует вычислимая функция f x, которую нельзя продолжить до всюду определенной вычислимой функции. Пусть A — область определения функции f x. Покажем, что A — искомое множество. Так как A — область определения вычислимой функции f x, то A — перечислимое множество (упражнение 3). Проверим, что A — неразрешимое множество. Предположим противное. Тогда существует алгоритм A, по которому для x  N определяем x  A или нет. Для получения противоречия достаточно построить всюду определенную функцию g x, которая является продолжение функции f x. Это означает, что для x  A имеем g x f x. Для остальных x, т.е. для x  NA, функция f x не определена, а функция g x должна иметь некоторое значение. Построим следующий алгоритм A1 для вычисления значений функции g x для всех x  N. Пусть x  N. Вначале применяем имеющийся алгоритм A. Его инструкциями определяем, какой случай выполнен: 1) x  A или 2) x  A. f a. В случае 2) считаем g a 0. Тогда В случае 1) считаем g a g x f x для x  A и g x 0 для x  NA. Так как алгоритм A1 вычисляет функцию g x, то функция g x вычислима. Кроме того, функция g x — продолжение функции f x. Противоречие с условием, что функция f x не имеет всюду определенного вычислимого продолжения. Теорема доказана. Доказанная теорема показывает мощный способ получения алгоритмически неразрешимых проблем. Для обнаружения такой проблемы нужно рассмотреть некоторый порождающий процесс, в результате которого получается перечислимое, но неразрешимое множество. Т ЕОРЕМА 14.3 (Э.Пост). Множество A разрешимо тогда и только тогда, когда как множество A, так и его дополнение NA перечислимы. Доказательство. Пусть A  N и множество A разрешимо. По определению 11.1 существует алгоритм A, с помощью которого для любого элемента x  N можно определить, является или нет данный элемент x элементом множества A. Подправим работу алгоритма A. Если x  A, то вырабатываем x, если x  A, то ничего не вырабатываем. Получаем алгоритм A1 , вычисляющий некоторую функцию f x с множеством значений A. Поэтому множество A перечислимо. Точно так же получаем перечислимость множества NA. Обратно, предположим, что A и его дополнение NA перечислимы. Тогда существуют алгоритмы A1 и A2 , где A1 обладает способностью обнаруживать факт x  A, а A2 может обнаруживать факт x  A. Соединим вместе инструкции A1 и инструкции алгоритма A2 . Получим алгоритм A, с помощью которого для любого элемента x  N можно определить, является или нет данный элемент x  N элементом множества A. Поэтому множество A разрешимо. Теорема доказана. Пусть f x1 , . . . , xn  функция от n аргументов. Множество строк Γf x1, . . . , xn, y  y f x1 , . . . , xn  (14.6) называется графиком функции f . Поскольку Γf  Nn 1 , то график функции f является n  1-арным предикатом на множестве N.  Т ЕОРЕМА 14.4 (о графике). Функция f x1 , . . . , xn  вычислима тогда и только тогда, когда ее график Γf перечислим в Nn 1 .  Доказательство. Обозначим A Γf . Предположим, что функция f x1 , . . . , xn  вычислима. Установим перечислимость множества A. Для этого укажем порождающий множество A процесс. Так как функция f x1 , . . . , xn  вычислима, то существует алгоритм A для вычисления ее значений. Пусть на вход этого алгоритма поступает строка x1 , . . . , xn . Модифицируем алгоритм A. В случае остановки A создаем строку x1, . . . , xn, y, где y f x1, . . . , xn. Новый алгоритм A1 порождает A. Поэтому множество A перечислимо.  или множество A явОбратно, пусть A перечислимо. Тогда A ляется областью значений некоторой всюду определенной, вычислимой функции g x (упражнение 4). , то функция f x1, . . . , xn не определена ни для одного Если A значения и поэтому вычислима. Если A является областью значений некоторой всюду определенной вычислимой функции g x, то A g0, g1, g2, . . . . В данной последовательности содержатся все строки x1 , . . . , xn , y , где y f x1 , . . . , xn , возможно с повторениями. Укажем алгоритм A для вычисления функции f . Пусть x1 , . . . , xn  — произвольная строка, поступающая на вход алгоритма A. Вычисляем по очереди элементы g 0, g 1, g 2, . . . с целью обнаружить в этих элементах на первых n местах строку x1 , . . . , xn . Если f x1 , . . . , xn  существует, то такая строка обнаружится после конечного числа шагов. На ее n  1 месте находится y f x1 , . . . , xn . Это выходной объект алгоритма A. Если f x1 , . . . , xn  не существует, то алгоритм A работает бесконечно и объекта на выходе нет. Поэтому алгоритм A вычисляет функцию f x1 , . . . , xn . Следовательно, функция f вычислима. Теорема доказана. Теорема о графике показывает, что понятия вычислимости и перечислимости тесно связаны и могут выражаться друг через друга. Диофантовы множества. С понятием перечислимого множества тесно связано понятие диофантова множества. О ПРЕДЕЛЕНИЕ 14.3 . Пусть A — подмножество множества N. Множество A называется диофантовым, если существует многочлен f x, y1 , . . . , yn  с целыми коэффициентами, такой, что для всех x  N имеем x  A  )y1  N, . . . , )yn  N f x, y1 , . . . , yn  0. (14.7) П РЕДЛОЖЕНИЕ 14.3. Всякое диофантово множество является перечислимым множеством. Доказательство. Рассмотрим полухарактеристическую функцию χ множества A. Тогда χ x 1,  не определено, если x  A, если x  NA. (14.8) Проверим ее вычислимость с помощью следующего алгоритма A. Пусть x элемент из N . Перебираем все строки вида y1 , . . . , yn   Nn и проверяем условие f x, y1 , . . . , yn  0. Строки y1 , . . . , yn  можно записать в виде последовательности 0 производим по порядку для a0 , a1 , a2 , . . . . Проверку f x, y1 , . . . , yn  строк a0 , a1 , a2 , . . . . Если x  A, то за конечное число шагов мы обнаружим этот факт и создадим на выходе A число 1. Если x  A, то процесс подбора такой строки бесконечен и нет объекта на выходе A. Поэтому алгоритм A вычисляет полухарактеристическую функцию χ . Тогда функция χ вычислима. Следовательно, множество A является полуразрешимым и поэтому перечислимым множеством. Предложение доказано. Справедливо обратное утверждение. Т ЕОРЕМА 14.5 (Ю.В.Матиясевич). Пусть A  N и A — перечислимое множество. Тогда множество A является диофантовым множеством. Доказательство этой теоремы содержится в [18] . Рассмотрим следствие из этой теоремы. П РЕДЛОЖЕНИЕ 14.4. Пусть A — подмножество множества N. Множество A является перечислимым множеством тогда и только тогда, когда A является множеством неотрицательных значений некоторого многочлена px1 , . . . , xn  с целыми коэффициентами, при условии, что переменные x1 , . . . , xn пробегают все значения из N. Доказательство. Пусть A — множество неотрицательных значений целочисленного многочлена px1 , . . . , xn  при условии, что переменные пробегают все значения из N. Тогда x  A  )y1  N, . . . , )yn  N py1, . . . , yn x. Как и в предложении 14.3, получаем, что множество A является перечислимым множеством. Обратно, пусть множество A перечислимо. По теореме Ю.В.Матиясевича, множество A является диофантовым. Поэтому существует целочисленный многочлен f x, y1 , . . . , yn , для которого x  A  )y1  N, . . . , )yn  N f x, y1, . . . , yn 0. Рассмотрим многочлен px, y1 , . . . , yn , задаваемый равенством px, y1 , . . . , yn  x x  1 f x, y1, . . . , yn  2. (14.9) Значение многочлена px, y1 , . . . , yn  неотрицательно тогда и только тогда, когда f x, y1 , . . . , yn  0. В этом случае его значение равно x. Итак, A — множество неотрицательных значений целочисленного многочлена px, y1 , . . . , yn  при условии, что переменные пробегают все значения из N. Предложение доказано. Пример. Рассмотрим в качестве A множество простых чисел. Множество A разрешимо и тем более перечислимо. Предложение 14.4 обеспечивает возможность получения формулы для простых чисел в виде явного указания некоторого многочлена F . Укажем такой многочлен F a, b, . . . , z  [2, с. 43]. Он имеет степень 25 и содержит 26 переменных — все буквы латинского алфавита. Т ЕОРЕМА 14.6. Множество простых чисел совпадает с множеством положительных значений следующего многочлена от 26 переменных при условии, что его переменные пробегают все значения из N: F a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z     1  wz  h  j q 2  2n  p  q  z 2  2 e  2 2 ay k2 y 2 1 x 3 2 2 3 2 2 2 2 2 e  2e a  1  1 o 16k  1 k  2n  1  1 f 2    4 2 2 2 2 ai  k  1 l a  u u a 1 n  4dy  1 x  cu 2  2  2 4 2 2 16r y a 1  1 u gk  2g  k  1h  j   h z  2 2 p m  la n 1  b2an  2a n 2n 2  2 2 2 z pm  pla p l  t2ap p 1 2  q x  y a p 1  s2ap  2a p2 2p 2 2  2   a2 l2 l2  1 m2 nlv y . 4  2 i Упражнения к лекции 14 З АДАЧА 1. Доказать, что множество четных натуральных чисел является перечислимым множеством. З АДАЧА 2. Доказать, что множество всех квадратов натуральных чисел является перечислимым множеством. З АДАЧА 3. Доказать, что множество A перечислимо тогда и только тогда, когда оно является областью определения некоторой вычислимой функции f x. З АДАЧА 4. Доказать, что множество A перечислимо тогда и только тогда, когда A  или A является множеством значений некоторой всюду определенной, вычислимой функции f x. З АДАЧА 5. Пусть функция f x1 , x2 , . . . , xn  вычислима и A — множество решений уравнения f x1 , x2 , . . . , xn  0. Доказать, что n множество A перечислимо в N . З АДАЧА 6. Пусть множества A и B перечислимы. Доказать, что множества A B и A  B также являются перечислимыми множествами. З АДАЧА 7. Пусть множества A и B отличаются конечным числом элементов. Доказать, что если множество A перечислимо, то и множество B перечислимо. З АДАЧА 8. Доказать, что множество четных натуральных чисел является диофантовым множеством. З АДАЧА 9. Доказать, что множество всех квадратов натуральных чисел является диофантовым множеством. З АДАЧА 10. Рассмотрим формулу для простых чисел, приведенную в теореме 14.6. Сформулировать необходимые и достаточные условия, наложенные на переменные, для того, чтобы число k  2 являлось простым числом. Список литературы [1] Барвайз Дж. (ред.). Справочная книга по математической логике. Часть III. Теория рекурсии. - М.: Наука, 1982. [2] Боро В., Цагир Д., Рольфс Ю., Крафт Х., Янцен Е. Живые числа. Пять экскурсий. - М.: Мир, 1985. [3] Булос Дж., Джеффри Р. Вычислимость и логика. - М.: Мир, 1994. [4] Ершов Ю.Л., Палютин Е.А. Математическая логика. - М.: Наука, 1987. [5] Ершов Ю.Л. Теория нумераций. - М.: Наука, 1977. [6] Верещагин Н.К., Шень А. Вычислимые функции. - М.: МЦНМО, 1999. [7] Гуц А.К. Математическая логика и теория алгоритмов. - Омск.: Омский ун-т, 2003. [8] Игошин В.И. Математическая логика и теория алгоритмов - М.: Академия, 2004. [9] Игошин В.И. Задачи и упражнения по математической логике и теории алгоритмов. - М.: Академия, 2005. [10] Ильиных А.П. Математическая логика: - Екатеринбург.: Уральский гос. пед. ун-т. 2002. [11] Ильиных А.П. Теория чисел: - Екатеринбург.: Уральский гос. пед. ун-т. 2003. [12] Ильиных А.П. Числовые системы: - Екатеринбург.: Уральский гос. пед. ун-т. 2003. [13] Катленд Н. Вычислимость. Введение в теорию рекурсивных функций. - М.: Мир, 1983. [14] Кушнер Б.А. Лекции по конструктивному математическому анализу. - М.: Наука, 1973. [15] Лавров И.А., Максимова Л.Л. Задачи по теории множеств, математической логике и теории алгоритмов, 3-е изд. - М.: Физматлит, 1995. [16] Мальцев А. И. Алгоритмы и рекурсивные функции. - М.: Наука, 1986. [17] М а р к о в А. А., Нагорный Н.М. Теория алгорифмов. - М.: Наука, 1984. [18] Матиясевич Ю. В. Десятая проблема Гильберта. - М.: Физматлит, 1993. [19] Петер Р. Рекурсивные функции. - М.: ИЛ, 1954. [20] Роджерс Х. Теория рекурсивных функций и эффективная вычислимость. - М.: Мир, 1972. [21] Успенский В.А. Лекции о вычислимых функциях. - М.: Физматгиз, 1960. [22] Успенский В.А., Семенов А.Л. Теория алгоритмов: основные открытия и приложения. - М.: Наука, 1987. [23] Черч А. Введение в математическую логику. - М.: ИЛ, 1960. [24] Шенфилд Дж. Математическая логика. - М.: Наука, 1975. [25] Эббинхауз Г.Д., Якобс К., Ман Ф.К., Хермес Г. Машины Тьюринга и рекурсивные функции. - М.: Мир, 1972. У ЧЕБНОЕ ИЗДАНИЕ Ильиных Анатолий Петрович Теория алгоритмов Учебное пособие Компьютерная верстка: А.П.Ильиных Редактор Т.В.Васильева Подписано в печать 18.06.2006. Формат 60  84 116. Бумага для множ. аппаратов. Печать ротапринтная. Усл. печ. л. 0,0. Уч.- изд. л. 0,0. Тираж 200 экз. Заказ Оригинал макет отпечатан в отделе множительной техники Уральского государственного педагогического университета 620219 Екатеринбург, ГСП-135, пр. Космонавтов, 26
«Теория алгоритмов» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot