
- •Лекции по курсу “дискретные структуры”
- •Интуитивное определение алгоритма
- •Основные свойства алгоритмов
- •Примеры алгоритмов
- •Рекурсивные алгоритмы
- •Примитивно-рекурсивные функции
- •Частично-рекурсивные функции
- •Символьные конструкции
- •Определение, функционирование и способы задания машины Тьюринга
- •Композиция машины Тьюринга
- •Эквивалентность машин Тьюринга и частично- рекурсивных функций
- •Определение и функционирование нормального алгоритма
- •Примеры нормальных алгоритмов
-
Примитивно-рекурсивные функции
При построении рекурсивных функций принят традиционный в теории алгоритмов конструктивный подход: задается « базис », т.е. несколько простейших, очевидным образом вычислимых функций и способ построения из них остальных функций с помощью специальных операторов.
В качестве простейших функций в теории рекурсивных функций приняты следующие :
1.
– константа «ноль».
2.
– « последователь »
3.
– функция тождества или выбора аргумента.
Эти функции можно считать простейшими, т.к. для любых значений аргументов из натурального ряда мы немедленно определяем значение функции.
Для построения примитивно-рекурсивных функций используются операторы суперпозиции и примитивной рекурсии.
Оператором
суперпозиции
называется
подстановка в функцию от m
переменных m
функций
от n
переменных,
что дает новую функцию от n
переменных.
Суперпозицией функций g
и
называют функцию
Пример
1.
Пусть
Оператор
примитивной рекурсии
,
определяющий значение функции
,
записывается в виде следующей схемы (
для простоты
будем считать двуместной):
При
этом значение X
считается фиксированным. Работа
операторазаключается
в последовательном вычислении значения
Более детально алгоритм вычисления
функции
по
схеме примитивной рекурсии показан на
блок-схеме ( рис. 2.1.).
Начало
i=0
Вычисление
g(x) i
= y
Вычисление
Конец
Да
Нет
i=i+1
Рис.
2.1. Алгоритм вычисления
по схеме примитивной рекурсии.
Пример
2.
Вычисление функции
с помощью оператора примитивной рекурсии.
Пусть требуется вычислить 4!. По схеме примитивной рекурсии имеем:
Видно,
что всякий раз при вычислении
через
значение
уже определено.
Определение примитивно-рекурсивной функции
Функция называется примитивно-рекурсивной, если она может быть получена из простейших с помощью конечного числа применений операторов суперпозиции и примитивной рекурсии.
Очевидно, что примитивно-рекурсивные функции являются всюду определенными, т.к. простейшие функции всюду определены, а операторы суперпозиции и примитивной рекурсии не сужают область определения.
Для того, чтобы показать, что какая-либо функция является примитивно-рекурсивной, достаточно построить ее согласно данному определению. Однако такое построение получается слишком сложным и громоздким. Поэтому в большинстве случаев данную функцию пытаются выразить с помощью суперпозиции и примитивной рекурсии через другие функции, примитивная рекурсивность которых доказана ранее.
Приведем примеры доказательства примитивной рекурсивности некоторых простых арифметических функций.
Пример 3. Константа a получается путем суперпозиции функций
и
:
Пример
4.
Операция сложения
может быть определена с помощью оператора
примитивной рекурсии :
В
качестве функции
записана функция тождества, функция h
во втором равенстве – это
.
Таким образом, функция
получена из простейших
и
путем применения оператора примитивной
рекурсии, что соответствует определению
примитивно-рекурсивной функции.
Пример 5. Примитивная рекурсивность операции умножения доказывается с использованием сложения :
Операция
вычитания не является примитивно-рекурсивной,
т.к. она не всюду определена : результат
операции a-b
при
не
определен в области натуральных чисел.
Однако примитивно-рекурсивной является
так называемое арифметическое вычитание.
Пример 6. Арифметическое вычитание:
Для
доказательства примитивной рекурсивности
вначале рассмотрим операцию
:
т.е.
операция
примитивно–рекурсивна.
Тогда
:
следовательно арифметическое вычитание примитивно–рекурсивно.
Пример
7. Функция
- аналог функции
для
натуральных чисел.
Функция
примитивно–рекурсивна :
При доказательстве примитивной рекурсивности не обязательно явным образом использовать оператор примитивной рекурсии.
Пример
8.
Примитивная рекурсивность функции
доказывается
с помощью арифметического вычитания :
Справедливость этого равенства проверьте самостоятельно.
Рассмотрение ряда примеров позволяет сформулировать некоторые рекомендации относительно того, как следует пытаться установить примитивную рекурсивность какой-либо функции.
-
Во-первых, следует пытаться выразить данную функцию через известные примитивно-рекурсивные функции с помощью суперпозиции.
-
Если все же необходимо явно использовать оператор примитивной рекурсии, следует поступать следующим образом :
- определить, по какой переменной проводится примитивная рекурсия;
- определить значение (формулу) исследуемой функции при нулевом значении переменной ( тем самым получив первую формулу схемы примитивной рекурсии );
- выявить, как зависит значение данной функции от ее же значения на предыдущем шаге рекурсии, записать на основе этого вторую формулу схемы.
-
Следует иметь в виду, что если функция не всюду определена (т.е. частичная ), то она не примитивно–рекурсивна.
Примитивно-рекурсивными могут быть не только арифметические функции , но и « арифметизованные » логические функции, отношения, предикаты, различные операторы.
« арифметизованная » логическая функция – это такая арифметическая функция, которая на множестве {0,1} ведет себя как логическая.
Пример
9. Операции
на множестве {0,1}
примитивно–рекурсивны
Отношение
называется примитивно–рекурсивным,
если примитивно–рекурсивна его
характеристическая функция
:
Пример
10.
Отношение
примитивно–рекурсивно.
Действительно,
Предикат
называется примитивно–рекурсивным,
если примитивно–рекурсивна его
характеристическая функция :
Пример
11. Доказать
примитивную рекурсивность предиката
« простое
число ».
При
доказательстве воспользуемся
примитивно–рекурсивными функциями
( антисигнум - функция обратная
),
.
Утверждение « n - простое число » разобьем на две части :
-
-
Из равенства
следует : либо a=1, либо b=1.
Примитивная
рекурсивность отношения
:
Вторую часть утверждения запишем в виде :
Примитивная
рекурсивность операции
:
Примитивная
рекурсивность операции «»
( импликация ) следует из примитивной
рекурсивности базисных логических
операторов
.
Следовательно вторая часть утверждения
« n
-
простое
число »
тоже примитивно–рекурсивна.
Оператор называется примитивно–рекурсивным, если он сохраняет примитивную рекурсивность функций, т.е. если результат его применения к примитивно–рекурсивным функциям дает снова примитивно–рекурсивную функцию.
Пример 12. Примитивная рекурсивность оператора условного перехода
где
и
-
примитивно–рекурсивные функции; P
- примитивно–рекурсивный предикат.
Примитивная
рекурсивность функции
( и оператора B)
следует из равенства :