
- •Предисловие
- •§1.2. Функции алгебры логики
- •§1.3. Формулы. Реализация булевых функций формулами
- •§1.4. Специальные представления булевых функций
- •§1.5. Полнота, замкнутость. Теорема Поста о полноте
- •§1.6. Дизъюнктивная нормальная форма
- •§1.7. Схемы из функциональных элементов
- •Глава 2. Графы
- •§2.1. Основные определения
- •§2.2. Способы задания графов
- •§2.3. Связность
- •§2.4. Раскраски графов. Планарность
- •§2.5. Потоки в сетях
- •Глава 3. Автоматы
- •§3.1. Определение и примеры автоматов
- •§3.2. Диаграмма Мура и таблица автомата
- •§3.4. Приведённый автомат
- •§3.6. Теоремы Мура
- •§3.7. Ограниченно-детерминированные функции. Информационное дерево
- •§3.8. Синтез автоматов
- •§3.9. Алгебраический подход к теории автоматов
- •Глава 4. Алгоритмы и машины Тьюринга
- •§4.1. О понятии алгоритма. Тезис Чёрча
- •§4.2. Машина Тьюринга
- •§4.3. Рекурсивные функции
- •§4.4. Алгоритмически неразрешимые задачи
- •Содержание
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в), доказать примитивную рекурсивность функции