Договоримся, что:
1. множество N натуральных чисел содержит 0 (нуль), т.е. N={0,1,2,3,…};
2. рассматриваемые функции f=f(x1,x2,…,xn) определены только тогда, когда переменные принимают значения из N, т.е. xi∈N;
3. область значений функций D⊆N;
4. рассматриваемые функции f=f(x1,x2,…,xn) могут быть частично определенные, т.е. определенные не для всех наборов натуральных чисел.
Введём в рассмотрение простейшие функции:
o(x)=0, s(x)=x+1, Inm(x1,…,xn)=xm
Эти функции могут быть вычислены с помощью соответствующего механического устройства (например, на машине Тьюринга). Определим операторы, которые по одной или нескольким заданным функциям строят новые функции.
Оператор суперпозиции. Пусть даны функция f(x1,x2,…,xk) от k переменных и k функций f1(x1,x2,…,xn),…,fk(x1,x2,…,xn) от n переменных. Суперпозицией функций f,f1,…,fk называется функция:
φ(x1,x2,…,xn)= f(f1(x1,x2,…,xn),…,fk(x1,x2,…,xn))
Мы говорим, что функция φ получается применением оператора суперпозиции Sk+1 к функциям f,f1,…,fk, и пишем φ=Sk+1(f,f1,…,fk). Например, S2(s,o)=s(o(x)), т.е. функция, тождественно равная 1, а S2(s,s)=s(s(x)) — это функция у(x)=x+2.
Оператор примитивной рекурсии. Пусть даны функции g(x1,x2,…,xn) и h(x1,x2,…,xn+2). Построим функцию f(x1,x2,…,xn+1) Пусть зафиксированы значения x1,x2,…,xn. Тогда полагаем:
f(x1,x2,…,xn,0)=g(x1,x2,…,xn)
f1(x1,x2,…,xn,y+1)= h(x1,x2,…,xn,y,f(x1,x2,…,xn,y))
Эти равенства определяют функцию f(x1,x2,…,xn+1) однозначно. Функция f называется функцией, полученной с помощью оператора R примитивной рекурсии. Используется запись f=R(g,h).
Индуктивное определение функции (продемонстрированное в операторе примитивной рекурсии) в математике не редкость. Например, индуктивно определяются:
1) степень с натуральным показателем: a0=1, an+1=an·a;
2) факториал: 0!=1, (n+1)!=n!·(n+1) и т.д.
Определение.Функции, которые могут быть получены из простейших о(x)=0, s(x)=x+1, Inm(x1,…,xn)=xm применением конечного числа раз операторов суперпозиции и примитивной рекурсии, называются примитивно рекурсивными.
Проверим, что функция u(x,y)=x+y является примитивно рекурсивной. Действительно, мы имеем: u(x,0)=0, u(x,y+1)=x+y+1=u(x,y)+1. Это есть схема примитивной рекурсии, так как x11(x), а u(x,y)+1=s(u(x,y))=S2(s,u). Здесь g(x)=x12, а h(x,y,u)=s(u)=S2(s,I33).
Аналогично доказывается, что функции m(x,y)=x·y, d(x,y)=xy (считаем по определению 00=1), fact(x)=x! и многие другие являются примитивно рекурсивными.
Отметим; что примитивно рекурсивные функции всюду определены (т.е. определены для всех значений их аргументов). Действительно, простейшие функции o, s, Inm являются всюду определёнными, а применение операторов суперпозиции и примитивной рекурсии ко всюду определённым функциям даёт также всюду определённые функции. Значит, такая функция, как
f(x,y) = { | x-y, если x≥y |
не существует, если x<y |
примитивно рекурсивной быть не может. Рассматривать функцию f(x,y)=x-y здесь мы не имеем права, так как значения функций должны быть натуральными числами (поэтому не отрицательными). Однако, можно рассмотреть функцию
x÷y = { | x-y, если x≥y |
0, если x<y |
Проверим, что она примитивно рекурсивна. Докажем вначале, что функция φ(x)=x÷1 примитивно рекурсивна. Действительно, φ(0)=0. φ(y+1)=(y+1)÷1=y, что служит схемой примитивной рекурсии для функции x÷1. Наконец, x÷0=x, x÷(y+1)=(x÷y)÷1=φ(x÷y) ? схема примитивной рекурсии для x÷y.
Существенно более широким классом функций, чем примитивно рекурсивные функции, является класс рекурсивных функций (определение см. ниже). В литературе эти функции называют также частично рекурсивными. Для их определения введём ещё один оператор.
Оператор минимизации. Пусть дана функция f(x1,x2,… ,xn,xn+1). Зафиксируем какие-либо значения x1,x2,…,xn первых n переменных и будем вычислять f(x1,x2,…,xn,0), f(x1,x2,…,xn,1), f(x1,x2,…,xn,2) и т.д. Если y ? наименьшее натуральное число, для которого f(x1,x2,…,xn,y)=xn+1 (т.е. значения f(x1,x2,…,xn,0), f(x1,x2,…,xn,1),…,f(x1,x2,…,xn,y-1) все существуют и не равны xn+1), то полагаем g(x1,x2,…,xn,xn+1)=y. Таким образом, g(x1,x2,…,xn,xn+1)=min(y|f(x1,x2,…,xn,y)=xn+1).
Если такого y нет, то считаем, что f(x1,x2,…,xn,xn+1) не определено. Итак, возможны три случая:
1. f(x1,x2,…,xn,0), f(x1,x2,…,xn,1),…,f(x1,x2,…,xn,y-1) существуют и не равны xn+1, а f(x1,x2,…,xn,y)=xn+1;
2. f(x1,x2,…,xn,0), f(x1,x2,…,xn,1),…,f(x1,x2,…,xn,y-1) существуют и не равны xn+1, а f(x1,x2,…,xn,y) не существует;
3. f(x1,x2,…,xn,i) существуют при всех i∈N и отличны от xn+1.
Если имеет место 1-й случай, то g(x1,x2,…,xn,xn+1)=y, а если 2-й или 3-й, то g(x1,x2,…,xn,xn+1) не определено. Про функцию g полученную таким образом, говорят, что она получена из f применением оператора минимизации М. Мы пишем g=Мf.
Оператор минимизации — это очевидное обобщение оператора взятия обратной функции. Обобщение довольно глубокое, так как от функции f не требуется, чтобы она была взаимно однозначной (по переменной xn+1).
Определение. Функции, которые могут быть получены из простейших о(x)=0, s(x)=x+1, Inm(x1,…,xn)=x применением конечного числа раз операторов суперпозиции, примитивной рекурсии и минимизации, называются рекурсивными.
Класс рекурсивных функций шире класса примитивно рекурсивных функций хотя бы по тому, что он содержит не только всюду определённые функции. Докажем, например, что функция
f(x,y) = { | x-y, если x≥y |
не существует, если x<y |
является рекурсивной. Действительно, f(x,y)=min(z|y+z=x), а ранее было установлено, что функция u(x,y)=x+y примитивно рекурсивна.
Рекурсивные функции отражают наше интуитивное представление о функциях, вычислимых некоторым механическим устройством. В частности, они вычислимы на машинах Тьюринга. Наоборот, всякая функция, вычислимая на машине Тьюринга является рекурсивной. Мы не будем проверять этот факт, так как это потребовало бы слишком много времени и места.
Отметим, что не всякая функция натуральных аргументов является рекурсивной, даже не всякая функция одного аргумента. Существование нерекурсивных функций и является «математической причиной» наличия алгоритмически неразрешимых задач.