- •Глава 1
- •Свойства алгоритмов
- •Примитивно–рекурсивные функции
- •Оператор минимизации
- •Ограниченный оператор минимизации
- •Частично–рекурсивные функции и тезис Черча
- •Контрольные вопросы к разделу
- •Упражнения к разделу
- •Задача 1
- •Варианты заданий
- •Задача 2
- •Варианты заданий
- •Тесты для самоконтроля к разделу
Оператор минимизации
Вернемся к начальной цели, которую мы поставили — дать формальное опре- деление алгоритма как функции, принадлежащей некоторому конструктивно опре- деленному классу функций. Возможно, что определение примитивно–рекурсивных функций будет удовлетворять этой цели. Однако сначала надо практически убедить- ся в том, что частный случай алгоритмов — программы для ЭВМ — можно предста- вить примитивно–рекурсивными функциями. Заданные в определении примитивно– рекурсивных функций средства их конструирования позволяют использовать для на- писания алгоритмов простейшие функции, оператор суперпозиции и оператор прими- тивной рекурсии. Если рассматривать программную реализацию этих конструктив- ных элементов, то простейшие функции соответствуют некоторому базовому набору операций языка программирования, оператор суперпозиции — последовательному выполнению действий, а оператор примитивной рекурсии — рекурсивной процедуре или оператору цикла типа "for". Рассмотрим достаточность этих средств для кон- струирования любого алгоритма. Сначала введем в рассмотрение новый оператор, представляющий аналог оператора цикла типа "while". Поскольку такой цикл вы- полняется многократно при истинности некоторого условия, необходимо рассматри- вать предикаты, определяющие такие условия. Любой предикат принимает значения "ложь" и "истина с которыми нельзя производить арифметических действий. Для
того, чтобы представить значение предиката натуральным числом, введем понятие характеристической функции предиката
{ 1, P (x1, . . . , xn) = истина
χp(x1, . . . , xn) =
0, P (x1, . . . , xn) = ложь
Кстати, при реализации логических переменных в программах для ЭВМ также обычно используются именно числа 0 и 1 для машинного представления значений "ложь" и "истина".
Теперь можно дать определение специального оператора, выполняющего цикл вычислений по некоторому условию.
Определение 2.3. Функция f (x1, . . . , xn) получается оператором минимизации из предиката P (x1, . . . , xn, z), если в любой точке (x1, x2, ..., xn) значением функции f (x1, . . . , xn) является минимальное значение z, обращающее предикат P (x1, . . . , xn, z)
в истину. Оператор минимизации имеет обозначение
f (x1, . . . , xn) = µz (P (x1, . . . , xn, z)). (2.3)
Для того, чтобы для любого предиката P (x1, . . . , xn, z) найти минимальное зна- чение z, обращающее P (x1, . . . , xn, z) в истину, нужно последовательно перебирать значения z = 0, 1, 2, .... Вычисление значения функции, заданной с помощью опера- тора минимизации, можно программно реализовать следующим образом:
int f(int x1,..., int xn)
{
int z=0;
while (P(x1,... xn,z)==0) z++; return z;
}
Пример. Пусть f (x, y) = µz (2∗x+z = y+1). Предикат P (x, y, z) = (2∗x+z = y+1) является примитивно–рекурсивным, т.к. его характеристическая функция является суперпозицией примитивно–рекурсивных функций и равна
sg(sg((2x + z)−˙ (y + 1)) + sg((y + 1)−˙ (2x + z))).
Вычислим значение f (1, 5):
-
z = 0,
P (1, 5, 0) =
Ложь,
z = 1,
. . .
z = 4,
P (1, 5, 1) =
P (1, 5, 4) =
Ложь,
Истина.
Тогда f (1, 5) = 4. Рассмотрим вычисление f (5, 1). В этой точке функция не опре- делена, т.к. P (5, 1, z) = "Ложь"для любого значения z ∈ N .
Полученный пример показывает, что с помощью оператора минимизации из при- митивно–рекурсивных функций можно получить не всюду определенные функции, поэтому оператор минимизации выводит из класса примитивно–рекурсивных функ- ций. Попробуем сделать так, чтобы остаться внутри класса примитивно–рекурсивных функций, но оставить возможность использования циклов типа "while". Для этого достаточно при определении оператора минимизации ввести ограничение на измене- ние переменной z так, чтобы цикл всегда завершался после некоторого числа шагов. В общем случае такое ограничение должно являться функцией свободных перемен- ных x1, x2,...,xn.
