Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
558
Добавлен:
16.04.2013
Размер:
2.43 Mб
Скачать

q21 q3Λ0

Ответы

1. а)

 

 

q01 q0Π1

q11 q1Λ1

q0 0 q1Λ1

q1 0 q2Π0

1. б)

 

 

q01 q0Π1

q2 0 q2Λ0

q0 0 q1Π0

q21 q3Λ1

0,

если x = 0,

б)

2. а) f (x) =

 

1, если x > 0;

 

(ответ неоднозначен)

(ответ неоднозначен)

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

§4.3. Рекурсивные функции

Напомним, что в этой главе множество N натуральных чисел содержит 0, т.е. N ={0,1, 2,...}. Будем рассматривать функции (возможно,

частичные) f : N ×... × N N. Таким образом, если x1, ... , xn N,

14243

n

то либо f (x1, ... , xn ) N, либо f (x1 , ... , xn )

не определено. Введём в

рассмотрение простейшие функции

 

 

 

 

 

о(x) = 0, s (x) = x +1, I m (x , ... , x

n

) = x

m

.

n 1

 

 

 

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

Оператор суперпозиции. Пусть даны функция f (x1, ... , xk ) от k

переменных и k функций f1 (x1, ... , xn ), ... , fk (x1, ... , xn ) от n переменных.. Суперпозицией функций f , f1 , ... , fk называется

функция

ϕ(x1 , ... , xn ) = f ( f1 (x1 , ... , xn ), ... , fk (x1 , ... , xn )).

Мы говорим, что функция ϕ получается применением оператора

суперпозиции S k+1 к функциям f , f1 , ... , fk , и пишем

ϕ =S k +1 ( f , f1 , ... , fk ).

Например, S 2 (s,o) – это функция ϕ(x) = s(o (x)), т.е. функция,

тождественно равная 1, а S 2 (s,s) – это функция ϕ(x) = x + 2.

Оператор примитивной рекурсии. Пусть даны функции g(x1, ... , xn )

и h(x1, ... , xn+2 ). Построим функцию f (x1 , ... , xn+1 ). Пусть зафиксированы значения x1, ... , xn . Тогда полагаем:

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

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

Эти равенства определяют функцию f (x1, ... , xn+1 ) однозначно. Функция f называется функцией, полученной с помощью оператора R примитивной рекурсии. Используется запись f =R (g, h).

Индуктивное определение функции (продемонстрированное в операторе примитивной рекурсии) в математике не редкость. Например,

индуктивно определяются степень с натуральным показателем: a0 =1, an+1 = an a, факториал: 0!=1, (n +1)!= n!(n +1) и т.д. Определение. Функции, которые могут быть получены из простейших о(x), s (x), I mn (x1, ... , xn ) применением конечного числа раз

операторов суперпозиции и примитивной рекурсии, называются

примитивно рекурсивными.

Проверим, что функция a(x, y) = x + y является примитивно рекурсивной. Действительно, мы имеем: a(x,0) = x, a(x, y +1) =

= a(x, y) +1. Это есть схема примитивной рекурсии, так как x = I11 (x),

а a(x, y) +1 = s (a(x, y)) = =S 2 ( s, a). Здесь g(x) = I11 (x), а h(x, y,u) = s (u) = S 2 (s, I 33 ).

Аналогично доказывается, что функции m(x, y) = xy, d(x, y) = x y

(считаем по определению 00 =1), fact(x) = x! и многие другие

являются примитивно рекурсивными.

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

простейшие функции o, s, I mn являются всюду определёнными, а

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

x y, если x y, f (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 , ... , xn , xn+1 ).

Зафиксируем какие-либо значения x1 , ... , xn первых n переменных и будем вычислять f (x1, ... , xn ,0), f (x1, ... , xn ,1) и т.д. Если y наименьшее натуральное число, для которого f (x1, ... , xn , y) = xn+1

(т.е. значения f (x1 , ... , xn ,0), ... ,

f (x1 , ... , xn , y 1)

все существуют

и не равны xn+1 ),

то полагаем g(x1, ... , xn , xn+1 ) = y.

Таким образом,

 

g(x1 , ... , xn , xn+1 ) = min{y | f (x1 , ... , xn , y) = xn+1}.

Если такого y нет, то считаем, что

f (x1, ... , xn , xn+1 )

не определено.

Итак, возможны три случая:

 

 

 

1.

f (x1, ... , xn ,0), ... , f (x1, ... , xn , y 1)

существуют и не равны xn+1,

а

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

 

 

 

2.

f (x1, ... , xn ,0), ... , f (x1, ... , xn , y 1)

существуют и не равны xn+1,

а

f (x1, ... , xn , y)

не существует;

 

 

 

3.

f (x1, ... , xn ,i)

существуют при всех i N и отличны от xn+1.

Если имеет место 1-й случай, то g(x1, ... , xn , xn+1 ) = y, а если 2-й или 3-й, то g(x1, ... , xn , xn+1 ) не определено. Про функцию g, полученную

таким образом, говорят, что она получена из f применением оператора минимизации М. Мы пишем g =М f .

Оператор минимизации – это очевидное обобщение оператора взятия обратной функции. Обобщение довольно глубокое, так как от функции f не требуется, чтобы она была взаимно однозначной (по переменной

xn+1 ).

Определение. Функции, которые могут быть получены из простейших о(x), s (x), I mn (x1, ... , xn ) применением конечного числа раз

операторов суперпозиции, примитивной рекурсии и минимизации,

называются рекурсивными.

Класс рекурсивных функций шире класса примитивно рекурсивных функций хотя бы по тому, что он содержит не только всюду определённые функции. Докажем, например, что функция

x y, если x y, f (x, y) =

не существует, если x < y

является рекурсивной. Действительно, f (x, y) = min{z | y + z = x}, а ранее было установлено, что функция a(x, y) = x + y примитивно рекурсивна.

Рекурсивные функции отражают наше интуитивное представление о функциях, вычислимых некоторым механическим устройством. В частности, они вычислимы на машинах Тьюринга (см. предыдущий раздел). Наоборот, всякая функция, вычислимая на машине Тьюринга, рекурсивна. Мы не будем проверять этот факт, так как это потребовало бы слишком много времени и места. Полное доказательство можно найти, например, в книге А.И.Мальцева “Алгоритмы и рекурсивные функции”. В предыдущем разделе, впрочем, были построены машины

Тьюринга, реализующие функции o (x), s (x), I12 (x, y). С другой

стороны, не всякая функция натуральных аргументов является рекурсивной, даже не всякая функция одного аргумента. В самом деле, рекурсивных функций имеется лишь счётное число (т.е. их можно занумеровать натуральными числами), а все функции f :N N

образуют несчётное множество. Существование нерекурсивных функций и является “математической причиной” наличия алгоритмически неразрешимых задач (о них см. следующий раздел).

Примеры решения задач

Пример 1. Доказать, что следующие функции примитивно рекурсивны:

а) m(x, y) = xy; б) d(x, y) = x y ; в)

0,

если x = 0,

(функция

sg x =

если x > 0

“сигнум”).

1,

 

 

 

 

Решение. а) Имеем: m(x,0) = 0 = о(x),

m(x, y +1) = m(x, y) + y. Это

схема примитивной рекурсии. Так как функция a(x, y) = x + y примитивно рекурсивна, то функция m(x, y) тоже.

б) Схема примитивной рекурсии для функции d(x, y) выглядит так:

d(x,0) =1 = s(o (x)),

d(x, y +1) = x y x = m(d(x, y), x). Так как

функция m(x, y) = xy примитивно рекурсивна, то d(x, y)

тоже.

в) Имеем: sg 0 = 0,

sg ( y +1) =1. Следовательно, функция

sg

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

 

Пример 2. Доказать, что функция

 

0, если x нечётно,

 

f (x) =

рекурсивна.

 

неопределено, если x чётно

 

Доказательство. Пусть ϕ(x) = min{y | 2 y +1 = x}. Так как функция ϕ получается из примитивно рекурсивных функций с помощью оператора минимизации, то функция ϕ рекурсивна. Ясно, что

0, если x нечётно,

 

ϕ(x) =

 

неопределено, если x чётно.

 

0, x = 0,

примитивно рекурсивна (см.

Известно, что функция sg x =

1, x > 0

 

предыдущее упражнение). Следовательно, функция sg ϕ(x)

рекурсивна. Это влечёт рекурсивность функции sg ϕ(x) −&1, а она совпадает с функцией f .

3. Выяснить, что из себя представляет функция Мsg, где sg функция “сигнум” (см. предыдущую задачу).

Решение.

Пусть ϕ =Мsg. Тогда ϕ(x) = min{y | sg y = x}. Поэтому

ϕ(0) = 0,

ϕ(1) =1, а остальные значения функции ϕ не определены.

Задачи для самостоятельного решения

1. Доказать, что следующие функции примитивно рекурсивны:

 

 

1, x = 0,

б)

min(x, y);

в) | x y | .

 

 

а) sg(x) =

 

 

0, x > 0;

 

 

 

 

 

 

 

в) | x y | = max{x −& y, y −&

x}.

 

 

 

 

 

 

 

 

 

 

x

, если x чётно,

2. Доказать, что функция

 

ϕ(x) =

 

 

 

 

 

2

 

 

 

 

 

 

 

 

неопределено, если x нечётно.

 

 

 

 

 

 

 

 

 

является рекурсивной.

 

 

f (x)

 

3. Доказать, что если функция

примитивно рекурсивна, то

 

 

x

 

 

 

 

 

 

 

функция σ(x) = f (i)

– тоже. Используя это утверждение и

i=0

результат задачи 1в), доказать примитивную рекурсивность функции