МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего профессионального образования «Дальневосточный федеральный университет» (ДВФУ) ФИЛИАЛ ДВФУ В Г.УССУРИЙСКЕ «УТВЕРЖДАЮ» Заведующий кафедрой математики, физики и методики преподавания ______________ Горностаев О.М. 20 сентября 2011 г. УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС ДИСЦИПЛИНЫ Теория алгоритмов Специальность - 050202.65 Информатика с дополнительной специальностью 050203.65 Физика Форма подготовки очная кафедра математики, физики и методики преподавания курс 3, семестр 6 лекции – 22 час. практические занятия – 18 час. лабораторные работы - 0 час. всего часов аудиторной нагрузки – 40 час. самостоятельная работа – 50 час. реферативные работы - 0 контрольные работы - 2 зачет – экзамен – 6 семестр Учебно-методический комплекс составлен в соответствии с требованиями Государственного образовательного стандарта высшего профессионального образования (номер государственной регистрации №662 пед/ сп (новый) от 31 января 2005 г.) Учебно-методический комплекс дисциплины обсужден на заседании кафедры математики, физики и методики преподавания 20. 09. 2011 г., протокол № 1. Заведующий кафедрой: Составитель: доцент Горностаев О.М., 20. 09. 2011 г. Калинина Е.А Содержание комплекса: 1. Аннотация…………………………………………………………………………2 2. Выписка из ГОС ВПО (для дисциплин Федерального компонента)………3 3. Рабочая учебная программа дисциплины (РПУД)…………………………6 4. Учебно-методическое обеспечение дисциплины…………………………26 2 Аннотация ДПП.Ф.04 Теория алгоритмов Содержание дисциплины: Предмет в объеме 90 часов является обязательным в разделе дисциплин предметной подготовки. Включает в себя теоретический и практический материал по темам: Введение. Алгоритмы в математике. Основные черты алгоритмов. Необходимость уточнения понятия алгоритма. Числовые функции и алгоритмы их вычисления. Понятие вычислимой функции, разрешимого множества. Частично рекурсивные функции и рекурсивные предикаты. Класс частично рекурсивных функций. Исходные функции. Операторы подстановки, примитивной рекурсии, минимизации. Рекурсивные предикаты. Логические операции. Ограниченные кванторы. Подстановка функций в предикат. Кусочное задание функции. Машины Тьюринга. Понятие машины Тьюринга Операции с машинами. Тезис Черча-Тьюринга. Рекурсивные и рекурсивно-перечислимые перечислимые предикаты, множества. их свойства. РекурсивноРекурсивно- перечислимые множества. Нумерация. Универсальная функция. Теорема Клини. Неразрешимые алгоритмические проблемы. Алгоритмическая сводимость. 3 Студент должен знать теоретические основы дисциплины в объёме, необходимом для решения типовых задач ; уметь решать типовые задачи изучаемой дисциплины. Связь с другими дисциплинами: Все дисциплины математического цикла. Специальность: Информатика с дополнительной специальностью. 4 Выписка из ГОС ВПО (для дисциплин Федерального компонента). ДПП.Ф.04 Теория алгоритмов 90 Понятие вычислимой функции. Разрешимые и перечислимые множества. График функции. Формальная теория (частично рекурсивные функции, вычислимой вычислимости регистровые машины, машины Тьюринга). Тезис Чёрча. Конечные и бесконечные Эффективная машины. нумерация параметризации. Понятие программы. программ. Существование Теорема о универсальной программы. Компьютер фон Неймана. Диагональный метод. Пример невычислимой функции. Проблема останова. Примеры неразрешимых и неперечислимых множеств. Алгоритмическая сводимость проблем. Примеры алгоритмически неразрешимых проблем в математике и информатике. Эффективные операции над вычислимыми функциями. Теорема о неподвижной точке. Общее понятие исчисления. Грамматики. Языки, иерархия языков по Хомскому. Языки и машины. вычисления. Применение Основные Основы теории меры теории NР-полноты сложности NР-полноты. для анализа сложности проблем. Приложения теории алгоритмов в информатике. 5 МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное автономное образовательное учреждение высшего профессионального образования «Дальневосточный федеральный университет» (ДВФУ) ФИЛИАЛ ДВФУ В Г.УССУРИЙСК «УТВЕРЖДАЮ» Заведующий кафедрой математики, физики и методики преподавания ______________ Горностаев О.М. 20 сентября 2011 г. РАБОЧАЯ ПРОГРАММА УЧЕБНОЙ ДИСЦИПЛИНЫ Теория алгоритмов Специальность - 050202.65 Информатика с дополнительной специальностью 050203.65 Физика Форма подготовки очная кафедра математики, физики и методики преподавания курс 3, семестр 6 лекции – 22 час. практические занятия – 18 час. лабораторные работы - 0 час. всего часов аудиторной нагрузки – 40 час. самостоятельная работа – 50 час. реферативные работы - 0 контрольные работы - 2 зачет – семестр экзамен – 6 семестр Рабочая программа составлена в соответствии с требованиями Государственного образовательного стандарта высшего профессионального образования (номер государственной регистрации №692 пед/ сп (новый) от 31 января 2005 г.) Рабочая программа дисциплины обсуждена на заседании кафедры математики, физики и методики преподавания 20. 09. 2011 г., протокол № 1. Заведующий кафедрой: Составитель: доцент Горностаев О.М., 20. 09. 2011 г. Калинина Е.А. 6 - Содержание: 1. Пояснительная записка………………………………………………………………………5 2. Тематический план…………………………………………………………………………..6 а) для очной формы обучения………………………………………………………………6 б) для заочной формы обучения…………………………………………………………….6 3. Содержание учебного материала…………………………………………………………...7 4. Требования к знаниям и умениям (компетенциям) студентов…………………………..11 5. Формы контроля (очное и заочное обучение)…………………………………………….11 а) рубежный (текущий) контроль………………………………………………………….11 б) итоговый контроль……………………………………………………………………...15 6. Список литературы. ………………………………………………………………………..16 7 1. Пояснительная записка Понятие алгоритма и вычислимой функции являются, пожалуй, наиболее фундаментальными понятиями информатики и математики. Систематическое изучение алгоритмов и различных моделей вычислений привело к созданию особой дисциплины, пограничной между математикой и информатикой - теории вычислимости. Теория вычислимых (с помощью компьютеров) функций появилась в 30-е годы XX столетия, когда никаких компьютеров еще не было. Первые компьютеры появились в 40-х годах и их появление стало возможным именно благодаря достижениям теории вычислимости. Так в рамках теории вычислимости было сформулировано понятие вычислительной машины (машины Тьюринга) и было показано, что для осуществления всевозможных преобразований информации вовсе не обязательно строить каждый раз специализированные вычислительные устройства: все это можно сделать на одном универсальном устройстве при помощи подходящей программы и соответствующего кодирования. Уже поэтому основные понятия теории вычислимости достойны внимания как математиков, так и специалистов в области информатики. Однако эта теория имеет и более широкий культурный аспект. Кроме того, созданная недавно теория NP-полноты имеет большое практическое значение для анализа алгоритмов. Какие же понятия (кроме вычислимой функции) и достижения можно считать основными в теории вычислимости? К таковым можно отнести следующие: - понятие эффективной вычислимости в интуитивном смысле; - понятие модели вычисления; - описание класса арифметических функций (т.е. функций, значения и аргументы которых - натуральные числа), инвариантных относительно общих моделей вычислений; 8 - существование арифметической функции, не принадлежащей этому классу; - разрешимые и перечислимые множества; - построение неразрешимого перечислимого множества; - понятие вычисления с оракулом; - понятие нумерации и теория нумераций; - время и емкость как мера сложности вычисления; - начало создания инвариантной, или машинно-независимой, теории сложности вычислений; - идентификация класса задач, разрешимых за время, ограниченное полиномом от длины входа; - построение теории NP-полноты. 9 2. Тематический план дисциплины Трудоемкость (всего часов) 12 6 6 18 12 12 4 2 10 16 4 4 10 18 4 22 22 4 18 18 6 50 50 14 90 90 Лабораторные занятия 2 4 2 Лабораторные занятия Лекции Наименование модулей, разделов, тем (с указанием семестра) Всего № Практические, семинарские занятия Аудиторные занятия Трудоемкость (всего часов) 6. Самостоятельная работа студентов 5. 6 семестр Понятие вычислимой функции. 6 Понятие универсальной функции 6 Понятие нумерации. 6 Неподвижная точка и отношения 6 эквивалентности. Построение эффективной нумерации программ 8 для РАМ. Сигнализирующая функция 8 Итого за 6 семестр 40 Итого по дисциплине 40 Самостоятельная работа студентов 4. Практические, семинарские занятия 1. 2. 3. 4 2 4 Наименование модулей, разделов, тем (с указанием семестра) Всего № Лекции Аудиторные занятия 8 семестр, ОЗО Понятие высказывания. 1. 2 2 14 16 2. Исчисление высказываний. 4 2 2 12 16 3. Логика предикатов. 4 2 2 12 16 4. Понятие алгоритма. 2 2 12 14 5. Описание РАМ – машины. 2 2 12 14 2 2 12 14 6. Машины Тьюринга. Итого за 8 семестр Итого по дисциплине 16 16 12 12 4 4 74 74 90 90 10 3. Содержание учебного материала по дисциплине «Теория алгоритмов» № Тема Содержание 1. 2. 3. Кол-во часов Ауд. СРС 4. 5. Самостоятельная работа студентов Оборудование 6. 7. (6 семестр, 90 часов) 1 2 Понятие вычислимой функции. Понятие универсальной функции 1. Понятие вычислимой функции. Примеры. Свойство пошагового выполнения алгоритма. 2 4 2. Разрешимые множества и их свойства. Перечислимые множества и их свойства. Перечислимое множество, как множество определения вычислимой функции. Перечислимое множество, как множество значений вычислимой функции. 2 4 3. Теорема Поста. Теорема о графике вычислимой функции. 2 4 1. Понятие универсальной функции. Существование вычислимой универсальной функции для класса вычислимых функций одной переменной. 2 2 2. Диагональная конструкция. Отсутствие вычислимой всюду определенной функции двух переменных, универсальной для класса всех вычислимых всюду определенных функций одной переменной. 2 2 3. Существование вычислимой функции, не имеющей всюду определенного вычислимого продолжения. Существование перечислимого множества с не перечислимым дополнением. Неразрешимость проблемы самоприменимости. 2 2 11 3 4 Понятие нумерации. Неподвижная точка и отношения эквивалентности. 1. Понятие нумерации. Главные универсальные функции. Существование главной универсальной функции. Теорема Успенского - Райса. 4 4 2. Изоморфизм главных нумераций. Перечислимые свойства функций. 2 2 1. Неподвижная точка и отношения эквивалентности. Теорема Клини. Приложение к семантике языков программирования. Существование программы, печатающей (на любом входе) свой текст. 2 4 2 3 2 3 1. Необходимость простых моделей вычислений. Описание РАМ - машины, выполняющей косвенную адресацию, проверку на равенство и вычисление функции следования. 2 4 2. Программирование для РАМ. Примеры. Функции вычислимые на РАМ. Примеры. 2 2 3. Необходимость рассмотрения не всюду определенных функций. Тезис Черча. Построение эффективной нумерации программ для РАМ. Существование универсальной РАМ. 2 2 4. Неразрешимость проблемы останова для РАМ. Алгоритмическая сводимость проблем. Неразрешимость исчисления предикатов. Пример функции невычислимой на РАМ. Сравнение РАМ и ЭВМ. 2 2 1. Понятие сложности вычисления. Сигнализирующая функция (по времени). Аксиомы Блюма. 2 2 2. Теорема об ускорении. Сложностные классы. Вычисления с оракулом. 2 2 2. 3. 5 Построение эффективной нумерации программ для РАМ. 6 Сигнализирующая функция 12 3. Описание классов P и NP. Примеры задач, принадлежащих этим классам. Отождествление класса P с классом реально вычислимых функций. Полиномиальная сводимость. NP-полные задачи. 4. Теорема Кука. Примеры NP-полных задач. Проблема перебора (P=NP?). Применение теории NP-полноты для анализа сложности задач. 2 2 2 13 Содержание учебного материала по дисциплине «Теория алгоритмов» № Тема Содержание 1. 2. 3. (8 семестр ОЗО, 90 часов) 1. Понятие высказывания. Примеры. Операции над высказываниями. Логическое следствие. 1 Понятие высказывания. 2 Исчисление высказываний. 3 Логика предикатов. Кол-во часов Ауд. СРС 4. 5. 2 14 1. Исчисление высказываний. 2 6 2. Формулы, аксиомы, правила, выводы. 2 2 6 6 2 2 6 12 1. Логика предикатов. 2. Формулы и их классификация 4 Понятие алгоритма. 1. Понятие алгоритма. Примеры алгоритмов. Свойства алгоритмов. Необходимость уточнения понятия алгоритмов. 5 Описание РАМ – машины. 1. Необходимость простых моделей вычислений. Описание РАМ - машины, выполняющей косвенную адресацию, проверку на равенство и вычисление функции следования. Программирование для РАМ. Примеры. Функции вычислимые на РАМ. Примеры. 2 12 6 Машины Тьюринга. 1. Машины Тьюринга. Операции с машинами. Тезис Черча. 2 12 Самостоятельная работа студентов Оборудование 6. 7. 14 4. Требование к знаниям и умениям студентов Цель данного курса - познакомить учащихся с вышеперечисленными понятиями и результатами. Необходимо указать на некоторое тонкое различие между понятием вычислимой функции и понятием алгоритма. Например, функция f:N N , определенная так: f(n) равно единице, если гипотеза Римана верна, и нулю в противном случае, является вычислимой, хотя мы и не можем указать алгоритм, вычисляющего эту функцию. Поэтому в последнее время (особенно за рубежом) курс, подобный данному курсу, предпочитают называть "Теорией вычислимости", оставляя за "Теорией алгоритмов" название курса, в котором рассматриваются конкретные алгоритмы. Основные задачи изучения дисциплины заключаются в усвоении базовых понятий теории алгоритмов и умении их применять . Изучая дисциплину «Теория алгоритмов» студент должен: 1. усвоить понятия и идеи алгебры разрешимых множеств и уметь их применять к решению задач; 2. уяснить основные характеристики алгебры перечислимых множеств и изучить методы их исследования; 3. приводить примеры алгоритмически неразрешимых проблем и определять уметь выделять их; 4. проводить доказательство равносильности любых двух различных моделей вычислений; 5. уметь доказывать вычислимость функций в различный абстрактных моделях. Курс теории алгоритмов является фундаментом математического образования специалиста, которое сориентировано на применение ма- 15 тематических методов в их образовательной и профессиональной деятельности. 5. Формы контроля (очное и заочное обучение): а) рубежный (текущий) контроль; б) итоговый контроль а) рубежный (текущий) контроль; Перечень вопросов и заданий для самостоятельной работы Вопросы Алгебра разрешимых множеств. Алгебра перечислимых множеств. Примеры алгоритмически неразрешимых проблем. Доказательство равносильности любых двух различных моделей вычислений. Упражнения 1. Составьте алгоритм сложения столбиком двух натуральных чисел. 2. Опишите правила перехода улицы для случаев: а) перекресток регулируемый; б) перекресток нерегулируемый (т.е. без светофора). 3. Опишите способ измерения длинной рейки с помощью линейки. 4. Укажите метод отыскания слова в орфографическом словаре. 5. Укажите алгоритм проведения перпендикуляра к прямой l, в заданной точке D. 6. Опишите несколько алгоритмов решения задач на следующие темы: а) рецепты приготовления пищи (один из способов получения таких рецептов - воспользуйтесь поваренной книгой); 16 б) правила этикета (например, правило знакомства, алгоритм приветствия и т.п.); в) правила дорожного движения; г) правила поведения в бытовых ситуациях (алгоритм пользования газовой плитой, правило пользования телефоном-автоматом и т.п.). 7. Покажите, что вычисление по алгоритму из примера 3.2 с начальной конфигурацией 6, 7, 0, 0, 0, ... никогда не остановится. 8. Составьте алгоритмы, вычисляющие функции: x / 2, если _ x четно, не _ определена, если _ x нечетно. а) f ( x) 1, если _ x 0, 0, если _ x 0. б) f ( x) в) f(x)=5 1, если _ x y, 0, если _ x y. г) f ( x, y) д)* f(X,Y)=XxY е)* f ( x, y) x / y , если _ y 0, не _ определена, если _ y 0. Здесь [x / y] означает наименьшее целое число, не превосходящее действительное число x / y. 9. Покажите, что для каждой команды переадресации существует программа без команд переадресации, которая на всякой конфигурации МНР дает тот же результат, что и T(m, n). 10. Докажите разрешимость следующих предикатов на множестве целых неотрицательных чисел: а) x = y; б) xy; в) x < y; г) x - четное число. 17 11. Дана машина Тьюринга с внешним алфавитом А= { , 1,*} и алфавитом внутренних состояний Q=( q0 , q1 , q2 , q3 , q4 } со следующей функциональной программой: q11 q2R, q21 q21R, q2 q21R, q2 q3L, q31 q4L , q4 q01L, q41 q41L . Какую функцию f(x) вычисляет МТ(6) для слова 11*111, если головка машины обозревает крайнюю левую ячейку ? * 12 . Покажите, что функция «обращение», переворачивающая слово задом наперед, вычислима на машине Тьюринга. 13. Докажите теорему 5.1. 14. Проведите это рассуждение, используя какое-либо другое эквивалентное определение перечислимости. 15. Докажите, что если множества А N и B N перечислимы, то их декартово произведение А B N N также перечислимо. 16. (Теорема об униформизации.) Пусть F – перечислимое множество пар натуральных чисел. Докажите, что существует вычислимая функция f, определенная на тех и только тех x, для которых найдется у, при котором <x,y>F, причем f(x)=y. * 17. Диофантовым называется уравнение, имеющее вид P( x1 , x2 , x3 ,.., xn ) 0 , где Р – многочлен с целыми коэффициентами. Докажите, что множество диофантовых уравнений, имеющих целые решения, перечислимо. (Оно не разрешимо: в этом состоит 10-я проблема Гильберта.) 18. Напишите перечисленные выше программы на машине с конечным числом регистров. 19 *. Напишите программу на машине с конечным числом регистров, вычисляющую максимальный элемент одномерного массива чисел 2, 4, -3, 0, 5. 18 20. Докажите, что следующая функция вычислима в рассмотренной модели , x с, если _ x четно, , с задано пользователем. не _ определена, если _ x нечетно. где f ( x) 21. Докажите теоремы 7.1 и 7.2. 22. Докажите утверждения, сформулированные в замечании. 23. Докажите, что функции, приведенные в примере 10.4 частично рекурсивны. 24*. Докажите частичную рекурсивность функции x y . 25. Докажите примитивно рекурсивность предикатов из примера 10.5. 26. Докажите теорему 10.6. 27. Докажите, что у каждой вычислимой функции имеется бесконечно много индексов. 28. Используя диагональный метод, докажите что множество всех функций из N в N несчетно (Кантор). 29. Докажите, что множество всех невычислимых всюду определенных функций из N в N несчетно. 30* . Докажите, что класс общерекурсивных функций шире класса примитивно рекурсивных функций. 31. Некоторое множество S натуральных чисел разрешимо. Разложим все числа из S на простые множители и составим множество D всех простых чисел, встречающихся в этих разложениях. Можно ли утверждать, что множество D разрешимо? 32. Докажите, что не существует алгоритма, определяющего по тексту программы, будет ли эта программа вычислять некоторую конкретную вычислимую функцию. 33. Покажите, что не существует всюду определенной вычислимой функции f(x,y), обладающей следующим свойством: если программа Px ( y ) останавливается, то это происходит за f(x, y) или меньше шагов. 19 Указание. Покажите, что если бы такая функция существовала, то проблема остановки была бы разрешима. Тематика рефератов 1. Нейронные сети. 2. Вероятностные вычисления. 3. Квантовые вычисления. 4. Биомолекулярные вычисления. 5. Вычисления над кольцом целых чисел. 6. Вычисления над кольцом действительных чисел. 7. Вычисления над кольцом комплексных чисел. 8. Структурная сложность. 9. Коммуникационная сложность. 10. Дескриптивная сложность. 11. Алгебраическая сложность. Контрольные задания по дисциплине Тематика заданий 1. Составление словесных алгоритмов. 2. Построение блок-схем. 3. Составление алгоритмов на алгоритмическом языке. 4. Применение МНР (машин с неограниченным числом регистров) к конфигурациям. 5. Доказательство МНР-вычислимости функций. 6. Применение машин Тьюринга к словам. 7. Конструирование машин Тьюринга. 8. Системы счисления. Содержание заданий 20 1. Составьте алгоритм мытья посуды после чаепития. 2. Дан одномерный массив и точка А(1,2). Определите какая из точек В с координатами (х,у) наиболее удалена от точки А, если х и у – два соседних элемента массива. 3. Составьте алгоритм, выясняющий, является ли данное слово «перевертышем», т.е. пишущееся одинаково слева направо и наоборот. 4. Дан алгоритм для МНР: I 1 : T(2,3) I 2 : S(2) I 3 : J(1,2,2) I 4 : S(2) I 5 : J(1,2,4) I 6 : T(3,1). Какая конфигурация является результатом работы алгоритма, если начальная конфигурация задана так: 4, 2, 1, 6, 0, 0, .. 5. Докажите, что функция f(x+y)=(x+y)! МНР-вычислима. 6. Машина Тьюринга с внешним алфавитом A={ a 0 ,1} и алфавитом внутренних состяний Q={ q0 , q1 , q2 ,..., q13 } определяется следующей функциональной схемой: Q a0 1 q1 q2 a0 L q0 1 q2 q5 a0 q3 a0 q3 q4 a0 L q0 1 q4 q5 1 q 4 1L A 21 q5 q0 a0 q 6 1L q6 q0 a0 q7 a0 q7 q8 a 0 R q0 1 q8 q9 1 q 8 1R q9 q0 a0 q10 1L q10 q0 a0 q11 a 0 q11 q12 a 0 L q0 1 q12 q13 1 q12 1L q13 q0 a0 q0 1 Изображая на каждом такте работы машины получающуюся конфигурацию, определите в какое слово перерабатывает машина каждое из следующих слов. В начальный момент времени машина находится в состоянии q1 и обозревает крайнюю правую ячейку. Начальное слово a 0 111 a 0 1 a 0 1 a 0 11 a 0 . 7. На ленте машины Тьюринга записаны два набора единиц 1. Они разделены *. Составьте функциональную схему машины так, чтобы она выбрала больший из этих наборов, а меньший бы стерла, исходя из стандартного начального положения (машина находится в состоянии q1 и обозревает крайнюю правую ячейку). Звездочка должна быть сохранена, чтобы было видно, какой из массивов выбран. 8. Запишите числа в системе счисления с основанием q и выполните действия: 1213 405 47219 : 1213 , q=8. 22 б) итоговый контроль Перечень вопросов к экзамену 1. Что изучает теория алгоритмов, на какие части делится. 2. Понятие алгоритм, задача. 3. Свойства алгоритмов. 4. МНР. 5. МНР-вычислимая функция. 6. Тезис Черча. 7. Предикаты и операции над ними. Разрешимая проблема. 8. МТ и функции, вычислимые по Тьюрингу. 9. Конфигурация МТ (соединение, ветвление, суперпозиция) 10.Тезис Тьюринга. 11.Вычислимая функция. Пример невычислимой всюду определенной функции. (т.13.1) 12.Разрешимые множества и их свойства (т. 6.1) 13.Перечислимые множества и их свойства (т. 6.2, 6.3, 6.5, 6.7). 14.Теорема Поста (т. 6.4) 15.Теорема о графике вычислимой функции (т. 6.6) 16.Машина с ограниченным числом регистров. 17.Теоремы об эквивалентности МНР и машин с конечным числом регистров (т. 7.1, 7.2) 18.Теоремы об эквивалентности машин Тьюринга и машин с конечным числом регистров (т. 8.1, 8.2) 19.Арифметическое множество. Теорема об арифметичности графика вычислимой функции (т. 9.2) 20. Частично рекурсивные функции и их вычислимость (базисные функции, операторы, примитивно рекурсивные, общерекурсивные функции, тезис Черча, примитивно рекурсивные предикаты и их свойства, т.10.1-10.6) 21.Системы счисления. 23 22. Счетное множество, эффективно-счетное множество, примеры эффективно-счетных множеств. 23.Нумерации. Геделев номер. 24.Теоремы об эффективной счетности команд и программ для МНР. 25.Диагональная конструкция. 26.Универсальная функция. Теоремы 14.1 и 14.2. Универсальная программа. 27.Универсальные функции для класса всюду определенных функций, примитивно рекурсивных функций (т. 14.3-14.4) 28.Существование вычислимой функции, не имеющей всюду определенного вычислимого продолжения. 29.Доопределение функции. Существование частично рекурсивной функции, которая не может быть доопределена до общерекурсивной. 30.Существование перечислимого множества с неперечислимым продолжением. 31.Алгоритмически неразрешимые проблемы (примеры, метод сводимости). 32.S-M-N теорема (простая форма и общая) 33.Теорема Райса. Нетривиальные свойства. 34.Полувычислимые предикаты. 6. Список литературы Основная литература 1. Математическая логика : учеб. пособие для вузов / И.А. Лавров ; под ред. Л.Л. Максимовой .— М. : Академия, 2006 .— 240 c. 2. Математическая логика : Курс лекций. Задачник-практикум и решения: учебное пособие / Л.М. Лихтарников, Т.Г. Сукачева .— Изд. 4-е, стер .— СПб : Лань, 2009 .— 288c . 24 3. Крупский, В.Н. Теория алгоритмов : учебное пособие для вузов по напр. "Информатика и вычислительная техника", "Информационные системы и технологии" / В.Н. Крупский, В.Е. Плиско .— М. : Академия, 2009 .— 208 c Дополнительная литература 1. Разборов А.А. О сложности вычислений, Математическое просвещение, вып.3, стр. 127-141. - М.: МЦНМО, 1999. – 382 с. 2. Вялый М.Н. Сложность вычислительных задач, Математическое просвещение, вып. 4, стр. 81-114. М.: МЦНМО, 2000. – 268 с. Электронные информационные образовательные ресурсы 1. Лавров И.А., Максимова Л.Л. Задачи по теории множеств, математической логике и теории алгоритмов. – М.: Физматлит, 2002. – 256 с. [Электронный ресурс]. - Режим доступа: http://e.lanbook.com/view/book/2242/ 2. Гурова Л.М., Зайцев Е.В. Математическая логика и теория алгоритмов. – М.: Горная книга, 2000. – 262 с. [Электронный ресурс]. Режим доступа: http://e.lanbook.com/view/book/3514/ 3. Глухов М.М., Шишков А.Б. Математическая логика. Дискретные функции. Теория алгоритмов.- СПб.: Лань, 2012. – 416 с. [Электронный ресурс]. - Режим доступа: http://e.lanbook.com/view/book/4041/ 25 Учебно-методическое обеспечение дисциплины Методические материалы к дисциплине Содержание учебного материала по всем видам аудиторной работы (лекции, практические занятия, лабораторные занятия) Лекция 1. Понятие вычислимой функции. Примеры. Свойство пошагового выполнения алгоритма. Разрешимые множества и их свойства. Перечислимые множества и их свойства. Перечислимое множество, как множество определения вычислимой функции. Перечислимое множество, как множество значений вычислимой функции. Лекция 2. Теорема Поста. Теорема о графике вычислимой функции. Лекция 3. Понятие универсальной функции. Существование вычислимой универсальной функции для класса вычислимых функций одной переменной. Диагональная конструкция. Отсутствие вычислимой всюду определенной функции двух переменных, универсальной для класса всех вычислимых всюду определенных функций одной переменной. Существование вычислимой функции, не имеющей всюду определенного вычислимого продолжения. Существование перечислимого множества с не перечислимым дополнением. Неразрешимость проблемы самоприменимости Лекция 4. Понятие Существование нумерации. главной Главные универсальные универсальной функции. функции. Теорема Успенского - Райса. Лекция 5. Изоморфизм главных нумераций. Перечислимые свойства функций. 26 Лекция 6. Неподвижная точка и отношения эквивалентности. Лекция 7. Теорема Клини. Приложение к семантике языков программирования. Существование программы, печатающей (на любом входе) свой текст. Лекция 8. Необходимость простых моделей вычислений. Описание РАМ машины, выполняющей косвенную адресацию, проверку на равенство и вычисление функции следования. Программирование для РАМ. Примеры. Функции вычислимые на РАМ. Примеры. Лекция 9. Необходимость рассмотрения не всюду определенных функций. Тезис Черча. Построение эффективной нумерации программ для РАМ. Существование проблемы проблем. останова универсальной для Неразрешимость РАМ. РАМ. Неразрешимость Алгоритмическая исчисления сводимость предикатов. Пример функции невычислимой на РАМ. Сравнение РАМ и ЭВМ. Лекция 10. Понятие сложности вычисления. Сигнализирующая функция (по времени). Аксиомы Блюма. Теорема об ускорении. Сложностные классы. Вычисления с оракулом. Лекция 11. Описание классов P и NP. Примеры задач, принадлежащих этим классам. Отождествление класса P с классом реально вычислимых функций. Полиномиальная сводимость. NP-полные задачи. Теорема Кука. Примеры NP-полных задач. Проблема перебора (P=NP?). Применение теории NP-полноты для анализа сложности задач. Практические занятия Занятие 1. Понятие вычислимой функции. Примеры. Свойство пошагового выполнения алгоритма. Разрешимые множества и их свойства. Перечислимые множества и их свойства. Перечислимое множество, как множество определения вычислимой функции. Перечислимое 27 множество, как множество значений вычислимой функции. Теорема Поста. Теорема о графике вычислимой функции. Занятие 2-3. Понятие универсальной функции. Существование вычислимой универсальной функции для класса вычислимых функций одной переменной. Диагональная конструкция. Отсутствие вычислимой всюду определенной функции двух переменных, универсальной для класса всех вычислимых всюду определенных функций одной переменной. Существование вычислимой функции, не имеющей всюду определенного вычислимого продолжения. Существование перечислимого множества с не перечислимым дополнением. Неразрешимость проблемы самоприменимости Занятие 4. Понятие нумерации. Главные универсальные функции. Существование главной универсальной функции. Теорема Успенского - Райса. Изоморфизм главных нумераций. Перечислимые свойства функций. Занятие 5. Неподвижная точка и отношения эквивалентности. Теорема Клини. Приложение к семантике языков программирования. Существование программы, печатающей (на любом входе) свой текст. Занятие 6. Необходимость простых моделей вычислений. Описание РАМ машины, выполняющей косвенную адресацию, проверку на равенство и вычисление функции следования. Программирование для РАМ. Примеры. Функции вычислимые на РАМ. Примеры. Занятие 7. Необходимость рассмотрения не всюду определенных функций. Тезис Черча. Построение эффективной нумерации программ для РАМ. Существование универсальной РАМ. Неразрешимость проблемы останова для Неразрешимость РАМ. Алгоритмическая исчисления сводимость проблем. Пример функции предикатов. невычислимой на РАМ. Сравнение РАМ и ЭВМ. 28 Занятие 8. Понятие сложности вычисления. Сигнализирующая функция (по времени). Аксиомы Блюма. Теорема об ускорении. Сложностные классы. Вычисления с оракулом. Занятие 9. Описание классов P и NP. Примеры задач, принадлежащих этим классам. Отождествление класса P с классом реально вычислимых функций. Полиномиальная сводимость. NP-полные задачи. Теорема Кука. Примеры NP-полных задач. Проблема перебора (P=NP?). Применение теории NP-полноты для анализа сложности задач. 29 Карта обеспеченности литературой Сведения об обеспеченности образовательного процесса учебной литературой или иными информационными ресурсами Теория алгоритмов Наименование дисциплины Теория алгоритмов Кол-во экзем-ов Основной учебник (автор, название, выходные данные) 45 Математическая логика : учеб. пособие для вузов / И.А. Лавров ; под ред. Л.Л. Максимовой .— М. : Академия, 2006 .— 240 c. Математическая логика Задачник-практикум 30 и : Курс лекций. решения: учебное пособие / Л.М. Лихтарников, Т.Г. Сукачева .— Изд. 4-е, стер .— СПб : Лань, 2009 .— 288c . Крупский, В.Н. Теория алгоритмов : учебное пособие для вузов по напр. "Информатика и вычислительная техника", "Информационные системы и технологии" / В.Н. Крупский, В.Е. Плиско .— М. : Академия, 2009 .— 208 c 2 30 Материал для лекций 4. Предикаты и операции над ними. Введем еще несколько понятий необходимых для дальнейшего изложения. Определение 4.1. n-местным предикатом на множестве M называется отображение H, сопоставляющее каждому упорядоченному набору (a1, a2, ..., an) элементов из M одно из логических значений "истинно" или "ложно". Пример 4.1 Функции "быть простым числом", "быть четным числом" являются одноместными предикатами на множестве целых чисел. Пример 4.2. Свойства "иметь одинаковые остатки при делении на 3" или "быть равными" являются бинарными предикатами на множестве целых чисел. Из простых предикатов H ( x1 , x2 , x3 ,...) и Р( x1 , x2 , x3 ,...) строятся сложные с помощью следующих основных логических операций. Определение 4.2. Конъюнкция – есть предикат « H ( x1 , x2 , x3 ,...) и Р( x1 , x2 , x3 ,...) » (обозначается НР или НР), которое истинно тогда и только тогда, когда истинны оба составляющих предиката Н и Р. Определение 4.3.Дизъюнкция – есть предикат « H ( x1 , x2 , x3 ,...) или Р( x1 , x2 , x3 ,...) » (обозначается НР), которое истинно тогда и только тогда, когда истинен хотя бы один из предикатов Н или Р. Определение 4.4.Импликация – предикат «если H ( x1 , x2 , x3 ,...) , то Р( x1 , x2 , x3 ,...) » или «из H ( x1 , x2 , x3 ,...) следует Р( x1 , x2 , x3 ,...) »(обозначается НР), которое ложно тогда и только тогда, когда H ( x1 , x2 , x3 ,...) истинен, а Р( x1 , x2 , x3 ,...) -ложен. Определение 4.5.Отрицанием предиката H ( x1 , x2 , x3 ,...) называется предикат «не Н ( x1 , x2 , x3 ,...) » или «неверно, что H ( x1 , x2 , x3 ,...) » (обозначается Н или Н), истинное тогда и только тогда, когда Н -ложен. Определение 4.6.Эквивалентность – предикат « H ( x1 , x2 , x3 ,...) эквивалентно Р( x1 , x2 , x3 ,...) » (обозначается НР), истинное в том и только в том случае, если H ( x1 , x2 , x3 ,...) и Р( x1 , x2 , x3 ,...) оба истинны, либо оба ложны. Кроме пяти выше введенных операций на предикаты могут действовать операции называемые кванторами. Определение 4.7. Квантором общности называется предикат истинный, если для всякого (каждого, любого) x1 , x2 , x3 ,... выполняется H ( x1 , x2 , x3 ,...) , и ложный, если, напротив, существует такое xi , для которого H ( x1 , x2 , x3 ,...) - ложен. Обозначается x1 , x2 , x3 ,... : H ( x1 , x2 , x3 ,...) . 31 Определение 4.8. Квантором существования называется предикат истинный, если хотя бы для одного из x1 , x2 , x3 ,... H ( x1 , x2 , x3 ,...) - истенен, и ложный, если, напротив, такого xi нет, т.е. для всех x1 , x2 , x3 ,... H ( x1 , x2 , x3 ,...) - ложен. Обозначается x1 , x2 , x3 ,... : H ( x1 , x2 , x3 ,...) . Обозначая истинность 1, а ложность – 0, зададим перечисленные операции таблицами. Таблица 4.1. H 0 0 1 1 P 0 1 0 1 HP 0 0 0 1 HP 0 1 1 1 HP 1 1 0 1 HP 1 0 0 1 Таблица 4.2. Р 0 1 Р 1 0 Определение 4.9. Предикат H ( x1 , x2 , x3 ,...) называется разрешимым, если его 1, если _ H ( x1 , x2 , x3 ,..) истинно, характеристическая функция C H ( x1 , x2 , x3 ,..) 0, если _ H ( x1 , x2 , x3 ,..) ложно. вычислима. В контексте вычислимости предикаты часто называют проблемами. Поэтому ниже мы наряду с термином "разрешимый предикат" будем использовать также "разрешимая проблема". Упражнение 10. Докажите разрешимость следующих предикатов на множестве целых неотрицательных чисел: а) x = y; б) xy; в) x < y; г) x - четное число. 5. Машина Тьюринга и функции, вычислимые по Тьюрингу. Опишем алгоритмическую модель, предложенную Тьюрингом в 30-х годах 20-го века и оказавшую влияние на разработку ЭВМ. Понятие машины Тьюринга возникает в результате прямой попытки разложить интуитивно известные нам вычислительные процедуры на элементарные операции. Тьюринг привел ряд доводов в пользу того, что предложенных им элементарных операций будет достаточно для проведения любого возможного вычисления. Тьюринг описал некоторого рода теоретическую вычислительную машину. От человека-вычислителя, выполняющего данные ему предписания, она отличается в двух отношениях. Во-первых, «машина Тьюринга»(в дальнейшем МТ) не может ошибаться, т.е. она без всяких отклонений выполняет правила, установленные для ее работы. Во-вторых, МТ снабжена потенциально бесконечной памятью. Это значит, что, хотя в каждый момент 32 количество накопленной ею информации конечно, для него нет никакой верхней грани. Накапливаемая информация может включать (в тот или иной момент времени) формулировку конкретного заданного машине вопроса, черновую работу, выполненную машиной в процессе получения ответа, и сам ответ. Теперь мы сформулируем наше понятие МТ подробно. МТ состоит из следующих элементов: 1) Ленты, разбитой на ячейки и бесконечной в обе стороны. В каждой ячейке может быть записан один из символов конечного алфавита А={ а0 , а1 , а 2 ,.., а m }, называемого внешним алфавитом. Условимся считать, что символ а 0 является пустым символом (также обозначаемым ). 2) Управляющего устройства, которое может находится в одном из конечного числа внутренних состояний Q={ q0 , q1 , q 2 ,.., q m }. Число элементов Q характеризует объем внутренней памяти машины (используемой при выполнении алгоритма). В множестве Q выделены два специальных состояния: q 0 и q1 , называемые соответственно заключительным и начальным состояниями. Машина начинает работу в состоянии q1 , попав в состояние q 0 , машина всегда останавливается. 3) Считывающей пишущей головки, которая может перемещаться вдоль ленты и в каждый момент времени обозревает (считывает) одну из ячеек ленты. Функционирование МТ осуществляется в дискретные моменты времени t=0,1,2,.. и заключается в следующем. В зависимости от внутреннего состояния машины и считываемого символа на лента МТ: А) записывает в эту ячейку символ внешнего алфавита; В) сдвигает считывающую головку на один шаг влево или вправо, или оставляет ее на месте; С) переходит в новое внутреннее состояние. Таким образом, работа машины определяется системой команд вида qi a j q k al d , где (1) qi - внутреннее состояние машины, a j - считываемый символ, q k - новое внутреннее состояние, al - новый записываемый символ, d - направление движения головки, обозначаемое одним из символов L (влево), R (вправо), E (на месте). Предполагается, что для каждой пары qi a j , где i=1,..n,j=0,..m имеется только одна команда вида (1). Множество этих команд называется программой машины, и, значит, в программе имеется n(m+1) команд. Работа машины заключается в изменении конфигураций. Определение 5.1. Конфигурация представляет собой совокупность внутреннего состояния, состояния ленты (т.е. размещение букв внешнего алфавита по ячейкам или слова, записанного на ленте), положения головки на ленте. Предположим, что в начальный момент времени на ленте все ячейки, кроме конечного их числа содержат пустой символ. Следовательно, и в любой другой момент времени лента будет иметь лишь конечное число ячеек, содержащих непустые символы. 33 Определение 5.2. Активной зоной конфигурации назовем минимальную связную часть ленты, содержащую обозреваемую ячейку, а также все ячейки, в которых записаны непустые символы. Конфигурацию можно представить в виде машинного слова в алфавите АQ вида 1qi 2 , (2) где qi - внутреннее состояние , 1 - слово из символов алфавита А, находящееся в левой части активной зоны от считывающей головки, 2 - слово из символов алфавита А, находящееся в правой части активной зоны от считывающей головки. Определение 5.3. Конфигурация К называется заключительной, если. Условимся, что стандартная начальная конфигурация имеет вид заключительная имеет вид qi = q1 . q1 , а стандартная q0 . Конфигурацию в момент времени t обозначим изменения конфигураций в следующем смысле: K t . Машина реализует процесс K0 qi и ai , ai A ,то в программе машины имеется только одна команда вида q1ai qk al d . Toгда следующая конфигурация K1 определяется так Если : K1 == qk al ,если d=Е, K1 = al qk ,если d=R, . K1 = qk a0 al , если d==L. Это обстоятельство записываем в виде: K 0 —> K1 . Если теперь конфигурация K1 , не является заключительной, то в соответствии с системой команд, аналогично предыдущему, определима однозначно следующая конфигурация K 2 , т.е. Таким образом, конфигураций начальная конфигурация K0 порождает K1 —> K 2 . последовательность K 0 —> K1 K 2 —> … K t . K t 1 ... (3) Определение 5.4. Если последовательность (3) конечна, т,е. обрывается в заключительной конфигурации ,то говорят, что машина применима к конфигурации случае неприменима к K 0 , в противном K 0 . Если машина применима к конфигурации K 0 q1 K t q0 -заключительной конфигурация ,то слово и объявляется результатом работы машины на слове . Т.о. машине Тьюринга соответствует частичная словарная функция с областью определения и областью значения , являющейся конечными словами в алфавите А, 34 которая каждому такому слову ставит в соответствие результат применения машины к данному слову. Потребуем, чтобы заключительные конфигурации машины находились в стандартной форме. Этого всегда можно добиться, добавляя к машине Т два новых состояния q ', q " и команды q0 ai qai L, i 0,..m , qa0 qa0 R. При этом состояние q " объявим заключительным. Полученная машина Т'' эквивалентна машине Т в следующем смысле: а) Обе машины применимы к одним и тем же начальным конфигурациям. б) Результаты применения обеих машин совпадают. в) Заключительные конфигурации у машины Т ' находятся в стандартной форме. Определим теперь вычисление функций на машине Тьюринга. Будем рассматривать словарные частичные функции f типа f: А* —> А* , где А* - множество всех слов конечной длины в алфавите А Определение 5.5. Говорят, что машина Тьюринга Т правильно вычисляет частичную функцию f, если для любого Р A* выполнено: 1) Если f(Р) определено и f(Р) =Q, то машина Т применима к начальной конфигурации q1 Р и заключительной конфигурацией является K t q0Q . 2) Если f( Р) не определено, то машина Т неприменима к начальной конфигурации q1 Р. Определение 5.6. Функция f называется правильно вычислимой по Тьюрингу, если существует машина Тьюринга Т, которая ее правильно вычисляет. Замечание 5.1. Аналогичные определения могут быть сделаны и для функций нескольких переменных. Для этого достаточно множество слов, являющихся аргументами, записать в виде одного слова, введя знак-разделитель. Рассмотрим несколько примеров на построение машин Тьюринга. Пример 5.1. Пусть А= { a0 = , a1 == 1} и Q=( q0 , q1 , q2 }. Программа машины T1: q1 q21E , q11 q11R, q21 q21L, q2 q0Е. (4) x 1 Пусть K 0 q11 .Тогда T1 порождает следующую последовательность конфигураций : q1 1x+1 1 q1 1x..1x+\ q1 1x+1 q 2 1.. q 2 1x+2 q 2 1x+2 q 0 . 35 Поясним на примере. Пусть исходное слово 111. Изобразим схематически начальную конфигурацию машины. q1 1 1 1 Схема означает, что машина находится в состоянии q1 и обозревает ячейку, в которой записана буква 1, в двух следующих справа ячейках записаны точно такие же буквы, в соседней слева ячейке ничего не записано. Ничего не записано во всех непоказанных ячейках ленты. На первом такте работы согласно команде q11 q11R машина 1 заменяет 1, т.е. клетка остается без изменения, и переходит к обозрению следующей ячейки справа. Изобразим схематически положение, в котором оказалась машина: q1 1 1 1 На втором такте работы согласно этой же команде машина сдвигается на одну ячейку справа и обозревает букву 1: q1 1 1 1 Далее, выполняя эту же команду машина сдвигается на одну ячейку справа и обозревает пустую клетку. q1 1 1 1 Теперь благодаря команде q1 q21E машина записывает в обозреваемую пустую клетку 1 и остается в исходном положении: q2 1 1 1 1 Теперь в обозреваемой клетке 1 и выполняется команда q21 q21L, в результате машина сдвигается на одну клетку влево. q2 1 1 1 1 Выполняя эту команду еще 3 раза головка машины обозревает пустую клетку слева: q2 1 1 1 1 Теперь выполняя следующую команду q2 q0 Е , машина заканчивает работу. q0 1 1 1 1 Таким образом, машина Тьюринга (4) правильно вычисляет функцию f(x)=x+1, x N 0 . 36 Пример 5.2. Пусть А= { a0 = , a1 == 1} и Q=( q0 , q1 , q 2 }. Программа машины T2: q1 q1R , q11 q2R, q21 q2R, q2 q0Е. (5) x 1 Пусть K 0 q11 .Тогда T2 порождает следующую последовательность конфигураций : q1 1x+1 q 2 1x.. q 2 q 0 . Поясним на примере. Пусть исходное слово 111. Изобразим схематически начальную конфигурацию машины. q1 1 1 1 На первом такте работы согласно команде q11 q2R, машина стирает там написанный символ и переходит к обозрению следующей ячейки справа. Изобразим схематически положение, в котором оказалась машина: q2 1 1 На втором такте работы согласно команде q21 q2R, машина стирает записанную там букву 1 и сдвигается на одну ячейку вправо: q2 1 Далее, выполняя эту же команду машина стирает последнюю букву и сдвигается на одну ячейку справа и обозревает пустую клетку. q2 q2 q0Е машина оставляет обозреваемую Теперь благодаря команде клетку пустой и остается в исходном положении, закончив при этом свою работу: q0 Значит, машина Тьюринга (5) правильно вычисляет функцию f(x)==0, x N 0 . Упражнение 11. Дана машина Тьюринга с внешним алфавитом А= { , 1,*} и алфавитом внутренних состояний Q=( q0 , q1 , q2 , q3 , q4 } со следующей функциональной программой: q11 q2R, q21 q21R, 37 q2 q21R, q2 q3L, q31 q4L , q4 q01L, q41 q41L . (6) Какую функцию f(x) вычисляет МТ(6) для слова 11*111 из начального стандартного положения? Прямое построение машин Тьюринга для решения даже простых задач может оказаться затруднительным. Однако существуют приемы, которые облегчают данный процесс, если использовать способы сочетания программ нескольких машин в результирующие программы. Дадим некоторое представление об этих приемах, что позволит говорить о существовании тex или иных машин, на деталях же построения конкретных программ останавливаться не будем. Определение 5.7. (Суперпозиция машин). Пусть даны две машины Тьюринга Т1 и Т 2 , которые вычисляют соответственно словарные функции f1 ( P) и f 2 ( P) в одном и том же алфавите. Тогда существует машина Тьюринга Т, которая вычисляет функцию f ( P) f 2 ( f1 ( P)) . При этом для любого слова Р функция f (P ) определена в том и только в том случае, когда f1 ( P) определена и f 2 ( f1 ( P)) определена. Программа машины Т строится так: Состояния машины Т 2 переобозначаем так, чтобы они отличались от состояний машины Т1 . Начальное состояние q11 машины Т1 объявляем начальным q1 для машины Т, заключительное состояние q 02 машины Т 2 объявляем заключительным q 0 для машины Т. Заключительное состояние q 01 машины Т1 отождествляем с начальным состоянием q12 машины Т 2 . Полученные команды для обеих машин объединяем в одну программу. Рассмотрим начальную конфигурацию q1 Р. Поскольку q1 == q11 - начальное состояние машины Т1 , то вначале Т работает как машина Т1 и если Т1 применима к q11 Р, то на некотором шаге будет получена конфигурация q 01 f1 ( P) , но q 01 = q12 - начальное состояние для Т 2 и теперь Т действует как машина Т 2 . Если Т 2 применима к q 01 f1 ( P) , то на некотором шаге будет получена конфигурация q 02 f 2 ( f1 ( P)) , которая является заключительной для Т, т.к q 02 = q 0 . Если Т1 неприменима к q11 Р или Т 2 неприменима к q 01 f1 ( P) , то Т неприменима к q1 Р. Машина Т называется суперпозицией машин Т1 и Т 2 и обозначается Т1 Т 2 . Схематически суперпозиция изображается так: 38 Определение 5.8. (Соединение машин). Пусть даны машины Тьюринга Т1 и Т 2 , вычисляющие словарные функции f1 ( P) и f 2 ( P) соответственно. Тогда существует машина Т, которая начальную конфигурацию q1 Р переводит в заключительную q 0 f1 ( P) * f 2 ( P) , если f1 ( P) и f 2 ( P) определены , и неприменима в противном случае. Здесь * - новый символ, не входящий в алфавиты машин Т1 и Т 2 . Машина Т называется соединением машин и обозначается Т1 * Т 2 . Существование машины Т вытекает из следующих неформально описываемых конструкций. Лента машины Т- является двухэтажной. В качестве внешнего алфавита Т b берутся двухэтажные буквы , где а и b - буквы алфавита Т1 , Т 2 . Каждой букве а a i1 ik ставится в ставится в соответствие двухэтажная буква . Слову Р= a . . соответствие двухэтажное слово . ai1 . . aik a ....a Машина Т будет работать так ai1 ai . . a ik . . aik ai1 1 . . aik ai1 . . aik f1 ( P) . . f1 ( P) f ( P) f1 ( P) * f 2 ( P) 2 . . Определение 5.9. (Ветвление машин). Пусть даны машины Тьюринга Т1 и Т 2 , вычисляющие словарные функции f1 ( P) и f 2 ( P) соответственно, заданные в одном алфавите. Тогда существует машина Тьюринга Т, которая начальную конфигурацию q1 * Р, где {0,1}, переводит в заключительную q 0 f1 ( P) , если = 0 и в q 0 f 2 ( P) , если =1. Машина Т называется разветвлением машин Т1 и Т 2 , и обозначается Т1 Т 2 . Схематически разветвление представляется так: 39 Существование машины Т вытекает из следующих конструкций. Пусть q11 и q12 начальные состояния машин Т1 и Т 2 соответственно. Считаем, что множества внутренних состояний машин не пересекаются. Объединим программы машин Т1 и Т 2 , добавим новое начальное состояние q1 и добавим команды. q1 0 q11R, q11* q11R, q11 q12R, q12 * q12R. Теперь заключительные состояния q 01 и q 02 машин Т1 и Т 2 объединим, а полученное состояние q 0 считаем заключительным для Т. Если q1 * P -начальная конфигурация, то Т через 2 шага перейдет в конфигурацию q11 P, если = 0 и в конфигурацию q12 Р, если = 1 а затем будет работать как Т1 или Т 2 соответственно. Важным приемом в программировании является разбиение решаемой задачи на циклы. После выполнения каждого цикла проверяется выполнимость некоторого условия. Если условие выполнено, то выдается результат, если нет, то цикл повторяется. Точнее, процедура задается так. Пусть имеем словарные функции f1 и f 2 и некоторый предикат Ф на словах (его значения обозначим 0,1). Для произвольного слова Р проверяем - верно ли Ф(Р)=1, если да, то выдается ответ f1 (P). Если Ф(Р)=0 , то вычисляется Р= f 2 (Р). Затем проверяется - верно ли Ф(Р')==1, если да, то выдается ответ f1 (Р'), если Ф( Р' )=0, то вычисляется Р " = f 2 (Р') и т.д. Существует машина Тьюринга Т, реализующая данную процедуру. Пусть существуют машины Тьюринга для вычисления функций f1 и f 2 и предиката Ф. Обозначим их Т1 , Т 2 и Тф соответственно. Пусть То-машина, которая оставляет всякое слово Р без изменения. Машина Т строится в соответствии со схемой: 40 Пояснение: Заключительные состояния q 01 и q 02 машин Т1 и Т1 Т 2 не объединяются, а считаются различными. Состояние q 01 объявляется заключительным для Т1 , а q 02 отождествляется с начальным состоянием q1 для Т. Заключительное состояние для машины Тф*То объявляется начальным для Т1 Т 2 . Из изложенного следует, что если Т1 Т 2 работает как Т1 , то полученное ею значение является выходом Т, если же Т1 Т 2 работает как Т 2 , то полученное ею значение снова подается на вход машины Т. Таким образом, язык Тьюрингова программирования содержит основные операторы программирования на алгоритмических языках и позволяет устраивать последовательное выполнение программ, параллельное их соединение, использовать условные переходы ("если Ф, выполнить f1 иначе f 2 "), реализовывать цикл (" пока Ф , выполнить f1 , иначе f 2 "). Это является основанием для предположения о том, что для всех процедур, претендующих называться алгоритмическими, существует (при подходящем кодировании) реализующая их машина Тьюринга. Данное предположение носит название тезиса Тьюринга. Тезис Тьюринга. Всякая вычислимая функция вычислима на машине Тьюринга. Данный тезис доказать нельзя, поскольку здесь используется интуитивное понятие алгоритма. Подтверждением тезису является математическая практика, а также то, что описание алгоритма в любой другой алгоритмической модели может быть сведено к описанию его в виде МТ. Однако принятие тезиса Тьюринга позволяет истолковывать утверждения о не существовании машин Тьюринга для решении конкретных задач как утверждения о существовании алгоритмов вообще. * Упражнение 12 . Покажите, что функция «обращение», переворачивающая слово задом наперед, вычислима на машине Тьюринга. 6. Вычислимые функции, разрешимые и перечислимые множества. Определение 6.1. Функция f с натуральными аргументами и значениями называется вычислимой, если существует алгоритм, ее вычисляющий, т.е. такой алгоритм А, что: 1. если f(n) определено для некоторого натурального n, то алгоритм А останавливается на входе n и печатает f(n); 2. если f(n) не определено, то алгоритм А не останавливается на входе n. 41 Замечание 6.1. Входами и выходами алгоритмов могут быть не только натуральные числа, но и двоичные строки (слова в алфавите {0,1}), пары натуральных чисел, конечные последовательности слов и вообще любые, как говорят, «КОНСТРУКТИВНЫЕ ОБЪЕКТЫ». Поэтому аналогичным образом можно определить понятие, скажем, вычислимой функции с двумя натуральными аргументами, значениями которой являются рациональные числа. Определение 6.2. Множество натуральных чисел Х называется разрешимым, если существует алгоритм, который по любому натуральному n определяет, принадлежит ли оно множеству Х. Другими словами, Х разрешимо, если его характеристическая функция 1, если _ n X , ( n) вычислима. 0, если _ n X Аналогично определяют разрешимость множеств пар натуральных чисел, множеств рациональных чисел и т.п. Теорема 6.1. Пересечение, объединение и разность разрешимых множеств разрешимы. Любое конечное множество разрешимо. Упражнение 13. Докажите теорему 5.1. Определение 6.3. Множество натуральных чисел называется перечислимым, если оно перечисляется некоторым алгоритмом, т.е. если существует алгоритм, который печатает (в произвольном порядке и с произвольными промежутками времени) все элементы этого множества и только их. Такой алгоритм не имеет входа; напечатав несколько чисел, он может надолго задуматься, и следующее число напечатать после большого перерыва (а может вообще больше никогда ничего не напечатать – тогда множество будет конечным). Существует много эквивалентных определений перечислимого множества. Вот некоторые из них: 1) Множество перечислимо, если оно есть область определения вычислимой функции. 2) Множество перечислимо, если оно есть область значений вычислимой функции. 3) Множество Х перечислимо, если его (как иногда говорят) «полухарактеристическая» функция, равная 0 на элементах Х и не определенная вне Х, вычислима. 4) Множество натуральных чисел перечислимо, если оно либо пусто, либо есть множество значений всюду определенной вычислимой функции (другими словами, его элементы можно расположить в вычислимую последовательность). Теорема 6.2. Вышеперечисленные определения эквивалентны. Доказательство. Воспользуемся возможностью пошагового исполнения алгоритма. Пусть Х перечисляется некоторым алгоритмом А. Покажем, что полухарактеристическая функция множества Х вычислима. В самом деле, алгоритм ее вычисляющий таков: 42 получив на вход число n, пошагово выполнять алгоритм А, ожидая, пока он не напечатает число n. Как только он это сделает, выдать на выход 0 и закончить работу. Наоборот, пусть Х есть область определения вычислимой функции f, вычисляемой некоторым алгоритмом В. Выполним такой алгоритмом А: Параллельно запускать В на входах 0,1,2, .., делая все больше шагов работы алгоритма В (сначала один шаг работы на входах 0 и 1, потом по два шага работы на входах 0,1,2, потом по три на входах 0,1,2,3 и так далее). Все аргументы, на которых алгоритм В заканчивает работу, печатать по мере обнаружения. Таким образом, перечисляется все множество Х. Итак, мы установили эквивалентность исходного определения определениям 1 и 3. Если в только что приведенном описании алгоритма А печатать не аргументы, на которых В заканчивает работу, а результаты этой работы, то получается алгоритм, перечисляющий область значений функции f. Осталось еще убедиться, что всякое перечислимое множество есть область значений вычислимой функции. Это можно сделать, например, так: пусть Х есть область определения вычислимой функции, вычисляемой некоторым алгоритмом А. Тогда Х есть область значений функции x, если _ А _ заканчивает _ работу _ на _ х, b( x ) не _ определено. Вычисляющий эту функцию алгоритм действует так же, как и А, но только вместо результата работы алгоритма А выдает копию входа. И, наконец, четвертое определение. Пусть перечислимое множество Х, перечисляемое некоторым алгоритмом А, непусто. Возьмем в нем какой-то элемент х 0 . Теперь рассмотрим такую всюду определенную функцию а: если на i-м шаге работы алгоритма А появляется число t, то положим a(i)=t; если же ничего не появляется, то положим a(i)= х 0 . (Мы предполагаем, что на данном шаге работы алгоритма может появиться только одно число – в противном случае работу надо разбить на более мелкие шаги.) Таким образом, мы элементы множества расположим в вычислимую послдедовательность. Теорема доказана. Теорема 6.3. Пересечение и объединение перечислимых множеств перечислимы. Доказательство. Если Х и У перечисляются алгоритмами А и В, то их объединение перечисляется алгоритмом, который параллельно выполняет по шагам А и В и печатает все, что печатают А и В. С пересечением немного сложнее – результаты работы А и В надо накапливать и сверять друг с другом, что появится общего – печатать. Теорема доказана. Упражнение 14. Проведите это рассуждение, используя какое-либо другое эквивалентное определение перечислимости. Упражнение 15. Докажите, что если множества А N и B N перечислимы, то их декартово произведение А B N N также перечислимо. 43 Теорема 6.4. Всякое разрешимое множество натуральных чисел перечислимо. Если множество А и его дополнение (до множества всех натуральных чисел) перечислимы, то А разрешимо. Доказательство. Если принадлежность числа к множеству А можно проверить некоторым алгоритмом, то А и его дополнение перечислимы: надо по очереди проверять принадлежность чисел 0, 1, 2, .. и печатать те из них, которые принадлежат А (или те, которые не принадлежат А). В другую сторону: если у нас есть алгоритм, перечисляющий А, а также другой алгоритм, перечисляющий дополнение к А, то для выяснения принадлежности заданного числа n к А надо запустить оба эти алгоритма и ждать, пока один из них напечатает n. Посмотрев, какой алгоритм это сделал, мы узнаем, лежит ли n в А. Теорема доказана. Этот факт называют теоремой Поста. Она говорит, что разрешимые множества – это перечислимые множества с перечислимыми дополнениями. Напротив, перечислимые множества можно определить через разрешимые: Теорема 6.5. Множество Р натуральных чисел перечислимо тогда и только тогда, когда оно является проекцией некоторого разрешимого множества Q пар натуральных чисел. (проекция получается, если от пар оставить их первые компоненты: x P y( x, y Q). ) Доказательство. Проекция любого перечислимого множества перечислима (перечисляющий алгоритм должен лишь удалять вторые члены пар), так что проекция разрешимого множества тем более перечислима. Напротив, если Р – перечислимое множество, перечисляемое алгоритмом А, то оно есть проекция разрешимого множества Q, состоящего из всех таких пар x, n , что х появляется в течении первых n шагов работы алгоритма А. Теорема доказана. Мы видели, что перечислимое множество можно определить в терминах вычислимых функций (например, как область определения вычислимой функции). Можно сделать и наоборот: Теорема 6.6. Функция f с натуральными аргументами и значениями вычислима тогда и только тогда, когда ее график F={<x,y> f(x) определено и равно y} является перечислимым множеством пар натуральных чисел. Доказательство. Пусть f вычислима. Тогда существует алгоритм, перечисляющий ее область определения, т.е. печатающий все х, на которых f определена. Если теперь для каждого из таких х вычислять еще и значение f(x), получим алгоритм, перечисляющий множество F. Напротив, если имеется алгоритм, перечисляющий F, то функция f вычисляется таким алгоритмом: имея на входе n, ждем появления в F пары, первый член которой равен n; как только такая пара появилась, печатаем ее второй член и заканчиваем работу. Теорема доказана. 44 Определение 6.4. Пусть f-функция с натуральными аргументами и значениями. Образ множества А при f определяется как множество всех чисел f(n), для которых nА и f(n) определено. Прообраз множества А при f определяется как множество всех тех n, при которых f(n) определено и принадлежит А. Теорема 6.7. Прообраз и образ перечислимого множества при перечислимой функции перечислимы. Доказательство. В самом деле, прообраз перечислимого множества А при вычислимой функции можно получить так: взять график f, пересечь его с перечислимым множеством NxA и спроектировать его на первую координату. Рассуждение для образов аналогично, только координаты меняются местами. Теорема доказана. Упражнение 16. (Теорема об униформизации.) Пусть F – перечислимое множество пар натуральных чисел. Докажите, что существует вычислимая функция f, определенная на тех и только тех x, для которых найдется у, при котором <x,y>F, причем f(x)=y. * Упражнение 17. Диофантовым называется уравнение, имеющее вид P( x1 , x2 , x3 ,.., xn ) 0 , где Р – многочлен с целыми коэффициентами. Докажите, что множество диофантовых уравнений, имеющих целые решения, перечислимо. (Оно не разрешимо: в этом состоит 10-я проблема Гильберта.) 7. Программы с конечным числом переменных. Мы хотим показать, что график всякой вычислимой функции является арифметическим множеством, т.е. выразим формулой арифметики. Для этого удобно перейти от машин Тьюринга к другой модели, которую условно можно назвать машинами с конечным числом регистров. Программа для такой машины использует конечное число переменных, значениями которых являются натуральные числа. Числа эти могут быть произвольного размера, так что машина реально имеет память неограниченного объема. Программа состоит из нумерованных по порядку команд. Каждая команда имеет один из следующих видов: а:=0 а:=b a:=b+1 a:=b-1 goto номер if a=0 then goto номер 1 else goto номер 2 stop Номер- конкретное натуральное число, не превосходящее числа команд в программе. Поскольку мы считаем, что значения переменных натуральные (целые неотрицательные) числа, условимся считать разность 0-1=0. Дойдя до команды stop, программа заканчивает работу. 45 Пример 7.1. Для тренировки напишем программу сложения двух чисел. Она помещает в с сумму чисел, которые были в двух переменных a и b. Такая программа на Паскале имела бы вид: c:=a; {ответ=сумма текущих значений c и b} while b 0 do begin c:=c+1; b:=b-1; end; Имитируя цикл с помощью операторов перехода, получаем программу для нашей машины. 1 c:=a; 2 if b=0 then goto 6 else goto 3 3 c:=c+1; 4 b:=b-1; 5 goto 2 6 stop Теперь легко понять, как написать программы для вычитания, умножения (которое реализуется как цикл с повторным сложением), деление с остатком, возведения в степень и т.п. Упражнение 18. Напишите перечисленные выше программы на машине с конечным числом регистров. По сравнению с машинами Тьюринга этот язык более привычен и потому легче поверить, что на нем можно запрограммировать все алгоритмы. Единственное, чего в нем не хватает – это массивов. Но это легко обойти, поскольку есть числа произвольного размера и нас не интересует число операций. Вместо массива битов мы можем хранить число, двоичной записью которого он является, а для массивов чисел воспользоваться, скажем, основной теоремой арифметики и хранить последовательность а,b,с, d,e как число 2 a 3b 5 c 7 d 11e . При этом операции a[i]:=b и b:=a[i] заменяются на небольшие программы, которые содержат переменные a, b,i и еще несколько переменных. (частью этих программ является нахождение простого числа с заданным порядковым номером.) Упражнение 19 *. Напишите программу на машине с конечным числом регистров, вычисляющую максимальный элемент одномерного массива чисел 2, 4, -3, 0, 5. Легко определить понятие вычислимой в этой модели функции. Пусть есть программа с двумя переменными х и у. Поместим в переменную х некоторое число n, а в остальные поместим нули. Запустим программу. Если она не остановится, то вычисляемая в точке n функция не определена. Если остановится, то содержимое переменной у после остановки и будет значением функции, вычисляемой нашей программой в точке n. Определение 7.1. Функция называется вычислимой (в этой модели), если существует вычисляющая ее программа. 46 Упражнение 20. Докажите, что следующая функция вычислима в рассмотренной модели , x с, если _ x четно, где f ( x) , с задано пользователем. не _ определена, если _ x нечетно. Теорема 7.1. Всякая функция, вычислимая на машине с конечным числом переменных может быть вычислена и на МНР. Верно и обратное. Теорема 7.2. Всякая функция, вычислимая на МНР может быть вычислена и на машине с конечным числом переменных. Упражнение 21. Докажите теоремы 7.1 и 7.2. 8. Машины Тьюринга и программы. Построенная вычислительная модель не слабее машин Тьюринга в том смысле, что любую вычислимую на машинах Тьюринга функцию можно вычислить и программой с конечным числом переменных . Теорема 8.1. Всякая функция, вычислимая на машинах Тьюринга может быть вычислена с помощью программы описанного вида с конечным числом переменных. Следует уточнить, однако, что мы имеем в виду, так как машин Тьюринга исходное данное и результат были двоичными словами, а для программ натуральными числами. Мы отождествляем те и другие по следующему правилу, при котором двоичные слова соответствуют числам 0,1,2,..: чтобы получить из числа слово, прибавим к нему единицу, переведем в двоичную систему и отбросим единицу в старшем разряде. Доказательство. Приведем приблизительное описание того, как по машине Тьюринга строится программа с конечным числом переменных, вычисляющая эту же функцию. Прежде всего конфигурации МТ надо закодировать числами. Это можно сделать, например так: поставив в соответствие каждой конфигурации четыре числа: номер текущего состояния, номер текущего символа в ячейке, где стоит головка машины, код содержимого ленты слева от головки и код содержимого ленты справа от головки. Заметим, что МТ обращается с двумя половинами ленты слева и справа как со стеками. (Стек – структура данных, напоминающая стопку листов. В нее можно положить лист наверх, взять верхний лист, а также проверить, есть ли еще листы). В самом деле, мы воспринимаем двоичную запись числа как стек, вершина которого находится справа, у младшего разряда. Теперь основной цикл машины Тьюринга можно записать как программу, оперирующую с указанными четырьмя числами (символ, состояние, левый и правый стек) - без особых хитростей. Но есть несколько вещей, которые нужно иметь в виду. Во-первых, стеки конечны, а лента бесконечна – мы должны договориться, что если стек опустошается, то в него автоматически добавляется символ пробела. Тем самым бесконечный хвост ленты может присутствовать в стеке, как теперь говорят, виртуально. 47 Во-вторых, мы договорились отождествлять двоичные слова, которые подаются на вход МТ, и их коды, хранящиеся в переменных нашей программы. Поэтому, получив код входного слова, его надо разобрать по символам и положить эти символы один за другим в стек, т.к. системы счисления слов разные и просто так переписать слово нельзя. Аналогично преодолеваются проблемы и при выходе. Теорема доказана. Верно и обратное утверждение. Теорема 8.2. Всякая функция, вычислимая программой с конечным числом переменных, вычислима на машине Тьюринга. Доказательство. Нам надо моделировать поведение программы с помощью МТ. Будем считать, что значения переменных записаны на ленте в двоичной системе и разделены специальным разделительным символом. Тогда машина может найти любую переменную, идя от начала ленты и считая разделительные символы, сделать что-то с этой переменной и затем вернуться обратно в начало. Нет необходимости записывать на ленте номер исполняемой команды, поскольку команд конечное число и машина может помнить номер текущей команды как часть своего состояния. Операции сложения и вычитания единицы также легко выполнимы в двоичной записи, если идти справа налево. Надо только иметь в виду, что размер числа может увеличиться, и тогда нужно для него освободить место, сдвинув все символы справа от головки на одну позицию. При уменьшении нужно сдвинуть влево. Ясно, что все команды машины с конечным числом переменных можно также выполнить и с помощью машины Тьюринга. Если мы записываем числа в двоичной системе, то проблемы с перекодированием при вводе выводе минимальны. Надо лишь дописать нули для значений остальных переменных в начале работы и встать в нужное место ленты в конце. Теорема доказана. 9. Арифметичность вычислимых функций. Сейчас мы докажем, что функции, вычислимые программами с конечным числом х1 , х2 ,.., хк переменных, арифметичны, т.е. их графики являются арифметическими множествами. Определение 9.1. Множество А N k называется арифметическим, если существует арифметическая формула с параметрами х1 , х2 ,.., хк , которая представляет его в следующем смысле: последовательность n1 , n2 ,.., nк A тогда и только тогда, когда формула истина при значениях параметров х1 n1 , х2 n2 ,.., хк nк . Лемма 9.1. Для любого k можно найти сколь угодно большое целое положительное число b, при котором первые k членов последовательности b+1, 2b+1, 3b+1, .. попарно взаимно просты. Доказательство. 48 Методом от противного. Пусть члены рассматриваемой последовательности не попарно взаимно просты. Тогда любой общий простой делитель d двух этих чисел будет делителем числа lb при 0<l<k; взяв b, кратным k!, b=l*1*2*..*k, мы гарантируем, что d будет делителем числа b, но все члены нашей последовательности взаимно просты с b, получили противоречие. Лемма доказана. Теорема 9.1. (китайская теорема об остатках) Если целые положительные числа d1 , d 2 ,.., d к взаимно просты, то при делении целого числа u на них может получиться любой заданный набор остатков. Лемма 9.2. Для любой последовательности х0 , х1 , х2 ,.., хn натуральных чисел можно найти такие числа a и b, что хi есть остаток от деления a на b(i+1)+1. Доказательство. Согласно лемме 9.1. делители b(i+1)+1 можно взять взаимно простыми и сколь угодно большими. По теореме 9.1., таких наборов будет d1 * d 2 * .. * d к , поскольку при делении на d i возможны остатки от 0 до d i -1. При делении чисел u=0,1, …, d1 * d 2 * .. * d к -1 получаются разные наборы остатков, так как если два числа u и u дают одинаковые остатки, то их разность делится на все d i , что невозможно в силу их взаимной простоты. Поэтому чисел столько же, сколько наборов остатков, и должны появиться все наборы. Лемма доказана. Теорема 9.2. График любой функции, вычисляемой программой с конечным числом переменных, является арифметическим множеством. Доказательство. Пусть f : N N - функция, вычислимая некоторой программой Р с конечным числом переменных k1 , k 2 ,.., k N . Будем считать, что входной переменной является k1 , а выходной - k 2 . Нам нужно написать формулу с двумя переменными х, у, которая была бы истина тогда и только тогда, когда y f (x) . Состояние программы с полным числом переменных полностью описывается значениями переменных и номером текущей команды. Легко видно, что соответствие между двумя состояниями программы с конечным числом переменных арифметично, т.е. можно написать арифметическую формулу Step(s1 , s2 ,.., s N , p, s1 , s2 ,.., s N , p) , с 2N+2 переменными, которая утверждает, что данная программа Р из состояния, где переменные равны s1 , s 2 ,.., s N , а счетчик команд равен р, за один шаг переходит в состояние, где переменные равны s1 , s 2 ,.., s N , а счетчик команд равен p . Договоримся, что значение p =0 соответствует остановке программы. Такая формула является конъюнкцией отдельных утверждений, соответствующих каждой строке программы. Пусть, например, строка 7 программы имеет вид k 2 : k 3 . Тогда в конъюнкции будет член вида 49 ( p 7) (( s1 s1 ) (s2 s2 ) (s3 s3 ) ... (s N s N ) ( p 8)) . Для строки с условными переходами типа 3 if k 5 =0 then goto 17 else goto 33 в формуле будет два конъюнктивных члена (на два случая перехода) ( p 3) (s5 0) (( s1 s1 ) (s2 s2 ) (s3 s3 ) ... (s N s N ) ( p 17)) и ( p 3) (s5 0) (( s1 s1 ) (s2 s2 ) (s3 s3 ) ... (s N s N ) ( p 33)) . Надо еще добавить еще утверждение о том, что при р=0 работа прекращается, т.е. что переменные на следующем шаге сохраняют свои значения, и p остается равным нулю. Таким образом, арифметичность одного шага работы доказать не сложно. Остается главный вопрос: как записать в виде формулы тот факт, что существует последовательность шагов, которая начинается с исходного состояния, заканчивается в данном и в которой каждый шаг правилен. Трудность в том, что здесь нужно как бы написать переменное число кванторов существования – или квантор «существует конечная последовательность натуральных чисел». Это делается с помощью приема, традиционно называемого -функцией Геделя. По лемме 9.2 последовательность произвольной длины можно закодировать тремя числами a, b и n (длина последовательности). Таким образом, условно говоря, можно заменить «формулу» x0 , x1 ,.., xn (i n)...xi .... , которая на самом деле не является арифметической формулой, так как содержит квантор по конечным последовательностям, на формулу abn(i n) […остаток от деления a на b(i+1)+1…]. Мы будем записывать остаток от деления a на b(i+1)+1 как (a,b,i) (отсюда и название «-функция»). Возвращаясь к нашей программе Р с конечным числом переменных k1 , k 2 ,.., k N и вычисляемой ей функции f, можно записать утверждение вида y f (x) так: существуют такое число шагов n и такие числа a1 , b1 , a 2 , b2 ,..., a N , bN , a, b , что ( a1 , b1 ,0), (a2 , b2 ,0),..., (a N , bN ,0) есть правильные начальные значения переменных; (a,b,0) – есть правильное значение счетчика команд, т.е. 1.; для каждого i от 0 до n-1 имеет место Step( (a1 , b1 , i),.., (a N , bN , i), (a, b, i), (a1 , b1 , i 1),.., (a N , bN , i 1), (a, b, i 1)), т.е. каждый переход соответствует программе; (a2 , b2 , n) y (значение выходной переменной k 2 в конце вычисления равно у) и (a, b, n) 0 (значение счетчика команд в конце вычисления равно 0, что по нашей договоренности соответствует остановке машины). Итак, арифметичность вычислимых на машинах с конечным числом переменных функций доказана. Замечание. Вспоминая теорему 8.1., мы заключаем, что всякая вычислимая на машине Тьюринга функция арифметична. Принимая тезис Тьюринга, можно сказать, что график любой вычислимой функции является арифметическим множеством. 50 Упражнение 22. Докажите утверждения, сформулированные в замечании. 10. Частично рекурсивные функции и их вычислимость. Приведем еще один класс вычислимых функций, предложенный в 30-х годах 20- го века Геделем, Клини, Черчем, в качестве уточнения понятия алгоритма – класс частично рекурсивных функций. Данный класс определяется путем указания конкретных исходных функций и фиксированного множества операций получения новых функций из заданных. Ниже рассматриваются функции типа. Определение 10.1. n-местная функция f( x1 , x 2 ,.., x n ), определенная на некотором подмножестве М N n с натуральными значениями, называется частичной числовой функцией. Определение 10.2. к-местная частичная функция f равна s-местной частичной функции g, т.е. f (ai1 , ai2 ,.., aik ) g (a j1 , a j2 ,.., a js ) f (ai1 , ai2 ,.., aik ) и g (a j1 , a j2 ,.., a js ) для любых a1 , a2 ,.., an N , если значения не определены или эти значения определены и совпадают. Определение 10.3. Частичная функция называется всюду определенной, если f N n , т.е. значения функции пробегают все множество N n . Ниже будем рассматривать частичные числовые функции. В качестве базисных функций берутся следующие: 1. 2. 3. нуль-функция: 0(х)=0 х N 0 . f : N 0n N 0 функция следования: s(x)=x+1 х N 0 . Функция выбора аргументов: I mn ( x1 , x 2 ,.., x n ) x m , nN, 1mn. НУЛЬ-ФУНКЦИЯ - это функция, которая дает значение ноль для любого значения аргумента. Реализовать эту функцию может не только ребенок. Можно посадить попугая и подучить его на любой вопрос о значении функции кричать "Нуль!". ФУНКЦИЯ СЛЕДОВАНИЯ дает следующее, по сравнению с аргументом, значение. Для пяти это шесть, для миллиона - миллион один. Можно бы было сказать, что здесь надо просто прибавлять 1. Но операции сложения у нас пока нет! ФУНКЦИЯ ВЫБОРА АРГУМЕНТА (оператор проекции). Это вообще забавная даже для первоклассника функция, содержащая в своем имени номер аргумента. Если у вас есть несколько аргументов, то эта функция в качестве значения возьмет значение указанного в ней аргумента. Например, функция выбора третьего из Иванова, Петрова и Сидорова, которых мы ранее пронумеровали, например, как 22, 13 и 49, даст значение 49. Эти три базовых функции могут использоваться далее в качестве исходного материала для создания более сложных функций с помощью трех операторов: суперпозиции (подстановки), примитивной рекурсии и минимизации. 51 Известный хорошо еще со школы ОПЕРАТОР СУПЕРПОЗИЦИИ позволяет вместо аргумента подставлять функцию... "Игла в яйце, а яйцо в ларце"... Определение 10.4. Пусть даны n-местная функция g и n функций f1 , f 2 ,.., f n . Считаем, что функции f1 , f 2 ,.., f n зависят от одних и тех же переменных x1 , x2 ,.., xm . Это можно сделать путем введения фиктивных переменных. Суперпозицией (подстановкой) функций g и f1 , f 2 ,.., f n называется функция h( x1 , x2 , xm ) g ( f1 ( x1 , x2 , xm ), f 2 ( x1 , x2 , xm ),.., f n ( x1 , x2 , xm )) . Функция h на наборе переменных x1 , x2 ,.., xm определена тогда и только тогда, когда определены все функции f1 ( x1 , x2 , xm ), f 2 ( x1 , x2 , xm ),.., f n ( x1 , x2 , xm ) и функция h определена на наборе f1 ( x1 , x2 , xm ), f 2 ( x1 , x2 , xm ),.., f n ( x1 , x2 , xm ) . Операцию суперпозиции означают: h S ( g , f1 , f 2 ,.., f n ) . Дольше словами описывать оператор примитивной рекурсии. Этот оператор позволяет построить новую функцию из двух функций, одна из которых имеет на один аргумент меньше, а другая на один аргумент больше. Значение создаваемой функции для нулевого значения выбранного аргумента приравнивается к функции, не имеющей как раз этого аргумента. Значение же создаваемой функции для всех прочих (ненулевых) значений выбранного аргумента приравнивается другой функции, зависящей от тех же аргументов, кроме выбранного; от ПРЕДЫДУЩЕГО значения выбранного аргумента и от создаваемой функции от предыдущего значения выбранного аргумента. Определение 10.5. Пусть заданы n-местная функция g( x1 , x 2 ,.., x n ) и n+2- местная функция h( x1 , x 2 ,.., x n ,y,z). Определим n+1-местную функцию f индуктивным образом с помощью соотношений: f ( x1 , x 2 , x n ,0) g ( x1 , x 2 , xn ) . f ( x1 , x 2 , x n , y 1) h( x1 , x 2 , xn , y, f ( x1 , x2 , xn , y )) Функция f ( x1 , x2 , xn , y 1) считается определена тогда и только тогда, когда определены f ( x1 , x2 , xn , y) и h( x1 , x2 , xn , y, t ) при t= f ( x1 , x2 , xn , y) . Значит, если f ( x1 , x2 , xn , y0 ) неопределено, то и f ( x1 , x2 , xn , y) неопределено при y y0 . Про функцию f говорят, что она получена рекурсией (примитивной рекурсией) из функций g и h и обозначается f=R(g,h). Определение 10.6. Будем говорить, что функция g( x1 , x2 ,.., xn1 , xn ) получается из функции f( x1 , x2 ,.., xn , y ) c помощью оператора минимизации (-оператора) и обозначать g ( x1 , x 2 ,.., x n ) y [ f ( x1 , x 2 , x n , y ) 0] , если выполнено условие : g( x1 , x2 ,.., xn1 , xn ) определено и равно у тогда и только тогда, когда f ( x1 , x2 , xn , z ) определено и не равно нулю при всех z<y, а f( x1 , x2 ,.., xn , y )=0. В противном случае считаем, что у неопределено. Значение у есть функция g от переменных ( x1 , x2 ,.., xn1 , xn ) , про которую говорят, что она получена из функции f оператором минимизации g y f . 52 Определение 10.7. Функция называется примитивно рекурсивной, если она может быть получена из базисных функций 0(x), s(x), I mn ( x1 , x 2 ,.., x n ) применением конечного числа раз операций суперпозиции и рекурсии. Дадим теперь основное определение этого раздела. Определение 10.8. Функция называется частично рекурсивной, если она может быть получена из базисных функций 0(x), s(x), I mn ( x1 , x 2 ,.., x n ) применением конечного числа раз операций суперпозиции, рекурсии и минимизации. Иногда частично рекурсивные функции называют функциями, вычислимыми по Черчу. Определение 10.9. Всюду определенная частично рекурсивная функция называется общерекурсивной. Класс частично рекурсивных функций - одно из главных понятий теории алгоритмов. Это объясняется тем, что какие бы классы точно очерченных «алгоритмов» до сих пор не рассматривались, во всех случаях оказывалось, что соответствующие числовые функции, вычислимые посредством алгоритмов этих классов, были частично рекурсивными. Поэтому общепринятой является гипотеза, формулируемая как тезис Черча. Тезис Черча (для частично рекурсивных функций). Класс алгоритмически вычислимых функций совпадает с классом всех частично рекурсивных функций. Принятие данного тезиса позволяет истолковывать доказательство того, что некоторая функция не является частично рекурсивной, как доказательство отсутствия алгоритма вычисления ее значений. Замечание 10.1. Пусть необходимо доказать, что конкретная функция вычислима. Это можно сделать следующими способами. 1. Написать программу машины Тьюринга или МНР, вычисляющую f, либо показать, что F принадлежит к классу функций, вычислимость которых доказана. 2. Написать рекурсивную схему для f, показывающую, что f – частично рекурсивна. 3. Дать неформальное, но достаточно точное описание алгоритма, вычисляющего f, и затем сослаться на тезис Черча. Приведем примеры частично рекурсивных функций и установим частичную рекурсивность некоторых числовых функций, используемых в арифметике и анализе. Пример 10.1. Функции- константы. F(x)=m=s(s(s…s(0(x))..))-m-раз. Пример 10.2. Функция f(x,y)=x+y Имеем x+0=x= I 12 ( x, у ) , х+(y+1)=(x+y)+1 это есть рекурсия с помощью функций g(x)=x и h(x,y,z)=s(z). 53 Пример 10.3. Функция f(x,y)=xy Имеем x0=0= I 12 ( x, у ) , х(y+1)=xy+х это есть рекурсия с помощью функций g(x)=0(x) и h(x,y,z)=х+z. 0, если _ x 0, 1, если _ x 0, Пример 10.4. Функция f(x,y)= x y , sg ( x) , s g ( x) и др. 1, если _ x 0 0, если _ x 0 Упражнение 23. Докажите, что функции, приведенные в примере 10.4 частично рекурсивны. Упражнение 24*. Докажите частичную рекурсивность функции x y . Определение 10.10. Предикат H ( x1 , x2 , x3 ,...) называется примитивно рекурсивным, если его характеристическая функция 1, если _ H ( x1 , x2 , x3 ,..) истинно, C H ( x1 , x2 , x3 ,..) 0, если _ H ( x1 , x2 , x3 ,..) ложно. примитивно рекурсивна. Пример10 .5. Предикаты x1 x2 , x1 x2 являются примитивно рекурсивными. Упражнение 25. Докажите примитивно рекурсивность предикатов из примера 10.5. Свойства примитивно рекурсивных предикатов: 1. Если Р( x1 , x2 , x3 ,...) и H ( x1 , x2 , x3 ,...) - примитивно рекурсивные предикаты, то Р, HP, HP, HP, HP также являются примитивно рекурсивными предикатами. 2. Пусть Р1 ( x1 , x2 , x3 ,...xn ),..., Pk ( x1 , x2 , x3 ,...xn ) - примитивно рекурсивные предикаты таковы, что Рi Р j =0 при любых ij, Р1 Р2 .. Рk =1, т.е. на любом наборе переменных x1 , x2 , x3 ,...xn равен 1 один и только один из предикатов Р1 , Р2 ,.. Рk . Пусть также g1 ( x1 , x2 , x3 ,...xn ),..., g k ( x1 , x2 , x3 ,...xn ) - примитивно рекурсивные функции, тогда g1 ( x1 , x 2 , x3 ,...x n ), если _ P1 ( x1 , x 2 ,.., x n ) 1 f ( x1 , x 2 , x3 ,...x n ) функция является ... g k ( x1 , x 2 , x3 ,...x n ), если _ Pk ( x1 , x 2 ,.., x n ) 1 примитивно рекурсивной. Функция f совпадает с одной из функций g 1 , g 2 ,.. g k в зависимости от того, какой из предикатов Р1 , Р2 ,.. Рk равен 1. Покажем теперь вычислимость на МНР частично рекурсивных функций. Базисные функции 0(n), s(n), I mn ( x1 , x 2 ,.., x n ) вычислимы на МНР командами Z(n),S(n),T(m,1). 54 Теорема 10.1. (вычислимость суперпозиций). Пусть функции g ( y1 , y 2 , y3 ,... y n ), f1 ( x1 , x2 ,..xm ),..., f n ( x1 , x2 , x3 ,...xm ) вычислимы на МНР. Тогда вычислима и функция h( x1 , x2 ,..xm ) S ( g , f1 , f 2 , f 3 ,... f n ) . Доказательство. Пусть G,F1,F2,..Fn- программа стандартного вида для вычисления функций g , f1 , f 2 , f 3 ,... f n соответственно. Напишем программу Н для вычисления функции h. Положим t=max(n,m,r(G),r(F1),..,r(Fn)). Запомним x1 , x2 , x3 ,...xm в регистрах Rt 1 , Rt 2 , Rt 3 ,...Rt m , в регистрах Rt m1 , Rt m2 , Rt m3 ,...Rt mn запоминаем соответственно значения F1 ( x1 , x2 ,..xm ),..., Fn ( x1 , x2 , x3 ,...xm ) . Указанные регистры не затрагиваются вычислениями по программам G,F1,F2,..Fn. теперь дадим программу Н вычисления h: T(1,t+1) T(2,t+2) … T(m,t+m) F1[t+1,t+2,…,t+mt+m+1] … Fn[t+1,t+2,..,t+mt+m+n] G[t+m+1,t+m+2,…,t+m+n1] Вычисление по программе Н происходит в соответствии с блок-схемой. 55 Ясно, что вычисление Н( x1 , x2 ,..xm ) останавливается тогда и только тогда, когда заканчивается вычисление каждой Fi( x1 , x2 ,..xm ),i=[1,n] и вычисление G( f1 ( x1 , x2 ,..xm ),..., f n ( x1 , x2 , x3 ,...xm )) . Теорема доказана. Следствие 10.1. xi1 , xi2 ,..xiv - Пусть f ( y1 , y2 , y3 ,... ym ) - вычислимая на МНР функция и последовательность m переменных. Тогда функция h( x1 , x2 ,..xm )=f( xi1 , xi2 ,..xiv ) вычислима. Теорема 10.2. (вычислимость рекурсии). Пусть функции g ( x1 , x2 ,..xn ), h( x1 , x2 , x3 ,...xn , y, z ) вычислимы на МНР. Тогда вычислима и функция f R ( g , h) . Доказательство. Пусть G и Н- программы стандартного вида для вычисления функций g и h соответственно. Построим программу F, вычисляющую функцию f R( g , h) . По начальной конфигурации ( x1 , x2 ,..xn , y,0,..) по программе G вычисляется f ( x1 , x2 ,..xn ,0) g ( x1 , x2 ,..xn ) . Теперь, если у0, то многократно применяем программу Y для нахождения f ( x1 , x2 ,..xn ,1), f ( x1 , x2 ,..xn ,2),.., f ( x1 , x2 ,..xn , y) . Положим m=max(n+2,r(G),r(H)). Запоминаем x1 , x2 ,..xn , y в регистрах где к=0,1,..,у помещаем в Rm1 , Rm2 , Rm3 ,...Rmn1 . Номер цикла к, Rmn2 . Промежуточное значение f ( x1 , x2 ,..xn , k ) помещаем в Rmn3 . Вычисление по программе Н происходит в соответствии с блок-схемой на рис.1. Помещаем x1 , x2 ,..xn , k в регистры Rm1 , Rm2 , Rm3 ,...Rmn1 . Полагаем вначале к=0. Промежуточное значение f ( x1 , x2 ,..xn , k ) помещаем в Rmn3 . Вычисление функции g происходит в соответствии с блок-схемой на рис.2. 56 рис.1. Вычисление функции f. Программа F для вычисления f: (здесь t=m+n): T(1,m+1) T(2,m+2) … T(n+1,m+n+1) Iq : J(t+2,t+1,p) Ip : H[m+1,…,m+n,t+2,t+3t+3] S(t+2) J(1,1,q) T(t+3,1) Следовательно, функция f вычислима. Теорема доказана. 57 рис.2. Вычисление функции g. Теорема 10.3. (вычислимость минимизации). Пусть функция вычислима на МНР. Тогда вычислима g ( x1 , x2 ,..xn ) y ( f ( x1 , x2 , x3 ,...xn , y ) 0) f ( x1 , x2 , x3 ,...xn , y) и функция Доказательство. Пусть F - программа стандартного вида, вычисляющая функцию f. Пусть m=max(n+1,r(F)). Построим программу G для вычисления функции g по следующему алгоритму: вычислять f ( x1 , x2 ,..xn , k ) при к=0,1, … до тех пор, пока не найдется такое к, что f ( x1 , x2 ,..xn , k ) =0. Тогда к будет требуемым выходом. Программа G для вычисления функции g: T(1,m+1) T(2,m+2) … T(n,m+n) Iq : F(m+1,..,m+nm+n+2) S(m+n+1) J(m+n+2,m+n+3,q) 58 J(1,1,p) Ip : T(m+n+1,1). Следовательно, функция f вычислима. Теорема доказана. Следствие 10.2. Частично рекурсивные функции вычислимы на МНР. Теорема 10.4. Всякая вычислимая на МНР функция является частично рекурсивной. Доказательство. Пусть f ( x1 , x2 , x3 ,...xn ) вычислимая на МНР функция и пусть P=I1 I2 .. Isсоответствующая программа. Будем называть шагом вычисления выполнение одной команды программы. Для произвольных х ( x1 , x2 ,..xn ) и t N 0 определим следующие функции, связанные с вычислением P (х ) : r (содержимое _ R1 ) _ после _ t _ шагов _ в _ Px , если _ Px _ не _ остановилось _ раньше, с( x , t ) 1 r1 (содержимое _ R1 ), если _ Px _ остановилось _ раньше. номер _ следующей _ команды _ после _ t _ шагов _ в _ Px , если _ Px _ не _ остановилось j ( x , t ) после _ t _ шагов _ или _ раньше, 0, если _ Px _ остановилось _ после _ t _ шагов _ или _ раньше. Таким образом, с( х ,0) х1 , j ( х ,0) 1 . Очевидно, что функции с (х ,0) и j (х ,0) всюду определены. Найдем теперь выражение для f (х ) через введенные функции. f (х ) определено, то P (х ) останавливается после t 0 Если значение шагов, где t 0 t ( j ( х , t ) 0) поэтому f (х ) = с( х , t 0 ) . f (х ) не определено, то P (х ) не останавливается, и тогда Если же значение j ( х , t ) 0, t N 0 , поэтому t ( j ( х , t ) 0) не определено. Следовательно, во всех случаях f (х ) = с( х , t ( j ( х , t ) 0)) . Теперь, если убедиться, что функции с ( х , t ) и j ( х , t ) частично рекурсивны, то таковой будет и функция f (х ) . Ясно, что существует неформальный алгоритм вычисления значений функций с ( х , t ) и j ( х , t ) . Для этого нужно по заданным (х ) , t написать последовательность конфигураций К 0 К1 .. К t , затем выписать содержимое регистра R1 и номер выполняемой на шаге t+1 команды. По тезису Черча функции с ( х , t ) и j ( х , t ) частично рекурсивны и, значит, функция f (х ) является частично рекурсивной. Теорема доказана. 59 Теорема 10.5. Всякая функция, вычислимая с помощью машины Тьюринга, является частично рекурсивной. Доказательство. Функция вычислима на МТ, т.е. существует программа ее вычисляющая. По т.8.1. эта функция вычислима и на машине с ограниченным числом регистров. Тогда по теореме 7.1. она вычислима и на МНР. Значит по т.10.4 она является частично рекурсивной. Теорема доказана. Верно и обратное. Теорема 10.6. Всякая частично рекурсивная функция вычислима на машине Тьюринга. Упражнение 26. Докажите теорему 10.6. 11. Системы счисления. Существует несколько видов записи натуральных чисел. Различают позиционные и непозиционные системы счисления. Примером непозиционной системой счисления является римская запись числа: I1,V-5, X-10, L-50,C-100,D-500,M-1000. Правила римской записи. 1. Если знак, изображающий меньшее число стоит после знака, изображающего большее число, то производится сложение. Например, VI=5+1=6, XV=10+5=15, CLV=100+50+5=155. 2. Если знак, изображающий меньшее число стоит перед знаком, изображающим большее число, то производится вычитание. Например, IV=5-1=4, IX=10-1=9. MCDXXIX=1000+500-100+10+10-1=1429. Определение 11.1. Позиционной системой счисления называется такая система, в которой значение символа зависит от места, которое он занимает в записи числа. Обычно используются системы с фиксированным основанием, в которых для записи натуральных чисел достаточно конечного числа значков или цифр. При этом сдвиг цифры на одно место влево влечет за собой увеличение ее значения в q раз, где q – некоторое натуральное число, q>1, называемое основанием системы счисления. Определение 11.2. Систематической записью натурального числа N по основанию q называют представление этого числа в виде суммы N a n q n a n 1 q n 1 ... a1 q a 0 (1), где a n , a n1 ,..., a1 , a0 - это числа, принимающие значение 0,1, .., q-1, причем an 0 . Иногда для записи числа N, имеющего представление (1) используют следующую запись: _________________ N an , an1 ,..., a1 , a0q . 60 Позиционная система счисления с основанием q называется q-ичной. Для обозначения чисел 0,1,2,…, q-1 в q-ичной системе счисления используют особые знаки, называемые цифрами. Цифра 0 показывает, что отсутствуют единицы данного разряда. Для q-ичной системы счисления необходимо q различных цифр, которые берут из 10-тичной системы счисления. Если их меньше 10, то берут соответствующее количество цифр до 10, а если их больше 10, то вводят дополнительное обозначение. Например, для 16- ричной системы цифры будут 0, 1, 2, .., 9, (10), (11), (12), (13), (14), (15), (16). Теорема 11.1. Всякое натуральное N может быть представлено единственным образом в виде (1) систематической записи по любому основанию q>1. Доказательство существования. Рассмотрим натуральное N, где 0 N q n . Докажем методом математической индукции. Рассмотрим данное утверждение для n=1, 0 N q1 , в этом случае q-ичная запись числа N состоит из одного слагаемого a 0 , которое совпадает с числом N. Предположим, что для всех чисел 0 N q n существует q-ичная запись. Докажем существование q-ичной записи для натурального числа N q n N q n1 . Разделим с остатком N на q n : N q n a n N 1 , (2) т.к. N1 q n , то по предположению все числа меньшие q n имеют q-ичную запись, значит N1 a n 1 q n 1 ... a1 q a0 , (3) где a n 1 может быть равно нулю. Из (2) и (3) следует, что N может быть представлено в виде n n 1 N a n q a n 1 q ... a1 q a 0 , an 0 . Доказательство единственности. Рассмотрим такое число N, которое 0N<q. Если N a0 , то данное число представляет собой q-ичную запись из одного значка, которое будет совпадать с числом N, т.е. число N является цифрой q-ичной системы счисления. Т.к. каждая цифра q-ичной системы определяется однозначно, то и запись данного числа определяется однозначно. Покажем однозначность для числа q n N q n1 . Если N разделить на q n , то получим неполное частное a n , а N1 -остаток, т.е. N a n q n N 1 , а так как деление с остатком выполняется единственным образом, то и числа a n и N1 определяются однозначно. В силу предположения о том, что число N1 имеет однозначную q-ичную запись, то запись числа N в q-ичной системе единственна. Теорема доказана. Используя теорему 11.1 всякое число, записанное в q-ичной системе счисления легко перевести в десятичную систему счисления. Пример 11.1. 61 4602 7 2 0 * 7 6 * 7 2 4 * 7 3 1668 (10)6(11)12 (11) 6 *12 10 *12 2 1523 Пусть q-ичная запись числа имеет вид N a n q n a n 1 q n 1 ... a1 q a 0 , тогда N в q-ичной системе счисления будет иметь вид: N an an1 ...a1a0q . Пример 11.2. 46 101110 2 691 12638 12. Нумерация программ для МНР Определение 12.1. Множество X называют счетным, если можно установить взаимно однозначное отображение f : Z 0 X между множеством неотрицательных целых чисел Z0 и множеством X. Определение 12.2. Множество называют не более чем счетным, если оно счетно или конечно. Определение 12.3. Перечислением или нумерацией множества X называется отображение f : Z 0 X множества Z0 на множество X. Перечисление f определяет на множестве X некоторую бесконечную последовательность х0 , х1 , х2 ,..( хi f (i)) элементов из X такую, что каждый из элементов множества X встречается в этой последовательности, по крайней мере, один раз. Если отображение f - взаимно однозначно, то f называют перечислением или нумерацией без повторений. 62 Определение 12.4. Множество X называется эффективно счетным, если существует функция f : Z 0 X , устанавливающая взаимно однозначное соответствие между множествами Z0 и X такая, что f и f--1 - вычислимые функции. Теорема 12.1. Следующие множества являются эффективно счетными: а) Z 0 Z 0 ; б) Z 0 Z 0 Z 0 ; k в) Z 0 - множество всех конечных последовательностей целых неотрицательных чисел. k 0 Доказательство. а) Докажем сначала эффективную счетность множества Z 0 Z 0 , состоящего из упорядоченных пар (x, y) с целочисленными неотрицательными компонентами x и y. Геометрически это множество представляет целочисленную решетку (рис. 11.1). Перенумеровать точки этой решетки можно различными способами, например, так, как показано на рисунке 12.2. Предложенная нумерация устанавливает взаимно однозначное отображение 2 : Z 0 Z 0 Z 0 между множествами Z 0 Z 0 и Z 0 . Алгоритмический характер процесса вычисления значений функции 2 ( x, y) очевиден. Следовательно, по тезису Черча 2 вычислимая функция. 1 Для вычисления значений обратной функции 2 ( z ) можно, например, в соответствии с предложенным алгоритмом последовательно нумеровать точки целочисленной решетки до номера z. Пара (x, y) координат точки с номером z является 1 значением обратной функции . По тезису Черча 2 - вычислимая функция. Таким образом, множество Z 0 Z 0 эффективно счетно. Рис. 12.1. Целочисленная решетка 63 Рис. 12.2. Нумерация точек целочисленной решетки б) Теперь несложно доказать эффективную счетность множества Z 0 Z 0 Z 0 . Для этого определим взаимно однозначное отображение 3 множества Z 0 Z 0 Z 0 упорядоченных троек неотрицательных целых чисел на множество Z 0 следующим образом 3 ( x, y, z ) 2 ( x, 2 ( y, z )) . Из вычислимости функций 2 и 2 1 вытекает вычислимость 1 функций 3 и 3 . Поэтому множество Z 0 Z 0 Z 0 эффективно счетно. в) Для доказательства эффективной счетности последовательностей целых неотрицательных чисел 1 ( 1 , 2 , 3 ,.... k ) 2 2 1 2 1 2 множества всех конечных k Z0 рассмотрим функцию k 0 2 2 3 2 ... 2 2 2 3 .. k ( k 1) , сопоставляющую каждому упорядоченному набору (a1, a2, ..., ak) из k неотрицательных целых чисел некоторое неотрицательное целое число. Для доказательства взаимной однозначности функции используем тот факт, что у каждого целого числа имеется ровно одно представление в двоичной системе счисления. Запишем значение функции (1 , 2 , 3 ,.... k ) в двоичной системе счисления: (*) Например, (3,1,0,2)= 2 3 2 311 2 310 2 2 310 23 1001101000 2 -1= 616 - 1 = 615; (4,3,2)= 2 4 2 431 2 43 2 2 100100010000 2 -1= 2320 -1 = 2319; (5,3)= 2 5 2 531 1000100000 2 -1= 544 -1 = 543; (3,5)= 2 3 2 351 1000001000 2 -1= 520 - 1 = 519; (0,0)= 2 0 2 001 112 -1= 3 - 1 = 2; (5)= 2 5 1 100000 2 -1 = 32 - 1 = 31; 64 (0)= 2 0 1 12 1 = 1 - 1 = 0. Однозначность отображения следует из того, что (1 , 2 ,.., k ) 1 , 2 ,.., m (1 , 2 ,.., k ) 1 , 2 ,.., m . Так как, кроме того, для любого неотрицательного числа x существует, очевидно, кортеж (c1 , c2 ,.., cn ) такой, что (c1 , c2 ,.., cn ) x , то функция устанавливает взаимно k однозначное соответствие между множеством Z 0 и множеством Z 0 . k 0 Покажем, как вычисляются значения обратной функции 1 ( х) для произвольного неотрицательного числа x. В соответствии с формулой (*) где ( х 1) 2 - запись числа x + 1 в двоичной системе счисления. Например, 1 (615) 1 (616 1) 1 (1001101000 2 1) (3,1,0,2) ; 1 (2319) 1 (2320 1) 1 (100100010000 2 1) (4,3,2) ; 1 (543) 1 (544 1) 1 (1000100000 2 1) (5,3) ; 1 (0) 1 (1 1) 1 (12 1) (0) 0 ; 1 (1) 1 (2 1) 1 (10 2 1) (1) 1; 1 (2) 1 (3 1) 1 (112 1) (0,0) ; 1 (3) 1 (4 1) 1 (100 2 1) (2) 2 ; 1 (4) 1 (5 1) 1 (1012 1) (0,1) . k В силу тезиса Черча функции и 1 вычислимы. Следовательно, Z 0 - эффективно k 0 вычислимое множество. Теорема 12.2. Множество K команд МНР эффективно счетно. Доказательство. Множество K команд МНР включает четыре типа команд Z(n), S(n), T(m, n), J(m, n, q), где m,n,qN . Определим взаимно однозначное отображение : К Z 0 следующим образом: ( Z (n)) = 4 (n - 1); ( S (n)) = 4 (n - 1) + 1; (T (m, n)) 4 2 (m 1, n 1) 2 ; ( J (m, n, q)) 4 3 (m 1, n 1, q 1) 3 , где - 2 и 3 -отображения, определенные в теореме 12.1. Так как функции и 1 , очевидно, вычислимы, то отсюда вытекает эффективная счетность множества K команд МНР. 65 Теорема доказана. Теорема 12.3. Множество P всех программ для МНР эффективно счетно. Доказательство. Пусть P ( I1 , I 2 , I 3 , I 4 , I 5 ) - произвольная программа для МНР. Определим взаимно однозначное отображение образом: : P Z 0 следующим ( P) ( I1 , I 2 , I 3 , I 4 , I 5 ) ( ( I1 ), ( I 2 ), ( I 3 ), ( I 4 ), ( I 5 )) , где и - отображения, определенные в теоремах 12.1 и 12.2. Так как функции и 1 , очевидно, вычислимы, то отсюда вытекает эффективная счетность множества P всех программ для МНР. Теорема доказана. Разумеется, существует много других отображений из P в Z 0 , устанавливающих эффективную счетность множества P. Для нашего изложения подходит любое из таких отображений. Зафиксируем одно из них, например, то которое описано в теореме 12.3. Определение 12.5. Число (P) называется геделевым номером программы P или просто номером программы P. Отображение играет важную роль в теории алгоритмов. Название числа (P) связано с именем К. Геделя, впервые в 1931 году предложившего идею кодирования нечисловых объектов натуральными числами. Ниже программу P с геделевым номером n будем обозначать Pn . Из взаимной однозначности отображения следует Pn Pm при nm, хотя обе эти программы Pn и Pm могут вычислять одну и ту же функцию. Пример 12.1. Найдем геделев номер программы P: I1 : S (1) , I 2 : S (1) , вычисляющей функцию f(x) = x + 2. ( P) ( I1 , I 2 ) ( ( I1 ), ( I 2 )) ( (S (1)), (S (1))) , (S(1)) = 4 (1 - 1) + 1 = 1; ( P) (1,1) 1010 2 1 10 1 9 . Пример 12.2. Вычислим программу Pm по ее геделеву номеру m. 1) m = 0. 1 (0)=0; 1 (0)=Z(1). Следовательно, P0 : I 1 : Z(1). 66 2) m = 1. 1 (1)=1; 1 (1)=S(1). Следовательно, P1 : I 1 : S(1). 3) m = 2. 1 (2)=(0,0); ( 1 (0), 1 (0))=(Z(1),Z(1)). P2 : I 1 : Z(1). I 2 : Z(1). 4) m = 3. 1 (3)=2; ( 1 (2))=(T(1,1)); . Следовательно, P3 : 1. T(1, 1). Заметим, что различные программы P0 и P2 вычисляют одну и ту же функцию f(x) = 0. 13. Нумерация вычислимых функций Определение 13.1. Пусть f - n-местная функция, вычислимая по программе P с геделевым номером m = (P). Число m будем называть индексом функции f. Вычислимую функцию от n переменных с индексом m будем обозначать символом f mn . Из определения 5.1 следует, что каждая n-местная вычислимая функция f представлена в перечислении f 0n , f1n , f 2n ,... Ниже мы в основном будем рассматривать одноместные вычислимые функции f m1 . Для простоты в их обозначении верхний индекс будем опускать. Упражнение 27. Докажите, что у каждой вычислимой функции имеется бесконечно много индексов. Приступим теперь к доказательству теоремы о существовании невычислимых функций. Идея доказательства этой теоремы столь же важна, как и результат. Теорема 13.1. Существует невычислимая всюду определенная функция. Доказательство. Пусть C1- некоторое перечисление всех вычислимых функций: f 0 , f1 , f 2 ,... f (n) 1, если _ значение _ f n (n) определено, g ( n) n 0, если _ значение _ f n (n) не _ определено. Функция g отличается от любой вычислимой функции f n в точке n. Действительно, если Положим функция определена f n в точке n, то g (n) f n (n) . Если f n не определена в точке n, то g 67 отличается от f n тем, что значение g(n) определено. Таким образом, g C1 и, следовательно, g - невычислимая всюду определенная функция. Теорема доказана. Метод построения функции в теореме 13.1 является примером диагональной конструкции, открытой Кантором. Лежащая в его основе идея является центральной в доказательстве большинства результатов, связанных с вычислимостью функций, и применима к огромному числу ситуаций, возникающих в различных разделах математики. Поясним, почему для примененного в теореме 13.1 метода выбран термин диагональный. Для этого проиллюстрируем метод построения функции g с помощью следующей бесконечной таблицы: f0 0 f 0 (0) 1 f 0 (1) 2 f 0 (2) 3 f 0 (3) ... f1 f1 (0) f1 (1) f1 (2) f1 (3) ... f3 f 3 (0) f 3 (1) f 3 (2) f 3 (3) ... f4 ... f 4 (0) ... f 4 (1) ... f 4 (2) ... f 4 (3) ... ... ... ... Рис. 13.1. Диагональная конструкция При построении функции g для определения значений в точках n выбирались диагональные элементы таблицы f 0 (0), f1 (1), f 2 (2),... . Выбранные значения изменялись так, чтобы обеспечить отличие g(n) от f n (n). Очевидно, что новые значения функции можно выбирать сравнительно свободно. Например, функция f (n) 5 xn 1, если _ значение _ f n (n) определено, g ( n) n n 2 , если _ значение _ f n (n) не _ определено. является другой невычислимой всюду определенной функцией. Проиллюстрируем диагональную конструкцию на примере из теории множеств. Пример 13.1. Докажем, что множество всех подмножеств множества Z 0 нельзя перечислить (перенумеровать). От противного, пусть M0,M1,M2,..- перечисление всех подмножеств множества Z 0 . Определим новое подмножество B множества Z 0 следующим образом: n B n Mn(n Z 0 ) . Очевидно, B Z 0 _ и _ B Mn(n Z 0 ) , что противоречит предположению. Поэтому множество всех подмножеств множества нельзя перечислить. 68 Из доказанного вытекает, что множество всех подмножеств множества несчетно. Упражнение 28. Используя диагональный метод, докажите что множество всех функций из N в N несчетно (Кантор). Упражнение 29. Докажите, что множество всех невычислимых всюду определенных функций из N в N несчетно. 14. Универсальные программы В этом разделе мы докажем несколько неожиданный результат, состоящий в том, что существуют универсальные программы, то есть программы, которые в некотором смысле реализуют все другие программы. Этот результат является одним из основных результатов теории вычислимости. Определение 14.1. Универсальной функцией для n-местных вычислимых функций называется (n+1)-местная функция U ( n) (m, x1 , x2 ,..xn ) f ( x1 , x2 ,..xn ) . Для примера рассмотрим функцию U (1) . Эта функция реализует все одноместные вычислимые функции f 0 , f 1 , f 2 ,... . Действительно, для произвольного неотрицательного целого числа т функция q( x) U название функции U функций. (1) (1) (m, x) совпадает с функцией f (x) . Таким образом, вполне соответствует классу вычисляемых ею одноместных Ниже для простоты вместо U (1) будем писать . Теорема 14.1. Существует вычислимая функция двух аргументов, являющейся универсальной функцией для класса вычислимых функций одного аргумента. Доказательство. Запишем все программы, вычисляющие функции одного аргумента, в вычислимую последовательность p0 , p1 ,... (например, в порядке возрастания их длины). Положим U (i, x ) равным результату работы i-ой программы на входе х. Тогда функция U и будет искомой вычислимой универсальной функцией, так как каждое U (i, x ) будет вычислимой функцией, вычисляемой программой p i . Теорема доказана. Теорема 14.2. Для каждого натурального числа n универсальная функция U вычислима. (n ) Доказательство. 69 ( n) Покажем, как можно вычислить значение функции U (m, x1 , x2 ,..xn ) для заданного числа m и фиксированного набора (x1, ..., xn). Неформальная процедура ( n) вычисления значения U (m, x1 , x2 ,..xn ) состоит в следующем: "Декодируйте число m и восстановите программу Рm. Затем имитируйте вычисление по этой программе. Если вычисление по программе заканчивается, требуемое значение содержится в регистре R1". По тезису Черча заключаем, что функция вычислима. Теорема доказана. Замечание. В теоремах 14.1 и 14.2 мы построили универсальную функцию для класса всех вычислимых функций. По тезису Черча класс алгоритмически вычислимых функций совпадает с классом всех частично рекурсивных функций, т.е. для всякого n1 существует частично рекурсивная функция U частично рекурсивных функций. ( n) (m, x1 , x2 ,..xn ) универсальная для всех n-местных Возникает вопрос: можно ли построить универсальную функцию для класса всюду определенных функций вычислимых функций? Теорема 14.3. Не существует вычислимой всюду определенной функции, универсальной для класса всех вычислимых всюду определенных функций. Доказательство. (Методом от противного) Пусть такая функция U ( n) (m, x1 , x2 ,..xn ) существует. Тогда образуем функцию f ( x1 , x2 ,.., xn ) U ( n) (m, x1 , x2 ,..xn ) 1 . Согласно определению универсальной функции U ( n) (m, x1 , x2 ,..xn ) f ( x1 , x2 ,..xn ) U ( n) (m, x1 , x2 ,..xn ) 1. Поскольку данные функции всюду определены, то они определены и при x1 x2 .. xn m . Тогда получаем противоречие: U ( n) (m, m, m,.., m) U ( n) (m, m, m,.., m) 1 . Теорема доказана. Теорема 14.4. Для любого n N класс n-местных примитивно рекурсивных функций имеет общерекурсивную универсальную функцию. (без доказательства) Замечание. Из данной теоремы следует, что класс общерекурсивных функций шире класса примитивно рекурсивных функций, т.к. универсальная функция не может быть примитивно рекурсивной и является общерекурсивной. Упражнение 30* . Докажите этот факт. Теорема 14.5. Существует вычислимая функция d, от которой никакая вычислимая функция f не может отличаться: для любой вычислимой функции f найдется такое число n, что f(n)=d(n) (равенство понимается в том смысле, что либо оба значения f(n) и d(n) не определены, либо оба определены и равны). (без доказательства). 70 Теорема 14.6. Существует вычислимая функция, не имеющая всюду определенного вычислимого продолжения. Доказательство. Такова, например, функция d (n) d (n) 1 , где d- функция из предыдущей теоремы. В самом деле, любое ее всюду определенное продолжение всюду отличается от d (в тех местах, где функция d определена, функция d на единицу больше и потому любое продолжение функции d отличается от d; где d не определена, всюду определенная функция отличается от d). Теорема доказана. Определение 14.2. Пусть f : N 0 N 0 -частичная функция. Функцию f 0 будем называть доопределением f , если f 0 всюду определена и совпадает с f в ее области определения. Покажем что, существуют частичные вычислимые функции, любое доопределение которых делает их невычисляемыми. Теорема 14.7. Существует частично рекурсивная функция f(x), которая не может быть доопределена до общерекурсивной. Доказательство. Рассмотрим функцию 1, если _ U ( x, x) 0, f ( x) s g (U ( x, x)) , где U – универсальная функция. Данная 0, если _ U ( x, x) 0 функция частично рекурсивна, так как она получается суперпозицией частично рекурсивных функций (см. упр.23). Предположим, что существует общерекурсивная f 0 ( x) , которая является доопределением для f(x). По определению функция универсальности f 0 ( x) U (m, x) . Поскольку f 0 ( x) всюду определена (по опр. общекурсивной функции), то она определена и при x=m, тогда значение U(m,m) определено и, следовательно, определено и значение f (m) s g (U (m, m)) . Поскольку f 0 ( x) есть доопределение f(x), то в области определения их значения должны совпадать. Поэтому имеем f (m) s g (U (m, m)) =U(m,m)= f 0 (m) . Однако последнее равенство дает противоречие, т.к. если U(m,m)=0, то f (m) s g (U (m, m)) =1, если U(m,m)0, то f (m) s g (U (m, m)) =0. Значит, допущение о существовании рекурсивного доопределения для функции f(x) приводит к противоречию. Теорема доказана. Определение 14.3. Любая программа Р(n), вычисляющая функцию U универсальной программой. (n ) , называется Универсальные программы полностью соответствуют своему названию. Действительно, так как универсальная программа Р(n) позволяет вычислить любую n- 71 местную вычислимую функцию, то, по сути дела, программа Р(n) заменяет абсолютно все программы для вычисления n-местных функций. 15. Перечислимое неразрешимое множество. Теорема 15.1. Существует перечислимое неразрешимое множество. (Переформулировка: существует перечислимое множество с неперечислимым дополнением). Доказательство. Рассмотрим вычислимую функцию f(x), не имеющую всюду определенного вычислимого продолжения. Ее область определения F и будет искомым множеством. В самом деле, F – перечислимо, как область определения вычислимой функции. Т.к. функция не имеет всюду определенного вычислимого продолжения, то дополнение функции F не является перечислимым множеством (его нет), а значит F не разрешимо. Теорема доказана. Полезно проследить, какое именно множество в итоге оказалось перечислимым и неразрешимым. Легко понять, что это множество тех m, при которых U(m,m) определено. Если вспомнить конструкцию функции U, то это множество тех m, при которых m-я программа останавливается на m. Поэтому, иногда говорят, что «проблема самоприменимости» (применимости программы к своему номеру) неразрешима. D(f) отличается от области определения любой одноместной вычислимой функции. Поэтому f не может быть вычислимой. Теорема 18.1. Предикат М( x ) полувычислим тогда и только тогда, когда существует вычислимая функция g( x ), такая что М( x ) –истинен x D( g ) . Упражнение 34. Докажите теорему 18.1. Определение 18.2. Множество А из N 0 называется рекурсивно перечислимым , если 1, x A не _ определена, x A частичная характеристическая функция, где f ( x ) вычислима. Это равносильно тому, что предикат «хА» полувычислим. Теорема 18.1. может быть перефразирована так. Теорема 18.2. Множество является рекурсивно перечислимым тогда и только тогда, когда оно является областью определения одноместной вычислимой функции. 19. Сложность вычислений. 72 Остановимся на основах этой теории и самых первых ее результатах. Сюжетной канвой дальнейшего рассказа послужат истории, происходящие с некоторым персонажем – назовем его условно М (математик). И начнем рассказ со следующей истории. Предистория. Однажды М сидел дома и пытался доказать некоторую (возможно важную, возможно нет) теорему Т. он пытался доказать эту теорему в течении недели, двух, месяца, .., но у него ничего не получалось. В конце концов он не выдержал и задал вполне естественный вопрос: а можно ли в принципе доказать эту теорему? Вопрос был обращен неизвестно к кому, и, скорее всего, улетел бы в пространство, если бы мимо не проходил другой наш персонаж, которого мы обозначим буквой Л (логик). Л услышал вопрос, зашел в комнату и объяснил, что такими вопросами начали интересоваться математики еще примерно с начала 20-го века. В общем виде этот вопрос входит в знаменитую «программу Гильберта», посвященную понятию математического доказательства. Эта программа, в частности, включала три следующих пункта. 1) формализация понятия доказательства. Перед тем как задавать вопросы о том, можно ли доказать то или иное утверждение, необходимо дать строгое математическое определение доказуемости. 2) Полнота. После формализации понятия доказательства нужно установить полноту построенной формальной теории. Это означает, что любое истинное утверждение Т должно быть доказуемым в нашей формализации. 3) Разрешимость. Следующей целью программы было построение такого вычислительного устройства, которое по внешнему виду теоремы Т, записанной в некотором формальном языке, определяло бы, является ли эта теорема доказуемой. Первый пункт программы был успешно выполнен. В настоящее время под словом «теорема» большинство математиков понимают то, что можно доказать в теории множеств. Хуже дело обстояло с последующими двумя пунктами. Первым ударом, потрясшим в свое время математическое сообщество, был результат полученный в 30-е годы Куртом Геделем утверждавший, что никакая достаточно сильная теория с задаваемым явным списком множеством аксиом не может быть полным. А в 1936 году Черч доказал теорему о том, что не существует никакого алгоритма, который автоматически проверял бы, является это утверждение доказуемым или нет. Итак, наш математик М узнал от логика Л, что в полной общности ответить на вопрос о доказуемости математического утверждения невозможно. Впрочем, к этому моменту у него уже начали появляться сомнения в том, что теорема Т истинна, и он решил заняться поиском контрпримера. М пошел в компьютерную комнату и написал программу П, проверяющую последовательно все слова до тех пор, пока она не найдет данные, на которых Т не верна. Он запустил свою программу и стал ждать окончания ее работы. Программа работала час, два, день, неделю,… И снова у математика возник вопрос: 73 Остановится ли П когда-нибудь? На этот раз математик уже знал к кому обратиться с таким вопросом. Он нашел логика и спросил существует ли способ узнать, прекратит ли данная программа свое выполнение или же будет работать до бесконечности. И снова Л дал вполне квалифицированный ответ. По теореме, доказанной Тьюрингом в 30-е годы, не существует алгоритма, определяющего остановится ли когда-нибудь данная программа или нет, т.е. проблема остановки неразрешима. После этого наш математик отправился домой. И как это иногда бывает, его ребенок, изучающий геометрию в седьмом или в восьмом классе, попросил папу помочь сделать домашнее задание. В народе бытует мнение, что люди, занимающиеся математикой, умеют хорошо считать, решать квадратные уравнения и разные задачки из элементарной геометрии, что не всегда соответствует действительности. Итак, наш математик начал решать задачу, предложенную своим чадом, и понял, что напрочь забыл геометрию, которую учил в школе. Он, однако, помнил, что любую задачу геометрии можно записать в координатах на языке действительных чисел. И ему в голову пришел вопрос, а существует ли универсальный алгоритм, решающий школьные задачи по геометрии. После разговора с логиком, он знал, что если в теории выразимы натуральные числа, то она неразрешима. Интуиция подсказывала, что теория, работающая с действительными числами, которых гораздо больше, должна быть уж тем более неразрешима. Все же для очистки совести, он решил позвонить логику и удостоверится в этом. Как ни странно, выяснилось противоположное. Классический результат Тарского, доказанный в 1948 году, утверждал существование алгоритма, проверяющего доказуемость утверждений элементарной геометрии и вообще любых утверждений о вещественных числах, использующих арифметические операции, элементарные логические связки и кванторы по множеству всех вещественных чисел. (Совокупность таких утверждений называется алгеброй Тарского). Математик обрадовался. Ему уже начинало казаться, что от логики нет никакой пользы, а тут оказалось, что логика имеет весьма практичное применение к реальной жизни. Итак, М попросил ребенка подождать, а сам отправился к торговцам програмного обеспечения. Там он обнаружил два CD, посвященных решению задач по геометрии, которые назывались соответственно Tarsky for Windows 95 и Collins for Windows 95 . первый диск стоил 30 у.е., второй – 300 у.е. Естественно, М. попытался выяснить почему такая разница в цене. Никаких объяснений он не получил, и поэтому он купил более дешевый диск Tarsky for Windows 95 . М пришел домой, вставил CD в компьютер и решил проверить программу на задачке из школьного учебника. Однако стала повторяться все та же история. Программа работала час, два, .., но не проявляла никакого желания выдать решение. Математик прервал выполнение программы и попросил ее доказать какую-нибудь элементарную теорему, например о том, что сумма углов в треугольнике равна 180 градусам. Результат не сильно изменился, и программа продолжала думать час, второй, сутки, другие…. Тогда М позвонил логику и несколько повышенным тоном спросил, что же происходит. Л ответил, что это не его проблема. Тарский доказал теорему о существовании алгоритма, он совершенно уверен, что авторы этого диска запрограммировали алгоритм правильно, а что происходит дальше – не имеет никакого отношения ни к математике, ни к логике. И это как раз то место, где начинается теория сложности вычислений. Нас интересует не просто существование алгоритмов для нашей задачи, но и наскольку они эффективны. Конечно, рассказанная история несколько стилизирована, но, в общем-то, так и происходило развитие исследований, которое привело к современному состоянию. В 60-х 74 годах 20 века возникло понимание того, что одни алгоритмы могут быть лучше других. Стало понятно, что необходимо построение некоторой математической теории. Начала теории основные понятия Давайте пока оставим в стороне истории из жизни математика М, потом мы еще к нему вернемся и не раз. Попробуем дать несколько определений. Первое наблюдение, которое сделал М, когда пытался разобраться в этой теории, состоит в том, что подавляющее большинство алгоритмических задач можно представить в подходящей кодировке как задачи вычисления некоторого отображения f : {0,1}* {0,1}* множества конечных двоичных слов в себя. Второй вопрос: на каких устройствах мы собираемся вычислять наше отображение? В качестве примера возьмем, например, ТЕХ-процессор. Выбор ТЕХ здесь никакого особого значения не имеет, то же самое можно сказать и о других программах. Итак, имеется некоторое отображение f , которое в данном случае представляет собой отображение Paper.texpaper.dvi преобразовывающее файл paper.tex в paper.dvi (оба мы рассматриваем как два длинных двоичных слова). Это преобразование осуществляется некоторым алгоритмом texdvi.exe. Нас сейчас интересует время (быстродействие) работы алгоритма. Именно такую, как говорят в этой науке, меру сложности мы будем сегодня рассматривать. Бывают и другие характеристики, например, память. Развитие техники, относящееся к рассматриваемой нами задачи, шло по двум направлениям. Во-первых, и это хорошо все знают, улучшались процессоры: Intel 286, Intel 386, Intel 486, Intel 586,… , появлялись один за другим все более мощные модели. Вовторых, улучшался сам алгоритм, появлялись его версии texdvi1.exe,…, texdvi10.exe,…. Справедлива, хотя и с некоторыми оговорками, такая формула общее время работычисло операций алгоритмавремя на одну операцию. Улучшение обоих членов в этой простой формуле – вещи более-менее независимые. Грубо говоря, программы отвечают за первый сомножитель, а процессоры – за второй. Что здесь происходит с математической точки зрения? Если у нас имеется какой-то алгоритм, который использует t операций, то от улучшения быстродействия нашего процессора время решения нашей задачи умножается на некоторую константу. Поэтому, и это очень важно, в теории сложности сложилась традиция измерять время работы алгоритма с точностью до мультипликативной константы О(.). такой подход позволяет нам абстрагироваться от выбора конкретной модели вычислительного устройства, от того, сколько времени занимает выполнение одной операции, какую систему команд имеет используемая нами машина и т.п. именно этот подход и позволяет нам построить довольно красивую математическую теорию. Теория сложности вычислений несколько отличается от всеобъемлющей теории марксизма-ленинизма: если в формуле есть два члена, и за второй наша теория никакой ответственности не несет, об этом заявляется явно. Продолжим построение строгой теории. Одним из непосредственных преимуществ введенного выше соглашения является то, что нас не очень заботит выбор точной модели. Как правило, от смены модели улучшение или ухудшение происходит с точностью до мультипликативной константы, а мы договорились этого не замечать. 75 Итак, фиксируем некоторую вычислительную модель. Если есть машина М, которая вычисляет функцию f, и определены входные данные х – двоичное слово, тогда можно определить нашу основную функцию T(M,x) – количество операций (тактов), которые требуются машине М для работы на входном слове х. Функция T(M,x) называется сигнализирующей функцией по времени выполнения элементарных функций. Теорема об ускорении. Давайте теперь изучать функцию Т(М,х). Первое, что приходит в голову: у нас имеется алгоритмическая задача f, давайте выберем самый хороший алгоритм для решения этой задачи и назовем сложностью задачи сложность этого самого хорошего алгоритма. Оказывается, что такой интуитивно очевидный способ действий, к сожалению неосуществим и на этот счет имеется теорема Блюма об ускорении (1971). В вольной формулировке эта теорема утверждает, что как бы мы не пытались определять понятие «наилучшая для данной задачи машина», у нас ничего не получится (по крайней мере для некоторых задач). Для дальнейшего нам потребуется еще одно важное определение. Функция Т(М,х) усторена очень нерегулярно. Рассмотрим пример ТЕХ-процессора. Для подавляещего большинства файлов произойдет остановка в самом начале работы из-за несоответствия входному формату Тех, а на каких-то файлах это время возможно окажется бесконечным из-за зацикливания. В общем случае эту функцию изучать никакой возможности не предоставляется, она слишком рыхлая. Мы хотим извлечь из нее функцию натурального аргумента. Есть несколько способов подойти к этой задаче. Мы ограничимся самым распространенным, который называется сложность в наихудшем случае. Она определяется следующей формулой t M ( n ) maxT ( M , x ) . x n Из всех слов битовой длины, не превышающей n, выбираем то, на котором наша машина работает хуже всего (дольше всего). Время работы на таком слове и назовем сложностью t M ( n ) . За время t M ( n ) машина гарантированно закончит работу на любом входном слове длины, не превышающей n. Может, конечно, случится, что на каких-то словах работа завершиться раньше. Приведем упрощенный вариант теоремы Блюма, вместо функции log t в ней можно взять любую «разумную» стремящуюся к бесконечности функцию. Теорема (Блюм, 1971). Существует такая вычислимая функция f, что любую машину М, вычисляющую эту функцию, можно ускорить следующим образом: существует другая машина М, также вычисляющая эту функцию и такая, что t M ( n ) log t M ( n ) для почти всех n. Функция из теоремы Блюма - это некоторая «экзотика» (как следует из теоремы, время ее вычисления в наихудшем случае растет очень быстро). Итак, мы не можем надеяться на построение для каждой функции самой лучшей машины, вычисляющей эту функцию. И мы вынуждены искать другой подход к построению математической теории. Альтернативой является понятие сложностного класса. Рассмотрим множество всех машин, вычисляющих функции, и класс этих функций назовем классом сложности. 76 def DTIME( t( n )) { f M : ( M _ вычисляет _ f ) & ( t M ( n ) O( t( n )) Буква D означает детерминированные алгоритмы, TIME ровно то, о чем вы подумали. Если у вас есть произвольная функция t(n) от натурального аргумента, то мы образуем класс сложности, состоящий из таких функций, для которых существует вычисляющая f машина M, такая что сигнализирующая функция по времени ограничена исходной функцией t(n) с точностью до мультипликативной константы. Теперь определим один из самых важных сложностных классов P DTIME( n k ) . k 0 Класс Р – это те функции, которые можно вычислить на наших машинах, и время их вычисления растет полиномиально с ростом длины слова. Бывают аналогичные классы языков, которые можно распознавать за экспоненциальное время k EXPTIME DTIME( 2 n ) , k 0 также можно определить двойное экспоненциальное время DOUBLEEXPTIME DTIME( 2 k 0 2n k ) и так далее… Теперь давайте вернемся к нашему математику М. Оказывается, время работы алгоритма Тарского, с помощью которого М пытался решать задачи элементарной геометрии, не лежит ни в одном из приведенных выше классов. Для него есть такая нижняя оценка .2 . n t Tarsk y( n ) 2 2 Как вы помните, для разрешимости алгебры Тарского продовался еще один диск Collins for Windows 95. Теорема (Коллинз). Алгебра Тарского принадлежит DOUBLEEXPTIME . Теперь М смог понять разницу между этими CD-ROM: время работы алгоритма Коллинза неизмеримо меньше времени работы алгоритма Тарского (хотя оно все равно может быть очень велико – оценка времени работы алгоритма двойной экспонентой не гарантирует нам, что даже теорема о сумме углов треугольника будет доказана за время существования Вселенной). Возникает вопрос: а нельзя ли еще улучшить алгоритм разрешимости для алгебры Тарского? И более общий вопрос: а нельзя ли то же самое сделать вообще с любым алгоритмом? Вдруг, например, всякая вычислимая функция лежит в классе Р. Или, покрайней мере, всякая функция из DOUBLEEXPTIME лежит в Р. Другими словами, вопрос о том, есть ли у нас предмет исследования, или, возможно теорема Блюма об ускорении применима вообще ко всем функциям. Второй краеугольный камень теории сложности вычислений – это теорема об иерархии. 77 Как и в случае с теоремой об ускорении, мы приводим ее далеко не в самлой общей форме. Теорема (Хартманис (1965)) P EXPTIME . Таким образом, не все сложностные классы совпадают, так что предмет исследования есть. Если вы еще помните нашего математика М, второй момент его злоключений состоял в том, что он спрашивал, остановится ли его программа когда-нибудь. Сейчас, наученный горьким опытом, он задал вопрос: остановится ли эта программа до Нового года? Выясняется, что если до Нового года осталось в точности экспоненциальное время, то эта задача и отделяет EXPTIME от Р. Потому, что есть очень простой алгоритм, позволяющий проверить, остановится ли программа до Нового года, а именно, нужно просто подождать до него, и все само собой разрешиться. Теорема об иерарзхии утверждает, что эту задачу нельзя решить существенно быстрее, чем описанным выше способом. И теперь наш математик оказался вполне подготовлен к восприятию следующей теоремы. Теорема (Фишер-Рабин (1974)). Алгебра Тарского не принадлежит классу Р. время работы любого разрешающего алгоритма для алгебры Тарского не меньше, чем 2n , где - некоторая константа. Такая высокая нижняя оценка объясняет причины неудачи нашего математика с практическим решением задач в алгебре Тарского. Наиболее сложная и, по-видимому, наиболее важная область теории вычислений, связана как раз с доказательством нижних оценок. Таким образом, теория сложности пытается доказать, что не существует эффективных алгоритмов. Давайте продвинемся дальше в построении нашей теории. Понятие сложностного класса становится важным в тот момент, когда у нас появляется понятие сводимости, и Это второе центральное понятие современной теории сложности. Есть несколько вариантов определения сводимости, рассмотрим наиболее важное из них. Сводимость по Карпу. Мы занимаемся вычислением функций, отображающих конечные слова в конечные слова. Но во многих случаях оказывается гораздо удобнее рассматривать так называемые * языки. Язык L можно рассматривать как множество слов L { 0 ,1 } или интерпретировать его как отображение вида : { 0 ,1 }* { 0 ,1 } , тогда L 1( 1 ) . 78 Определение. Язык L1 сводится к языку L2 по Карпу (обозначается это L1 p L2 ), если существует такая функция f из P, что x : { x L1 f ( x ) L2 } . Сводимость можно рассматривать как использование некоторой подпрограммы, перерабатывающей исходное слово x в f(x), к которому затем нужно применить алгоритм распознавания принадлежности языку L2 . Класс EXPTIME замкнут относительно этой сводимости. Поэтому естественно поставить вопрос, а существуют ли в этом классе самые сложные языки, т.е. такие, что любой другой язык из этого класса к ним сводится. Языки из некоторого сложностного класса, к которым сводится любой язык из этого класса называется полными (относительно данного класса и данного типа сводимости). А если мы опустим требование принадлежности нашему классу самого языка, получим определение трудного языка. Теорема Фишера-Рабина доказывается именно так. Вместо того, чтобы доказывать напрямую, что не существует полиномиального алгоритма для алгебры Тарского, доказывается, что алгебра Тарского трудна для класса EXPTIME. Такой способ рассуждений типичен для теории сложности. Мы не пытаемся действовать «в лоб», а сводим одну задачу к другой. И, естественно, ситуация наиболее хороша, когда к данной задаче сводится много других задач из данного класса. Успех этой науки определяется тем практическим обстоятельством, что полных задач оказывается много в самых разных ситуациях и они более естественны, чем проблема остановки. Теперь самое время вернуться к нашему бедному М и поговорить об исключениях из правила «класс Р=класс эффективно вычислимых функций». Как-то М понадобилось для каких-то своих целей решать системы линейных неравенств: aij x j bi ,i 1,..,m, j 1,..,n Другими словами, ему потребовался пакет программ для задач линейного программирования. Специалисты по теории сложности вычислений перед покупкой программного обеспечения изучают литературу, и наш М, наученный горьким опытом, стал следовать этому правилу. Он, конечно же, слышал про симплекс-метод, которым пользуются для решения задач линейного программирования. Но М обнаружил статью, в которой доказывается, что симплекс – метод не полиномиален. А после этого наш М обнаружил и статью Хачияна (1979), в которой был построен полиномиальный алгоритм для решения задачи линейного программирования. Поэтому, приехав на рынок, он попытался найти что-то вроде CD Khachiyan for Windows 95. К его удивлению, ничего похожего не было. Все, что ему предлагали, было основано на симплекс- методе и его 79 вариациях. Оказывается, что хотя теоретически алгоритм решения задачи симплексметодом экспоненциальный, а алгоритм Хачияна полиномиальный, на практике первый работает быстрее, чем второй. Это самое известное исключения из того правила, что полиномиальные алгоритмы хороши, а экспоненциальные – плохи. Но это исключение, на самом деле, подтверждает правило, потому что, хотя алгоритмом Хачияна никто и не пользуется для решения задач линейного программирования, выяснилось, что с помощью этого алгоритма можно решать такие задачи, к которым с симплекс – методом подступиться в принципе невозможно. Таких исключений известно очень мало. Второй известный пример – проверка простоты числа. Как правило, подтверждается тезис, что если у вас имеется алгоритм, который теоретически работает хорошо, то этот алгоритм будет хорошо работать и на практике. Давайте опять вернемся к М. Пока он разбирался в теории сложности, его сын поступил в университет на первый курс и стал изучать математическую логику. И он столкнулся с одним из неприятных упражнений этой наукой, выяснением является ли формула тавтологией (истинна при любых значениях переменных). Именно с этой проблемой и обратился сын нашего математика к своему папе. М, естественно, никуда уже не поехал, а стал как поступают специалисты по теории сложности, пытаться поместить задачу в один из уже известных сложностных классов. Чтобы использовать стандартные обозначения, будем говорить о двойственной ей задаче SAT – выполнимости: есть ли хотя бы один набор переменных, при котором формула истинна. Накладывая эту задачу на нашу картину сложностных классов, М увидел первым делом, что SAT EXPTIME. Алгоритм решения задачи SAT за экспоненциальное время очевиден. Следующий шаг – классифицировать эту задачу: лежит ли она в Р, или полна в EXPTIME? Этот вопрос, возникший в начале 70 – годов, до сих пор открыт. Почему у специалистов, потративших на решение этой задачи почти 35 лет, не получается построение полиномиального алгоритма, объяснить сложно. Взрыв в теории сложности вычислений начался с того, что было сформулировано определение класса NP, как класса языков, которые распознаются переборными алгоритмами. Более научно, переборные алгоритмы называют недерминированными алгоритмами. NP – это класс языков, которые можно распознать за недерминированное полиномиальное время. Теперь дадим определение этого класса. В этом определении, как и в определении класса Р, будет фигурировать слово «машина», сокращенно мы будем обозначать ее НМТ («недетерминированная машина Тьюринга»); впрочем, использование слова «Машина» в этом контексте может вызывать у людей, имеющих отношение к реальным машинам, некоторое чувство неудовольствия. Под недетерминированной машиной мы понимаем такую машину, которая работает как обычно, но в какой-то момент она может нарисовать в какой-то ячейке знак вопроса и после этого ее работа разделяется на две ветви 0 или 1: 80 (в клетке окажется записанным либо 0, либо 1). После этого машина продолжает работу. В какой-то момент она может раздвоиться еще раз. Появляется дерево вычислений. Вдоль каждой ветви дерева вычислений НМТ работает как обычное вычислительное устройство, но результат работы НМТ зависит от результатов работы вдоль всех ветвей. Определим результат работы НМТ в случае проверки принадлежности слона х к языку L. На каждой из ветвей вычисления получается один из двух возможных ответов: «да» или «нет». НМТ распознает язык Л, если всякое слово х принадлежит L тогда и только тогда, когда хотя бы на одной ветке вычислений получен ответ «да». Проиллюстрируем возможности НМТ на примере с упражнениями на проверку выполнимости пропозициональных формул. Частенько, когда студент (полиномиальная детерминированная машина Тьюринга) проваливается и не может решить задачу, преподаватель выступает в роли недетерминированной машины - он показывает (загодя приготовленный) ответ, который легко может быть проверен. Другими словами можно сказать так: ПМТ «стремится» доказать утверждение х L) а в момент раздвоения она обладает неограниченными, интеллектуальными возможностями и выбирает наилучший вариант. Если существует ветка вычислений, при которых ответ «да», то х L. В противном случае никакое ветвление не приведет к положительному результату (слово не принадлежит языку лишь тогда, когда у НМТ нет никакой возможности доказать обратное). Недетерминированная машина является чисто теоретическим понятием. Удобства от введения такого понятия получаются совершенно фантастические. Это самая первая вымышленная модель, появившаяся в теории сложности вычислений. В настоящий момент есть масса таких моделей, гораздо более сложных: интерактивные доказательства и т. п. Эти модели появляются не сами по себе, а с целью определения сложностных классов и для классификации естественных задач. Интуитивно ясно, что понятие НМТ прекрасно приспособлено к моделированию переборных алгоритмов. Собственно, уже показано, как это делать. Если у нас есть алгоритм, который пытается перебрать некоторое количество возможностей, то наша машина может угадать, какая из возможностей является хорошей, а потом имитировать вторую часть (полиномиальную проверку конкретного варианта). В обратную сторону это несколько сложнее, но все равно достаточно просто. Если у нас есть НМТ, то она порождает дерево вычисления, и перебор нужно производить по всем возможным ветвям. Современная теория сложности вычислений началась с результатов Кука, Карпа, Левина (который получил их независимо) в начале 70-х годов (1970 1972). Эта серия теорем состоит вот в чем. 1. Задача выполнимость (SAT) полна для класса NP (теорема Кука). 81 Таким образом, задача нашего математика М (можно ли придумать полиномиальный ? алгоритм для SAT} эквивалентна вопросу: совпадают ли классы Р и NP (Р NP). Если полиномиального алгоритма нет, то эти классы не совпадают — их отделяет задача SAТ, если же он есть, то можно эффективно решить любую задачу из класса NP. Задача выполнимости отвечает за класс NP. Грубо говоря, NP — это не что иное, как задачи, которые могут быть сведены к выполнимости пропозициональных формул. 2. Естественно, что такой результат может вызвать некоторую реакцию отторжения — не настолько уж важна задача выполнимости, чтобы строить целую теорию ее решения. Но следующим шагом была статья Карпа (1971), в которой уже была указана 21 полная задача для класса NP. Все они между собой эквивалентны. В настоящее время список NP-полных задач, которые возникают буквально во всех областях математики, содержит тысячи задач. Везде, где возникают алгоритмы, возникают и переборные задачи. Это неудивительно, потому что большая часть программистской работы и состоит в выборе варианта получше. Удивительно то, что часто, а практически всегда (с некоторыми исключениями) — если у вас есть конкретная переборная задача, то ее можно сравнительно легко классифицировать — либо для нее есть полиномиальный алгоритм, либо она полна. Таким образом, строится Теория переборных задач. Из-за того, что переборные алгоритмы возникают почти всюду, она приобрела большое значение. Но мнению ? американского тополога Смейла, вопрос Р NP будет одним из самых важных вопросов математической науки следующего столетия. Вот и подошел к концу рассказ о том, что является, так сказать, ядром теории сложности вычислений. Не стоит понимать этот рассказ так, что вся теория сложности ? занимается только лишь соотношением Р NP. Изложенная схема исследований которая объединяет задачи в сложностиые классы и потом исследует эти задачи с помощью их сводимости друг к другу оказалась удивительно эффективна плодотворна в самых разных ситуациях. Перечислим коротко несколько самых важных возможностей (помимо уже упомянутых выше квантовых вычислений). Бывает сложность алгебраическая. Если нас интересует вычисление некоторого полинома, и мы абстрагируемся не только от деталей битового вычисления, но и от того, как производятся арифметические операции, то все зависит лишь от того, с какими числами производятся арифметические операции. Тогда длина вычисления определяется количеством сложений и умножений. Бывает сложность геометрическая диаграммы Вороного и близкие к ним вещи, о которых я говорить не буду. Бывает сложность булева она отличается от того, чем мы занимались сегодня, тем, что n нас интересуют функции f : {0,1} —> {0,1), определенные на словах фиксированной длины. В любом из этих разделов возникает масса постановок интереснейших задач именно в рамках этой общей идеологии. 82 Тьюринг (ДК №3, 2003г.) В шестилетнем возрасте Алан Тьюринг (Alan Mathison Turing, 1912-1954) уже читал, считал и писал, в 11 — ставил химические опыты, в 15 — изучил теорию относительности Эйнштейна. Настоящим его увлечением было чтение научно-популярных книг. Что не мешало ему быть последним учеником в классе, особенно в области английского языка и литературы, да и по всем остальным гуманитарным предметам вердикты учителей были довольно однообразны: «безнадежное отставание", «безобразная успеваемость"... — а единственный положительный отзыв он получил от учителя математики: «Такие ученики, как он, рождаются раз в 200 лет». Тем не менее, математический Кингз-колледж Кембриджского университета (куда он смог поступить, кстати, только со второй попытки, ввиду полного незнания каких-либо предметов, кроме естественных) он закончил в 1935 году блестяще, ему предоставили стипендию для работы над диссертацией. В 1936-1938 он учился в аспирантуре в Принстонском университете в США. где его научным руководителем был американский логик А. Чёрч (Alonso Church). В конце 1936 года Тьюринг опубликовал работу «О вычислимых числах с приложением к проблеме разрешимости» (On the Computable Numbers, with an Application to the Entscheidungsproblem), которая принесла ему мировую известность. Математическим результатом этой работы было доказательство существования формальной, чисто механической процедуры, позволявшей решать, выводимо ли данное высказывание из некоторого набора аксиом. Ранее над той же тематикой работал знаменитый Курт Гедель (Kurt Goedel). Теорема Геделя, тезисы Тьюринга, а также работы его принстонского руководителя А. Чёрча окончательно похоронили чаяния так называемой «гильбертовской» школы математиков, будто вся математика может быть представлена в виде законченного и непротиворечивого набора аксиом и выведенных из них теорем. Для нас важно, что упомянутая процедура. названная «универсальной машиной». а позднее получившая название «машина Тьюринга», стала первым формальным описанием компьютера как некоей абстрактной цифровой вычислительной машины, способной имитировать (при наличии соответствующей программы) любую другую машину, действие которой заключается в переходе от одного дискретного состояния к другому. Эта машина, конечно, сама по себе не может быть построена "в железе» — это просто математическая абстракция, в известном смысле синоним понятия алгоритма. Все, что вычислимо, может быть вычислено на такой машине. Это было началом современной компьютерной науки. 83 В те годы он познакомился с фон Нейманом. по достоинству оценившим способности молодого ученого и предложившим ему остаться в Принстоне по окончании аспирантуры, но Тьюринг отклонил предложение и вернулся в Англию. В 1938 году молодого, но уже знаменитого доктора математики привлекли к работе в правительственной секретной Школе кодов и шифров в Блечли-Парке ("ДК" #2. 2003). Там он раскрыл шифры германских ВВС, создав совместно с Г. Уэлчманом (G. W. Welchman) и инженером Г. Кином (Н. Keen) дешифровочную машину «Бомба», а к концу 1939 взломал весьма сложный код. использовавшийся в шифровальных машинах ENIGMA, которыми, в частности, были оснащены германские подводные лодки. В разработке первой электронной дешиф-ровальной машины Colossus он прямого участия не принимал, но она во многом основывалась на его идеях. Тьюринг провел период с ноября 1942 по март 1943 в США. где занимался разработкой шифров для переписки Черчилля и Рузвельта. Был удостоен звания кавалера Ордена Британской империи 4-й степени. В мае 1948 профессор М. Ньюмен (Мах A. Newman). знавший его еще по Кембриджу, предложил ему пост заместителя директора вычислительной лаборатории Манчестерского университета, занявшего к этому времени лидирующие позиции в разработке вычислительной техники в Великобритании. Там под руководством Тьюринга в 1951 году был построен компьютер. получивший название «Manchester Automatic Digital Machine» — MADAM. В 1951 Тьюринг был избран членом Лондонского королевского общества. К концу жизни Тьюринг увлекся проблемами искусственного интеллекта, он считается основателем этого направления. В известной его статье "Может ли машина мыслить?»2 предложен знаменитый "тест Тьюринга», используемый и в настоящее время. Тест состоит в том. что человек ведет диалог с неким собеседником на естественном языке, и человек должен определить, с кем он разговаривает — с себе подобным или с компьютером. Сам Тьюринг утверждал, что можно построить машину, которую при общении невозможно отличить от человека, а значит, создание искусственного разума тоже вполне достижимо. В начале 50-х на волне «охоты на ведьм" спецслужбы США и Англии ковырялись в мельчайших подробностях жизненного пути всех. кто имел доступ к государственным секретам. Кто-то позаботился довести до сведения научной общественности информацию о нетрадиционной сексуальной ориентации ученого. Тьюринга уволили с должности консультанта Блечли-парка и лишили доступа к секретной информации в Манчестерской лаборатории. душой которой он был. В 1954 г.. в возрасте 42 лет Тьюринг покончил с собой. 84 85