Тема 5. Рекурсии 5.1. Понятие рекурсии.Рекурсивные функции. 5.2. Рекурсивные и рекурсивно перечислимые множества и предикаты 5.1. Понятие рекурсии. Рекурсивные функции. В основе понятия вычислимой функции лежит широко распространенный способ вычисления функций натурального аргумента, состоящий в том, что задается f(0) и так называемая рекуррентная (от лат. recurro - возвращаюсь) формула f(n + 1) = h (f(n)) , позволяющая вычислить f(n+1), если известно f(n) , и с помощью этой формулы последовательно вычисляются f(1), f(2) и т. д. Такой процесс последовательного вычисления значений функции называется рекурсией. Метод рекурсии дает возможность сводить вычисление одной функции к вычислению другой: если мы умеем вычислять h, то мы сумеем вычислить и любое значение f. Примером 1 может служить функция 2n, которую можно задать равенствами 20 = 1, 2n+1 = 2*2n, сводящими вычисление ее значений к вычислению значений функции h(m) = 2(m). Таким образом, если из вычислимой (в интуитивном смысле) функции получена с помощью рекурсии другая функция, то эта новая функция также вычислима (в том же смысле). Разумеется, рекурсия - не единственный способ получать одни функции из других, при котором вычислимая функция переходит в разряд вычислимых. Тем же свойством обладает, например, подстановка (суперпозиция): если мы умеем вычислять функции f(x) и g(x), то мы сумеем вычислить и функцию g (f(x)). Если у нас есть некоторый запас простейших функций, для которых имеется вычисление, то все функции, которые можно из них получить, производя сколько угодно раз суперпозиции и рекурсии, с точки зрения любой разумной интуиции также будут вычислимыми. Возникает вопрос: насколько широк класс вычислимых функций, которые можно так получить? Прежде чем выяснять этот вопрос, нужно, разумеется, уточнить, из какого запаса простейших функций мы исходим. Но целесообразно также обобщить понятие рекурсии - и даже в двух направлениях. Во-первых, f(n +1) может зависеть не только от f(n), но и от самого n; в этом случае рекуррентная формула имеет вид f(n +1) = h (n,f(n)), где h некоторая заведомо вычислимая функция двух переменных. В рассмотренном выше частном случае, когда h - одноместная функция и f(n +1) = h (n,f(n)), функцию f часто называют итерацией (от лат. iteratio повторение) функции h). Во-вторых, с помощью рекурсии можно вычислять также и функции нескольких переменных. При этом все переменные, кроме одной, служат параметрами, и для каждого фиксированного набора их значений вычисление 1 функции от оставшейся переменной производится точно так же, как это делалось для одноместных функций. Это значит, что если мы вычисляем функцию f(x1,…, xk), к >1, и рекурсия проводится по переменной xk , то f(x1,…, xk-1,0) вычисляется по формуле f(x1,…, xk-1,0)=g(x1,…, xk-1,0), a f(x1,…,xk-1,xk+l) — по формуле f(x1,…,xk-1,xk+l)= h(x1,…,xk-1,xk, f(x1,…,xk-1,xk)), где g и h - заведомо вычислимые функции вместимости к-1 и к+1, соответственно. Пример 2. Пусть f(x1,x2) = x1*x2, тогда функция g(x) тождественно равна нулю, h(x1,x2,x3) равна x3+ x1, что дает формулы x1*0=0, x1*(x2+1) = x1*x2+x1. Рекурсивные функции используются в вычислительной математике для изучения эффективно вычислимых функций. 5.2. Рекурсивные и рекурсивно перечислимые множества и предикаты Задачи о нахождении алгоритмов для вычисления функций (в частности, предикатов) называют обычно алгоритмическими проблемами; если алгоритма для вычисления той или иной функции не существует, говорят, что соответствующая алгоритмическая проблема неразрешима. Утверждения о неразрешимости проблем распознавания свойств имеют следующий вид: "Не существует алгоритма, позволяющего по любому конструктивному объекту из заданного класса А узнать, обладает ли этот объект данным свойством". Тезис Черча позволяет уточнить эту формулировку так: "Не существует машины Тьюринга, распознающей данное свойство объектов класса А". При этом предполагается, что класс А состоит из слов в некотором конечном алфавите; но в действительности очень часто речь идет о классах иной природы, элементы которых кодируются словами. Что касается выражения "машина Тьюринга распознает свойство", то оно понимается так: машина перерабатывает каждый элемент класса А в "и", если он обладает данным свойством, и в "л" - если не обладает (вместо "и" и "л" можно использовать любые другие символы.). Аналогичным образом уточняются утверждения о не распознаваемости отношений. Проще всего доказывается неразрешимость некоторых алгоритмических проблем, относящихся к самой теории алгоритмов, а именно, проблем распознавания определенных свойств машин Тьюринга. Из них самая простая - проблема распознавания самоприменимости. Машина Тьюринга называется самоприменимой, если она применима к своему собственному коду. В противном случае машина называется несамоприменимой. Теорема 1. Не существует алгоритма, позволяющего для любой машины Тьюринга узнать, является ли она самоприменимой. В соответствии со сказанным выше точный смысл этого утверждения таков: не существует машины Тьюринга, перерабатывающей код любой 2 самоприменимой машины Тьюринга в "и" и код любой несамоприменимой в "л". Точное понятие алгоритма позволяет выделить среди всевозможных функций вычислимые, т.е. такие, значения которых можно "в самом деле находить". Под таким же углом зрения можно рассмотреть и понятие множества: весьма естественно попытаться среди всевозможных способов задания множеств выделить "эффективные", т.е. такие, которые позволяли бы "в самом деле работать" с множествами - указывать их конкретные элементы и производить над ними вычислительные операции, отвечать для конкретных объектов на вопрос, входят ли эти объекты в данное множество, и т.п. При этом, разумеется, придется ограничиться множествами, состоящими из конструктивных объектов; как и прежде, моделью конструктивного объекта будет служить слово в конечном алфавите. Однако во многих случаях удобно вместо слов рассматривать натуральные числа, пользуясь тем, что между словами в заданном конечном алфавите и натуральными числами можно установить очень простое взаимно однозначное соответствие. Говоря о множествах, будем подразумевать множества натуральных чисел (и говоря о дополнении множества -дополнение до натурального ряда). Кроме того, будем считать, что фиксирован некоторый конечный алфавит V={ah... ,ар}, Р>1, и во всех вычислениях на машинах Тьюринга числа представляются словами в этом алфавите описанным только что способом. Существуют, как известно, два основных способа задания множества путем указания характеристического свойства его элементов и путем их перечисления. Владея точным понятием алгоритма, мы можем указать для каждого из этих двух способов "алгоритмический вариант". Для первого способа такой вариант получается наложением условия, чтобы характеристическое свойство было распознаваемым (или, как часто говорят, разрешимым), т.е. чтобы существовал алгоритм, позволяющий по любому слову узнать, обладает ли оно этим свойством. В алгоритмическом варианте второго способа перечисление должно быть "в самом деле перечислением", т.е. происходить с помощью некоторого перечисляющего алгоритма. В первом варианте не вполне четкое понятие "характеристическое свойство" можно заменить понятием "характеристический предикат". Во втором варианте перечисляющий алгоритм можно понимать как машину Тьюринга, которая "выдает" в заключительных ситуациях все возможные элементы множества, если "подавать" на ее ленту в начальных ситуациях все возможные натуральные числа. Иначе говоря, перечисляемое множество должно быть множеством значений (одноместной) функции, которую вычисляет некоторая машина Тьюринга с входным и выходным алфавитами, совпадающими с нашим алфавитом V. Словарный предикат - выражение P(x1,…,xk) где xi - слова в некотором алфавите. Например, x1 пробегает слова в алфавите D1, x2 - слова в алфавите D1 и т.д. Про такой предикат говорят, что он относится к типу D1×D2×…×Dk, указывая область пробегания каждого аргументного места. 3 Рекурсивный предикат - предикат Р типа D1×D2×…×Dkдля которого вычислима по Тьюрингу соответствующая характеристическая функция XP. Предикат принадлежности множества X - предикат, для которого выполняется следующее: Р(х) истинно тогда и только тогда, когда х є X, при этом задано множество слов Х из Е и всякое слово х є Е. Рекурсивное множество - это множество Х из Е, для которого рекурсивен соответствующий предикат принадлежности х є X и где х пробегает множество Е. Рекурсивными множествами являются многие обычные множества натуральных чисел: множество четных чисел, множество простых чисел и т. д. Множество называется рекурсивно перечислимым, если оно является множеством значений некоторой вычислимой функции. Рекурсивно перечислимый предикат - предикат Р рекурсивно перечислим, если существует процедура, позволяющая устанавливать истинность P(x1,... xk); если же P(x1,... xk) ложно, то эта процедура иногда будет это устанавливать, а иногда будет продолжаться неограниченно долго. Теорема. 2. Применение логических связок к рекурсивным предикатам дает рекурсивные же предикаты. Интуитивно предикат Р рекурсивен, если существует алгоритм, позволяющий выяснить для каждого набора { x1,... xk} слов истинно P(x1,... xk) или нет. Обычно арифметические предикаты х ≤у, х + у = z, "х - простое число", "х делит у" являются рекурсивными. Здесь и далее под вычислимыми функциями будут подразумеваться одноместные вычислимые функции. Теорема 3. Объединение (U) и пересечение (∩) рекурсивных множеств рекурсивны; дополнение к рекурсивному множеству рекурсивно. Теорема 4. Объединение и перечисление перечислимых множеств перечислимы. Теорема 5. Множество тогда и только тогда перечислимо, когда оно является областью определения некоторой вычислимой функции. Теорема 6. Множество А является рекурсивно перечислимым тогда и только тогда, когда существует разрешимый предикат R(х,y) такой, что х є A. Теорема 7. Всякое разрешимое множество рекурсивно перечислимо. Теорема8 (теорема Поста). Множество тогда и только тогда разрешимо, когда оно само и его дополнение рекурсивно перечислимы. Теорема 9. Множество номеров самоприменимых машин Тьюринга рекурсивно перечислимо, но не разрешимо. Теорема 10. Существуют непересекающиеся рекурсивно перечислимые множества Е1 и Е2 такие, что никакое разрешимое множество не может содержать Е1,не имея при этом общих точек с Е2. (Как иногда говорят, Е1 и Е2 не отделимы разрешимыми множествами.) 4 Теорема 11. Всякое непустое рекурсивно перечислимое множество является множеством значений некоторой всюду определенной вычислимой функции. 5