ТЕОРИЯ АЛГОРИТМОВ ТЕОРИЯ АЛГОРИТМОВ ........................................................................................................................................................ 1 Введение ...................................................................................................................................................................................... 2 I. ТЕОРИЯ РЕКУРСИВНЫХ ФУНКЦИЙ ....................................................................................................................... 6 I.1. Примитивно рекурсивные функции. Базис элементарных функций. Операции подстановки и примитивной рекурсии. Основные свойства................................................................................................................................................. 6 I.2. Примитивно рекурсивные функции относительно совокупности функций. Основные свойства.................... 12 I.3. Производные операции над функциями....................................................................................................................... 14 I.4. Операции конечного суммирования и конечного произведения............................................................................. 15 I.5. Предикат, логическая функция. Логические операции с предикатами................................................................. 18 I.6. Операции навешивания кванторов. Операции навешивания кванторов относительно двуместных предикатов ................................................................................................................................................................................ 20 I.7. Примитивно рекурсивный предикат ............................................................................................................................ 21 I.8. Операция навешивания ограниченного квантора над предикатами ..................................................................... 24 I.9. Кусочное задание функции.............................................................................................................................................. 26 I.10. Операция ограниченной минимизации ...................................................................................................................... 28 I.11. Частично рекурсивные функции ................................................................................................................................. 32 Контрольные вопросы............................................................................................................................................................ 35 Практические задания............................................................................................................................................................ 36 II.Уточнение понятия алгоритма через абстрактную математическую машину Тьюринга .................................... 40 II.1 Определение машины Тьюринга............................................................................................................................... 40 II.2 Применение машин Тьюринга к словам.................................................................................................................. 43 II.3 Вычислимые по Тьюрингу функции ........................................................................................................................ 49 II.5 Композиция машин Тьюринга................................................................................................................................... 55 II.6 Тезис Тьюринга (основная гипотеза теории алгоритмов) .................................................................................... 58 II.7 Машины Тьюринга и современные электронно-вычислительные машины ................................................... 60 II.8 Вычислимость по Тьюрингу примитивно рекурсивных функций..................................................................... 62 II.9 Вычислимость по Тьюрингу частично рекурсивных функций .......................................................................... 66 Контрольные вопросы............................................................................................................................................................ 68 Практические задания............................................................................................................................................................ 69 III.1. Уточнение понятие алгоритма через машину с неограниченными регистрами ............................................... 71 Практические задания........................................................................................................................................................ 75 IV. Марковские подстановки ................................................................................................................................................ 77 IV.1. Нормальные алгоритмы Маркова.......................................................................................................................... 77 IV.2. Нормально вычислимые функции и принцип нормализации Маркова......................................................... 80 IV.3. Совпадение класса всех нормально вычислимых функций с классом всех функций, вычислимых по Тьюрингу............................................................................................................................................................................... 83 СПИСОК ЛИТЕРАТУРЫ...................................................................................................................................................... 87 67H
1
Введение В связи с развитием информационных технологий, понятие алгоритма является не только основным понятием теории алгоритмов, но и одним из главных понятий современной науки. Более того, в XXI –ом веке, так называемый век информатизации, «алгоритм» является одним из важнейших факторов цивилизации. Теория алгоритмов как самостоятельная наука появилась в 30–40х годах XXвека и имеет огромное значение во всех направлениях математических наук. Благодаря этой теории находят свои точные определения такие фундаментальные понятия как алгоритм, доказуемость, сложность. Теория алгоритмов вместе с математической логикой служит основой для построения теории вычислений. Они составляют теоретическую основу для проектирования и применения вычислительных устройств к плохо формализуемым объектам. Именно, благодаря теории алгоритмов происходит внедрение математических методов в экономику, лингвистику, психологию, педагогику и другие гуманитарные науки. ё Основным понятием теория алгоритмов является понятие «алгоритм». Слово алгоритм связано с именем великого средневекового математика, жившего в IXвеке, Мухаммеда ибн Мусе из Хорезми, который впервые изложил десятичную систему счисления и правила выполнения простых арифметических действий над элементами этой системы. Одна из основных его работ, так называемый «арифметический трактат», которая была переведена на латинский язык в XII веке, начинается словами «Dixit algorizmi», что в переводе означает «правил автор, т.е. сказал Ал Хорезми». Отсюда и появилось слово алгоритм. Таким образом, слово «алгоритм» – латинизированное имя Ал-Хоразми. Как научный термин это слово первоначально обозначало лишь правила арифметических операций над целыми числами и простыми дробями. Затем его стали употреблять в более широком смысле. Со временем в математических науках под алгоритмом стали понимать точные предписания, правила о выполнении некоторых простых операций, определяющих процесс преобразования исходных данных в искомый результат. Наиболее простые примеры алгоритмов известны нам из начальной школы. Это алгоритмы сложения, вычитания, умножения и деления целых чисел в десятичной системе счисления. Аналогичные алгоритмы известны и для произвольных p − ичных систем счисления. В качестве другого примера можно привести классический алгоритм Евклида (нахождения наибольшего общего делителя (НОД) двух натуральных чисел, отличных от нуля). Приведем описание этого алгоритма. Задана пара натуральных чисел, т.е. (a1 , a 2 ), причем a1 > a 2 > 0 . 1) Делим a1 на a 2 . Процесс деления записываем в общем виде: a1 = a 2 ⋅ b1 + r1 . Если r1 = 0 , то НОД (a1 , a 2 ) = a 2 . Если r1 ≠ 0 , то переходим ко второму этапу. 2
2) Делим a 2 на r1 . Процесс деления записываем в общем виде: a 2 = r1 ⋅ b2 + r2 . Если r2 = 0 , то НОД (a 2 , r1 ) = r1 . Если r2 ≠ 0 , то переходим к следующему этапу и т.д. В итоге имеем последовательности равенств: a1 = a 2 ⋅ b1 + r1 a 2 = r1 ⋅ b2 + r2 … rn − 2 = rn −1 ⋅ bn + rn rn −1 = rn ⋅ bn +1 + rn +1 Таким образом, получили убывающую последовательность натуральных чисел a 2 > r1 > r2 > ... > rn > rn +1 ≥ 0 , которая должна быть конечной, так как a 2 ∈ N . Поэтому для некоторого n , rn +1 = 0 , и в силу равенств НОД (a1 , a 2 ) = НОД (a 2 , r1 ) = НОД (r1 , r2 ) = ... = НОД (rn −1 , rn ) = =НОД (rn ,0 ) = rn получаем НОД (a1 , a 2 ) = rn . Не трудно заметить, что в этом описании повторяется многократно одно и тоже действие (деление большего числа на меньшее), меняются лишь числа, компоненты действия, причем меняются они определенным образом, закономерно. Возникает вопрос: нельзя ли построить такое предписание, чтобы действие деления содержалось в нем лишь один раз, но было бы точно определено, до каких пор надо повторить это действие и над какими числами оно выполняется в каждом повторении? Данный вопрос решается положительно, но при этом придется исходным переменным a1 и a 2 на каждом шагу присвоить новые значения. Тогда получаем следующее предписание: 1. Разделить a1 на a 2 . Перейти к пункт 2. 2. Если r = 0 , то перейти к пункт 4, иначе – к пункт 3. 3. Присвоить a1 значение a 2 , a 2 – значение r. Перейти к пункт 1. 4. НОД (a1 , a 2 ) = a 2 . Перейти к пункт 5. 5. Процесс окончен. Таким образом, мы получили более компактные описание алгоритма Евклида Основные свойства алгоритма 10. Дискретность проявляется в том, что процесс построения величин, задаваемый алгоритмом, протекает в дискретном времени следующим образом: в начальный момент задается исходная конечная система величин, а в каждый следующий момент система величин получается по определенному закону из системы величин, имевшихся в предыдущий момент времени. 20. Детерминированность (определенность)– система величин, получаемых в любой, отличный от начального, момент времени, однозначно определяется системой величин, полученных в предшествующие моменты времени. 30. Элементарность шагов – закон получения последующей системы величин из предшествующей должен быть простым и локальным. 3
40. Эффективность (результативность)– каждый шаг работы алгоритма должен заканчиваться результатом. 50. Массовость алгоритма – начальная система величин может выбираться из некоторого потенциально бесконечного счетного множества Х. 60. Конструктивность – объекты из Х, над которыми работает алгоритм, должны быть конструктивными (конструктивный объект –это такой объект, который может быть набран весь целиком и представлен нам для рассмотрения [7]). Примерами конструктивных объектов являются булевы функции, формулы алгебры логики, натуральные и рациональные числа, матрицы с натуральными или рациональными элементами, многочлены от n неизвестных с рациональными коэффициентами и т.п. В качестве примера объекта, не являющимся конструктивным, можно привести любые действительные числа, представление которых в десятичной записи α 0 , α1 ...α n ... ни для какого n ∈ N не может быть целиком представлено для рассмотрения. Например, число e и π не являются конструктивными объектами. Подводя некоторый итог сказанному, можно дать и следующее объяснение термину «алгоритм»: под алгоритмом понимается единый метод решения определенного класса однотипных задач, обладающий свойствами дискретности, определенности, массовости, результативности и оперирующий конструктивными объектами. В силу свойства конструктивности алгоритма между объектами счетного множества X и множества натуральных чисел N можно установить взаимно однозначное соответствие и в дальнейшем вместо объекта x ∈ X рассматривать его номер или код объекта, являющийся натуральным числом. Таким образом, можно рассматривать работу алгоритма не на множестве X , а на более удобном для изучения множестве натуральных чисел N . Поэтому в дальнейшем предметом наших рассмотрений будут служить преимущественно арифметические функции, т.е. функции, имеющие своими областями определения и множествами значений только множества натуральных чисел. Понятно, что понятие алгоритма, описываемое свойствами 10-60, является не строгим: в формулировках этих свойств встречаются слова, не имеющие точного математического смысла. Необходимо также отметить, что, вообще говоря, не предполагается, что процесс применения алгоритма к исходным данным обязательно должен закончиться результатом через конечное число шагов. Процесс может оборваться безрезультатно или не закончиться вообще. В этом случае говорят, что алгоритм неприменим к рассматриваемым исходным данным, В конце XIX века математиками были решены многие алгоритмические проблемы. В этих проблемах требовалось найти алгоритм для решения некоторой совокупности однотипных задач. При этом задается конечная система величин, принимающая произвольные целочисленные значения. Успешное решение алгоритмических проблем дало повод надеяться, что для решения всяких массовых проблем существуют алгоритмы. Однако в XX веке на первый план выдвинулись такие алгоритмические проблемы, для решения которых не только не удавалось построить алгоритм, но само существование таких алгоритмов было сомнительным. 4
В 1900 году на международном математическом конгрессе, который состоялся в Париже, немецкий математик Давид Гильберт (1862-1943) сформулировал 23 проблемы, решение которых он считал первоочередными для развития математики. Одна из них, 10-я, состояла в следующем: пусть задано P( x1 ,..., x n ) = 0 , т.е. уравнение с целыми коэффициентами и целыми положительными степенями. Если рассматривать только целочисленные решения, то уравнение называется диофантовым. Возникает вопрос, существует ли алгоритм позволяющий ответить на вопрос, имеет ли целочисленные решения всякое диофантово уравнение или нет. Другая проблема – связанная с математической логикой «проблема общезначимости формулы логики предикатов»: существует ли эффективная процедура (алгоритм), позволяющая определить, является ли всякая формула логики предикатов общезначимой. Решения этих и других проблем были получены с помощью точного определения алгоритма. В 1936 году американский математик А.Чёрч доказал неразрешимость проблемы общезначимости формул логики предикатов. В 1970 году отечественным математиком Ю.В. Матиясевичем было получено решение 10ой проблемы Гильберта, тоже отрицательное, т.е. было доказано, что искомый алгоритм не существует. Нужно отметить, что несуществование алгоритма для решения отдельного класса однотипных задач не означает, что всякая отдельная частная задача из этого класса неразрешима. Например, уравнение x 5 − 4 x 3 + x 2 − 4 = 0 имеет решение, но класс задач связанный с решением уравнения пятой степени не вычислим. Также нужно отметить, что частный случай 10-ой проблемы Гильберта, где требовалось для произвольного уравнения с целыми коэффициентами найти решения в множестве действительных чисел был решен в 40-х годах XX века польским математиком А. Тарским положительно,. Тарский построил алгоритм, позволяющий ответить на вопрос: имеет ли всякое произвольное алгебраические уравнение с целыми коэффициентами действительные корни или нет? Чтобы доказать несуществование алгоритма, необходимо точно знать, что такое алгоритм. Решение задачи точного определения алгоритма было получено в 30-40х годах в работах Гильберта, Гёделя, Черча, Поста, Тьюринга, Маркова, Колмогорова и других ученых в различных формах, которые по существу оказались эквивалентными. При изучении курса теории алгоритмов в педагогических вузах, в основном рассматривают точное определение алгоритма в форме теории рекурсивной функции и абстрактной математической машины. А остальные формы уточнения понятия алгоритма изучаются в специальных курсах. В одной из своих работ Чёрч исходил из того, что всякую систему величин можно задать в виде набора ( x1 , x 2 ,..., x n ), где xi ∈ N , и N-натуральный ряд, т.е. N = {0,1,2,3,...}. И следовательно, он ввел понятие функции для уточнение понятия алгоритма. Хотелось бы еще раз подчеркнуть, что в дальнейшем при изложения данного курса мы будем иметь дело с арифметическими функциями, т.е. функциями, 5
имеющими своими областями определения и множествами значений только множества натуральных чисел. Определение. Арифметические функции, т. е. функции вида f : N n → N , для которых существует алгоритм их вычисления, называются вычислимыми функциями. Так как в этом определении фигурирует понятие алгоритма в интуитивном смысле, то и понятие вычислимой функции оказывается интуитивным. Тем не менее, Чёрч точно описывает совокупность арифметических функций, которая, как оказалось, совпадает с классом рекурсивных функций, ранее описанным Гёделем и высказывает гипотезу: класс рекурсивных функций совпадает с классом всюду определенных вычислимых функций. Другой американский математик, Клини, обобщил понятие рекурсивной функции на случай не всюду определенных функций. При этом он ввел понятие частично рекурсивных функций и высказал гипотезу: все частичные функции, вычислимые посредством алгоритмов, являются частично рекурсивными. Очевидно, что гипотезы Чёрча и Клини недоказуемы, так как содержат в своих формулировках интуитивное понятие вычислимой функции. Несмотря на невозможность его доказательства, тезис Чёрча-Клини является естественно научным фактом, и вся история математики служит его подтверждением. Одним из доводов этого подтверждения является свойство эквивалентности по форме различных уточнений алгоритма. I.
ТЕОРИЯ РЕКУРСИВНЫХ ФУНКЦИЙ
I.1. Примитивно рекурсивные функции. Базис элементарных функций. Операции подстановки и примитивной рекурсии. Основные свойства
Рекурсивные функции являются одним из вариантов уточнения понятия алгоритма. В общем теория рекурсивных функций включает следующие классы функций: класс примитивной рекурсивной функции (ПРФ), класс общерекурсивной функции (ОРФ) и класс частично рекурсивной функции (ЧРФ). В целом теория рекурсивных функций образуется следующим образом. В начале задается базис элементарных функций, затем определяются специальные операции над функциями. В результате применения определенного количества операций к элементарным функциям, строятся соответствующие классы функций: класс ПРФ, ОРФ и ЧРФ. Примитивно рекурсивные функции (ПРФ) Определение. Элементарными функциями называются: 1). Функции константы С qn ( x1...xn ) = q , где n = 0,1,2, K , q = 0,1,2, K 2). Функции следования S ( x ) = x + 1 3). Функции выбора I mn ( x1 , x2 K xn ) = xm , где 1 ≤ m ≤ n . Все элементарные функции - всюду определенные и алгоритмически вычислимые.
6
• Имеется небольшое число операций над элементарными переводящими вычислимые функции снова в вычислимые.
функциями,
Операция подстановки Пусть задана функция g ( y1 , K , y m ) и функции h1 ( x1 , K , x n ), h2 ( x1 , K , x n ), K , hm ( x1 , K , x n ) . Определение. Говорят, что функция f ( x1 , K , x n ) получена из этих функций с применением операции подстановки, если выполняется следующее равенство: f ( x1 , K , x n ) = g (h1 ( x1 , K , x n ), K , hm ( x1 , K , x n ))
и обозначается f = S ( g ; h1 , K , hm ), где S–означает операции подстановки. Пример 1. Пусть g ( x, y ) = x + y и h1 (u , v, t ) = uvt h2 (u , v, t ) = u 2 v t .
Тогда по определению подстановки получим, что
Пример 2. Пусть
f (u , v, t ) = uvt + u 2 v t g ( x, y ) = x + y и h1 (u , v, t ) = uvt
h2 (u , v, z ) = u 2 v z . Тогда по определению операции подстановки получим, что f (u, v, t , z ) = uvt + u 2 v z . Как видим, это не является результатом операции подстановки, так как по по условию задачи h1 , h2 − являются трехместными функциями, а получаемая функция f–четырехместная, что противоречит определению. Основные свойства операции подстановки 10. Операция подстановки сохраняет свойство всюду определенности функций, т.е. если функция g ( y1 K y m ) и функции h1 ( x1 K xn ), h2 ( x1 K xn ),K hm ( x1 K xn ). всюду определенные функции и функция f получается из них с помощью операции подстановки, то f также является всюду определенной функции. Доказательство. Пусть h1 , K , hm произвольные функции от n переменных.
Рассмотрим произвольный набор ( x1 , x 2 ,..., x n ) ∈ Ν n . Тогда h1 , K , hm будут определены в этом наборе в силу свойства всюду определенности. Функция g будет определена на наборе (h1 ( x1 K x n ), h2 ( x1 K x n ), K hm ( x1 K x n )) , в силу свойства всюду определенности, а по определению подстановки это и есть функция f . Таким образом, мы доказали, что функция f определена на наборе ( x1 , x 2 ,..., x n ) . Так как, мы взяли произвольный набор из множества натуральных чисел, то свойство доказано.
7
20. Операция подстановки сохраняет свойство алгоритмической вычислимости функций, т.е. если функции g ( y1 , K , y m ) и h1 , K , hm алгоритмически вычислимы, и то существует алгоритм Af, вычисляющий функцию f . f = S ( g ; h1 , K , hm ), Доказательство. Пусть задан произвольный набор ( x1 , x 2 ..., x n ) ∈ D f . Это
означает, что этот набор ( x1 , x2 ...xn ) ∈ Dhi , где i = 1,2, K , m . Далее поступаем следующим образом: 1 шаг: применяем к набору ( x1 , K , x n ) алгоритм A1 , вычисляющий функцию h1 . Так как функция h1 по условию алгоритмически вычислимая функция, то за конечное число шагов алгоритм A1 дает конечный результат для функция h1 . 2 шаг: применяем к набору ( x1 , K , x n ) алгоритм A2 , вычисляющий функцию h2 . Так как функция h2 по условию алгоритмически вычислимая функция, то через конечное число шагов работа алгоритма A2 завершается результативно, т.е. будут вычислено значение функция h2 на наборе ( x1 , K , x n ) и т.д. Если работа всех алгоритмов A1 , A2 ,..., Am на наборе ( x1 , K , x n ) завершилась результативно, т.е. вычислены соответствующие значения h1 ( x1 ,..., x n ), h2 ( x1 ,..., x n ), ... , hm ( x1 ,..., x n ) , на следующий шаг, т.е. m+1–шаг: применяем алгоритм Ag , вычисляющий функцию g, к набору
h1 ( x1 ,..., x n ), h2 ( x1 ,..., x n ), ... , hm ( x1 ,..., x n ) . В силу свойства алгоритмически вычислимости функцию g, через конечное число шагов алгоритм Ag завершает работу на наборе h1 ( x1 ,..., x n ), h2 ( x1 ,..., x n ), ... , hm ( x1 ,..., x n ) результативно, и этот результат будем считать значением функции f, так как по определению операции подстановки f ( x1 ,..., x n ) = g (h1 ( x1 ,..., x n ), h2 ( x1 ,..., x n ), ... , hm ( x1 ,..., x n )) . В случае, когда алгоритм Ai , где i = 1,2,..., m не остановливается или завершает работу нерезультативно, будем считать, что искомый алгоритм для вычисления данной функции, т.е. функции f ( x1 , K , x n ), не существует. Операция примитивной рекурсии Пусть задана функция g ( x1 , K , x n ) и функция h( x1 ,..., x n , y, z ) . Определение. Говорят, что функция f ( x1 , K , x n , y ) получена из функцией g ( x1 , K , x n ) и h( x1 ,..., x n , y, z ) с помощью операции примитивной рекурсии, если выполняются следующие равенства: f ( x1 , K , x n ,0 ) = g ( x1 , K , x n ) f ( x1 , K , x n , y + 1) = h( x1 , K , x n , y, f ( x1 , K , x n , y )) . Это определение имеет смысл, когда n ≠ 0 , при этом записывается f ( x1 ,..., x n , y ) = R( g ( x1 ,..., x n ), h( x1 ,..., x n , y, z )) или сокращенно f = R(g , h ) , где R–означает операции примитивной рекурсии. В случае, когда n = 0 , то операция примитивной рекурсии примет вид:
8
ϕ(0 ) = C q0
ϕ( y + 1) = h( y, ϕ( y )) , и обозначается:
(
)
ϕ = R C q0 , h .
Основные свойства операции примитивной рекурсии Операция примитивной рекурсии, так же как и операция подстановки, сохраняет свойство всюду определенности и алгоритмической вычислимости. 10. Сохранение свойства всюду определенности функций, т.е если g ( x1 , K , x n ) и h( x1 ,...x n , y, z ) всюду определенные функции, то f ( x1 , K , x n , y ) тоже будет всюду определенная функция, где f = R( g , h ) . Доказательство. Берем произвольный набор ( x1 , K , x n , y ) и докажем, что на этом наборе функция f определена. Доказательство проводим методом математической индукции по y . 1 шаг. Пусть y = 0 . Тогда по определению операции примитивной рекурсии получаем, что f ( x1 , K , x n ,0 ) = g ( x1 , K , x n ). Так как функция g всюду определенная функция по условию, то функция f определена на наборе ( x1 , K , x n ,0 ) . 2 шаг. Предположим, что функция f определена на наборе ( x1 , K , x n , y ) 3 шаг. Доказываем что функции f определена на наборе ( x1 , K , x n , y + 1) . По определению операции примитивной рекурсии получаем, что f ( x1 , K , x n , y + 1) = h( x1 , K , x n , y, f ( x1 , K , x n , y )) . А функция h обладает свойством всюду определенности по условию. Следовательно, функция f определена на наборе ( x1 , K , x n , y + 1) . Так как функция f является арифметической функцией, то метод математической индукции позволяет сделать вывод, что она всюду определена. 20. Сохранение алгоритмической вычислимости функций, т.е., если g ( x1 , K , x n ) и h( x1 ,..., x n , y, z ) являются алгоритмически вычислимыми функциями, A f , вычисляющий функцию f ( x1 , K , x n , y ) , где то существует алгоритм
f ( x1 , K , x n , y ) = R( g ( x1 ,..., x n ), h( x1 ,..., x n , y, z )) . Доказательство. Пусть задан произвольный набор ( x1 , K , x n , y ) . Докажем, что функция f алгоритмически вычислима на этом наборе. Для доказательства поступим следующим образом. Сначала применяем алгоритм Ag , вычисляющие функцию g ( x1 ,..., x n ) на набору ( x1 , K , x n ) . В случае остановки через конечное число шагов получаем значение функции g ( x1 ,..., x n ) на этом наборе, равное по определению операции примитивной рекурсии: g ( x1 , K , x n ) = f ( x1 , K , x n ,0 ).
9
После этого используем алгоритм Ah , который вычисляет значение функции h( x1 ,..., x n , y, z ) . Этот алгоритм последовательно применяем к следующим наборам: (x1 , K , x n ,0, f (x1 , K , x n ,0 )) (x1 , K , x n ,1, f (x1 , K , x n ,1)) … (x1 , K, x n , y − 1, f (x1 , K, x n , y − 1)) . Если каждый раз работа алгоритма Ah завершается результативно, то мы получаем соответствующие значения функция h( x1 ,..., x n , y, z ) равные значениям функции f ( x1 , K , x n , y ) (это следует из определения операции примитивной рекурсии): h( x1 , K , x n ,0, f ( x1 , K , x n ,0)) = f ( x1 , K , x n ,1) h( x1 , K , x n ,1, f ( x1 , K , x n ,1)) = f ( x1 , K , x n ,2 ) … h( x1 , K , x n , y − 1, f ( x1 , K , x n , y − 1)) = f ( x1 , K , x n , y ). А если не произошло остановки алгоритма Ag в наборе ( x1 , K , x n ) или не закончился результативно алгоритм Ah на одном из этапов вычисления значения функции h( x1 ,..., x n , y, z ) , (т.е. например, при вычислении h ( x1 K xn , y ' , f ( x1 K xn , y ')) , где y '∈ {0,1,2... y − 1}), то переход к следующему этапу никогда не произойдет и искомый алгоритм считается не применимым к набору ( x1 , K , x n , y ) . Приведем несколько примеров получения вычислимых функций с помощью операции примитивной рекурсии. Пример 1. Пусть задано g ( x ) = I 11 ( x ) = x , h( x, y, z ) = I 33 ( x, y, z ) + 1 и покажем, что f ( x, y ) = R( g ( x ), h( x, y, z )) , где f ( x, y ) = x + y Согласно определению операции примитивной рекурсии f ( x,0 ) = g ( x ) = I11 ( x ) = x f ( x, y + 1) = h( x, y, f ( x, y ) ) = I 33 ( x, y, f ( x, y ) + 1 = f ( x, y ) + 1 .
Тогда
f ( x,1) = h( x,0, f ( x,0 )) + 1 = f ( x,0 ) + 1 = x + 1 f ( x,2 ) = h( x,1, f ( x,1)) + 1 = f ( x,1) + 1 = x + 2 f ( x,3) = h( x,0, f ( x,2 )) + 1 = f ( x,2 ) + 1 = x + 3 … f ( x, n ) = h( x, n − 1, f ( x, n − 1)) + 1 = f ( x, n − 1) + 1 = x + n Предположим, что для некоторого n ∈ N последнее равенство справедливо и докажем, что тогда f ( x, n + 1) = x + (n + 1). Действительно, пусть f ( x, n ) = x + n для некоторого n ∈ N . Тогда по определению операции примитивной рекурсии получаем, что f ( x, n + 1) = I 33 ( x, n, f ( x, n )) + 1 = f ( x, n ) + 1 = x + (n + 1) . 10
Таким образом, функция f ( x, y ) = x + y получается из функции g ( x ) = I11 ( x ) = x
и h( x, y, z ) = I 33 ( x, y, z ) + 1 с помощью операции примитивной рекурсии. Пример 2. Пусть f ( x, y ) = x ⋅ y . Требуется показать, из каких элементарных функций с помощью операции примитивной рекурсии она получена. Для решения задачи нахождения элементарных функций воспользуемся определением операции примитивной рекурсии, после чего получим, что f (x,0 ) = x ⋅ 0 = 0 = C 01
f ( x, y + 1) = x ⋅ ( y + 1) = x + x ⋅ y = I 13 ( x, y, z ) + I 33 ( x, y, z ) Тогда
f ( x,1) = h( x,0, f ( x,0 )) = x + f ( x,0 ) = x + 0 = x
f ( x,2 ) = h( x,1, f ( x,1)) = x + f ( x,1) = x + x = 2 x
...
f ( x, n ) = h( x, n − 1, f ( x, n − 1)) = x + f ( x, n − 1) = x + (n − 1)x = nx. Очевидно, функция f ( x, y ) = x ⋅ y –есть результат операции примитивной
рекурсии над функциями g ( x ) = C 01 и h( x, y, z ) = I 13 ( x, y, z ) + I 33 ( x, y, z ) . Определение. Примитивно рекурсивным описанием функции (ПРО) f называется конечная последовательность функций ϕ1 ,..., ϕ n , удовлетворяющая следующим условиям: последний член этой последовательности есть сама функция f , т.е. ϕ n = f ; 1) 2) для любого i = 1,2,...n , ϕi – есть либо элементарная функция, либо получается из предшествующих ей функций в этой последовательности с помощью одной из операции примитивной рекурсии или подстановки. Определение. Функция f называется примитивно рекурсивной функцией (ПРФ), если существует хотя бы одно её ПРО. Из определения следует, что всякая примитивно рекурсивная функция f имеет несколько различных ПРО. Например, для функции g ( x, y ) = x + y ПРО является последовательность следующих функций: I 11 , I 33 + 1, R I 11 , I 33 + 1 , x + y 1) 2)
I 11 , s, I 33
( ) , S (s; I ), R (I , S (s; I )), x + y 3 3
1 1
3 3
и т.д. Основные свойства ПРФ 10. Всякая примитивно рекурсивная функция f является всюду определенной функцией. Доказательство. Предположим, что функция f есть ПРФ, следовательно, по определению примитивно рекурсивности функций, она имеет ПРО. Пусть последовательность функций ϕ1 ,..., ϕ n – есть её ПРО. Будем доказывать, что каждая функция этой последовательности является всюду определенной. Воспользуемся методом математической индукции. 11
1) Пусть n = 1, тогда из определения ПРО следует, что ϕ1 является элементарной функцией, следовательно, она всюду определена. 2) Предположим, что для некоторого i < n , все функции ϕ k , 1 ≤ k ≤ i являются всюду определенными. 3) Докажем, что ϕ k +1 –всюду определена. В этом случае функция ϕ k +1 , является либо элементарной функцией, либо получается из предшествующих ей функций в этой последовательности с помощью одной из операций подстановки или примитивной рекурсии. По предположению индукции все функции последовательности ϕ1 ,..., ϕ k , являются всюду определенными и операции подстановки и примитивной рекурсии сохраняют свойство всюду определенности, следовательно ϕ k +1 –всюду определенная функция. Таким образом, метод математический индукции позволяет сделать вывод, что все функции из последовательности ϕ1 ,..., ϕ n составляют ПРО функции f , следовательно, ϕ n = f всюду определенная функция. Ч.т.д.. 20. Если функция f получена из примитивно рекурсивных функций с применением операций подстановки или примитивной рекурсии, то она является ПРФ. Например, функция f ( x, y ) = x ⋅ y получается из f ( x, y ) = x + y с применением операции примитивной рекурсии, т.е. x ⋅ y = R C 01 , I 13 ( x, y, z ) + I 33 ( x, y, z ) . Так как, f ( x, y ) = x + y является ПРФ, то получаемая функция тоже является ПРФ. 30. Всякая ПРФ, является алгоритмически вычислимы. Доказательство. Это свойство доказывается так же, как и первое свойство ПРФ. Действительно, поскольку все элементарные функции алгоритмически вычислимы и операции подстановки и примитивной рекурсии сохраняют свойство алгоритмической вычислимости функций, то все функции, составляющие ПРО для примитивной рекурсивной функции f , являются алгоритмически вычислимыми, следовательно, f – алгоритмически вычислимая функция.
(
)
I.2. Примитивно рекурсивные функции относительно совокупности функций. Основные свойства.
Пусть задана последовательность функций Ψ = {Ψ1 , Ψ2 , K , Ψn }. Определение. Примитивно рекурсивное описание (ПРО) функции f относительно совокупности Ψ называется конечная последовательность функций вида ϕ1 ,..., ϕ n , удовлетворяющая следующим условиям: 1. ϕ n = f .
2. Для любого i = 1, K , n , ϕ i – есть либо элементарная функция, либо принадлежит совокупности Ψ , либо получается из предшествующих ей функций в этой
12
последовательности с помощью одной из операций примитивной рекурсии или подстановки. Определение. Функция f называется ПРФ относительно совокупности Ψ , если существует ее ПРО относительно совокупности Ψ . Например, функция f ( x, y ) = x ⋅ y является ПРФ относительно совокупности Ψ = {x + y}. Тогда ПРО данной функции относительно Ψ = {x + y} можно считать последовательность следующих функций: C01 , I13 , I 33 , +, S +; I 13 , I 33 , R C 01 , S +; I 13 , I 33 , x ⋅ y . В данной последовательности функций через «+» обозначена функция f ( x, y ) = x + y .
(
) (
(
))
Основные свойства ПРФ относительно совокупности Ψ . 10. Если функция f – ПРФ относительно совокупности Ψ = {Ψ1 , Ψ2 , K , Ψn } , и Ψ ⊆ Г , то функция f , также является ПРФ относительно совокупности функций из Г . (где Г –множество, включающее произвольные арифметические функции). Доказательство. Пусть функция f ПРФ относительно совокупности Ψ = {Ψ1 , Ψ2 , K , Ψn } . Тогда существует ее ПРО относительно совокупности Ψ , т.е. ϕ1 , K , ϕ k . Если ϕ i ∈ Ψ , то в силу того что Ψ ⊆ Г , ϕ i ∈ Γ . Следовательно, ПРО функции f относительно совокупности Ψ является и ПРО функции f относительно совокупности Г . Отсюда следует, что f есть ПРФ относительно Г . Ч.т.д. 20. Если f ПРФ относительно совокупности Ψ = {Ψ1 , Ψ2 , K , Ψn } и Ψ ′ получается из Ψ при удалении какой – то функции ψ j (где ψ j - ПРФ), т.е. Ψ ′ = Ψ \ Ψ j , то функция f будет также ПРФ относительно совокупности Ψ ′ .
{ }
Доказательство. Пусть имеется ПРО функции f относительно совокупности Ψ = {Ψ1 , Ψ2 , K , Ψn } . А также известно, что ψ j ∈ ψ , (где j = 1,2,..., n ) является ПРФ. Пусть Ψ ′ = Ψ \ Ψ j . Далее поступаем следующим образом. Рассмотрим ПРО
{ }
функции f относительно совокупности Ψ . Относительно принадлежности функции ψ j к данной последовательности функций, возможно два случая. Либо она принадлежит данной последовательности функций, либо не принадлежит. В рассматриваемом ПРО, если функция ψ j не встречается, то это ПРО оставляем без изменения. Очевидно, его можно считать ПРО функции f относительно совокупности Ψ ′ = Ψ \ Ψ j . В случае, когда в рассматриваемом ПРО функции f относительно
{ }
совокупности Ψ , встречается функция ψ j , то перед первым ее появлением в ПРО вместо ψ j записываем ее ПРО. Тогда полученная последовательность функций является ПРО функции f относительно совокупности Ψ ′ = Ψ \ Ψ j . Ч.т.д.
{ }
3 . Если f –ПРФ относительно совокупности Ψ = {Ψ1 , Ψ2 , K , Ψn } и каждая функция из Ψ есть ПРФ относительно Г , то f является ПРФ относительно Г . 0
13
Доказательство. Доказательство аналогично доказательству свойства 20. Рассмотрим ПРО функции f относительно совокупности Ψ , т.е. ϕ1 , K , ϕ k . Каждая функция ϕ i , где i = 1,2,..., k принадлежит совокупности Ψ . Так как каждая функция совокупности Ψ является ПРФ, то некоторые из них заменим на ПРО относительно Г . Таким образом, образуем ПРО функции f относительно Г . Следовательно функция f –ПРФ относительно совокупности Г . 40. Если f – ПРФ относительно совокупности Ψ = {Ψ1 , Ψ2 , K , Ψn } , и каждая функция из совокупности Ψ , есть ПРФ, то f тоже является ПРФ. (Доказательство самостоятельно.) I.3. Производные операции над функциями
Кроме операции подстановки и примитивной рекурсии, которые являются основными, используются и другие операции, которые сохраняют свойства примитивной рекурсивности функций, их называют производными и они получаются из основных операций и базы элементарных функций. Пусть задана совокупность функций Ψ = {Ψ1 , Ψ2 , K , Ψn } и в результате некоторой операции над этими функциями получена функция ϕ = F (Ψ1 , Ψ2 , K , Ψn ). Определение. Операция F называется примитивно рекурсивной операцией, если из равенства ϕ = F (Ψ1 , Ψ2 ,K Ψn ) следует, что функция ϕ есть ПРФ относительно совокупности Ψ . Рассмотрим несколько примеров. 1. Пусть задана некоторая функция g ( x, y ) и функция ϕ( x, y, z ) = g ( x, y ) . В этом случае говорят, что функция ϕ получена из функции g с помощью операции введения фиктивной переменной, именно, введением фиктивной переменной z . При этом функция ϕ( x, y, z ) является ПРФ относительно совокупности {g}. Действительно, ϕ можно представить следующим образом:
ϕ( x, y, z ) = g ( I 13 ( x, y, z ) , I 23 ( x, y, z ) ).
Как видим, функция ϕ получена из функции g и I13 , I 23 операцией подстановки, т.е.
(
)
ϕ = S g ; I 13 , I 23 . 2. Пусть задана функция g ( x, y, z ) и если ϕ( x, y ) = g ( x, y, a ) , то говорят, что функция ϕ получена из функции g с помощью операции замены константы. Действительно ϕ( x, y ) можно представить следующим образом:
(
)
ϕ( x, y ) = S g ; I 12 , I 22 , C a2 и называется операция замены константы. Пусть задана функция g ( x, y ) и ϕ( x, y ) = g ( y, x ) , то говорят, что функция ϕ 3. получена из функции g с применением операции перестановки переменных. Действительно функцию ϕ( x, y ) можно представить следующим образом:
(
)
ϕ( x, y ) = S g ; I 22 , I 12 . 14
4. Пусть дана функция g ( x) и ϕ( x ) = g ( x, x ) , то говорят, что функция ϕ получена из функции g с помощью операции отождествленной переменной. Действительно, функцию ϕ можно представить следующим образом:
(
)
(
)
ϕ = g I 11 , I 11 , т.е. ϕ( x ) = S g ; I 11 , I 11 . 5. Пусть заданы функции g , h1 , h2 ,..., hk , где hi , i = 1,2,...k – некоторые функции различного количества переменных. Если ϕ = g (h1 , h2 ,..., hk ) , то говорят, что функция ϕ получена из функции g с помощью операции произвольной подстановки (суперпозиции). Например, пусть имеются функции g ( x1 , x 2 , x 3 ) , h1 (x ) h2 ( x, y )
h3 ( x, y, z )
и
ϕ( x, y, z ) = g (h1 ( x ), h2 ( x, y ), h3 ( x, y, z )). Тогда функция ϕ является ПРФ относительно совокупности {g , h1 , h2 , h3 }. Покажем, что данная операция справедлива. Функции ϕ можно представить следующим образом. ϕ( x, y, z ) = g h1 I 13 ( x, y, z ) , h2 I 13 ( x, y, z ), I 23 ( x, y, z ) , h3 I 13 ( x, y, z ), I 23 ( x, y, z ), I 33 ( x, y, z ) . Введем следующие обозначения: h1* ( x, y, z ) = h1 I 13 ( x, y, z )
( (
) (
) (
( h ( x, y, z ) = h (I h ( x, y, z ) = h (I * 2 * 3
Как видим, что функции операцией
введения
3 1 3 3 1 h1* , h2*
фиктивных
относительно совокупности {h1 }
2
)
(x, y, z ), I 23 (x, y, z )) (x, y, z ), I 23 (x, y, z ), I 33 (x, y, z ))
получены из функции h1 , h2 соответственно
переменных. и
))
h1* ,
Поэтому
является
ПРФ
h2* – ПРФ относительно совокупности {h2 } .
Очевидно, h3* – ПРФ относительно совокупности {h3 }. Тогда функция ϕ приобретает вид: ϕ = S g ; h1* , h2* , h3* .
(
)
{
}
Следовательно, она ПРФ относительно совокупности g , h1* , h2* , h3* . Учитывая свойство 10 относительно примитивной рекурсивности , получаем, что функция ϕ – ПРФ относительно совокупности {g , h1 , h2 , h3 }. I.4. Операции конечного суммирования и конечного произведения
Пусть задана функция g ( x1 , K , x n , y ) . 15
Определение. Говорят, что функция σ( x1 , K , x n , z ) получена из функции g ( x1 , K , x n , y ) с применением операции конечного суммирования, если для любого набора переменных ( x1 , K , x n , z ) выполняется следующее равенство: σ( x1 , K , x n , z ) = g ( x1 , K , x n ,0 ) + g ( x1 , K , x n ,1) + K + g ( x1 , K , x n , z ) =
(1)
z
= ∑ g ( x1 , K , x n , t ) t =0
Определение. Говорят, что функция δ( x1 , K , x n , z ) получена из функции g ( x1 , K , x n , y ) с применением операции конечного произведения, если для любого набора переменных ( x1 , K , x n , z ) выполняется следующее равенство:
δ( x1 , K , x n , z ) = g ( x1 , K , x n ,0) ⋅ g ( x1 , K , x n ,1) ⋅ K ⋅ g ( x1 , K , x n , z ) = (2)
z
= ∏ g ( x1 , K , x n , t ) t =0
Теорема 1. Операции конечного суммирования и конечного произведения сохраняют свойство примитивной рекурсивности функции. Доказательство. Приведем доказательство относительно операции конечного суммирования (аналогично доказывается относительно операции конечного произведения).
Пусть
z
σ( x1 , K , x n , z ) = ∑ g ( x1 , K , x n , t ) , тогда по определению операции t =0
примитивной рекурсии получим: σ(x1 , K , x n ,0 ) = g (x1 , K , x n ,0 ) z
σ( x1 , K , x n , z + 1) = ∑ g ( x1 , K , x n , t ) + g ( x1 , K , x n , z + 1) t =0
Таким образом, функция σ получается по операцией примитивной рекурсии из функции g ′ и h( x1 , K , x n , z, u ) , т.е. σ = R( g ′, h ) . Действительно g ′( x1 , K , x n ) = g I 1n , I 2n , K , I nn , C 0n
(
)
h( x1 , K , x n , z , u ) = g ( I 1n + 2 (x1 , K , x n , z , u ), K , I nn + 2 ( x1 , K , x n , z , u ),
I nn++12 (( x1 , K , x n , z , u ) + 1) + I nn++22 ( x1 , K , x n , z , u ) Очевидно, что σ( x1 , K , x n ,0 ) = g ′( x1 , K , x n )
σ( x1 , K , x n , z + 1) = h( x1 , K , x n , z , σ( x1 , K , x n , z ))
Из задания функций g ′ и h следует, что они являются ПРФ соответственно относительно совокупности {g }. Функция σ –ПРФ относительно функций g ′ и h. 16
Следовательно, операция конечнего суммирования примитивной рекурсивности функции. Ч.т.д.
сохраняет
свойство
⎡ x ⎤ ⎧целой части от деления числа x на число y, если y ≠ 0 . ⎢ y ⎥ = ⎨ x, если y = 0 ⎣ ⎦ ⎩ Покажем, что данная функция является примитивно рекурсивной. Для доказательства ПРФ данной функции используем операцию конечного суммирования. Рассмотрим два случая: 1) пусть y > 0 . Введем обозначения Пример.
⎡x⎤ ⎢ y⎥ = q . ⎣ ⎦
Тогда по теореме о делении с остатком, x = q ⋅ y + r, где 0 ≤ r < y . Очевидно, что число q удовлетворяет соотношениям q ⋅ y ≤ x < y ⋅ (q + 1) .
Рассмотрим следующие разности: y ⋅ 0 −& x
y ⋅ 1 −& x
... y ⋅ q −& x y ⋅ (q + 1) −& x ... y ⋅ x −& x Нетрудно подсчитать, что число нулей в этой последовательности равно q + 1 . Поэтому, исходя из вышеуказанной разности, q можно выразить следующим образом ⎡x⎤ x q = ⎢ ⎥ = ∑ sg ( y ⋅ t −& x ) −& 1 ⎣ y ⎦ t =0 . (3) ⎡x⎤ 2) Пусть y=0. В этом случае, функция ⎢ ⎥ – может быть получена из функции ⎣ y⎦
17
x
ϕ( x, y, z ) = ∑ sg ( y ⋅ t −& x )
(4)
t =0
операцией отождествленных переменных, т.е. ⎡x⎤ ⎢ y ⎥ = ϕ( x, y, z ) . ⎣ ⎦ Таким образом, исходя из того, что x
ϕ( x, y, z ) = ∑ sg ( y ⋅ t −& x ) –ПРФ t =0
и операция отождествленых переменных сохраняет свойство рекурсивности функций, следует, что ⎡x⎤ ⎢ y ⎥ –ПРФ. ⎣ ⎦
примитивной
I.5. Предикат, логическая функция. Логические операции с предикатами.
Предикат – логическая функция, определенная на некотором множестве M, то есть такая n–местная функция p, которая каждому упорядоченному набору (x1 ,..., x n ) из множества M сопоставляет некоторое высказывание, обозначаемое p( x1 ,..., x n ) . В этом случае p называется n–местным предикатом на множестве M. Из курса математической логики, нам известно, что высказывание обычно отождествляется с его истинностным значением 1 («истина») или 0 («ложь»). Исходя из этого, можно дать определение предиката для различной местности. Пусть задано произвольное множество М≠∅. Определение. Одноместным предикатом р(х) на множестве М называется функция вида (5) p : M → {1,0}. Двуместным предикатом p( x1 , x 2 ) на множестве М называется функция вида p : M × M → {1,0}. (6) и т.д. n–местным предикатом p( x1 ,..., x n ) на множестве M называется функция вида p : M × M × ... × M → {1,0} = M n → {1,0}. (7) Например, пусть в качестве множества M задано множество натуральных чисел N. Обозначим через p( x ) : «x–простое число».
18
Тогда, в зависимости от значения x, логическая функция p( x ) принимает либо значение 1 («истина») либо значение 0 («ложь»). Действительно, при значениях x = 2,3,5,7,... , функция p( x ) = 1 и в случае, когда x = 4,6,8,9,... p( x ) = 0 . В данном примере в качестве объекта рассматриваются элементы из множества натуральных чисел, а в качестве свойства взято «простое число», и это свойство обозначено через p. Пусть, на множестве действительных чисел задан двуместный предикат p( x, y ) , означающие «x меньше y». Этот предикат становится истинным или ложным высказыванием, если x и y заменить действительными числами: «2 меньше 10», «3 меньше 5», «1,9 меньше 0,9» и т.д. Как видим, в этом случае рассматривается отношения между элементами в множестве R.. Тогда через p в данном случае обозначено отношение между объектами, где в качестве объектов взяты x и y. Таким образом, другими словами, одноместный предикат отражает наличие или отсутствие того или иного свойства у объекта, а предикат от нескольких переменных выражает отношение между объектами в рассматриваемом множестве. Пусть задано множество Μ –область определения предиката p( x1 ,..., x n ) , (где M ≠ ∅ –произвольная множества). Определение. Подмножество множества Μ , состоящее из тех значений переменных, при которых данный предикат преврашается в истинностное высказывание, называется областью истинности предиката и обозначается следующим образом: (8) M [ p( x )] = {x ∈ M | p( x ) = 1} . Операции с предикатами. Пусть на множестве Μ ≠ ∅ заданы предикаты p( x ) и q( x ) . Определение. Конъюнкцией предикатов p( x ) и q( x ) называется бинарный предикат, обозначаемый r ( x ) = p( x ) ∧ q( x ) , который принимает значение «истина» для тех и только тех значений x ∈ M , при которых оба исходных предиката p( x ) и q( x ) превращаются в истинное высказывание. Пусть M 1 – множество истинности предиката p( x ) , M2 – множество истинности предиката q( x ) , тогда множеством истинности предикат r ( x ) является множество вида M [r ( x )] = M 1 I M 2 . (9) Определение. Дизъюнкцией предикатов p( x ) и q( x ) называется новый предикат, обозначаемый s ( x ) = p( x ) ∨ q( x ) , который принимает значение «истинна» для тех и только тех значений x ∈ M , при которых хотя бы одно из высказываний (предикатов) p( x ) и q( x ) истинно. M [s( x )] = M 1 U M 2 (10) – множество истинности предикат s ( x ). Определение. Отрицанием предиката p( x ) с областью определения M называется предикат с той же областью определения, обозначаемый p ( x ) , который 19
принимает значение «истина» для тех и только тех значений x ∈ M , при которых p( x ) есть ложное высказывание. Множеством истинности предикат p( x ) является множества M [ p ( x )] = M \ M 1 (11) Определение. Импликацией предикатов p( x ) и q( x ) называется новый предикат, обозначаемый z ( x ) = p( x ) → q( x ) , который принимает значение «ложь» для тех и только тех значений x ∈ M , при которых предикат p( x ) является истинным высказыванием, а q( x ) –ложным. Множество истинности предиката z ( x ) является множества M = M1 U M 2 . (12) I.6. Операции навешивания кванторов. Операции навешивания кванторов относительно двуместных предикатов
В логике предикатов кроме операций отрицания, дизъюнкции, конъюнкции, импликации и эквивалентности, рассматриваются и операция навешивания квантора всеобщности и квантора существования. Пусть на множестве Μ ≠ ∅ задан одноместный предикат p( x ) . Определение. Будем говорить, что выражение вида ∀xp( x) на множестве M представляет собой истинное высказывание, тогда и только тогда, когда p( x ) истинно для любого элемента x ∈ M . Из определение следует, что если p( x ) истинно на множестве M , то высказывание ∀xp( x) тоже истинно на этом множестве; и в случае, когда p( x ) ложно на множестве M , то высказывание ∀xp( x) -тоже является ложным на данном множестве; Определение. Будем говорить, что выражение ∃xp( x) на множестве M представляет собой истинное высказывание, тогда и только тогда, когда p( x ) истинно хотя бы для одного элемента из этого множества. Очевидно, если p( x) = 0 , то ∃xp( x) = 0 ; и если p ( x) ≠ 0 , то ∃xp( x) = 1 . Пусть на множестве Μ ≠ ∅ задан двуместный предикат p( x, y ) . Определение. Выражение ∀xp( x, y ) при y 0 ∈ M представляет собой высказывание ∀xp( x, y 0 ) = 1 (истинное высказывание) тогда и только тогда, когда p( x, y 0 ) – истинно для любого элемента x ∈ M . Определение. Выражение ∃xp( x, y ) при заданном y0 ∈ M представляет высказывание ∃xp( x, y 0 ) = 1 (истинное высказывание), тогда и только тогда, когда p( x, y 0 )- истинно хотя бы для одного элемента из множества M . Таким образом, операции навешивания кванторов (всеобщности и существования) к двуместным предикатам приводит к одноместному предикату, т.е. (13) p( y ) = ∀xp( x, y ) 20
p( y ) = ∃xp( x, y )
(14)
Пример. Пусть задан двуместный предикат p( x, y ) = ∃x( x < y ), где x, y ∈ R . Для проверки на истинность предиката, поступим следующим образом. Берем произвольный элемент y 0 из множество M, подставляя в данный предикат, получим одноместный предикат: p( x ) = (x<y0 ). Тогда выражение ∃х (x<y0) – является истинным высказыванием, так как во множестве действительных чисел всегда для произвольного элемента из этого же множества, найдется элемент меньше его. Если взять предикат вида p( x, y ) = ∀x( x < y ), где x, y ∈ R , то он является ложным во множестве R. (проверка самостоятельно). Если множество М, на котором рассматривается предикат р(х) является то высказывание вида конечным множеством, т.е. M = {x1 ,..., x n }, ∀xp( x) тождественно равно высказыванию p( x1 ) ∧ ⋅ ⋅ ⋅ ∧ p( x n ), т.е. имеет место следующее равенство ∀xp( x ) = p( x1 ) ∧ ⋅ ⋅ ⋅ ∧ p( x n ) . (15) Аналогично, если множество М, на котором рассматривается предикат р(х) является конечным множеством, т.е. M = {x1 ,..., x n }, то высказывание вида ∃xp( x) тождественно равно высказыванию p( x1 ) ∨ ⋅ ⋅ ⋅ Q ∨ p( x n ) , т.е. имеет место следующее равенство ∃xp( x ) = p( x1 ) ∨ ⋅ ⋅ ⋅ ∨ p( x n ) . (16) I.7. Примитивно рекурсивный предикат
Как нам известно, предикатом называют логическую функцию определенную на заданном множестве объектов. Будем рассматривать в качестве области определения предиката конечный набор, состоящий из натуральных чисел. Таким образом, рассматриваемые предикаты представляют логические функции вида: p : N n → {0,1}. В качестве примера предикатов можно привести следующие логические функции: r ( x ) = ( x − простое число ) ; q ( x, y ) = ( x = y ) ; p ( x, y ) = ( x ≤ y ) и т.д. Определение. Функция ϕ( x1 ,..., x n ) называется представляющей функцией для предиката p( x1 ,..., x n ) , если выполняются следующие условия: 1) Dϕ = D p = D , т.е. их область определения совпадают; 2) для любого набора ( x1 ,..., x n ) из области определения D
21
⎧0, если p( x1 ,..., x n ) = u ϕ( x1 ,..., x n ) = ⎨ (17) ⎩1, если p( x1 ,..., x n ) = л Определение. Предикат р(х) называется примитивно рекурсивным, если его представляющая функция является примитивно рекурсивной функцией.
Например, следующие предикаты p1 ( x, y ) = ( x = y ) ; p 2 ( x, y ) = ( x < y ) являются примитивно рекурсивными, так как их представляющие функции являются ПРФ. Действительно, в качестве представляющей функции первого предиката можно взять функцию вида ϕ1 ( x ) = sg x − y , (18) ⎧1, если x > 0 где sg ( x ) = ⎨ ⎩0, если x = 0 является ПРФ. Покажем, что данная функция –ПРФ. По определения операции примитивной рекурсии получаем, что sg (0 ) = g (0 ) = 0 = C 00 sg ( x + 1) = h( x, sg ( x )) = C12 Следовательно, ПРО данной функции является последовательность функций C 00 , C12 , R C 00 , C12 , sg ( x ). Функция f ( x, y ) = x − y , определяется следующим образом: если x ≥ y ⎧ x − y, (19) f ( x, y ) = x − y = ⎨ , если − < y x x y ⎩ Прежде чем доказать, что функция f ( x, y ) = x − y является примитивно рекурсивной, рассмотрим следующие функции: если x = 0 ⎧0, 1) f ( x ) = x −& 1 = ⎨ (20) ⎩ x − 1, если x > 0
(
2)
)
если x ≤ y ⎧0, f ( x, y ) = x −& y = ⎨ ⎩ x − y, если x > y
(21)
Покажем, что эти функции являются ПРФ. 1) Рассмотрим функцию (20). По определения операции примитивной рекурсии получаем, что f (0 ) = g (0 ) = 0 = C 00 f ( x + 1) = ( x + 1) −& 1 = x = h( x, f ( x )) = I 12 ( x, f ( x )). Следовательно, ПРО для данной функции является последовательность функций: C 00 , I 12 , R C 00 , I 12 , x −& 1 .
(
)
22
2) Рассмотрим теперь функцию (21). По определения операции примитивной рекурсии получаем, что f ( x,0 ) = g ( x ) = x = I 11 ( x ) f ( x, y + 1) = x −& ( y + 1) = ( x −& y ) −& 1 = h( x, y, f ( x, y )) = I 33 ( x, y, f ( x, y )), где в последнем равенстве f ( x, y ) = ι( f ( x, y )) , т.е. получили функцию сходную с функцией в первом случае, следовательно, в качестве ПРО данной функции можно взять последовательность функций: I 11 , ι( f ( x, y )), R I 11 , ι( f ( x, y )) , x −& y . Исходя из последнего примера, функцию (19), будем представлять следующим образом: f ( x, y ) = x − y = ( x −& y ) + ( y −& x ). Очевидно, данная функция является ПРФ. (покажите самостоятельно) Теперь можно говорить, что выбранная представляющая функция (18), т.е. ϕ1 ( x, y ) = sg x − y для предиката p1 ( x, y ) = ( x = y ) является ПРФ и удовлетворяет исходным условиям, т.е. ⎧1, если x ≠ y ϕ1 ( x ) = sg x − y = ⎨ ⎩0, если x = y Для предиката p 2 ( x, y ) = ( x < y ) , в качестве представляющей функции можно брать ϕ 2 ( x, y ) = sg ( x −& y ) (22) и очевидно, она удовлетворяет исходным условиям и является ПРФ. Определение. Функция f ( x1 ,..., x n ) называется ПРФ относительно совокупности функций и предикатов ψ = {ϕ1 ,..., ϕ m , p1 ,..., p k } , если она ПРФ относительно совокупности функций ϕ1 ,..., ϕ m , ψ 1 ,..., ψ k , где ψ i 1 ≤ i ≤ k представляющая функция предиката pi . Определение. Предикат p( x1 ,..., x n ) называется ПРФ относительно совокупности функций и предикатов ψ = {ϕ1 ,..., ϕ m , p1 ,..., p k }, если представляющая функция предиката p является примитивно рекурсивной относительно совокупности функций ϕ1 ,..., ϕ m , ψ1 ,..., ψ k , где ψ i 1 ≤ i ≤ k - представляющая функция предиката pi . Теорема 2. Логические операции над предикатами сохраняют свойства примитивной рекурсивности предикатов. Доказательство. Приведем в виде таблицы, истинностные значений логических операций: конъюнкции, дизъюнкции, импликации и отрицания.
(
)
23
p(x)
p(x )
q(x)
p(x) ∧ q(x)
p(x) ∨ q(x)
p(x)→q(x)
0 0 1 1
1 1 0 0
0 1 0 1
0 0 0 1
0 1 1 1
1 1 0 1 Таб.1.1.
Пусть ϕ p ( x ) – представляющая функция предиката р(х); ϕ q ( x ) – представляющая функция
предиката q(x), где в общем случае
x = ( x1 ,..., x n ) . Тогда нетрудно проверить, что следующие функции являются представляющими функциями для соответствующих логических операций относительно предикатов представленных в таблице 1.1: ϕ p ∧ q = sg ϕ p ( x ) + ϕ q ( x ) (23)
(
ϕ p∨ q = ϕ p (x ) ⋅ ϕ q (x )
(
( )) ϕ p = sg (ϕ p ( x ))
ϕ p →q = sg ϕ p ( x ) + sg ϕ q ( x )
)
(24) (25)
(26) В виде упражнения, проверьте самостоятельно что представленные функции действительно удовлетворяют требуемому условию как представляющие функции предиката. I.8. Операция навешивания ограниченного квантора над предикатами
Пусть задан двуместный предикат p(x,y), где в общем случае x = ( x1 ,..., x n ) . Определение. Говорят, что предикат R(x,z) получен из предикат p(x,y) с применением операции навешивания ограниченного квантора существования, т.е. R( x, z ) = (∃y ) y ≤ z p( x, y ), если выполняется следующее равенство:
R( x, z ) = p( x,0 ) ∨ p( x,1) ∨ ⋅ ⋅ ⋅ ∨ p( x, z ) . (27) Определение. Говорят, что предикат Q(x,z) получен из предиката p(x,y) с применением операции навешивания ограниченного квантора всеобщности, т.е. Q( x, z ) = (∀y ) y ≤ z p( x, y ) , если выполняется следующее равенство:
Q( x, z ) = p( x,0 ) ∧ p( x,1) ∧ ... ∧ p( x, z ) .
Приведем пример. Пусть
(28)
p ( x, y ) = ( x + y = 5 ) .
Рассмотрим 24
R( x, z ) = (∃y ) y ≤ z p( x, y )
и
Q( x, z ) = (∀y ) y ≤ z p( x, y ) .
Очевидно
R(4,2 ) = (∃y ) y ≤ 2 (4 + y = 5) = u R(1,3) = (∃y ) y ≤3 (1 + y = 5) = л
Q(4,2 ) = (∀y ) y ≤ 2 (4 + y = 5) = л
Q(5,0 ) = (∀y ) y ≤0 (5 + y = 5) = u
Теорема 3. Операция навешивания ограниченных кванторов существования и всеобщности сохраняет свойство примитивной рекурсивности функций относительно совокупности {p}. Доказательство. Пусть задан предикат p(x,y) и ϕ p ( x, y ) –представляющая его функция и пусть R( x, z ) = (∃y ) y ≤ z p( x, y ).
Представляющую функцию предиката R(x, z) обозначим через ϕ R ( x, z ) и покажем, что ее можно представить следующим образом z
ϕ R ( x, z ) =
∏ ϕ p ( x, y ) .
(29)
y =0
Действительно: пусть предикат R( x, z 0 ) = u . Тогда по определению операции навешивания 1) ограниченного квантора существования, найдется y 0 такое, что 0 ≤ y 0 ≤ z 0 и p( x, y 0 ) = u , следовательно ϕ p ( x, y 0 ) = 0 . Отсюда следует, что ϕ R ( x, z ) =
z
∏ ϕ p ( x, y ) = 0 . y =0
Предположим, что предикат R( x, z 0 ) = л . 2) Тогда по определению операции навешивания ограниченного квантора существования, для любого набора ( x, y ) , p( x, y ) = л , следовательно ϕ p ( x, y ) = 1 и ϕ R ( x, z ) =
z
∏ ϕ p ( x, y ) = 1 . y =0
Так как ранее у нас было доказано, что операция конечного произведения обладает свойством примитивной рекурсивности, то ϕ R ( x, z ) является примитивно рекурсивной относительно совокупности ϕ p ( x, y ) . Пусть Q( x, z ) = (∀y ) y ≤ z p( x, y ) .
{
}
25
Аналогично доказывается случай, когда задана операция навешивания ограниченного квантора всеобщности. Легко можно доказать, что в качестве представляющей функции предиката Q( x, z ) можно брать ⎛ z ⎞ ϕ Q ( x, z ) = Sg ⎜ ∑ ϕ p ( x, y )⎟ (30) ⎜ y =0 ⎟ ⎝ ⎠ и ϕ R ( x, z ) является ПРФ относительно совокупности ϕ p ( x, y ) . В виде упражнение докажите самостоятельно. Пусть задана совокупность функций {ϕ1 ,..., ϕ k } и совокупность предикатов {p1 ,..., p m }. Определение. Функция f ( x1 ,..., x n ) , называется ПРФ относительно заданной совокупности функций и предикатов, если она ПРФ относительно совокупности ψ = ϕ1 ,..., ϕ m , ϕ p1 ,..., ϕ pm , где ϕ pi − представляющая функция предиката pi,
{
{
}
}
1≤ i ≤ m. I.9. Кусочное задание функции
Пусть задана совокупность функций { f1,..., f k , f k +1} и совокупность предикатов {p1,..., pk }, где f i = f i (x1 ,..., x n ), i = 1,2,..., k , k + 1 и p j = p j (x1 ,..., x n ), j = 1,..., k . , причем области истинности предикатов попарно не пересекаются. Введем следующие обозначения: x = ( x1 ,..., x n ) . Определение. Говорят, что функция f ( x ) задана кусочным образом относительно заданной совокупности функций и предикатов, если она удовлетворяет следующим условиям: если p1 ( x ) = u ⎧ f1 ( x ), ⎪ f ( x ), если p1 ( x ) = u ⎪⎪ 2 , (31) f (x ) = ⎨ M M M ⎪ f ( x ), если p1 ( x ) = u ⎪ k ⎪⎩ f k +1 ( x ), в остальных случаях Теорема 4. Функция f(x), заданная кусочным образом из совокупности { f1 ,..., f k , f k +1 , p1 ,..., p k } = ψ , является ПРФ относительно ψ. Доказательство. Пусть ϕ i ( x ) − представляющая функция для предиката pi(x), где 1 ≤ i ≤ k . Тогда покажем, что функцию f(x) можно представить следующим образом k
k
f ( x ) = ∑ f i ( x )sg (ϕ i ( x )) + f k +1 ⋅ ∏ ϕ i ( x ) . i =1
1)
Рассмотрим произвольный набор x0 =
i =1 o o x1 , x2 ,..., xno
(
(32)
). 26
Пусть для какого – то i 0 предикат p i0 ( x 0 ) = u , где 1 ≤ i 0 ≤ k . Тогда по определению представляющей функции следовательно
(
предиката, получаем, что ϕ pi ( x 0 ) = 0 , 0
)
sg ϕ i0 ( x 0 ) ⋅ f i0 ( x 0 ) = f i0 ( x 0 )
а для всех остальных i≠i0 , pi(x0)=л, отсюда sg (ϕ i ( x 0 )) ⋅ f i ( x 0 ) = 0 . Таким образом, в данном случае, мы получаем, что k
∑ f i (x )sg (ϕ i (x )) =
i =1
2)
f i 0 (x0 ) = f (x0 )
. Предположим, что для любого i, p i ( x 0 ) = л , тогда ϕ i ( x 0 ) = ϕ k x = 1 , где
( )
1 ≤ i ≤ k . Следовательно, sg (ϕ i ( x 0 )) ⋅ f i ( x 0 ) = 0 , а k
f k +1 ⋅ ∏ ϕ i ( x ) = f k +1 . i =1
Из пунктов 1–2 следует, что на множестве N n функция k
∑ f i (x )sg (ϕ i (x )) + i =1
k
f k +1 ⋅ ∏ ϕ i ( x ) i =1
совпадает с функцией f ( x ) , которая задана кусочным образом из совокупности ψ . Так как операции конечного суммирования и конечного произведения сохраняют свойством примитивно рекурсивности функций, следовательно, рассматриваемая функция является ПРФ относительно ψ . Ч.т.д. Пример. Предположим, что задана примитивно рекурсивная функция f ( x1 ,..., x n ) . Рассмотрим конечное число точек, произвольным образом поменяем значения функции в каждой точке x1 ,..., x k и полученную функцию обозначим через f 1 ( x ) , т.е. ⎧ C n ( x ), если x = x1 ⎪ bn1 ⎪C b2 ( x ), если x = x 2 ⎪ f1 (x ) = ⎨ M M M ⎪C n ( x ), если x = x k ⎪ bk ⎪ f ( x ), в остальных случаях ( x ≠ x ≠ ⋅ ⋅ ⋅ ≠ x ) 1 2 k ⎩ Возникает вопрос: сохраняет ли функция f ( x1 ,..., x n ) , свойство примитивной рекурсивности? Как видим, функция f1 ( x ) –примитивно рекурсивная функция как заданная кусочным образом из совокупности примитивно рекурсивных функций и предикатов.
27
В качестве функций f j , j = 1,2,..., k , взяты элементарные функции C bn ( x ) и в
(
)
k
качестве предиката, взят предикат равенства, т.е. p j ( x ) = x j = x , j = 1,2,..., k . Так
как точки x j по условию задачи отличаются друг от друга, то области истинности предикатов p j попарно не пересекаются. Таким образом, функция f ( x1 ,..., x n ) , сохраняет свойство примитивной рекурсивности. Лемма 1.1. Подстановка примитивно рекурсивной функции в предикат равенства есть примитивно рекурсивный предикат. Доказательство. Пусть заданы примитивно рекурсивные функции ϕ1 ( x ), ϕ 2 ( y ) и пусть p( x, y ) = ( x = y ) – предикат равенства. Рассмотрим предикат вида p(ϕ( x ), ϕ( y )) = (ϕ( x ) = ϕ( y )) . Он является примитивно рекурсивным предикатом. Действительно, для данного предиката представляющей функцией является функция вида ϕ p = Sg ( ϕ1 ( x ) − ϕ 2 ( y ) ) , которая является ПРФ. I.10. Операция ограниченной минимизации
Пусть задан всюду определенный предикат p( x1 ,..., x n , y ) . Определение. Говорят, что функция ϕ( x1,..., xn , z ) получена из предиката
p( x1 ,..., x n , y )
в
результате
операции
ограниченной
минимизации,
т.е.
ϕ( x1 ,..., x n , z ) = μy y ≤ z p( x1 ,..., x n , y ) , если выполняется следующие равенства.
⎧наименьшему числу y 0 , (0 ≤ y 0 ≤ z ) ⎪такому, что p( x ,..., x , y ) = u и при ⎪ 1 n 0 ϕ( x1 ,..., x n , z ) = ⎨ ⎪некторых y ′ < y 0 , p( x1 ,..., x n , y ′ ) = л; ⎪⎩ z + 1, если для всех y = 0,1,..., z , p( x1 ,..., x n , y ) = л
(33)
Теорема 5. Функция ϕ (x1 ,..., x n , z ) , полученная из предиката p( x1 ,..., x n , y ) в
результате
операции
ограниченной
минимизации,
является
примитивно
рекурсивной функцией относительно {p}.
28
Доказательство. Пусть задан всюду определенный предикат p( x1 ,..., x n , y ) и
h( x1 ,..., x n , y ) –
представляющая
функция
данного
предиката
и
пусть
всех
y<y0
ϕ( x1 ,..., x n , z ) = μy y ≤ z p( x1 ,..., x n , y ) . Покажем, что ϕ( x1 ,..., x n , z ) можно представить в виде: ϕ( x1 ,..., x n , z ) =
z
j
∑ ∏ h(x1 ,..., x n , i )
(34).
j =0 i =0
Действительно эта равенства имеет место. 1)
Пусть
ϕ( x1 ,..., x n , z ) = y 0 ,
тогда
p( x1 ,..., x n , y 0 ) = u
и
для
p( x1 ,..., x n , y ) = л . Следовательно z
j
∑ ∏ h(x1 ,..., x n , i ) = y 0 . j =0i =0
2)
Пусть, ϕ( x1 ,..., x n , z ) = z + 1 . Тогда по определению операции ограниченной
минимизации p( x1 ,..., x n , y ) = л для всех y, где 0 ≤ y ≤ z . Следовательно, в правая часть формуле (1), равна z+1 единиц. Таким образом, из пунктов 1–2 следует, что формула (34) удовлетворяет заданию функции с помощью операции ограниченной минимизации. Так как операции конечного произведения и конечного суммирования сохраняют свойства примитивной рекурсивности функцией, то получаем, что функция ϕ( x1 ,..., x n , z ) является ПРФ относительно {p}. Следствие.
Операция
ограниченной
минимизации
сохраняет
свойство
примитивной рекурсивности функций. Пример. Пусть задана логическая функция p( x ) , значением которой на
произвольном аргументе x является простое число с номером x т.е.
p( x ) = p x ,
(35)
где x = 0,1,2,..., n . Требуется доказать, что она является ПРФ. Решение. Из курса элементарной математики нам известно, что p является
простым числом, если оно имеет в точности два различных делителя. 29
Между множеством натуральных чисел и множеством простых чисел устанавливаем взаимно однозначное соответствие: n
0
1
2
3
4
5
…
px
2
3
5
7
11
13
… Таб.1.2
Покажем, что (35) – ПРФ. Прежде всего, рассмотрим следующий предикат: p r ( x ) = ( x − простое число ) и определим, что он является примитивно рекурсивным. Для этого сначала докажем, что следующие арифметические функции являются примитивно рекурсивным: ⎧остаток от деления x на y; rest ( x, y ) = ⎨ ⎩ x, если y = 0.
(36)
⎧число делителей числа x; ι( x ) = ⎨ ⎩0, если x = 0.
(37)
⎡x⎤ Используя ранее доказанного ПРФ, т.е. f ( x, y ) = ⎢ ⎥ , легко можно показать, ⎣ y⎦ что обе функции являются ПРФ. Действительно, их соответственно можно представить: ⎡x⎤ rest ( x, y ) = x −& y ⋅ ⎢ ⎥ ⎣ y⎦
(38)
и x
ι( x ) = ∑ Sg (rest ( x, i )) .
(39)
i =1
Следовательно, они являются ПРФ. Очевидно,
представляющей
функцией
для
предиката
p r ( x ) = ( x − простое число ) является функция вида: ϕ( x ) = Sg ( ι( x ) − 2 ) ,
(40)
которая является ПРФ.
30
x
Из курса теории чисел известно, что имеет место соотношение: p x ≤ 2 2 . Рассмотрим следующий предикат:
R( y, t ) = [( y > t ) ∧ p r ( y )] .
(41)
Как видно, этот предикат является примитивно рекурсивным как конъюнкция двух примитивно рекурсивных предикатов. Очевидно, если применить к предикату R( y, t ) = [( y > t ) ∧ p r ( y )] ,
операцию
ограниченной
минимизации,
то
получим
примитивно рекурсивную функцию. (Это следует, из того что кусочное задание функции сохраняет свойство примитивной рекурсивности функции) Полученную функцию обозначим через ϕ( z, t ) , т.е. ϕ( z , t ) = μy y ≤ z R( y, t ) .
(42)
Применяем к данной функции операцию суперпозиции, точнее вместо z в данном равенстве подставляем 2 2
x +1
и полученную функцию обозначим через ϕ 0 ,
т.е. ϕ
Так как операция
0
(x , t ) =
ϕ ⎛⎜ 2 2 ⎝
x +1
, t ⎞⎟ . ⎠
(43)
суперпозиции сохраняет свойство примитивной
рекурсивности функций, то ϕ 0 –ПРФ. Теперь покажем, что логическая функция p( x ) –есть результат операции примитивной рекурсии над функциями: C 20 , ϕ 0 ( x, t ) , т.е.
(
)
p( x ) = R C 20 , ϕ 0 ( x, t ) . Действительно, по определению операции примитивной рекурсии: p(0 ) = 2 = C 20 . Предположим, что для некоторого x верно, что p( x) = px . Покажем, что тогда p( x + 1) = p x+1 . Очевидно, из определения операции примитивной рекурсии следует, что
p( x + 1) = ϕ 0 ( x, p( x )) ,
31
но из задания функция
ϕ 0 ( x, p( x ))
ϕ 0 следует, что значением
наименьшее простое число y, большее, чем p( x ) и не превосходящее
22
является x +1
; но это
и есть простое число с номером x+1, т.е. p x +1 . Таким образом, функция (35), как результат операции примитивной рекурсии над ПРФ, сама является примитивно рекурсивной функцией. I.11. Частично рекурсивные функции
Пусть задана функция f ( x1 ,..., x n , y ) . Определение.
Говорят, что ϕ( x1 ,..., x n ) получено из
f ( x1 ,..., x n , y )
с
применением операции ограниченной минимизации, если имеет место следующее равенство: ⎧ y 0 − наименьшему из чисел y, ттакихчто ⎪ f ( x ,..., x , y ) = 0, причем для всех y ′ < y ⎪ n 0 0 ϕ( x1 ,..., x n ) = ⎨ 1 ⎪ f ( x1 ,..., x n , y ′ ) ≠ 0; ⎪⎩не определена во всех других случаях.
(44)
и обозначают ϕ( x1 ,..., x n ) = μy ( f ( x1 ,..., x n , y ) = 0 ).
(45)
Лемма 1.2. Операция ограниченной минимизации сохраняет свойство
примитивной рекурсивности функции. Действительно, если имеется алгоритм
Af ,
вычисляющий функции
f ( x1 ,..., x n , y ) , то есть и алгоритм Aϕ вычисляющий функции ϕ( x1 ,..., x n ) . Доказательство. Пусть требуется вычислить значение функции ϕ на
произвольном наборе ( x 1 ,..., x n
).
1шаг. Применим алгоритм A f к набору ( x1 ,..., x n ,0 ). Если через конечное число шагов алгоритм завершает свою работу результативно, т.е. вычислено значение f ( x1 ,..., x n ,0 ) и
f ( x1 ,..., x n ,0 ) = 0 , то значение функции ϕ на наборе
( x 1 ,...,
xn
)
32
считаем равным 0. Если
f ( x1 ,..., x n ,0 ) ≠ 0 , то переходим к следующему этапу, на
котором применяем алгоритм A f к набору ( x1 ,..., x n ,1) . Если через конечное число шагов алгоритм завершает свою работу на данном наборе результативно, т.е. вычислено значение f ( x1 ,..., x n ,1) и f ( x1 ,..., x n ,1) = 0 , то значение функции
ϕ
на наборе
(x1 ,..., x n )
считаем
равным 1. Если
f ( x1 ,..., x n ,1) ≠ 0 , то переходим к следующему этапу и т.д. Если на (t+1) шаге вычислено значение f ( x1 ,..., x, t ) и f ( x1 ,..., x, t ) = 0 , то значение функции
ϕ
на наборе
(x1 ,..., x n )
считаем
равным t. Если
f ( x1 ,..., x n , t ) ≠ 0 , то переходим к следующему этапу. В случае, когда алгоритм A f завершает свою работу на каком-то этапе безрезультативно, или работает бесконечно, то будем считать, что значение ϕ не определено на данном наборе, т.е. на наборе
(x1 ,..., x n ) .
⎧ x − y, x ≥ y Пример 1. Пусть f ( x, y ) = ⎨ ⎩не определена в остальных случаях
Тогда ϕ( x ) = μy[ f ( x, y ) = 0] = I 11 ( x ) = x , т.е. функция ϕ( x ) только при y = x принимает значение нуль. Пример 2. Пусть f ( x, y ) = x − 2 y .
Определим ϕ( x ) = μy[ x − 2 y = 0]. Очевидно, что функция ϕ определена только на числах вида 2k , k = 0,1,2,... ; и для каждого из них ϕ(2k ) = k . Пример 3.
В качестве примера не всюду определенной функции можно
привести следующую функцию: f ( x, y ) = C 82 ( x, y ) . 33
Действительно, при этом функция ϕ( x ) не определена во всех натуральных наборах, так как
[
]
ϕ( x ) = μy C 82 ( x, y ) = 0 –не имеет места ни для одного y.
Следовательно, будем говорить, что ϕ( x )– нигде не определенная функция. Из этих примеров следует, что операция минимизации, вообще говоря, не сохраняет свойство всюду определенность функции (примеры 2, 3) и наоборот, применение операции минимизации к функции не везде определенной может дать всюду определенную функцию (пример 1). Определение. Частично рекурсивным описанием (ЧРО) функции f называется
конечная последовательность функций
ϕ1 ,..., ϕ k , удовлетворяющих следующим
условиям: 1. ϕ k = f ; 2. для любого i , 1 ≤ i ≥ k , ϕ i – является либо элементарной функцией, либо получается из предшествующей ей последовательности функций с помощью одной из операций: подстановки, примитивной рекурсии или ограниченной минимизации. Определение. Функция f называется ЧРФ, если существует ее ЧРО. Определение. Функция f называется общерекурсивной, если она ЧРФ и всюду
определена. (В других источниках такие функции называются тотальными или просто рекурсивными.) Не трудно показать, что всякая частично рекурсивная функция алгоритмически вычислима и операции подстановки, примитивной рекурсии и минимизации сохраняют свойству алгоритмическую вычислимость функций. Очевидно, каждая примитивно рекурсивная функция является частично рекурсивной, но обратное неверно. Введем обозначения: KПРФ – класс примитивно рекурсивных функций; KОРФ – класс общерекурсивных функций; KЧРФ – класс частично рекурсивных функций. Тогда между этими классами имеется соотношения: 34
KПРФ ⊆ KОРФ ⊆ KЧРФ. Таким образом, класс ЧРФ – самый богатый из построенных классов вычислимых функций и имеет место следующее включение: KЧРФ ⊆ КВФ, где КВФ – класс вычислимых функций. Тезис Черча–Клини представляет гипотезу, из которой следует обратное включение, т.е. КВФ ⊆ KЧРФ. Таким образом, класс алгоритмически вычислимых функций совпадает с классом частично рекурсивных функций. Как уже отмечались, это утверждение не может быть доказанным, так как в нем участвует понятие вычислимой функции. Тем не менее можно привести следующие два довода в пользу тезиса Черча – Клини: • достаточно богатый набор примеров арифметических функций, интуитивно алгоритмически вычислимых и являющихся частично рекурсивными; • эквивалентность различных по форме уточнений понятий алгоритма.
Контрольные вопросы
1. Перечислите основные элементарные функции и их свойства. 2. Что такое операция подстановки и какими свойствами она обладает? 3. Охарактеризуйте операцию примитивной рекурсии и ее возможные случае? 4. Какие производные операции вы знайте? 5. Что такое примитивно рекурсивная функция и какими свойствами она обладает? 6. Приведите пример примитивно рекурсивной функции относительно заданной совокупности функций? 7. Приведите пример применения операции конечного суммирования и конечного произведения над функциями? 8. Что такое предикат, какими свойствами он обладает?
35
9. Показать, что логические операции над предикатами сохраняют свойство примитивной рекурсивности? 10. Что такое представляющая функция предиката? 11. Доказать, что операции навешивания кванторов существования и общности над предикатами сохраняют свойство примитивной рекурсивности? 12. Приведите пример о кусочно заданной функции относительно совокупности функций и предикатов, обладающих свойством примитивной рекурсивности? 13. Доказать, что операция ограниченной минимизации сохраняет свойство примитивной рекурсивности функций? 14. Что такое ЧРФ и какими свойствами она обладает? 15. Каково отличие между ПРФ и ЧРФ. Приведите примеры, выражающие их отличительные черты?
Практические задания I.
Докажите, что следующие функции являются примитивно рекурсивны:
1) 2) 3) 4) 5)
f ( x) = x + 4; f ( x) = x + n; f ( x) = 2 x + 1; f ( x, y ) = 2 x + 3 y; f ( x, y ) = kx + ny;
6)
f ( x) = 2 x ;
7)
f ( x, y ) = x y ;
8)
f ( x) = x x ;
9)
f ( x, y ) = ( x + y ) xy ;
10)
f ( x, y ) = (kx + y ) nxy ; , k , n ∈ N
11)
f ( x) = 3 x
12)
f ( x ) = x 2 + 3 x + 2.
2
+1
;
36
II. Какая функция получается из функции g ( x ) и h( x, y, z ) с помощью операции
примитивной рекурсии: 1) g ( x ) = x;
h( x, y , z ) = z x .
2) g ( x ) = x;
h( x, y , z ) = x z .
3) g ( x ) = 1;
h( x, y, z ) = z ⋅ ( x + 1).
4) g ( x ) = x ;
h( x, y, z ) = x ⋅ y + f ( x,0 ) .
5) g ( x, y ) = x −& y ; h( x, y, z , t ) = 2 ⋅ ( x + y ) ⋅ f ( x, y, z ) . III. Докажите, что следующие функции являются примитивно рекурсивны:
1)
f ( x) = 3 x − 5
2)
f ( x) = 6 x 2 + 2 x − 8
⎧ x, если 3) f ( x, y ) = max( x, y ) = ⎨ ⎩ y, если ⎧ x, если 4) f ( x, y ) = min( x, y ) = ⎨ ⎩ y, если
x≥ y x< y x< y x> y
5)
если x = 0 ⎧1, f ( x ) = x! = ⎨ ⎩1 ⋅ ... ⋅ x, если x > 0
6)
⎧ x − y, если x ≥ y f ( x, y ) = x − y = ⎨ ⎩ x − y, если x < y
7) 8)
f ( x, y ) = 2 x (2 y + 1) −& 1 f ( x) = 5 x!+8
9)
⎧0, если x = 0 sg ( x ) = ⎨ ⎩1, если x > 0
10)
⎧1, если x = 0 sg ( x ) = ⎨ ⎩0, если x > 0
IV. Напишите примитивно рекурсивное описание функций:
37
1)
f ( x ) = x + 7;
2)
f ( x ) = 5 x + 19;
3)
f ( x, y ) = 5 x + 3 y ;
4)
f ( x, y ) = 5 ⋅ sg ( x ) + x ⋅ y;
5)
f ( x, y ) = 2 x −& y;
f ( x ) , удовлетворяющей условию:
6)
f ( x,0 ) = x ; f ( x, y + 1) = f ( x, y ) −& 1. V.
Напишите
примитивно
рекурсивное
описание
функции
относительно
описание
функции
относительно
совокупности
{+,⋅,−& }: 1) f ( x, y, z ) = x ⋅ y + z + 5; 2)
f ( x, y ) = 3 x 2 + x ⋅ y + 4;
3)
f ( x, y ) = x 2 − y 2 ;
4) f ( x ) , удовлетворяющей условию: f ( x,0 ) = x ; f ( x, y + 1) = x ⋅ y + f ( x, y ). 5) f ( x ) , удовлетворяющей условию:
f ( x,0 ) = 1; f ( x, y + 1) = y ⋅ f ( x, y ). 6)
f ( x, y, z ) , удовлетворяющей условию:
f ( x, y,0 ) = x −& y ;
f ( x, y, z + 1) = 2 ⋅ ( x ⋅ y ) f ( x, y, z ). VI.
Напишите
примитивно
рекурсивное
{ψ1 , ψ 2 , ψ 3 }: ϕ( x, y ) = ψ 1 (ψ 2 ( x, ψ 3 ( y,2 y )));
совокупности 1)
38
2) ϕ( x, y, z ) = ψ 3 ( x, ψ 2 ( y, ψ 1 ( x )),2 ); 3)
ϕ( x1 , x 2 , x 3 , x 4 ) = ψ 1 (ψ 3 ( x1 , x 2 , x 3 ), ψ 2 ( x 4 , x1 ));
4)
ϕ( x1 , x 2 , x 3 ) = ψ 1 (3, ψ 3 ( x 3 , ψ 3 ( x 2 ,0 )));
5)
ϕ( x, y ) = ψ 3 ( x, y, y );
6)
ϕ( x ) = ψ 2 (3, ψ 1 ( x,2 x + 1)) .
VII. Докажите, что следующие функции примитивно рекурсивны:
⎧остаток от деления x на y, если y ≠ 0; 1) f ( x, y ) = rest ( x, y ) = ⎨ ⎩ x, если y = 0. ⎧число делителей числа x; 2) τ( x ) = ⎨ ⎩0, если x = 0. ⎧сумма делителей числа x; 3) σ( x ) = ⎨ ⎩0, если x = 0. 4) π( x ) − число простых чисел, не превосходящих x. 5)
⎧число простых делителей числа x; lh( x ) = ⎨ ⎩0, если x = 0.
VIII. Докажите примитивную рекурсивность предикатов:
1) p( x, y ) = (3 x < 2 y ) ; 2) p( x, y ) = (3 x + 2 y = 0 ) ; 3) p( x, y ) = ( y = x + 5) ; 4)
p ( x, y , z ) = ( x + y = z ) ;
5)
p ( x, y , z ) = ( x ⋅ y = z ) ;
6)
p( x, y ) = (4 x = 3 x ⋅ y ) ;
7)
p( x, y ) = (12 x − y = 0 ) ; 39
8) 9) 10)
( ) p( x, y ) = ((∃y ) y ≤ x [(2 y = x ) ∧ (3 y > x )]) ;
p( x, y ) = (∃y ) y ≤ x (2 y < x ) ;
p( x ) = (ϕ( x ) = x ) , где ϕ( x ) – примитивно рекурсивная функция.
II.Уточнение понятия алгоритма через абстрактную математическую машину Тьюринга
Введение понятия машины Тьюринга явилось одной из первых и весьма удачных попыток дать точный математический эквивалент для общего интуитивного представления об алгоритме. Это понятие названо по имени английского математика, сформулировавшего его в 1937 г., за 9 лет до появления первой электронно-вычислительной машины. II.1 Определение машины Тьюринга Машина Тьюринга есть математическая (воображаемая) машина, а не машина
физическая. Она есть такой же математический объект, как функция, производная, интеграл, группа и т.д. И так же как и другие математические понятия, понятие машины Тьюринга отражает объективную реальность, моделирует некие реальные процессы. Именно Тьюринг предпринял попытку смоделировать действия математика (или другого человека), осуществляющего некую умственную созидательную деятельность. Такой человек, находясь в определенном «умонастроении» («состоянии»), просматривает некоторый текст. Затем он вносит в этот текст какие-то изменения, проникается новым «умонастроением» и переходит к просмотру последующих записей. Машина Тьюринга действует примерно так же. Ее удобно представлять в виде автоматически работающего устройства. В каждый дискретный момент времени устройство, находясь в некотором состоянии, обозревает содержимое одной ячейки протягиваемой через устройство ленты и делает шаг, заключающийся в том, что устройство переходит в новое состояние, изменяет (или оставляет без изменения) содержимое обозреваемой ячейки и переходит к обозрению следующей ячейки — справа или слева. Причем 40
шаг осуществляется на основании предписанной команды. Совокупность всех команд представляет собой программу машины Тьюринга. Опишем теперь машину Тьюринга более тщательно. Машина располагает конечным числом знаков (символов, букв), образующих так называемый внешний алфавит А = {а 0 , а 1 ..., а п }. В каждую ячейку обозреваемой ленты в каждый дискретный момент времени может быть записан только один символ из алфавита А. Ради единообразия удобно считать, что среди букв внешнего алфавита А имеется «пустая буква», и именно она записана в пустую ячейку ленты. Условимся, что «пустой буквой» или символом пустой ячейки является буква а0. Лента предполагается неограниченной в обе стороны, но в каждый момент времени на ней записано конечное число непустых букв. Далее, в каждый момент времени машина способна находиться в одном состоянии из конечного числа внутренних состояний, совокупность которых Q = {q0 , q1, .., qm}. Среди состояний выделяются два — начальное q1 и
заключительное (или состояние остановки) q0. Находясь в состоянии q1, машина начинает работать. Попав в состояние q0, машина останавливается. Работа машины определяется программой (функциональной схемой). Программа состоит из команд. Каждая команда T(i,j) (i= 1, 2, ..., т; j = 0, 1, ..., n) представляет собой выражение одного из следующих видов: qiaj -» qkal С; qiaj -» qkal П; qiaj -» qkal Л
(1)
где 0 < k<m;0<l< п. В выражениях первого вида символ С будем часто опускать. Как же работает машина Тьюринга? Находясь в какой-либо момент времени в незаключительном состоянии (т.е. в состоянии, отличном от q 0 ) машина
совершает
шаг,
который
полностью
определяется ее текущим
состоянием qi и символом aj, воспринимаемым ею в данный момент на ленте. При этом содержание шага регламентировано соответствующей командой T(i,j): qiaj -» qkal X, где X ∈ {С, П, Л}. Шаг заключается в том, что: 1) содержимое aj обозреваемой на ленте ячейки стирается и на его место записывается символ 41
аl, (который может совпадать с aj ); 2) машина переходит в новое состояние qk (оно также может совпадать с предыдущим состоянием qi); 3) машина переходит к обозрению следующей правой ячейки от той, которая обозревалась только что, если Х=П, или к обозрению следующей левой ячейки, если Х= Л, или же продолжает обозревать ту же ячейку ленты, если Х= С. В следующий момент времени (если qk≠q0) машина делает шаг, регламентированный командой T(k, /): qkal-> qrasX и т.д. Поскольку работа машины, по условию, полностью определяется ее состоянием qi в данный момент и содержимым обозреваемой в этот момент ячейки, то для каждых qi и aj, (i= 1, 2, ..., т; j = 0, 1, ..., n) программа машины должна содержать одну и только одну команду, начинающуюся символами qiaj. Поэтому программа машины Тьюринга с внешним алфавитом А = {а 0 , а1 , ..., ап } и алфавитом внутренних состояний Q = {q0 , q1, .., qm} содержит т(п + 1) команд. Словом в алфавите А или в алфавите Q, или в алфавите AUQ называется любая последовательность букв соответствующего алфавита. Под k-й конфигурацией будем понимать изображение ленты машины с информацией, сложившейся на ней к началу k-го шага (или слово в алфавите А, записанное на ленту к началу k-го шага), с указанием того, какая ячейка обозревается в этот шаг и в каком состоянии находится машина. Имеют смысл лишь конечные конфигурации, т.е. такие, в которых все ячейки ленты, за исключением, быть
может,
конечного
числа,
пусты.
Конфигурация
называется
заключительной, если состояние, в котором при этом находится машина, заключительное. Если выбрать какую-либо незаключительную конфигурацию машины Тьюринга в качестве исходной, то работа машины будет состоять в том, чтобы
последовательно
(шаг
за
шагом)
преобразовывать
исходную
конфигурацию в соответствии с программой машины до тех пор, пока не будет достигнута заключительная конфигурация. После этого работа 42
машины
Тьюринга
считается
закончившейся,
а
результатом
работы
считается достигнутая заключительная конфигурация. Будем говорить, что непустое слово α в алфавите А \ {a0} = {а1,...,an} воспринимается машиной в стандартном положении, если оно записано в последовательных ячейках ленты, все другие ячейки пусты, и машина обозревает крайнюю справа ячейку из тех, в которых записано слово а. Стандартное положение называется начальным (заключительным), если машина, воспринимающая слово в стандартном положении, находится в начальном состоянии q1 (соответственно в состоянии остановки q0). Наконец, будем говорить, что слово α перерабатывается машиной в слово β, если от слова
α, воспринимаемого в начальном стандартном положении, машина после выполнения
конечного
числа
команд
приходит
к
слову
β,
воспринимаемому в положении остановки. II.2 Применение машин Тьюринга к словам Проиллюстрируем на примерах все введенные понятия, связанные с машинами
Тьюринга. Пример 1. Дана машина Тьюринга с внешним алфавитом А = {0, 1} (здесь 0 —
символ пустой ячейки), алфавитом внутренних состояний Q = {q0, q1, q2}следующей функциональной схемой (программой): q10→ q20П; q20→ q01; q11→ q11П; q21→ q21П; Посмотрим, в какое слово переработает эта машина слово 101 исходя из стандартного начального положения. Будем последовательно выписывать конфигурации машины при переработке ею этого слова. Имеем стандартное начальное положение: q1
(1) 1
0
1
На первом шаге действует команда: q11→ q11П;
В результате на машине создается следующая конфигурация: (2) q1
1 0 1 0 43
На втором шаге действует команда: q10→ q20П; и на машине создается конфигурация: (3) q2 1 0 1 0 0 Наконец, третий шаг обусловлен командой: q20→ q01; В результате него создается конфигурация: (4) q0 1 0 1 0 1
44
Эта конфигурация является заключительной, потому что машина оказалась в состоянии остановки q0. Таким образом, исходное слово 101 переработано машиной в слово 10101. Полученную последовательность конфигураций можно записать более коротким способом. Конфигурация (1) записывается в виде следующего слова в алфавите A U Q: 10q11 (содержимое обозреваемой ячейки записано справа от состояния, в котором находится в данный момент машина). Далее, конфигурация (2) записывается так: 101q10, конфигурация (3) – 1010q20 и, наконец, (4) — 1010q01. Вся последовательность записывается так: 10q11 →101q10→1010q20 →1010q01. Пример 2. Машина Тьюринга задается внешним алфавитом А = (0, 1, *}
(как и в предыдущем примере 0 — символ пустой ячейки), алфавитом внутренних состояний Q ={q0, q1, q2, q3}и программой: A\Q
q1
q2
q3
0
q10Л
q31П
q10Л
1
q20Л
q21Л
q31П
*
q00
q2*Л
q3*П
Посмотрим, как эта машина перерабатывает некоторые слова и постараемся обнаружить закономерность в ее работе. Предварительно заметим, что программа машины может быть записана также в виде следующей таблицы. Чтобы определить по таблице, что будет делать машина, находясь, например, в состоянии q2 и наблюдая в обозреваемой ячейке символ 1, нужно найти в таблице клетку, находящуюся на пересечении столбца q2 и строки, содержащей 1. В этой клетке записано q21Л. Это означает, что на следующем шаге машина останется в прежнем состоянии q2, сохранит содержимое обозреваемой ячейки 1 и перейдет к обозрению следующей левой ячейки на ленте.
45
Применим эту машину к слову 11*11. Вот последовательность конфигураций, возникающих в процессе работы машины (исходная конфигурация — стандартная начальная): Нетрудно заметить, что данная машина Тьюринга реализует операцию сложения: в результате ее работы на ленте записано подряд столько единиц, сколько их было всего записано по обе стороны от звездочки перед началом работы машины. Этот маленький опыт работы с машинами Тьюринга позволяет сделать некоторые выводы. Так тщательно описанное устройство этой машины (разбитая на ячейки лента, считывающая головка) по существу не имеет никакого значения. Машина Тьюринга — не что иное, как некоторое правило (алгоритм) для преобразования слов алфавита A U Q, т.е. конфигураций. Таким образом, для определения машины Тьюринга нужно задать ее внешний и внутренний алфавиты, программу и
указать,
какие
из
символов
обозначают
пустую
ячейку
и
заключительное состояние. §16 Конструирование машин Тьюринга Создание
(синтез)
соответствующих
машин
программ)
Тьюринга
является
задачей
(т.е.
написание
значительно
более
сложной, нежели процесс применения данной машины к данным словам. Пример 3. Попытаемся построить такую машину Тьюринга, которая из п
записанных подряд единиц оставляла бы на ленте n-2 единицы, также записанные подряд, если п > 2, и работала бы вечно, если п = 0 или п = 1. В качестве внешнего алфавита возьмем двухэлементное множество А = {0, 1}. Количество необходимых внутренних состояний будет определено в процессе составления программы. Считаем, что машина начинает работать из стандартного начального положения, т.е. когда в состоянии q1 обозревается крайняя правая единица из п записанных на ленте.
46
Начнем с того, что сотрем первую единицу, если она имеется, перейдем к обозрению следующей левой ячейки и сотрем там единицу, если она в этой ячейке записана. На каждом таком переходе машина должна переходить в новое внутреннее состояние, ибо в противном случае будут стерты вообще все единицы, записанные подряд. Вот команды, осуществляющие описанные действия: q11→ q20Л; q21→ q30Л. Машина находится в состоянии q3 обозревает третью справа ячейку из тех, в которых записано данное слово (п единиц). Не меняя содержимого обозреваемой
ячейки,
машина
должна
остановиться,
т.е.
перейти
в
заключительное состояние q0, независимо от содержимого ячейки. Вот эти команды: q30→ q00; q31→ q01. Теперь остается рассмотреть ситуации, когда на ленте записана всего одна единица или не записано ни одной. Если на ленте записана одна единица, то после первого шага (выполнив команду q11→ q20Л) машина будет находиться в состоянии q2 и будет обозревать вторую справа ячейку, в которой записан 0. По условию, в таком случае машина должна работать вечно. Это можно обеспечить, например, такой командой: q20→ q20П, выполняя которую шаг за шагом, машина будет двигаться по ленте неограниченно вправо (или протягивать ленту через считывающую головку справа налево). Наконец, если на ленте не записано ни одной единицы, то машина, по условию, также должна работать вечно. В этом случае в начальном состоянии q1 обозревается ячейка с содержимым 0, и вечная работа машины обеспечивается следующей командой: q10→ q10П.
47
Запишем составленную программу (функциональную схему) построенной машины Тьюринга в виде таблицы:
A\Q
q1
q2
q3
0
q10П
q20П
q00
1
q00Л
q20Л
q01
В заключение отметим следующее. Созданная нами машина Тьюринга может применяться не только к словам в алфавите А - {0, 1}, представляющим собой записанные подряд п единиц (п > 2). Она применима и ко многим другим словам в этом алфавите, например (проверьте самостоятельно) к словам: 1011, 10011, 111011, 11011, 1100111, 1001111, 10111, 10110111, 10010111 и т.д. (исходя из стандартного начального положения). С другой стороны, построенная машина не применима (т. е. при подаче этих слов на вход машины она работает вечно) не только к слову «1» или к слову, состоящему из одних нулей. Она не применима и к следующим словам (проверьте самостоятельно): 101, 1001, 11101, 101101, 1100101101 и т.д.
48
II.3 Вычислимые по Тьюрингу функции Определение 1. Функция называется вычислимой по Тьюрингу, если существует машина Тьюринга, вычисляющая ее, т.е. такая машина Тьюринга, которая вычисляет ее значения для тех наборов значений аргументов, для которых функция определена, и работающая вечно, если функция для данного набора значений аргументов не определена. Остается договориться о некоторых условностях для того, чтобы это определение стало до конца точным. Во-первых, напомним, что речь идет о функциях (или возможно о частичных функциях, т. е. не всюду определенных), заданных на множестве натуральных чисел и принимающих также натуральные значения. Во-вторых, нужно условиться, как записывать на ленте машины Тьюринга значения х1,, х2, ..., хп аргументов функции f(x1, x2, ..., хп), из какого положения начинать переработку исходного слова и, наконец, в каком положении получать значение функции. Это можно делать, например, следующим образом. Значения х1,, х2, ..., хп аргументов будем располагать на ленте в виде следующего слова:
01{ ...101{ ...10 ... 01{ ...10. x1
x2
xn
Здесь полезно ввести следующие обозначения. Для натурального х обозначаем: х Iх = 1{ ... 1 , 0 = 0{ ... 0 . x
x
Дополнительно полагаем 0° = 1° = ∧ — пустое слово. Так что на слова 1° = ∧, I1 = 1, I2 = 11, I3 = 111, ... будем смотреть как на «изображения» натуральных чисел 0, 1, 2, 3, ... соответственно. Таким образом, предыдущее слово можно представить следующим образом: 01 x 01 x 0...01 x 0 . Далее, начинать переработку данного слова 1
2
n
будем из стандартного начального положения, т.е. из положения, при 49
котором в состоянии q1 обозревается крайняя правая единица записанного слова. Если функция f(x1, x2, ..., хп) определена на данном наборе значений аргументов, то в результате на ленте должно быть записано подряд f(x1, x2, ..., хп) единиц; в противном случае машина должна работать бесконечно. При выполнении всех перечисленных условий будем говорить, что машина Тьюринга вычисляет данную функцию. Таким образом, сформулированное определение 1 становится абсолютно строгим. Пример 1 Построим машину Тьюринга, вычисляющую функцию f(x) = х/2. Эта функция не всюду определена: областью ее определения является лишь множество всех четных чисел. Поэтому, учитывая определение 1, нужно сконструировать такую машину Тьюринга, которая при подаче на ее вход четного числа давала бы на выходе половину этого числа, а при подаче нечетного — работала бы неограниченно долго.
Сконструировать машину Тьюринга — значит написать (составить) ее программу. В этом процессе два этапа: сначала создается алгоритм вычисления значений функции, а затем он записывается на языке машины Тьюринга (программируется). В качестве внешнего алфавита возьмем двухэлементное множество А = {0, 1}. В этом алфавите натуральное число х изображается словом 11... 1, состоящим из х единиц, которое на ленте машины Тьюринга записывается в виде х единиц, стоящих в ячейках подряд. Работа машины начинается из стандартного начального положения: 01 … 1q110(число единиц равно х). Сделаем начало вычислительного процесса таким: машина обозревает ячейки, двигаясь справа налево, и каждую вторую единицу превращает в 0. Такое начало обеспечивается следующими командами: (1): q11→ q21Л; 50
(2): q21→ q10Л ; (3): q20→ q20Л. Если число х единиц нечетно, то машина продолжит движение по ленте влево неограниченно, т. е. будет работать бесконечно. Если же число х единиц четно, то в результате выполнения команд создается конфигурация q10010101... 01010, в которой число единиц равно х/2. Остается сдвинуть единицы так, чтобы между ними не стояли нули. Для осуществления этой процедуры предлагается следующий алгоритм. Будем двигаться по ленте вправо, ничего на ней не меняя, до первой
единицы и перейдем за единицу. Передвижение осуществляется с помощью следующих команд: (4): q10→ q30П; (5): q30→ q30П; (6): q31→ q41П. В результате их выполнения получим конфигурацию 001q4 010101 ... 010100.
(*)
Заменим 0, перед которым остановились, на 1 и продвинемся вправо до ближайшего 0: (7): q40→ q51П; (8): q51→ q21П. Получим конфигурацию 00111q50101... 010100, в которой правее обозреваемой ячейки записаны «пары» 01, ..., 01. Кроме того, на ленте одна единица записана лишняя. Продвинемся по ленте вправо до последней «пары» 01. Это можно сделать с помощью своеобразного цикла: (9): q50→ q60П; (10): q61→ q21П. Получим конфигурацию 001110101 ...01010q600. Двигаться дальше вправо бессмысленно. Вернемся на две ячейки назад и заменим единицу из последней «пары» 01 на ноль: 51
(11): q60→ q70Л; (12): q70→ q70Л; (13): q71→ q80Л. Получим конфигурацию 001110101 ...01q800. Число единиц на ленте снова равно x/2. Продвинемся влево на одну ячейку с помощью команды (14): q80→ q90Л. В результате чего получим конфигурацию 001110101 ...010q9100. Теперь уничтожим самую правую единицу и продвинемся по ленте влево до следующей единицы: (15): q91→ q100Л; (16): q100→ q100Л. Получим конфигурацию 001110101 ... 0q10100,
(**)
в которой левее обозреваемой ячейки записана серия пар 10, 10,…,10 (если читать справа налево). Теперь на ленте недостает одной единицы, т. е. число единиц равно (х/2) - 1. Продвинемся по ленте влево до последней «пары» 10. Это можно сделать с помощью цикла (17): q101→ q111Л; (18): q110→ q100Л, выполнив который, придем к следующей конфигурации: 001q11110101. ..0100. Вернемся вправо к ближайшему нулю и превратим его в единицу (19): q111→ q121П; (20): q121→ q121П; (21): q120→ q131П. Получим конфигурацию 001111q13101 ... 0100, в которой число единиц снова равно х/2. Если теперь перешагнем вправо по ленте через обозреваемую единицу и переведем машину в состояние q4 с помощью команды 52
(22): q131→ q41 П, то придем к следующей конфигурации: 0011111q401 ... 0100, которая по существу аналогична конфигурации (*). В результате программа зацикливается (становится циклической): снова ближайший 0 превращается в 1, а самая правая 1 — в 0, затем машина возвращается к самому левому нулю, оказываясь в начале следующего цикла, и т.д. Как же завершается работа программы? В некоторый момент конфигурация будет иметь вид 00111... 10q10100. Выполнив команды (17), (18), придем к конфигурации 00111... 1q11 110100. Далее выполняются команды (19), (20), (21), что приводит к конфигурации: 00111... 111111q1300. Остается остановить машину. Это делается с помощью команды (23): q130→ q00Л. Заключительная конфигурация имеет вид: 00111... 1111q0100. Запишем программу машины Тьюринга в табличной форме: Q\A
0
1
q1
q30П
q21Л
q2
q20Л
q10Л
q3
q30П
q41П
q4
q51П
q5
q60П
q51П
q6
q70Л
q51П
q7
q70Л
q80Л
q8
q90Л
q21Л
q9
q100Л
q10
q100Л
q111Л
q11
q100Л
q121П
q12
q131П
q131П
q13
q00Л
q41П
53
II.4 Правильная вычислимость функций на машине Тьюринга.
В предыдущем пункте мы рассмотрели вопрос о том, что значит и каким образом «данная машина Тьюринга вычисляет функцию f(x{,
x2, ..., х„)». Для этого нужно, чтобы каждое из чисел ;x1, х2 ..., хn было записано на ленту машины непрерывным массивом из соответствующего числа единиц, а сами массивы были разделены символом 0. Если функция f(x1, x2, ..., хп) определена на данном наборе значений аргументов, то в результате на
ленте должно быть записано подряд f(x1, x2, ..., хп), единиц. При этом мы не очень строго относились к тому, в каком начальном положении машина начинает работать (часто это было стандартное начальное положение), в каком завершает работу и как эта работа протекает. В дальнейшем нам понадобится более сильное понятие вычислимости функции на машине Тьюринга — понятие правильной вычислимости. Определение 1. Будем говорить, что машина Тьюринга правильно
вычисляет функцию f(x1, x2, ..., хп),, если начальное слово 01 x1 01 x2 0...01 x n 0 она переводит в слово q 0 01
f ( x1 , x 2 ,... x n )
0...0 и при этом в процессе
работы не пристраивает к начальному слову новых ячеек на ленте ни слева, ни справа. Если же функция f не определена на данном наборе значений аргументов, то, начав работать из указанного положения, она никогда в процессе работы не будет надстраивать ленту слева. Пример 1. Приведем программы машин Тьюринга, правильно
вычисляющих функции S(x) = х+ 1 и 0(х) = 0. Функция S(x) =х+ 1 осуществляет перевод: q101x0 => q001x+1. Ее программа: q10→ q2 П; q21→ q21 П; q20→ q31; q31→ q31 Л; q30→ q00. Функция O(x)
= 0 осуществляет перевод: q101x0 => q000x+1. Ее программа: q10→ q2 0П; q21→ q21 П; q20→ q30Л; q31→ q40; q40→ q30Л, q30→ q00. Соответствующую
машину Тьюринга обозначили О. В Задачнике (№ 12.24) разобрана работа машины А, называемой «перенос нуля», которая осуществляет перевод слова 001x0 в слово 01x00. Причем как в 54
начальном, так и в заключительном состоянии обозревается первая левая ячейка с нулем. Пример 2. Построить две машины «левый сдвиг» Б– и «правый сдвиг» Б+.
Первая из начального стандартного положения перерабатывает слово 01x0 в то же самое слово и останавливается, обозревая самую левую ячейку с нулем. Вторая машина из начального состояния, в котором обозревается левая ячейка с нулем, слово 01x0 перерабатывает в то же самое слово и останавливается, обозревая самую правую ячейку с нулем. Программа машины Б–: q10→ q2 0Л; q21→ q21 Л; q20→ q00. Ясно, что программа машины Б + получается из программы предыдущей машины заменой символа «Л» символом «П». В задаче № 12.27 Задачника требуется построить машину (называемую «транспозицией» и обозначаемую В), осуществляющую переход 01x q1 01y 0 => 01y q0 01x 0. II.5 Композиция машин Тьюринга Определение 1. Пусть заданы машины Тьюринга O1 и О2, имеющие общий
внешний алфавит {а0, а1, ..., ат} и алфавиты внутренних состояний {q0 , q1 , …, qn} и {q0, q’1, q’2 ,…, q’t} соответственно. Композицией (или произведением) машины O1 на машину О2 называется новая машина О с тем же внешним алфавитом {а0, а1, ..., ат}, внутренним алфавитом {q0 , q1 , …, qn, qn+1, qn+2 ,…, qn+t} и программой, получающейся следующим образом. Во всех командах из O 1 , содержащих символ остановки q0 заменяем последний на qn+1. Все остальные символы в командах из O1 остаются неизменными. В командах из O2 символ q0 оставляем неизменным, а все остальные состояния q’i (i = 1, ..., t) заменяем соответственно на qn+i. Совокупность всех так полученных команд образует программу машины-композиции O. Введенное понятие является удобным инструментом для конструирования машин Тьюринга. Покажем это на примере.
55
Пример 1. Сконструируем машины Тьюринга, правильно вычисляющие
функции-проекторы Inm(х1, х2, ..., хп) = хт (1 ≤ т ≤ п). Рассмотрим сначала конкретный случай п = 3, т = 2, т.е. функцию I32(х1, х2, х3)=x2 Мы должны переработать слово q1 01x 01x 01x 0 в слово q0 01x 0 . 1
2
3
2
Будем применять к начальной конфигурации последовательно сконструированные ранее машины Тьюринга Б + , В, Б – , О :
q1 01x1 01x2 01x3 0
Б + : 01x q 01x 01x 0 1
3
2
В : 01x q 01x 01x 0 2
3
1
Б + : 01x 01x q 01x 0 2
3
1
О : 01x 01x q 00 x 0 2
3
1
Б – : 01x q 01x 00 x 0 2
1
3
О : 01x q 00 x 00 x 0 2
1
3
Б – : q 01x 00 x 00 x 0 2
1
3
Таким образом, функция I32(х1, х2, х3)=x2 вычисляется следующей композицией машин: Б+ВБ+ОБ–ОБ– = Б+ВБ+(ОБ–)2. Проверьте самостоятельно, что функция 122(х1, х2) = х2 вычисляется композицией Б+ВОБ–. Теперь мы можем представить себе алгоритм построения композиции машин Б +, В, Б – , О для вычисления любой функции вида Inm(х1, х2, ..., хп) = хт. С помощью правого сдвига Б+, применив его т -1 раз, нужно сначала достичь массива 01 x : m
(Б+)m-1:
01x1 0...q01xm 0...01xn 0 .
Затем, двигаясь влево, транспонировать (с помощью В) массив 01 x с m
каждым соседним слева массивом, пока массив 01 x не выйдет на первое место: m
(В • Б–)m-1:
q 01xm 01x1 0...01xm −1 01xm +1 0...01xn 0 .
Теперь нужно дойти до крайнего правого массива с помощью (n-1)кратного применения правого сдвига Б+: 56
(Б+)n-1:
01xm 01x1 0...01xm −1 01xm +1 0...q01xn 0 .
Наконец, нужно стирать последовательно справа налево все массивы единиц, кроме первого: (ОБ–)n-1:
q 01xm 0 x1 0...00 xm −1 00 xm +1 0...00 xn 0 .
Итак, данную функцию (правильно) вычисляет следующая машина Тьюринга: (Б+)m-1(В • Б–)m-1(Б+)n-1(ОБ–)n-1. При п = 3, т = 2 эта машина имеет вид: Б+ВБ–(Б+)2(ОБ–)2 = Б+ВБ+(ОБ–)2, т.е. совпадает с построенной выше машиной. При п = 2, т = 2 эта машина имеет вид: Б+(ВБ–)Б+(ОБ–) = Б+ВОБ–, т.е. также совпадает с соответствующей рассмотренной выше машиной Тьюринга. В задаче № 12.29 Задачника подробно разобрана работа машины Тьюринга, являющейся композицией машин ВБ–В, рассмотренных ранее. Эта машина называется «циклический сдвиг» и обозначается Ц. Слово 01x 01y q101z0 она переводит в слово 01z q001x 01y0. При этом нужно помнить, что машины в композиции ВБ–В работают в очередности справа налево: сначала правая В, затем Б– и, наконец, левая В. В задаче № 17.30 Задачника предлагается проверить, что машина Тьюринга, являющаяся следующей композицией К2 = Б+ГВБ+ ВГВБ+ВБ–Б– ВБ+ (называется «копирование»), перерабатывает слово q101x01y в слово 01x01yq001x01y. (Г — машина удвоения.)
57
II.6 Тезис Тьюринга (основная гипотеза теории алгоритмов) Вернемся к интуитивному представлению об алгоритмах: одно из свойств алгоритма заключается в том, что он представляет собой единый способ, позволяющий для каждой задачи из некоего бесконечного множества задач за конечное число шагов найти ее решение. На понятие алгоритма можно взглянуть и с несколько иной точки зрения. Каждую задачу из бесконечного множества задач можно выразить (закодировать) некоторым словом некоторого алфавита, а решение задачи — каким-то другим словом того же алфавита. В результате получим функцию, заданную на некотором подмножестве множества всех слов выбранного алфавита и принимающую значения в множестве всех слов того же алфавита. Решить какую-либо задачу — значит найти значение этой функции на слове, кодирующем данную задачу. А иметь алгоритм для решения всех задач данного класса — значит иметь единый способ, позволяющий в конечное число шагов «вычислять» значения построенной функции для любых значений аргумента из ее области определения. Таким образом, алгоритмическая проблема — по существу, проблема о вычислении значений функции, заданной в некотором алфавите. Остается уточнить, что значит уметь вычислять значения функции. Это значит вычислять значения функции с помощью подходящей машины Тьюринга. Для каких же функций возможно их тьюрингово вычисление? Многочисленные исследования ученых, обширный опыт показали, что такой класс функций чрезвычайно широк. Каждая функция, для вычисления значений которой существует какой-нибудь алгоритм, оказывалась вычислимой посредством некоторой машины Тьюринга. Это дало повод Тьюрингу высказать следующую гипотезу,
58
называемую основной гипотезой теории алгоритмов, или тезисом Тьюринга:
Для нахождения значений функции, заданной в некотором алфавите, тогда и только тогда существует какой-нибудь алгоритм, когда функция является вычислимой по Тьюрингу, т. е. когда она может вычисляться на подходящей машине Тьюринга. Это означает, что строго математическое понятие вычислимой (по Тьюрингу) функции является по существу идеальной моделью взятого из опыта понятия алгоритма. Данный тезис есть не что иное, как аксиома, постулат, выдвигаемый нами, о взаимосвязях нашего опыта с той математической теорией, которую мы под этот опыт хотим подвести. Конечно же данный тезис в принципе не может быть доказан методами математики, потому что он не имеет внутриматематического характера (одна сторона в тезисе — понятие алгоритма — не является точным математическим понятием). Он выдвинут исходя из опыта, и именно опыт подтверждает его состоятельность. Точно так же, например, не могут быть доказаны и математические законы механики; они открыты Ньютоном и многократно подтверждены опытом. Впрочем, не исключается принципиальная возможность того, что тезис Тьюринга будет опровергнут. Для этого должна быть указана функция, которая вычислима с помощью какого-нибудь алгоритма, но невычислима ни на какой машине Тьюринга. Но такая возможность представляется маловероятной (в этом одно из значений гипотезы): всякий алгоритм, который будет открыт, может быть реализован на машине Тьюринга. Дополнительные косвенные доводы в подтверждение этой гипотезы будут приведены в двух последующих параграфах, где рассматриваются другие формализации интуитивного понятия алгоритма и доказывается их равносильность с понятием машины Тьюринга. 59
II.7 Машины Тьюринга и современные электронно-вычислительные машины Изучение машин Тьюринга и практика составления программ для них закладывают фундамент алгоритмического мышления, сущность которого состоит в том, что нужно уметь разделять тот или иной процесс вычисления или какой-либо другой деятельности на простые
составляющие шаги. В машине Тьюринга расчленение (анализ) вычислительного процесса на простейшие операции доведено до предельной возможности: распознавание единичного рассмотренного вхождения символа, перемещение точки наблюдения данного ряда символов в соседнюю точку и изменение имеющейся в памяти информации. Конечно, такое мелкое дробление вычислительного процесса, реализуемого в машине Тьюринга, значительно его удлиняет. Но вместе с тем логическая структура процесса, расчлененного, образно выражаясь, до атомарного состояния, значительно упрощается и предстает в некотором стандартном виде, весьма удобном для теоретических исследований. (Именно такое расчленение на простейшие составляющие вычислительного процесса на машине Тьюринга дает еще один косвенный аргумент в пользу тезиса Тьюринга, обсуждавшегося в предыдущем пункте: всякая функция, вычисляемая с помощью какого-либо алгоритма, может быть вычислена на машине Тьюринга, потому что каждый шаг данного алгоритма можно расчленить на еще более мелкие операции, которые реализуются в машине Тьюринга.) Таким образом, понятие машины Тьюринга есть теоретический инструмент анализа алгоритмического процесса, а значит, анализа существа алгоритмического мышления. В современных ЭВМ алгоритмический процесс расчленен не на столь мелкие составляющие, как в машинах Тьюринга. Наоборот, создатели ЭВМ стремятся к известному укрупнению выполняемых машиной процедур (на этом пути, конечно, есть свои ограничения). Так, для выполнения операции
60
сложения на машине Тьюринга составляется целая программа, а в современной ЭВМ такая операция является простейшей. Далее, машина Тьюринга обладает бесконечной внешней памятью (неограниченная в обе стороны лента, разбитая на ячейки). Но ни в одной реально существующей машине бесконечной памяти быть не может. Это говорит о том, что машины Тьюринга отображают потенциальную возможность неограниченного увеличения объема памяти современных ЭВМ. Наконец, можно провести более подробный сравнительный анализ работы современной ЭВМ и машины Тьюринга. В большинстве ЭВМ принята трехадресная система команд, обусловленная необходимостью выполнения бинарных операций, в которых участвует содержимое сразу трех ячеек памяти. Например, число из ячейки а умножается на число из ячейки Ь, и результат отправляется в ячейку с. Существуют ЭВМ двухадресные и одноадресные. Так, одноадресная ЭВМ работает следующим образом: вызывается (в сумматор) число из ячейки а; в сумматоре происходит, например, умножение этого числа на число из ячейки Ь', результат отправляется из сумматора в ячейку с. Машину Тьюринга можно считать одноадресной машиной, в которой система одноадресных команд упрощена еще больше: на каждом шаге работы машины команда предписывает замену лишь единственного знака, хранящегося в обозреваемой ячейке, а адрес обозреваемой ячейки при переходе к следующему такту может меняться лишь на единицу (обозрение соседней справа или слева ячейки ленты) или не меняться вовсе. Это удлиняет процесс, но в то же время резко унифицирует его, делает стандартным. Подводя итоги, можно сказать, что современные ЭВМ есть некие реальные физические модели машин Тьюринга, огрубленные с точки зрения теории, но созданные в целях реализации конкретных вычислительных процессов. В свою очередь, понятие машины 61
Тьюринга и теория таких машин есть теоретический фундамент и обоснование современных ЭВМ.
II.8 Вычислимость по Тьюрингу примитивно рекурсивных функций Понятие суперпозиции функций и сложной функции хорошо известно, но
сейчас нас этот оператор интересует с точки зрения его взаимоотношений с процессом вычислимости функций с помощью машин Тьюринга. Теорема 1. Если функции f(x1,x2,…,xn), g1 (x1,x2,…,xm), …, gn (x1,x2,…,xm)
правильно вычислимы по Тьюрингу, то правильно вычислима и сложная функция (суперпозиция функций): φ(x1,x2,…,xn)=f( g1 (x1,x2,…,xm),…, gn (x1,x2,…,xm)). Доказательство: руководствуясь определением композиции машин
Тьюринга, нетрудно понять, что если машина F правильно вычисляет функцию f(y), а машина G правильно вычисляет функцию g(x), то композиция этих машин вычисляет суперпозицию этих функций f(g(x)): q101x; G:
q01g(x,y);
F:
q01f(g(x,y)).
Рассмотрим более сложную суперпозицию вычислимых функций: φ(x,y)= f(g1(x,y), g2(x,y)). Пусть машины F, G1, G2 правильно вычисляют функции f, g1, g2 соответственно. Сконструируем машину Тьюринга, правильно вычисляющую сложную функцию φ(x,y), пользуясь введенными нами машинами сдвига, транспозиции, копирования и нулевой функции: q101x01y; K2:
01x01yq01x01y;
G1:
01x01yq01g1(x,y);
Ц:
01g1(x,y) q 01x01y;
G2:
01g1(x,y) q01g2(x,y) ;
62
Б -:
q01g1(x,y) 01g2(x,y) ;
F:
q01 f(g1(x,y) ,g2(x,y));
q0→q00
q001 f(g1,g2).
Сконструируйте самостоятельно композицию машин, правильно вычисляющих функцию φ(x,y)= f(g1(x,y), g2(x,y), g3(x,y)). Подстановки указанного вида достаточно специфичны (все функции g имеют одно о тоже число аргументов) и не исчерпывают всевозможных подстановок, которые можно производить над функциями. Но благодаря функциям-проекторам Imn этот недостаток легко устраним: любая суперпозиция функций в функции может быть выражена через суперпозиции указанного вида и функциипроекторы. В самом деле, например, суперпозиция f(g1(x1, x2), g2(x1))может быть в требуемом виде представлена так: f(g1(x1, x2), I12 (g2(x1), g3(x1))), где g3(x1) – любая функция от х1. В свою очередь, используя подстановку и функции-проекторы, можно переставлять аргументы в функции: f(x2, x1, x3,…,xn)=f(I22(x1, x2), I12(x1, x2), x3, …, xn); f(x1, x1, x3,…,xn)=f(I12(x1, x2), I12(x1, x2), x3, …, xn); поэтому можно считать, что теорема полностью доказана. Сделаем еще один шаг на пути (в каком-то смысле аксиоматического) описания всех функций, вычислимых с помощью машины Тьюринга. Мы докажем, что всякая примитивно рекурсивная функция вычислима с помощью машины Тьюринга. Для этого остается доказать следующую теорему. Теорема 2. Функция φ, возникшая примитивной рекурсией из правильно
вычислимых на машине Тьюринга функций f и g, сама правильно вычислима на машине Тьюринга. Доказательство: Для краткости записей будем считать, что функция φ
связана с функциями f и g следующим образом: φ(x,0)=f(x), φ(x,i+1)=g(x, φ(x,i)).
63
Обозначим F и G – машины Тьюринга, правильно вычисляющие функции f и g соответственно. Пусть x,y – произвольные натуральные числа. Требуется сконструировать машину Тьюринга, вычисляющую значение φ(x,y). Как мы уже отмечали, для вычисления φ(x,y) предстоит вычислить y+1 значений φ(x,0), φ(x,1),…, φ(x,y-1), φ(x,y). Начальная конфигурация такова: q101x01y0. Применим к ней следующую последовательность машин Тьюринга: Б+ВГВ Б+F. В результате получим последовательность конфигураций: q101x01y0; Б+ :
01x q 01y0;
В:
01y q 01x0;
Г:
01y q 01x 01x 0;
В:
01x q 01y 01x 0;
Б+ :
01x 01y q 01x 0;
F:
01x 01y qα 01φ(x,0)0;
На последнем шаге, применив машину, вычисляющую функцию f(x), к конфигурации q01x, мы получим значение f(x), которое, согласно схеме примитивной рекурсии для φ, есть φ(x,0). Теперь мы можем приступить к вычислению φ(x,1), используя второе соотношение схемы примитивной рекурсии: φ(x,1)=g(x, φ(x,0)). Для этого применим сначала к последней конфигурации команды: qα0→ qα+10Л; qα1→ qα+20. В результате получим конфигурацию: 01x01y-1 qα+2001φ(x,0)0. Теперь нужно подготовить ленту машины к применению машины G, вычисляющей значение g(x,φ(x,0)), то есть необходимо получить на ленте конфигурацию q01x01φ(x,0). Для этого применим к конфигурации 01x01y-1 qα+2001φ(x,0)0 последовательность машин АБ-ВБ+ВГВБ-ВБ+Б+ВБ-. Получим последовательность конфигураций: 01x01y-1 qα+2 001φ(x,0)0; 64
А:
01x01y-1 q 01φ(x,0)00;
Б -:
01xq01y-1 01φ(x,0);
В:
01y-1q01x 01φ(x,0);
Б+:
01y-101x q 01φ(x,0);
В:
01y-101 φ(x,0) q 01x;
Г:
01y-101 φ(x,0) q 01x01x;
В:
01y-101x q 01 φ(x,0) 01x;
Б-:
01y-1 q 01x 01 φ(x,0) 01x;
В:
01 x q 01 y-1 01 φ(x,0) 01x;
Б+ :
01 x 01 y-1 q 01 φ(x,0) 01x;
Б+ :
01 x 01 y-1 01 φ(x,0) q 01x;
В:
01 x 01 y-1 01 x q 01 φ(x,0);
Б -:
01 x 01 y-1 q 01 x 01 φ(x,0).
Теперь мы можем применить машину G и вычислить значение φ(x,1)=g(x, φ(x,0)) : 01 x 01 y-1 qβ 01 φ(x,1). Применим в этой конфигурации команду: q β0→qα0, зацикливающую программу. Получим конфигурацию: 01 x 01 y-1 qα 01 φ(x,1). Начинается следующий цикл, осуществляемый командами, идущими после первого появления состояния qα. Этот цикл преобразует конфигурацию вида 01 x 01 y-i qα 01 φ(x,i) в конфигурацию 01 x 01 y-(i+1) qβ 01 φ(x,i+1), при условии, что y>i. Команда q β0→qα0 зацикливает программу, и в результате работы цикла параметр y-i будет понижаться до тех пор, пока не получится конфигурация: 01 x
0 qα 01 φ(x,y), которая в силу команды q α0→qα+10Л перейдет в конфигурацию
01 x qα+1 001 φ(x,y). Дополнительные команды q α+10→qβ+10, А, В, О, В, Б-, А создают на ленте требуемую конфигурацию q0 01 φ(x,y), доказывающую, что функция φ(x,y) правильно вычислена на машине Тьюринга. Теорема доказана.
65
Следствие: Всякая примитивно рекурсивная функция вычислима по
Тьюрингу. Доказательство: Утверждение следует (в виду определения примитивно
рекурсивной функции) из вычислимости по Тьюрингу простейших функций и свойств сохранения такой вычислимости операторами суперпозиции и примитивной рекурсии. II.9 Вычислимость по Тьюрингу частично рекурсивных функций Теорема. Если функция f(x,y) правильно вычислима на машине Тьюринга, то и
функция φ(x)=μy[f(x,y)=0], получающаяся с помощью оператора минимизации из функции f(x,y), также правильно вычислима на машине Тьюринга. Доказательство: Обозначим F – машину Тьюринга, правильно вычисляющую
функцию f(x,y). Используя ее, сконструируем такую машину Тьюринга, которая для заданного значения x вычисляет последовательно значения f(x,0), f(x,1), f(x,2), … до тех пор, пока в первый раз получится f(x,i)=0. После этого машина должна выдать на ленту число i, представляющее собой значение функции φ(x)=i. Если же для всех i будет иметь место f(x,i)>0,то машина должна будет работать вечно, и это будет означать, что функция φ не определена в точке x. начальная конфигурация на конструируемой машине такова: q101x0. Будем мыслить ее следующим образом q101x010 и начнем с применения к ней машины “копирование” К2. Получим конфигурацию 01x010q101x010. Теперь вычислим значение f(x,0), применив машину F:
01x010qα01f(x,o).
Далее подбираем команды, которые при условии f(x,i)>0 преобразовывают конфигурацию 01x01iq01f(x,i) в конфигурацию 01x01i+1q01f(x,i+1): qα0→ qα+10П:
01x0100 qα+1 1f(x,o);
qα+11→ qα+20:
01x0100 qα+2 1f(x,o)-1;
qα+20→ qα+30Л:
01x010qα+3 001f(x,o)-1;
66
qα+30→ qα+41:
01x010qα+4 101f(x,o)-1;
qα+41→ qα+51П:
01x0110 qα+5 01f(x,o)-1;
О: (Б-)2:
01x011q0; 01x011q 01x011;
F:
01x011 qβ 01f(x,1);
qβ0→ qα0:
01x011 qα 01f(x,1);
Последняя команда зацикливает программу, и машина от конфигурации 01x011 qα 01f(x,1) переходит к конфигурации 01x012 qα 01f(x,2) , затем к конфигурации 01x013 qα 01f(x,3) и т.д. Допустим, что на некотором шаге машина домтагла конфигурации 01x01i qα 01f(x,i), при которой f(x,i)=0. Это значит, что φ(x)=i и машина должна выдать этот результат. Число i yнакоплено в «счетчике» 01i. Поэтому поступаем следующим образом. Уже имеющаяся команда qα0→ qα+10П приведет машину к конфигурации 01x01i 0qα+10. Следующие команды выдают на ленту необходимую конфигурацию q001i, т.е. q001φ(x): qα+10→ qγ0:
01x01i 0qγ0;
(Б-)2:
01x qγ 01i 0;
ВО Б-:
qδ 01i ;
q δ 0→ q00:
q001φ(x)
Теорема доказана. Следствие . Всякая частично рекурсивная функция вычислима по Тьюрингу.
Доказательство: Оператор минимизации сохраняет
свойство вычислимости
по Тьюрингу, простейшие функции вычислимы по Тьюрингу, а всякая частично рекурсивная функция получается из простейших с помощью применения конечного числа из трех указанных операторов, то всякая частично рекурсивная функция вычислима по Тьюрингу. ЧАСТИЧНАЯ РЕКУРСИВНОСТЬ ФУНКЦИЙ, ВЫЧИСЛИМЫХ ПО ТЬЮРИНГУ. Вычислимы по Тьюрингу лишь частично рекурсивные функции, т.е. если функция вычислима по Тьюрингу, то она частично рекурсивна. Точнее сказать, 67
по функциональной схеме машины Тьюринга, вычисляющей функцию, можно построить рекурсивное описание этой функции. Эта теорема впервые была доказана Тьюрингом. Теорема 2. Если функция вычислима по Тьюрингу, то она частично
рекурсивна. Теорема 3. Функция вычислима по Тьюрингу тогда и только тогда, когда она
частично рекурсивна. Класс функций, вычислимых по Тьюрингу совпадает с классом частично рекурсивных функций. Совпадение этих двух классов вычислимых функций, в основе построения которых лежали совершенно разные подходы к формализации понятия вычислимости функции, говорит о том, что эти подходы оказались весьма состоятельными, и служит косвенным подтверждением того, что как тезис Тьюринга, так и тезис Черча не только не безосновательны, но и имеют все права на признание. Контрольные вопросы
1. Охарактеризуйте машину Тьюринга. В чем отличие свойств МТ от реальной вычислительной машины. Какие операции существуют для машины Тьюринга? 2. 3. Покажите на примере реализацию операций композиции и ветвления с помощью машины Тьюринга. Какими свойствами обладает операция композиции? 4. Что такое конфигурации машины Тьюринга и какие виды 5. конфигураций существуют? Какие элементарные машины Тьюринга существуют ? 6. Охарактеризуйте каждую элементарную машину. 7. Постройте копирующую машину K m с помощью остальных 8. элементарных машин. Постройте выбирающую машину Tm с помощью остальных 9. элементарных машин. Определите правильную вычислимость функции по Тьюрингу. 10. Докажите, что каждая элементарная функция правильно вычислима 11. по Тьюрингу.
68
12. Докажите, что операции подстановки, примитивной рекурсии и минимизации сохраняют свойство правильной вычислимости функции по Тьюрингу. Докажите, что всякая ПРФ, всякая ЧРФ – правильно вычислима по 13. Тьюрингу. Объясните эквивалентность двух уточнений алгоритма. 14. 15. Чем отличаются уточнения понятия алгоритма в виде рекурсивной функции от машины Тьюринга?
Практические задания I.
Постройте программы машин Тьюринга вычисляющие следующие функции:
1.
f (x ) = x + 3 ;
2.
f (x ) = 4 ⋅ x ;
3.
f ( x ) = 2 −& x ;
4.
f ( x ) = 5 −& x ;
5.
f ( x ) = x −& 3 ;
6.
f (x ) = x − 3 ;
7.
f (x ) = k ⋅ x − 3 ;
8.
f (x ) = 2 ⋅ x + 3 .
69
II. Используя базис элементарных машин и
вычисляющие соответственно функции
машины M 1 , M 2 , M 3 ,
f ( x ) = 2 ⋅ x;
f ( x, y ) = x + y ;
f ( x, y ) = x −& y , с помощью операций композиции, ветвления и зацикливания постройте машины, вычисляющие функции: 1.
f ( x, y ) = x ⋅ y ;
2.
f ( x, y ) = 2 ⋅ ( x −& y ) ;
3.
f ( x, y ) = 2 ⋅ x + y ;
4.
⎡x⎤ f ( x, y ) = ⎢ ⎥ ⎣ y⎦
5.
⎧остаток от деления x на y, если y > 0 rest ( x, y ) = ⎨ ⎩0, если y = 0
6.
f (x ) = 2 ⋅ x + 5 ;
7.
f ( x ) = x −& 13 ;
;
8.
f ( x, y ) = 2( x + y ) −& ( x −& y ) ;
9.
⎧ f ( x,0 ) = 2 ⋅ x ; f ( x, y ) , удовлетворяющей условию: ⎨ ( ) ( ) + = − f x , y 1 x f x , y & ⎩
10. f ( x ) = μy[( x + y ) −& 5 = 0] .
III. Из машин, составляющих базис элементарных машин, путем операций
композиции,
ветвления,
зацикливания
постройте
машины,
правильно
вычисляющие следующие функции: 1.
f (x ) = x + 5 ;
2.
f (x ) = 3 ⋅ x + 5 ;
3.
f ( x ) = x −& 1 ;
1.
⎧1, x > 0 ; Sgx = ⎨ ⎩0, x = 0
2.
⎧0, x > 0 Sg x = ⎨ ; ⎩1, x = 0
70
3.
f ( x ) = C 51 ( x ) ;
4.
f ( x, y ) = I 22 ( x, y ) + 1 ;
5.
f ( x, y, z ) = I 23 ( x, y, z ) −& 1 ;
6.
⎧ x, x > y f ( x, y ) = max( x, y ) = ⎨ ; ⎩ y, x ≤ y
7.
f ( x ) = x!.
III.1. Уточнение понятие алгоритма через машину с неограниченными регистрами
Рассмотрим теперь точное определение алгоритма через машину с неограниченной количество регистров (МНР). При этом, как в предыдущий главе, в качестве изучаемых объектов берем элементы из множества натуральных чисел, т.е. N = {0,1,2,...} . Ниже мы перечислим все команды из списка предписаний МНР, однозначно определим действие каждой команды и опишем механизм реализации алгоритма. Нужно отметить, что процесс работы МНР полностью удовлетворяет всем свойствам алгоритма. Машина с неограниченными регистрами является исполнителем, представляющим собой простой "идеализированный компьютер". Идеализация состоит в том, что каждый отдельный реальный компьютер ограничен как величиной чисел, которые поступают на вход, так и размером памяти (необходимой для запоминания промежуточных результатов). МНР лишена этих ограничений. Машина с неограниченными регистрами имеет неограниченно большую память, ячейки которой будем называть регистрами и обозначать R1 , R2 , R3 ,... .Каждый регистр в любой момент времени содержит 71
натуральное число.Число содержащееся в Rn , будем обозначать через rn. Это можно представить следующим образом: R1 R2 R3 R4 ... r1 R2 r3 r4 ... Таб.3.1 При этом только конечное множество регистров содержит числа, отличные от нуля. Все остальные регистры заполнены нулями. Это допущение предполагает, что каждый алгоритм использует только конечный объем памяти. В список предписаний МНР входит четыре команды: команда обнуления Z(n); команда прибавления единицы S(n); команда переадресации T(m, n) и команда условного перехода J(m, n, q). Команды обнуления, прибавления единицы и переадресации называются арифметическими. Обозначение команды Z(n) S(n) T (m, n ) J (m, n, q )
Действие, производимое МНР По данной команде Rn := 0 Rn := R n + 1 Rn := R m Если Rm = R n , то перейти к вычислению команды алгоритма с номером q
Таб. 3.2 Алгоритмом называется конечная непустая последовательность команд из списка предписаний МНР, начинающаяся с команды с номером 1. Производя вычисления по данному алгоритму, МНР изменяет содержимое регистров памяти в точном соответствии с командами алгоритма. Исходное состояние памяти, то есть последовательность чисел в регистрах перед началом вычислений, называется стандартной (начальной) конфигурацией. Предположим, что некоторый алгоритм P состоит из последовательности команд I1, I2, ..., Is. МНР начинает вычисление с команды I1, затем выполняются команды I2, I3 и т. д. до тех пор, пока не встретится команда вида J(m, n, q). В этом случае МНР переходит к выполнению команды, предписанной J(m, n, q) и текущим содержанием регистров Rm и Rn Пример 1. Рассмотрим алгоритм P1 I1 I2 I3 I4 I5
J(1, 2, 6) S(2) S(3) J(1, 2, 6) J(1, 1, 2) 72
I6 T(3, 1) Таб.3.3. Применим алгоритм к следующей начальной конфигурации: R1 R2 R3 R4 R5 ... 5 3 0 0 0 ... Таб.3.4. Ход вычисления на МНР по алгоритму P1 с начальной конфигурацией, изображенной на таблице 3., можно представить, записывая последовательно сверху вниз конфигурации машины вместе со следующей командой, к которой она переходит на данном шаге. Следующая команда R1 R2 R3 R4 R5 ... 5 3 0 0 0 ... I1 5 3 0 0 0 ... I2 (так как R1 R2) 5 4 0 0 0 ... I3 5 4 1 0 0 ... I4 5 4 1 0 0 ... I5 (так как R1 R2) 5 4 1 0 0 ... I2 (так как R1 = R2) 5 5 1 0 0 ... I3 5 5 2 0 0 ... I4 5 5 2 0 0 ... I6 (так как R1 = R2) 2 5 2 0 0 ... I7 Таб. 3.5.(Вычисление по алгоритму P1 ) МНР выполняет алгоритм P: I1, I2, ..., Is до тех пор, пока это возможно. Вычисление останавливается тогда и только тогда, когда нет следующей команды, то есть когда МНР только что выполнила команду Ik и следующая команда в вычислении есть Iv, где v > s. Это может произойти одним из способов: I) если Ik = Is (выполнена последняя команда в P) и Ik - арифметическая команда; 2) если Ik = J(m, n, q), Rm = Rn и q > s. 3) если Ik = J(m, n, q), Rm Rn и q = s. В этом случае говорят, что вычисление остановилось после выполнения команды Ik, и заключительная конфигурации есть последовательность r1, r2, r3, ... содержимого регистров на этом шаге. Результатом применения алгоритма к некоторой начальной конфигурации будем считать число r1 из регистра R1 заключительной конфигурации. Бывают, конечно, вычисления, которые никогда не заканчиваются, например, никогда не заканчивается ни при какой начальной конфигурации вычисление по алгоритму: I1 S(1) 73
I2 J(1, 1, 1) Таб.3.6. В случае, если вычислительный процесс не заканчивается получением результата, то говорят, что данный алгоритм неприменим к начальной конфигурации. В дальнейшем для удобства обозначим через P(a1, a2, ..., an) вычисление по алгоритму P с начальной конфигурацией a1, a2, ..., an, 0, 0, .... Если вычислительный процесс заканчивается с результатом b, будем писать P(a1, a2, ..., an) = b. Пусть f ( x ) , (где x = ( x1 ,..., x n ) ) – арифметическая функция, т.е. функция у которая область определения и область значения является множество натуральных чисел. Определение 1. Функция f называется вычислимой на МНР (или МНРвычислимой), если существует такой алгоритм P, что 1) вычисление P(a1, a2, ..., an) останавливается тогда и только тогда, когда (a1, a2, ..., an) принадлежит области определения f; 2) если (a1, a2, ..., an) принадлежит области определения f; то в заключительной конфигурации в регистре R1 находится натуральное число b такое, что f(a1, a2, ..., an) = b.
Рассмотрим теперь несколько простых примеров вычислимых функций. Пример 2. Докажите МНР-вычислимость функции f ( x, y ) = x + y . Решение. Получим x + y, прибавляя y раз 1 к числу x. Начальной конфигурацией алгоритма служит x, y, 0, 0, 0, ....
Типичной Конфигурац ией в процессе вычисления является R1 x+k
R2
R3
R4
R5
...
Y
k
0
0
... Таб.3.7.
Определим алгоритм следующим образом: I1 J(3, 2, 5)
74
I2 S(1) I3 S(3) I4 J(1,1,1) Таб.3.8. Заданный алгоритм вычисляет функцию x + y. Пример 3. Докажите МНР-вычислимость функции ⎧0, если x ≤ 1 f ( x ) = x −& 1 = ⎨ ⎩ x − 1, если x > 1 Решение. Составим алгоритм для начальной конфигурации x, 0, 0, ... . Типичной конфигурацией в процессе вычисления является: R1 R2 R3 R4 R5 ... X K k + 1 0 0 ... Таб.3.9. Следующий алгоритм МНР-вычисляет функцию. I1 I2 I3 I4 I5 I6
J(1, 2, 6) S(2) J(1, 2, 6) S(3) J(1, 1, 2) T(3, 1) Таб.3.10.
Практические задания а) Составьте алгоритмы МНР– вычисляющие функции:
1.
f (x ) = x + 5 ;
2.
f (x ) = 3 ⋅ x + 5 ;
3.
f ( x ) = x −& 1 ;
4.
⎧1, x > 0 ; Sgx = ⎨ ⎩0, x = 0
5.
⎧0, x > 0 Sg x = ⎨ ; 1 , x = 0 ⎩
6.
f ( x ) = C 51 ( x ) ;
7.
f ( x, y ) = I 22 ( x, y ) + 1 ;
8.
f ( x, y, z ) = I 23 ( x, y, z ) −& 1 ; 75
9. 10.
⎧ x, x > y f ( x, y ) = max( x, y ) = ⎨ ; y , x ≤ y ⎩ f ( x ) = x!.
б) Покажите, что для каждой команды переадресации существует программа без команд переадресации, которая на всякой конфигурации МНР дает тот же результат, что и T(m, n). Это означает, что команды переадресации на самом деле избыточны в нашем определении МНР. Тем не менее, представляется естественным и удобным иметь такие команды, облегчающие построение алгоритмов. в) Докажите разрешимость следующих предикатов на множестве натуральных чисел: 1. p( x, y ) = ( x ≠ y ) ; 2. p( x, y ) = ( x ≠ y ) ; 3. p( x, y ) = ( x < y ) ; 1. p( x ) = ( x − четное число ) ; 2. p( x, y ) = (3 x + 2 y = 0 ) .
76
IV. Марковские подстановки IV.1. Нормальные алгоритмы Маркова Теория нормальных алгоритмов (или алгорифмов, как называл их создатель теории) была разработана советским математиком А. А. Марковым (1903—1979) в конце 1940-х — начале 1950-х гг. XX в. Эти алгоритмы представляют собой некоторые правила по переработке слов в каком-либо алфавите, так что исходные данные и искомые результаты для алгоритмов являются словами в некотором алфавите. Марковские подстановки. Алфавитом (как и прежде) называется любое непустое множество. Его элементы называются буквами, а любые последовательности букв — словами в данном алфавите. Для удобства рассуждений допускаются пустые слова (они не имеют в своем составе ни одной буквы). Пустое слово будем обозначать Λ. Если А и B — два алфавита, причем А⊆B то алфавит В называется расширением алфавита А. Слова будем обозначать латинскими буквами: Р, Q, R (или этими же буквами с индексами). Одно слово может быть составной частью другого слова. Тогда первое называется подсловом второго или вхождением во второе. Например, если А — алфавит русских букв, то можем рассмотреть такие слова: Р 1 = параграф, Р 2 = граф, Pз = ра. Слово Р2 является подсловом слова Р1, а Р3 - подсловом Р 1 и Р2, причем в Р1 оно входит дважды. Особый интерес представляет первое вхождение. Определение 1. Марковской подстановкой называется операция над словами, задаваемая с помощью упорядоченной пары слов (Р, Q), состоящая в следующем. В заданном слове R находят первое вхождение слова Р (если таковое имеется) и, не изменяя остальных частей слова R, заменяют в нем это вхождение словом Q. Полученное слово называется результатом применения марковской подстановки (Р, Q) к слову R. Если же первого вхождения Р в слово R нет (и, следовательно, вообще нет ни одного вхождения Р в R), то считается, что марковская подстановка (Р, Q) неприменима к слову R. Частными случаями марковских подстановок являются подстановки с пустыми словами: (Λ, Q), (Р, Λ), (Λ,Λ). Пример 1. Примеры марковских подстановок рассмотрены в таблице, в каждой строке которой сначала дается преобразуемое слово, затем применяемая к нему марковская подстановка и, наконец, получающееся в результате слово:
77
Преобразуемое слово
Марковская подстановка
Результат
138 578 926
(8 578 9, 00)
130 026
Тарарам
(ара, Λ)
Трам
Шрам
(ра, ар)
Шарм
Функция
(Λ, ζ-)
ζ-функция
Логика
(ика, Λ)
Лог
Книга
(Λ,Λ)
Книга
поляна
(пор, т)
[неприменима]
Для обозначения марковской подстановки (Р, Q) используется запись Р —> Q. Она называется формулой подстановки (Р, Q). Некоторые подстановки (Р, Q) будем называть заключительными (смысл названия станет ясен чуть позже). Для обозначения таких подстановок будем использовать запись Р —>. Q, называя ее формулой заключительной подстановки. Слово Р называется левой частью, a Q — правой частью в формуле подстановки. Нормальные алгоритмы и их применение к словам. Упорядоченный конечный список формул подстановок
⎧ P1 → (.)Q1 , ⎪ P → (.)Q , ⎪ 2 2 ⎨ ⎪................, ⎪⎩ Pr → (.)Qr , в алфавите А называется схемой (или записью) нормального алгоритма в А. (Запись точки в скобках означает, что она может стоять в этом месте, а может отсутствовать.) Данная схема определяет (детерминирует) алгоритм преобразования слов, называемый нормальным алгоритмом Маркова. Дадим его точное определение.
78
Определение 2. Нормальным алгоритмом (Маркова) в алфавите А называется следующее правило построения последовательности Vi слов в алфавите А, исходя из данного слова V в этом алфавите. В качестве начального слова V0 последовательности берется слово V. Пусть для некоторого i >= 0 слово Vi построено и процесс построения рассматриваемой последовательности еще не завершился. Если при этом в схеме нормального алгоритма нет формул, левые части которых входили бы в Vi , то Vi+1 полагают равным Vi и процесс построения последовательности считается завершившимся. Если же в схеме имеются формулы с левыми частями, входящими в Vi, то в качестве Vi+1, берется результат марковской подстановки правой части первой из таких формул вместо первого вхождения ее левой части в слово Vi; процесс построения последовательности считается завершившимся, если на данном шаге была применена формула заключительной подстановки, и продолжающимся — в противном случае. Если процесс построения упомянутой последовательности обрывается, то говорят, что рассматриваемый нормальный алгоритм применим к слову V. Последний член W последовательности называется результатом применения нормального алгоритма к слову V. Говорят, что нормальный алгоритм перерабатывает V B W. Последовательность Vi, будем записывать следующим образом: V0 => V0 => V2 => ... => Vm-1 => Vm, где V0 = V и Vm = W. Мы определили понятие нормального алгоритма в алфавите А. Если же алгоритм задан в некотором расширении алфавита А, то говорят, что он есть нормальный алгоритм над А. Рассмотрим примеры нормальных алгоритмов. Пример 2. Пусть А = {а, b} — алфавит. Рассмотрим следующую схему нормального алгоритма в А: ⎧a → .Λ, ⎨ ⎩b → b.
Нетрудно понять, как работает определяемый этой схемой нормальный алгоритм. Всякое слово V в алфавите А, содержащее хотя бы одно вхождение буквы а, он перерабатывает в слово, получающееся из V вычеркиванием в нем самого левого (первого) вхождения буквы а.
79
Пустое слово он перерабатывает в пустое. (Алгоритм не применим к таким словам, которые содержат только букву b.) Например,
aabab => abab, ab => b, aa => a, bbab => bbb, baba => bba. Пример 3. Пусть А = {a0, a1, ..., an} — алфавит. Рассмотрим схему
⎧a 0 → Λ , ⎪a → Λ , ⎪⎪ 1 ⎨............, ⎪a → Λ , ⎪ n ⎪⎩Λ → .Λ, Она определяет нормальный алгоритм, перерабатывающий всякое слово (в алфавите А) в пустое слово. Например, а1а2а1а3а0=> а1а2а1а3=> а2а1а3=> а2а3=> а3=>Λ IV.2. Нормально вычислимые функции и принцип нормализации Маркова Как и машины Тьюринга, нормальные алгоритмы не производят собственно вычислений: они лишь производят преобразования слов, заменяя в них одни буквы другими по предписанным им правилам. В свою очередь, мы предписываем им такие правила, результаты применения которых мы можем интерпретировать как вычисления. Рассмотрим два примера. Пример 4. В алфавите А = {1} схема Λ => .1 определяет нормальный алгоритм, который к каждому слову в алфавите А = {1} ( все такие сло ва суть следующие: Λ , 1, 11, 111, 1111, 11111 и т. д .) приписывает слева 1. Следовательно, алгоритм реализует (вычисляет) функцию
f(x) = х + 1. Пример 5. Дана функция
⎧1, если n делится на3, ⎩Λ, если n не делится на 3
ϕ 3 (11...1) = ⎨
где п — число единиц в слове 11... 1. Рассмотрим нормальный алгоритм в алфавите А = {1} со следующей схемой:
80
⎧111 → Λ, ⎪11 → .Λ, ⎪⎪ ⎨............, ⎪1 → .Λ, ⎪ ⎪⎩Λ → .1, Этот алгоритм работает по такому принципу: пока число букв 1 в слове не меньше 3, алгоритм последовательно стирает по три буквы. Если число букв меньше 3, но больше 0, то оставшиеся буквы 1 или 11 стираются заключительно; если слово пусто, оно заключительно переводится в слово 1. Например: 1111111=>1111=>1=>Λ; 111111111=>111111=>111=>Λ=>1. Таким образом, рассмотренный алгоритм реализует (или вычисляет) данную функцию. Сформулируем функций.
теперь
точное
определение
такой
вычислимости
Определение 4. Функция f, заданная на некотором множестве слов алфавита А, называется нормально вычислимой, если найдется такое расширение B данного алфавита (А ⊆ В) и такой нормальный алгоритм в В, что каждое слово V (в алфавите А) из области определения функции f этот алгоритм перерабатывает в слово f (V).
Таким образом, нормальные алгоритмы примеров 34.6 и 34.7 показывают, что функции f(x) = х + 1 и (ϕ3(х) нормально вычислимы. Причем соответствующие нормальные алгоритмы удалось построить в том же самом алфавите А, на словах которого были заданы рассматривавшиеся функции, т.е. расширять алфавит не потребовалось (В = A). Следующий пример демонстрирует нормальный алгоритм в расширенном алфавите, вычисляющий данную функцию. Пример 6. Построим нормальный алгоритм для вычисления функции f(x) = х + 1 не в одноичной системе (как сделано в примере 34.6), а в десятичной. В качестве алфавита возьмем перечень арабских цифр А = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, а нормальный алгоритм будем строить в его расширении В = A U {а, b}. Вот схема этого нормального алгоритма (читается по столбцам):
81
0b → .1
a 0 → 0a
1a → 1b
1b → .2 2b → .3 3b → .4 4b → .5 5b → .6 6b → .7 7b → .8 8b → .9
a1 → 1a 2a → 2b a 2 → 2a 3a → 3b a3 → 3a 4a → 4b a 4 → 4a 5a → 5b a5 → 5a 6a → 6b a 6 → 6a 7a → 7b a 7 → 7a 8a → 8b a8 → 8a 9a → 9b
9b → b0 b → .1
a 9 → 9a 0a → 0b
Λ→a
Попытаемся применить алгоритм к пустому слову Λ. Нетрудно понять, что на каждом шаге должна будет применяться самая последняя формула данной схемы. Получается бесконечный процесс: Λ=>a =>аа => ааа => аааа =>... Это означает, что к пустому слову данный алгоритм не применим. Если применить теперь алгоритм к слову 499, получим следующую последовательность слов: 499 => a499 (применена последняя формула) => 4a99 (формула из середины второго столбца) => 49а9 => 499b (дважды применена формула из конца второго столбца) => 499b (предпоследняя формула) => 49b0 => 4b00 (дважды применена предпоследняя формула первого столбца) => 500 (применена формула из середины первого столбца). Таким образом, слово 499 перерабатывается данным нормальным алгоритмом в слово 500. Предлагается проверить, что 328 => 329, 789 => 790. В рассмотренном примере нормальный алгоритм построен в алфавите В, являющемся существенным расширением алфавита А (т.е. А ⊆ В и А ≠ В), но данный алгоритм слова в алфавите А перерабатывает снова в слова в алфавите А. В таком случае говорят, что алгоритм задан над алфавитом А. Создатель теории нормальных алгоритмов советский математик А. А. Марков выдвинул гипотезу, получившую название «Принцип 82
нормализации Маркова». Согласно этому принципу, для нахождения значений функции, заданной в некотором алфавите, тогда и только тогда существует какой-нибудь алгоритм, когда функция нормально вычислима. Сформулированный принцип, как и тезисы Тьюринга и Чёрча, носит внематематический характер и не может быть строго доказан. Он выдвинут на основании математического и практического опыта. Все, что в предыдущих параграфах было сказано о тезисах Тьюринга и Чёрча, можно с полным правом отнести к принципу нормализации Маркова. Косвенным подтверждением этого принципа служат теоремы следующего пункта, устанавливающие эквивалентность и этой теории алгоритмов теориям машин Тьюринга и рекурсивных функций. IV.3. Совпадение класса всех нормально вычислимых функций с классом всех функций, вычислимых по Тьюрингу
Это совпадение будет означать, что понятие нормально вычислимой функции равносильно понятию функции, вычислимой по Тьюрингу, а вместе с ним и понятию частично рекурсивной функции. Теорема 1. Всякая функция, вычислимая по Тьюрингу, будет также и нормально вычислимой. Доказательство. Пусть машина Тьюринга с внешним алфавитом А = {а 0 , а 1 , ..., а т } и алфавитом внутренних состояний Q= {q 0 , q 1 , ..., q т } вычисляет некоторую функцию, заданную и принимающую значения в множестве слов алфавита А (словарную функцию на А}. Попытаемся представить программу этой машины Тьюринга в виде схемы некоторого нормального алгоритма. Для этого нужно каждую команду машины Тьюринга qα ai → qβ a j X представить в виде совокупности марковских подстановок. Конфигурации, возникающие в машине Тьюринга в процессе ее работы, представляют собой слова в алфавите A U Q. Эти слова имеют вид: ai ...aik qα aik +1 ...ai . Нам понадобится различать начало слова и его конец (или его левый и правый концы). Для этого к алфавиту A U Q добавим еще два символа (не входящие ни в А, ни в Q): A(J Q U {и, v}. Эти символы будем ставить соответственно в начало и конец каждого машинного слова w: uwv. 1
Пусть на данном шаге работы машины Тьюринга к машинному слову w предстоит применить команду qα ai → qβ a j X . Это означает, что машинное слово w (а вместе с ним и слово uwv) содержит под слово qα ai . Посмотрим, какой совокупностью марковских подстановок можно заменить данную команду в каждом из следующих трех случаев:
83
а) Х= С, т.е. команда имеет вид: qα ai → qβ a j Ясно, что в этом случае следующее слово получается из слова uwv с помощью подстановки qα ai → qβ a j , которую мы и будем считать соответствующей команде
qα ai → qβ a j ; б) X = Л, т.е. команда имеет вид: qα ai → qβ a j Л . Нетрудно понять, что в этом случае для получения из слова uwv следующего слова надо к слову uwv применить ту подстановку из совокупности a0 qα ai → qβ a0 a j ; a1qα ai → qβ a1a j ; …….. am qα ai → qβ am a j am qα ai → uqβ a0 a j , которая применима к слову uwv. Б частности, последняя подстановка применима только тогда, когда qα — самая левая буква в слове w, т.е. когда надо пристраивать ячейку слева; в) Х- П, т.е. команда имеет вид: qα ai → qβ a j П . В этом случае аналогично, чтобы получить из слова uwv следующее слово, нужно к слову uwv применить ту из подстановок совокупности qα ai a0 → a j qβ a0 ; qα ai a1 → a j qβ a1 ; …….. qα ai am → a j qβ am qα ai v → a j qβ a0 v , которая применима к слову uwv. Поскольку слово qα ai , входит в слово w только один раз, то к слову uwv применима только одна из подстановок, перечисленных в пунктах б, в. Поэтому порядки следования подстановок в этих пунктах безразличны, важны лишь их совокупности. Заменим каждую команду из программы машины Тьюринга указанным способом совокупностью марковских подстановок. Мы получим схему некоторого нормального алгоритма. Теперь ясно, что применить к слову w данную машину Тьюринга — это все равно, что применить к слову uwv построенный нормальный алгоритм. Другими словами, действие машины Тьюринга равнозначно действию подходящего нормального алгоритма. Это и
84
означает, что всякая функция, вычислимая по Тьюрингу, нормально вычислима. Верно и обратное утверждение. Теорема 2. Всякая нормально вычислимая функция вычислима по Тьюрингу.
Доказательство. В теореме 1 фактически доказано, что всякая нормально вычислимая функция частично рекурсивна. Добавив сюда доказанное в предыдущем параграфе утверждение о том, что всякая частично рекурсивная функция вычислима по Тьюрингу, мы и приходим к справедливости сформулированного утверждения о вычислимости по Тьюрингу всякой нормально вычислимой функции. Таким образом, класс нормально вычислимых функций совпадает с классом функций, вычислимых по Тьюрингу. Эквивалентность различных теорий алгоритмов. Итак, в двух последних параграфах мы познакомились с тремя теориями, каждая из которых уточняет понятие алгоритма, и доказали, что все эти теории равносильны между собой. Другими словами, они описывают один и тот же класс функций, т. е. справедлива следующая теорема. Теорема 3 . Следующие классы функций (заданных на натуральных числах и принимающих натуральные значения) совпадают: а)
класс всех функций, вычислимых по Тьюрингу,
б)
класс всех частично рекурсивных функций;
в)
класс всех нормально вычислимых функций.
Полезно уяснить смысл и значение этого важного результата. В разное время в разных странах ученые независимо друг от друга, изучая интуитивное понятие алгоритма и алгоритмической вычислимости, создали теории, описывающие данное понятие, которые оказались равносильными. Этот факт служит мощным косвенным подтверждением адекватности этих теорий опыту вычислений, справедливости каждого из тезисов Тьюринга, Чёрча и Маркова. В самом деле, ведь если бы один из этих классов оказался шире какоголибо другого класса, то соответствующий тезис Тьюринга, Чёрча или Маркова был бы опровергнут. Например, если бы класс нормально вычислимых функций оказался шире класса рекурсивных функций, то существовала бы нормально вычислимая, но не рекурсивная функция. В силу ее нормальной вычислимости она была бы алгоритмически вычислима в интуитивном понимании алгоритма, и предположение о 85
ее нерекурсивности опровергало бы тезис Чёрча. Но классы Тьюринга, Чёрча и Маркова совпадают, и таких функций не существует. Это и служит еще одним косвенным подтверждением тезисов Тьюринга, Маркова и Чёрча. Можно отметить, что существуют еще и другие теории алгоритмов, и для всех них также доказана их равносильность с рассмотренными теориями.
86
СПИСОК ЛИТЕРАТУРЫ
1. Матросов В.Л. Теория алгоритмов. –М.,1989. –188 с. 2. Мальцев А.И. Алгоритмы и рекурсивные функции. 2–е изд. М. –1986. – 211 с. 3. Новиков П.С. Элементы математической логики. 2–е изд. М. –1973. – 400 с. 4. Роджерс Х. Теория рекурсивных функций и эффективная вычислимость. 2–е изд. М. –1986. –211 с. 5. Катленд Н. Вычислимость. Введение в теорию рекурсивных функций. 2–е изд. М. –1983. –195 с. 6. Марков А.А. Теория алгорифмов. // Труды МИАН СССР. 1954, т. 42 7. Успенский В.А. Лекции о вычислимых функциях. –М. 1960. 8. Математическая логика. (Под.ред. Столяр А.А.) –Минск, –1991. –269 с. 9. Столяр А.А. Макаренков А.В. Что такое алгоритм. –Минск, –1991. –169 с. 10. Лавров И.А., Максимов Л.Л. Задачи по теории множеств, математической логики и теории алгоритмов. –М. –1984. –224 с. 11. Колмогоров А.Н., Драгалин А.Г. Математическая логика. Дополнительные главы. –М. –1984. –120 с.
87