Примеры решения задач
1. Доказать, что следующие функции являются примитивно рекурсивными.
a) f(x)=x+n
Решение. Функция f(x) может быть получена с помощью n-кратного применения оператора суперпозиции к простейшей функции s(x).
b) f(x,y)=x+y
Решение. Функция f(x) может быть задана следующей схемой примитивной рекурсии:
f(x, 0) = x = I11(x),
f(x, y+1) = x+y+1=f(x,y)+1=s(f(x,y))=s(I33(x,y,f(x,y))).
Здесь функция g(x) имеет вид g(x)= I11(x) и является, как и полагается, функцией одной переменной. А функция h(x,y,z) имеет вид h(x,y,z)=s(I33(x,y,z)) и является функцией трех переменных.
Заметим, что функции g(x) и h(x,y,z) являются прф, т.к. g(x) – третья простейшая функция, а h(x,y,z) может быть получена из простейших функций s(x) и I33(x,y,z) с помощью применения оператора суперпозиции.
Так как функцию f(x,y) можно получить с помощью оператора примитивной рекурсии из примитивно рекурсивных функций g(x) и h(x,y,z), то f(x,y) – прф.
с) f(x,y)=xy
Решение. Функция f(x) может быть задана следующей схемой примитивной рекурсии:
f(x, 0) = 0 = o(x),
f(x, y+1) = x(y+1)=xy+x=f(x,y)+x= I33(x,y,f(x,y)))+ I31(x,y,f(x,y))).
Так как функцию f(x,y) можно получить с помощью оператора примитивной рекурсии из примитивно рекурсивных функций g(x)=o(x) и h(x,y,z) = I33(x,y,z)) + I31(x,y,z)), то f(x,y) – прф.
2. Пусть g(x1, ..., xn,y) примитивно рекурсивная функция. Доказать, что следующая функция примитивно рекурсивна:
Решение. Особенность этой функции заключается в том, что суммирование ведется по переменному числу слагаемых. Однако функция fn+1 может быть задана следующей схемой примитивной рекурсии:
f(x1, ..., xn, 0) = g(x1, ..., xn,0) – прф,
f(x1, ..., xn, y+1) = = f(x1, ..., xn, y) + g(x1, ..., xn,y+1) – сумма прф g и самой функции f.
3. Доказать, что следующая функция частично рекурсивна.
Решение. Покажем, что функция f(x,y) может быть получена с помощью оператора минимизации.
Пусть xy, тогда f(x,y) определена и принимает некоторое значение: f(x,y) = xy = z. Как вычислить z? Можно предложить следующий способ: начиная с нуля перебирать по порядку все значения z, пока не выполнится условие xy=z, или xyz=0. Такое z обязательно найдется, т.к. xy0. Если же xy<0, то ни какое натуральное z не подойдет.
Программист записал бы это так:
unsigned int f(x,y)
{
z=0;
while((xyz)!=0) z++;
return z;
}
То же самое можно записать и в терминах оператора минимизации:
f(x, y)=z[|x–y–z|=0]
Модуль необходим для того, чтобы функция g(x,y,z)=|x–y–z| была определена, даже если x–y<0. Заметим, что g(x,y,z)=|x–y–z| является примитивно рекурсивной, т.к. может быть получена с помощью конечного числа применений оператора суперпозиции к простейшим функциям.
Поэтому f(x,y) – чрф.
Задачи для самостоятельного решения:
1. Доказать, что следующие функции являются примитивно рекурсивными.
f(x,y) = xy (здесь 00=1);
f(x,y) = x! (здесь 0!=1);
| x – y |;
max(x, y);
min(x, y);
2. Пусть gn+1, m, m примитивно рекурсивные функции. Доказать, что следующие функции примитивно рекурсивны:
3. Доказать, что частично рекурсивны следующие функции:
нигде не определённая функция (т.е. функция с пустой областью определения) ;