Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algorytm.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
865.28 Кб
Скачать

6.1.1. Оператор суперпозиции (подстановки)

Определение 6.1.2. Оператором суперпозиции Snm называется подстановка в функцию от n переменных f(x1,…,xn ) n функций f1(x1,…, xm),…,fn(x1,…, xm) одних и тех же m переменных.

Рассмотрим n + 1 функций из F – n-местную функцию f и n m-местных функций f1,…,fn.

Говорят, что m-местную частичную функцию g(x1,…,xm) можно получить вследствие операций суперпозиции или подстановки (Sn+1m) из функций fn,f1m,…,fnm, если для любого из x1,…,xm  N; gm(x1,…,xm) = fn(f1m(x1,…,xm ),…,fnm(x1,…,xm )).

Эта операция дает возможность вместо аргументов xi (i = 1,…,n) функции f подставлять некоторые заданные функции fj (j = 1,...,m) и получать новую вычислимую функцию g. Например, для функций

f(x1,…,xn), f1(x1,…,xm),…, fn(x1,…,xm) имеем

Sn+1m(f,f1,…,fn) = f(f1(x1,…,xm),…,fn(x1,…,xm)) = g(x1,…,xm),

где нижний индекс при S обозначает количество функций, подставляемых в качестве аргументов.

Оператор суперпозиции – это оператор построения сложной функции. Если мы умеем вычислять функции f1(x1,…,xm),…, fn(x1,…,xm) и f(x1,…,xn), то функция gm также может быть вычислена. Ясно также, что если все функции f, f1, …, fn всюду определены, то и функция g также всюду определена. Значения функции Sn+1m(f,f1,…,fn) могут быть получены последовательным вычислением значений функций f1m,…,fnm на некотором наборе значений переменных а1,…,аm, и вычислением значения функции fn на наборе значений f1m(а1,…,аm),…,fnm(а1,…,аm).

Таким образом, если функции f, f1, …, fn интуитивно вычислимы, то будет интуитивно вычислимой и функция g.

Например, осуществляя операцию суперпозиции функций f(x) = x+1 и f1(x) = 0, получим функцию: g(x) = f(f1(x)) = 0 + 1 = 1. При суперпозиции функции f(x) с этой же функцией получим g(x) = f(f(x)) = x + 2.

Пример 6.1.1. С помощью оператора суперпозиции можно получить любую константу S(S( …(О(x)) …)) = n, где число вложенных функций следования равно n.

Или сдвига числа на константу n, также равную числу вложенных функций следования: S(S( …(S(x)) …)) = x + n.

Пример 6.1.2. Найти значение S3(I22,I11,О). В этом случае конечная функция будет двуместной (n = 3 - 1 =2), следовательно, g(x1,x2) = I22(I11,О) = I22(x1,О) = 0.

Пример 6.1.3.

1. С помощью операции подстановки найти функцию g(x1, x2), если

f(x1,x2,x3) = 3x1+4x2-x3+5,

f1(x1,x2) = x1+x2, f2(x1,x2) = x1*x2, f3(x1,x2) = 2x1+x2-1.

С определения операции подстановки имеем:

g(x1, x2) = f(f1(x1,x2),f2(x1,x2),f3(x1,x2)) = 3(x1+x2)+4(x1*x2)-(2x1+x2-1)+5 =

= x1+2x2+4x1x2+6.

2. Функция g(x1,x2) = f(x2,x1) перестановки аргументов получается из функции f(x1,x2) с помощью операции подстановки и функций проекции:

g(x1,x2) = f(I22(x1,x2),I12(x1,x2)) = f(x2,x1).

6.1.2. Оператор примитивной рекурсии

Пусть заданы произвольные частичные функции: n-местная функция g(x1, ...,xn) и n+2-местная функция h(x1, ..., xn, y, z). Говорят, что n+1-местная функция f(x1, ..., xn, y) получена операцией примитивной рекурсии Rn с функций g, h(R(g,h)), если для всех x1,x2,…,xnN имеем (когда n<>0):

f(x1,x2,…,xn,0) = g(x1,x2,…,xn),

f(x1,x2,…,xn,y+1) = h(x1,x2,…,xn,y,f(x1,x2,…,xn,y)), (6.1)

где числовые функции g(x1,x2,…,xn), h(x1,x2,…,xn,y,z) заданы, а функция f(x1,x2,…,xn,y+1) определяется соотношением (6.1), если f(x1,x2,…,xn,y) определена. Если функция f(x1,x2,…,xn,y) не определена, то и f(x1,x2,…,xn,y+1) не определена.

Тот факт, что функцию определено схемой (6.1), выражается равенством

f(x1,x2,…,xn,y) = Rn(g,h).

Поскольку областью определения функций является множество всех натуральных чисел, частичная функция f, удовлетворяющая условиям (6.1), существует для каждых частичных функций g и h, и функция эта будет единственной.

Схемы примитивной рекурсии определяют fn+1 рекурсивно не только через другие известные примитивно-рекурсивные функции gn и hn+2, но и через значения fn+1 в предыдущих точках: значения fn+1 в точке y+1 зависит от значения fn+1 в точке y. То есть, операция примитивной рекурсии дает возможность построить (n+1)-местную вычислимую функцию (функцию от n+1 аргументов) с помощью двух известных примитивно-рекурсивных функций, с которых одна n-местная, а другая – (n+2)-местная.

Для понимания операции примитивной рекурсии необходимо заметить, что всякую функцию от меньшего числа аргументов можно рассматривать как функцию от большего числа аргументов. Существенным в операторе примитивной рекурсии является то, что независимо от числа переменных в f рекурсия ведется только по одной переменной у. Остальные n переменных x1, x2, ..., xn на момент применения схемы (6.1) зафиксированы и играют роль параметров.

Пусть задан набор значений аргументов α = (α1,...,αn)  N .

Если функция в (6.1) определена на , т.е. существует, то функция f на наборе определена и .

В противоположном случае f на не определена, а также не определена она и для любого набора , где y N .

Далее, анализируется определенность функции f на наборе . Значение

существует, если существует значения функции h на наборе , затем

и т.д.

Заметим, что схема (6.1) имеет место для n >= 1. При n = 0 определяется функция f от одной переменной f(0) = k, f(y+1) = h(y,f(y)),

где k – фиксированное число из N. В данном случае роль функции g выполняет одна из функций-констант:

f(1)=h(0,f(0))=h(0,k), f(2)=h(1,f(1))=h(1,h(0,k)), f(3)=h(2,f(2))=h(2,h(1,h(0,k))) и т.д.

Определение 6.1.3. Пусть Z - некоторая система частичных функций. Функция f называется примитивно рекурсивною относительно системы Z , если f можно получить с функций системы Z и наипростейших (примитивных) функций O, S, Imn с помощью конечного числа операций подстановки и примитивной рекурсии.

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

Примитивно рекурсивная функция f относительно пустой системы функций Z называется просто примитивно рекурсивной функцией.

Этому определению можно предоставить более строгий (формальный) индуктивный вывод:

  1. Функции О(х), S(x), Іmn(x) для всех натуральных n, m есть примитивно-рекурсивными.

  2. Если f1(x1,…, xm),…,fn(x1,…, xm) и f(x1,…,xn) - примитивно-рекурсивные функции, то Sn+1m(f,f1,…,fn) - примитивно-рекурсивные функции для любых натуральных n, m .

  3. Если g(x1,x2,…,xn), h(x1,x2,…,xn,y,z) - примитивно-рекурсивные функции, то Rn(g,h) - примитивно-рекурсивная функция.

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

  • показать, что заданная функция является простейшей;

  • показать, что заданная функция построена с помощью оператора суперпозиции;

  • показать, что заданная функция построена с помощью оператора примитивной рекурсии.

Теорема 6.1.1. Пусть n-арна частичная функция g примитивно рекурсивная (относительно системы частичных функций Z). Тогда n-арная функция f, определенная с помощью уравнений

f(x1,x2,…,xn) = ∑g(x1,x2,…,xn-1,i), i = 0,1,…,xn

f(x1,x2,…,xn) = Пg(x1,x2,…,xn-1,i), i = 0,1,…,xn

также примитивно рекурсивная (относительно Z). Доказательство теоремы можно найти в [7], стр.128.

Пример 6.1.3.

  1. Для n-арной операции On(x1,…,xn) = 0 имеем

On(x1,…,xn) = S2n(O,I1n) = O(I1n(x1,…,xn)) = O(x1) = 0.

То есть, эта функция примитивно рекурсивна.

2. Функцию f+(x,y) = Sum(x,y) = x+y (суммы) можно получить с функции I11(x) (тождественности) и h(x,y,z) = z+1 (следования) операцией примитивной рекурсии. Рассмотрим способ рекурсивного определения данной функции. Действительно, за схемой примитивной рекурсии (6.1) имеем:

f+(x, 0) = x,

f+(x, y+1) = x + y + 1 = f(x, y) +1.

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

f+(x,0) = x + 0 = x = I11(x),

f+(x,y+1) = x + (y + 1) = (x + y) + 1 = S(x+y) = S(f(x, y)) = S(z).

Таким образом, f+(x,y) = x+y = R1(I11(x),h(x,y,z)). То есть, функция f+(x,y) образуется из примитивно рекурсивных функций (выбора g(x)= I11(x) и следования h(x,y,z)=z+1=s(z)) операцией примитивной рекурсии и, следовательно, она сама примитивно рекурсивна.

3. Функцию f*(x,y)=P(x,y) = x*y можно получить из функций O(x) и сложения h(x,y,z) = х +z операцией примитивной рекурсии. Рассмотрим способ рекурсивного определения данной функции:

f(x, 0) = 0,

f(x, y+1) = x*(y + 1) = x*y + x = f(x, y) +x,

из которого следует, что

x*0 = 0 = g(x) = O(x),

f*(x,y+1) = h(x,y,f(x,y)) = x(y+1) = xy+x = f*(x,y)+x = f+(x,f*(x,y)) = h(x,y,z)=z+x – сложение.

Поскольку x+y – примитивно рекурсивная функция, то f*(x,y) – примитивно рекурсивная функция.

  1. Двуместная функция fs(x,y) = xy удовлетворяет схеме примитивной рекурсии:

fs(x,0) = x0 = 1 = S(О(x)); fs(x,y+1) = xy+1 = x*xy = f*(x,fs(x,y)).

Это есть рекурсия с помощью функций g(x) = S(x) (или константа), h(x,y,z) = x*z - умножение.

5. Несколько сложнее дело обстоит с функцией x–y. Функция x–y на множестве N частичная функция. Для того чтобы сделать эту функцию определенной на множестве N, рассмотрим так называемую срезанную разность

x ÷ y = { x – y, x >= y, или 0, если x < y}.

Из определения этой функции вытекают такие свойства:

x ÷ 0 = x,

x ÷ (y + 1) = (x ÷ y ) ÷ 1,

(x ÷ y) ÷ z = x ÷ (y + z).

Покажем сначала, что функция x ÷ 1 примитивно рекурсивна, поскольку ее можно получить с наипростейших функций О и I12 операцией примитивной рекурсии:

0 ÷ 1 = 0 = О(x),

(x + 1) ÷ 1 = x = I12(x,y)

С примитивно рекурсивности функции x ÷ 1 и приведенных свойств операции срезанной разницы имеем:

x ÷ 0 = x = I11(x),

x ÷ (y + 1) = (x ÷ y ) ÷ 1,

т.е. эти тождества показывают, что двуместную функцию x ÷ y можно получить с помощью операции примитивной рекурсии с функций I11(x) и h(x,y,z) = z ÷ 1. Обе последние функции примитивно рекурсивны, поэтому и функция x÷y примитивно рекурсивная.

6. Двухместная функция f(x,y) = |x-y| = {x-y, при x>=y; y-x, при x<y} примитивно рекурсивная вследствие |x-y| = (x ÷ y ) + (y ÷ x) и примитивно рекурсивности функций x ÷ y и f+.

7. Рассмотрим функцию sg(x) = {0, при x=0; 1, при x<>0} и противоположную ей функцию Sg(x) = (1÷ sg(x)) {1, при x=0; 0, при x<>0}.

Их примитивна рекурсивность вытекает из того, что

sg(0) = 0, sg(x+1) = 1. Это рекурсия, в которой g = О(х), h = S(O(x)).

Sg(0) = 1, Sg(x+1) = 0. Это рекурсия, в которой g = 1, h = 0.

8. Двухместные функции min(x,y) = x ÷ (x ÷ y) и max(x,y) = y + (x ÷ y) или max(x,y) = x + (y ÷ x) примитивно рекурсивные.

9. Покажем, что частное от деления x на y, то есть функция [x/y], и остаток от деления x на y, то есть функция rest(x,y), - примитивно рекурсивные функции. Для этого необходимо доопределить данные функции. Положим для всех x  N [x/0] = x, rest(x,0) = x.

Очевидно, что определенные так функции связаны тождественностью

rest(x,y) = x ÷ (y*[x/y])

и значит, из примитивно рекурсивности функции [x/y] вытекает примитивная рекурсивность функции rest(x,y).

По определению, при y > 0 число [x/y] = n удовлетворяет соотношения

n*y<=x<(n+1)*y. Отсюда n равняется числу нулей в последовательности

1*y ÷ x, 2*y ÷ x, ... , n*y ÷ x, ... , x*y ÷ x.

Поэтому при y > 0 справедливая формула

[x/y] = (1 – (i*y÷x)), i = 1,…,x

Непосредственной проверкой можно убедиться, что данная формула справедливая и при y = 0. Вследствие примитивно рекурсивности функции х÷y и теоремы 6.1.1 получаем, что функция [x/y], а вместе с ней и функция rest(x,y) примитивно рекурсивные.

  1. Покажем, что функции f(x) =n, f(x) =x, f(x) =x+n примитивно рекурсивные.

f(x) = n = S(…(S(O(x)))…), (n+1 скобок); f(x) = x = I11(x);

f(x) = x+n = S(…(S(I11(x)))…), (n+1 скобок).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]