Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000391.doc
Скачиваний:
36
Добавлен:
30.04.2022
Размер:
2.92 Mб
Скачать

3.1.2. Элементарные операции

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

К числу элементарных операций относят операции суперпозиции, рекурсии и минимизации.

Операция суперпозиции. Если даны функция h от m независимых переменных аргумента, т.е. h = (z1; z2; ... zm; у), и m функций qi от n независимых переменных аргумента, т.е. {qi=(x1i; x2i; ... xni; zij)} , то в результате подстановки функций q1, q2 ... qm вместо аргументов функции h может быть получена новая функция f=(x1; x2; ... xn; у) от n независимых переменных аргумента, т.е.

h = (z1; z2: ... zm; y) :

q1 = (x1; x2; ... xn; z1) ;

q2 = (x1; x2; ... xn; z2) ;

...................................

qm = (x1; x2; ... xn; zm) ;

h = (q1; q2; ... qm; y) = f = (x1; x2; ... xn; y).

Значения функций q1; q2; ... qn, найденные при заданных значений независимых переменных x1; x2; ... xn, принять за значения независимых переменных аргумента функции h и вычислить ее значение, которое принять за значение функции f = (x1; x2; ... xn; y).

Например, если h = (z; y) = (z) и q(х; z) = (х), то f=(q; у) = () = 2(х). Следовательно, для х = 5 имеем z=5 + 1= = 6 и у = 6 + 1 = 7.

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

f = x1; x2; ... xn; y = Smn (h(m) ; q1(n) ; q2(n) ; ... qm(n) ),

где h(m) =( z1; z2; ... zm; y) и

q1(n) = (x1i (n); x2i (n); ... xni (n); zi).

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

Операция рекурсии. Если даны n-местная рекурсивная функция g и (n + 2)-местная рекурсивная функция h, то можно найти (n + 1)-местную рекурсивную функцию f, используя схему примитивной рекурсии:

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

f (x1; x2; ... xn; у+1) = h (x1; x2; ... xn; у; f(x1; x2; ... xn; у)) .

Схема примитивной рекурсии позволяет определить значения функций f не только через значения функций g и h, но и через значения функций f во всех предшествующих точках аргумента.

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

Оператор рекурсии, реализующий одноименную операцию, записывают так:

f = ( x1; x2; ... xn; у+1) = R(g(n) ; h(n+2) ),

где gi(n) = gi (x1; x2; ... xn;);

h(n+2) = h (x1; x2; ... xn; у; f (x1; x2; ... xn; у)) .

Переменные x1; x2; ... xn при выполнении операции рекурсии играют роль фиксированных параметров, т.е.

x1 = ai; x2 = a2; ... xn = аn.

Итак, значением искомой функции f для нулевого значения главного дополнительного аргумента следует считать значение исходной функции g, значением функции f для каждого последующего значения главного аргумента (у+1) следует считать значения функции h при предыдущих значениях главного аргумента у и при значении вспомогательного аргумента, совпадающим с предыдущим значением искомой функции.

Пример. Пусть g (х) = Ci (х) = 0; h (х; у; f (х; у)) = J3,2 = y. Тогда по схеме примитивной рекурсии имеем:

f (х, 0) = g (х) = 0;

f (х; у+1 ) = h (х; у; f (х; у)) = у;

Так как функции g и h не содержат в качестве аргумента независимую переменную х, то имеем:

f(0) = 0;

f(1) = 0;

f(2) = 1;

f(3) = 2;

..............

f (i) = (i - 1 ); если i = у, то f (у) = – 1 ) = (у).

Пусть у = 6, тогда f (6) = 6 – 1 = 5.

Так как рекурсивная функция принимает значения на множестве целых положительных чисел, то функция предшествования реализует усеченное вычитание, формула которого имеет вид:

Таким образом, в дополнение функции следования получена функция предшествования. Для получения функции предшествования использованы две базовые функции (константа и тождества) и операция примитивной рекурсии: (у – 1) =R (0; у) = -1 (у).

Пример. Пусть g(x)=J1,1=x;

h (х; у; f (х; у)) =  (J3,3) = f (x; у) + 1.

По схеме примитивной рекурсии имеем:

f (х; 0) = g(х) = х;

f (х; 1 ) = h (x; 0; f (x; 0)) = x + 1;

f (x; 2) = h(x; 1; f(x; 1)) = x + 2;

f (x; 3) = h (x; 2; f (x; 2)) = x + 3;

......................................................

f (x; i) = h (x; (i – 1); f (x; (i – 1))) = x + i; если i = у, то f(x;у)=(x+у).

Пусть x = 3, у = 6, тогда f (3; 6) = 3 + 6 = 9.

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

(х + у) = R (х; (f (х; у) + 1)) = f+ (х; у).

Пример. Пусть g(x) = I1,1 = x;

h (х; у; f (х; у)) =-1 (J3,3) = f (x; у) – 1.

По схеме примитивной рекурсии имеем:

f (х; 0) = g(х) = х;

f (х; 1 ) = h (x; 0; f (x; 0)) = x – 1;

f (x; 2) = h(x; 1; f(x; 1)) = (x – 1) – 1 = x – 2;

f (x; 3) = h (x; 2; f (x; 2)) = (x – 2) – 2 = x – 3;

......................................................................

f (x; i) = h (x; (i – 1); f (x; (i – 1))) = (x – (i – 1)) – 1 = x – 1.

Если i = у, то f (x; у) = (x – у).

Пусть х = 6, y = 3, тогда f (6; 3) = 6 – 3 = 3.

Формула усеченного вычитания имеет следующие значения:

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

(х – у) = R (х; (-1 (f(х; у))) = f+ (х; у).

Пример. Пусть g(x) = С1 = 0;

h (х; у; f (х; у)) = f+ (J3,1 ; J3,3 ) = x + f (x; у).

По схеме примитивной рекурсии имеем:

f (х; 0) = g(х) = 0;

f (х; 1) = h (x; 0; f (x; 0)) = x + 0 = x;

f (x; 2) = h(x; 1; f (x; 1)) = (x + x) = 2x;

f (x; 3) = h (x; 2; f (x; 2)) = (x + 2x) = 3x;

..................................................................

f (x; i) = h (x; (i – 1); f (x; (i –1))) = (x + (i – 1)) – x = i – x.

Если i = у, то f (x; у) = x . у.

Пусть х = 3, y = 4, тогда f (3; 4) = 3 . 4 = 12.

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

x . у = R (0; f+ (х; f (x; у))) = f+ (х; у).

Пример. Пусть g(x) = С1 = 1;

h (х; у; f (х; у)) = f* (J3,1 ; J3,3 ) = x . f (x; у).

По схеме примитивной рекурсии имеем:

f (х; 0) = g (х) = 1;

f (х; 1) = h (х; 0; f (х; 0)) = х . 1= х;

f(x; 2) = h (x; 1; f (х; l)) x . x = x2;

f (õ; 3) = h (õ; 2; f (õ; 2)) = х . x2 = x3 ;

..........................................................

f (x; i) = h (x; (i - 1); f (x; (i - 1))) = x . x(i - 1) = xi.

Если i = у, то f (x; y) = xy.

Пусть x = 3, у = 3, тогда f (3; 3) = 33 = 27.

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

хy = R (1; f* (x; f (x; y)))=fexp(x; y).

Из приведенных примеров легко можно получить примитивно рекурсивные функции:

a) min (х; у) = х – (х – у);

б) mах (х; у) = у – (х – у);

в) | х – у| = (х – у) + (у – х);

г) х = 1 – х;

д) х v у = mах (х; у);

е) х . у = min (х; у).

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

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

Решение. Так как данная функция есть функция двух аргументов, то для использования операции примитивной рекурсии мы должны иметь функцию g, зависящую от одного аргумента, и функцию h, зависящую от трех аргументов. Определим их.

В функции положим y=0. Тогда имеем - это тождественная функция. Полагая y=1, получим - это функция следования.

Таким образом, выбираем следующие элементарные функции: тождественную и функцию следования . Заметим, что здесь .

Используем схему примитивной рекурсии:

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

2. Доказать, что функция является примитивно-рекурсивной.

Решение. Заметим, что

.

Найдем требуемые функции и h. Для этого считаем, что, так как заданная функция есть функция двух аргументов, следует выбрать функцию g, зависящую от одного аргумента, и функцию h, зависящую от трех аргументов.

Для заданной функции можно записать

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

Итак, имеем для операции примитивной рекурсии:

- функция одного аргумента,

- функция трех аргументов.

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

…………………..

Примитивно-рекурсивность операции умножения доказана. Этот факт можно использовать при доказательстве примитивной рекурсивности других функций.

3. Найти функцию , полученную из функций и по схеме примитивной рекурсии.

Решение. Найдем несколько значений функции f:

Сделаем предположение, что

. (1)

Докажем формулу (1) методом математической индукции, проведя индукцию по y:

  1. Проверка при y=0.

Да, при y=0 формула (1) верна.

  1. Допустим, что формула (1) верна при y=n, т.е. допустим, что верно

(2)

3) Докажем, что формула (1) верна при y=n+1, т.е. докажем справедливость формулы

(3)