Нумерация частично-рекурсивных

ФУНКЦИЙ

Ниже будет построена специальная последовательность, состоящая из всех частично-рекурсивных функций.

Для этого полное определение произвольной частично- рекурсивной функции представляется в виде специального нагруженного дерева.

Все такие деревья нумеруются с помощью неотрицательных целых чисел, а представляемые ими частично-рекурсивные функции образуют последовательность всех таких функций, в которую они входят в порядке возрастания номеров соответствующих деревьев.

Будем считать, что для обозначения переменных функций используются только следующие символы: x1, . . . , xi, . . .

При разметке вершин деревьев используются следующие символы:

1)C, P, M -для обозначения операций суперпозиции, примитивной рекурсии и минимизации;

2) 1-для записи индексов переменных в унарной системе;

3) I, S, O - для обозначения простейших функций.

Определим деревья, представляющие схемы определения частично-рекурсивных функций, с помощью следующих правил:

1. Функции O(xi), S(xi) и нумерация частично-рекурсивных - student2.ru (xi1, ... , xin) представляются следующими деревьями:

нумерация частично-рекурсивных - student2.ru

O S I

iim n i1 . . . in

2. Если h(xj1, . . . , xjr) =

= f(g1(x1,1, . . . , x1,m1), . . . , gk(xk,1, . . . , xk,mk)), то она представляется деревом:

нумерация частично-рекурсивных - student2.ru C

D f Dg1 . . . Dgk

нумерация частично-рекурсивных - student2.ru Здесь Df, Dg1, ... , Dgk - это деревья, представляющие функции, входящие в суперпозицию. В частности, если gi = xj, то есть представляет собой переменную, то соответствующее дерево имеет вид:

I

1 1 j

3. Пусть f(x1, . . . , xn+1) получается из g(x1, . . . , xn) и h(x1, . . . , xn, xn+1, xn+2) с помощью операции примитивной рекурсии:

f(x1, . . . , xn, 0) = g(x1, . . . , xn);

f(x1, . . . , xn, y+1) = h(x1, . . . , xn, y, f(x1, . . . , xn, y)).

Тогда f представляется деревом:

нумерация частично-рекурсивных - student2.ru P

Dg Dh

4. Если f(x1, . . . , xn+1) = m t(g(x1, . . . , xn, t) = xn+1), то дерево, представляющее f, имеет вид:

нумерация частично-рекурсивных - student2.ru M

Dg

Пример.Построим дерево, представляющее функцию f(x1, x2) = x1+ x2.

Эта функция была определена ранее с помощью следующей схемы примитивной рекурсии:

f(x1, 0) = нумерация частично-рекурсивных - student2.ru (x1);

f(x1, x2 + 1)= нумерация частично-рекурсивных - student2.ru (x1, x2, S(f(x1, x2)).

Здесь определения функций g и h, из схемы примитивной рекурсии, даны в полном виде с указанием всех переменных (в том числе и несущественных) этих функций в определении схемы примитивной рекурсии.

Поэтому дерево определения f имеет вид, приведенный на рис. 8.1:

нумерация частично-рекурсивных - student2.ru P

I C

I I I S

1 1 1

<3><3>1 1 1 1 1 1 1 1<2> 1

Рис. 8.1

Здесь записи <2> и <3>использованы для представления чисел 2 и 3 в унарной системе счисления.

Упражнение. Построить дерево, представляющее функцию умножения p(x1, x2) = x1 ´ x2.

Возьмем алфавит A= {I, S, O, P, C, M, 1, $}, состоящий из специального символа$ и символов, c помощью которых осуществлялась разметка вершин деревьев, представляющих частично-рекурсивные функции.

Символ$ будем называть разделителем.

Если D - дерево, представляющее определение некоторой частично - рекурсивной функции, то осуществим левосторонний обход D сверху вниз, выписывая слова в алфавите A, приписанные вершинам дерева в порядке их прохождения. При этом выписываемые слова разделяются символом $.

Полученное в результате слово нумерация частично-рекурсивных - student2.ru D назовем кодом дерева D.

Например, дерево, представляющее функцию f(x1, x2) = x1+x2, которое приведено ранее, имеет код:

P$I$1$1$1$C$I$<3>$<3>$1$1$1$I$1$1$1$I$1$1$2$S$1.

Из правил построения деревьев, представляющих частично-рекурсивные функции, следует, что по произвольной вершине и ее левому поддереву однозначно определяется число потомков этой вершины.

Действительно, всякая внутренняя вершина дерева помечена одним из символов операций или функций. Если это символы O, S, P или M, то число потомков такой вершины заранее известно.

Если же внутренняя вершина дерева помечена символом C, то число потомков этой вершины определяется числом переменных функции, дерево представления которой имеет корнем самого левого потомка исходной вершины. Если же корень дерева помечен символом I, то число потомков этой вершины равно n + 2, где n – число, унарная запись которого размечает вершину левого потомка корня дерева.

Следовательно, степень всякой внутренней вершины, помеченной символом C,становится известна, как только полностью пройдено левое поддерево этой вершины и оказывается определенным число переменных функции, представляемой этим поддеревом.

Вершина дерева является висячей, если она помечена числом в унарной системе.

Поэтому, если задан код нумерация частично-рекурсивных - student2.ru D некоторого дерева, то само дерево по своему коду может быть восстановлено с помощью подходящей процедуры.

Рассмотрим последовательность всех слов в алфавите A, выписанных в порядке возрастания их длин, а слов одинаковой длины в лексикографическом порядке.

Из этой последовательности выделим подпоследовательность слов:

нумерация частично-рекурсивных - student2.ru D1, нумерация частично-рекурсивных - student2.ru D2, . . . , нумерация частично-рекурсивных - student2.ru Di, . . . , (1)

являющихся кодами деревьев.

Нетрудно заметить, что существует эффективная процедура, позволяющая по произвольному числу k найти слово нумерация частично-рекурсивных - student2.ru Dk в этой последовательности.

Последовательности (1) соответствует последовательность (2), состоящая из частично-рекурсивных функций, представляемых деревьями, имеющими коды последовательности (1).

g1, g2, . . . , gi, . . . (2)

Обозначим как Dgi - дерево, представляющее функцию gi.

Существует эффективная процедура, которая по всякому числу n строит определение частично рекурсивной функции gn.

Следовательно, зная порядковый номер n частично рекурсивной функции gn в последовательности (2), можно эффективно найти рекурсивную схему определения этой функции. То есть по номеру функции в последовательности (2) может быть восстановлено описание метода вычисления значений этой функции.

Отметим простейшие свойства последовательности (2):

-всякая частично рекурсивная функция встречается в (2) бесконечное число раз;

- последовательность (2) содержит счетно-бесконечное множество различных функций;

- существуют числовые функции, не содержащиеся в (2).

По последовательности (2) определим последовательность (3), содержащую все одноместные частично-рекурсивные функции.

f1, f2, . . . , fi, . . . (3)

Здесь функция fi задается деревом, полученным из дерева Dgi, отождествлением всех переменных, т.е. функция fi получается из функции gi отождествлением переменных.

Введем обозначения F - для множества всех частично-рекурсивных функций и F1- для множества всех одноместных частично-рекурсивных функций.

Отображение n, которое всякому числу n ставит в соответствие функцию fn, назовем нумерацией множества F1.

При этом индекс n функции fn назовём n номером этой функции в нумерации n: N ® F1.

Отображение p: N ® F, которое всякому числу n ставит в соответствие функцию gn, назовем нумерацией множества F.

Заметим, что обе нумерации n и p являются вычислимыми, поскольку существуют эффективные процедуры, которые для каждого значения целого неотрицательного числа n строят рекурсивные определения соответствующих функций.

ОПРЕДЕЛЕНИЕ

Вычислимая числовая функция h(x1, x2), для которой выполняется условие " iÎN$ n(h(n, x) = fi(x)), называется универсальной функцией для класса F1.

ТЕОРЕМА 8.3

Существует универсальная функция для F1.

Доказательство

Определим функцию h(n, x) = fn(x).

Покажем, что эта функция является вычислимой. Для этого сформулируем интуитивно понятный алгоритм вычисления значений функции h .

Пусть (n, x) - произвольная пара чисел. Выполним следующие действия:

1. По номеру n функции fn найдем код Dn дерева, определения функции gn.

2. По найденному коду построим само такое дерево Dgn.

3. По дереву Dn найдем дерево Dfn для функции fn.

Для этого изменим разметку вершин в Dk, выполнив отождествление переменных. В результате получим дерево D, представляющее схему рекурсивного определения fn.

4. По схеме рекурсивного определения fn вычислим значение y = fn(x).

5. Закончим вычисление, взяв в качестве результата значение h(n, x) = y.

Приведенная процедура позволяет вычислять функцию h., которая оказывается вычислимой, а значит и частично-рекурсовной.

Нетрудно убедиться, что " n(h(n, x) = fn(x)).

Следовательно, h является универсальной функцией.

Наши рекомендации