книги из ГПНТБ / Трахтенброт, Б. А. Алгоритмы и вычислительные автоматы
.pdfления топ же функции с использованием десятичного пред ставления. Для этого достаточно представить У в виде по следовательной композиции трех программ: программы перевода из десятичной системы в унарную, программы % программы перевода из унарной системы в десятичную. (Здесь напрашивается сравнение с электронными вычис лительными машинами, работающими в двоичной системе счисления; в них имеется устройство, или программа, для переработки исходных данных из десятичной системы в дво ичную, а также устройство, или программа, для перевода окончательной программы опять в десятичную систему.) Что
же касается |
пар |
чисел, |
троек |
чисел и т. |
п., то они будут |
изображаться |
в |
виде |
х * г/, |
х * у * г и |
тому подобное, |
где х, у, г — изображения соответствующих чисел в избран ной системе представления, а * — некоторый специальный символ (разделительный знак). Полезно заметить, что хотя мы намерены уделять главное внимание вычислению число вых функций, тем не менее это не ограничивает по существу природы алгоритмических проблем, решаемых на машинах Тьюринга. Дело в том, что если зафиксирован алфавит Л из г букв, то всякое слово R в этом алфавите может рассмат риваться как запись некоторого натурального числа в г-н системе счисления. Это позволяет интерпретировать исход ные данные, изображенные в виде слова R, как некое первона чально заданное натуральное число*1 . Поскольку такое же замечание можно сделать и относительно слова, изобра жающего результирующие данные, то ясно, что алгоритм поиска решения задачи можно интерпретировать как ал горитм вычисления значения числовой функции по заданно му значению ее аргумента. Подобная арифметическая интер претация (или короче — арифметизация) часто применяется в математической логике и теории алгоритмов; мы с ней еще встретимся в данном параграфе. Уже в предыдущих пара графах были составлены тыоринговы программы или разъяс нено, как можно составить таковые для вычисления суммы х + у, произведения х X у и т. п. Мы могли бы без труда
*> Применительно к реальным вычислительным машинам обычно употребляют такие выражения, как «в памяти машины хранятся 1000 24-разрядиых двоичных чисел» и т. п. Ясно, что под числами здесь имеются в виду двоичные слова соответствующей длины. Ма шине и впрямь безразлично, интерпретируются ли эти слова как двоичные записи чисел или как записи какой-нибудь другой нечисло вой информации.
100
увеличить их список и построить программы для многих других часто встречаемых числовых функций (например, для одноместных функций х2, х3, 2х, х\, для двумест ной функции xv и т. п.). Однако для более ясного представ ления о том, какие функции вычислимы по Тьюрингу (и как строятся соответствующие программы), целесообразно по ступать следующим образом. А1ы рассмотрим ряд естест венных н обычно употребляемых операторов, т. е. способов образования новых фунщнй, исходя из ранее определенных функций, и попытаемся выяснить: можно ли (и как?) соста вить программы для новых функций, коль скоро уже по строены программы для исходных функций?
Применяя входной язык и программирующие алгоритмы, описанные в предыдущем параграфе, мы сравнительно легко обнаружим, что в ряде важных случаев действительно удает ся построить такие программы. Тем самым выяснится, что класс тыориигово вычислимых функций необычайно широк и охватывает все функции, которые описываются посред ством так называемых индуктивных определений, основан ных на переходе от п к п + 1. Такие определения называют еще рекуррентными, что в буквальном смысле означает «возвратное определение» (от латинского слова recurso — бегу назад, возвращаюсь). Так как самое построение нату ральных чисел носит рекурсивный, т.,е. возвратный ха рактер (чтобы определить число 4, нужно сначала опреде лить число 3, чтобы определить число 3, нужно сначала определить 2 и т. д. вплоть до 1), то и определение числовых функций при помощи «возвращения» от неизвестного к из вестному весьма естественно. Именно так обычно опреде ляются или могут быть определены наиболее употребитель ные в арифметике и теории чисел функции: сумма, произ ведение, число сочетаний из т элементов по п и т. д. Воз можны различные варианты рекурсивных определений, все они, однако, естественным образом объединяются в оп ределении рекурсивной функции (точнее—общерекурсивной или частично-рекурсивной функции, в зависимости от того, предполагается ли, что функция всюду определена пли нет). Итак, будет показано, что класс тыорингово вычислимых функций настолько широк, что ои охватывает все рекурсивные функции. Переходим к реализации наме ченного плана.
Ниже всюду обозначения вида 21, имеют следующий смысл: тыорингова программа, вычисляющая функцию f.
101
Наша ближайшая цель - описать операторы трех ти пов — простейшие, примитивной рекурсии и (.i-оператор — и показать, что класс вычислимых функции замкнут отно сительно этих операторов. Иначе говоря, если мы распо лагаем программами 21,,, -lf! ( ... и функция / получается в результате применения какого-нибудь из указанных опе раторов к функциям fv /2 , то может быть построена
ипрограмма
П.2 Простейшие операторы. К ним относятся операторы супер позиции н введения фиктивных аргументов. Хотя мы рассматриваем здесь эти операторы применительно к функциям, аргументы и зна чения которых — натуральные числа, на самом деле они имеют смысл для функций с любыми областями задания н значении. Путем введе ния фиктивных аргументов заданная функция I может быть преоб разована в функцию h от большего числа аргументов; фиктивность (несущественность) вновь присоединенных аргументов означает, что при их изменении значение функции не изменяется (коль скоро за фиксированы значения «старых» аргументов).
Например, по заданной одноместной функции [t (х) определяем двуместную функцию Л условием h (х, y) — f, (х). Можно ввести одно временно несколько фиктивных переменных, например h (х, у , и, v) =>
— I (у, v). |
Во всех |
таких |
случаях |
построение Ul/, по ?1/ |
совершен |
|||
но очевидно. |
|
|
|
|
|
|
|
|
Например, если Л (.«, у) = |
ft (х), |
то ^ по заданной |
паре |
х * у |
сти |
|||
рает »(/и |
далее работает |
как |
4\f. Обычно допускают |
вольность |
мне |
|||
различают |
между |
собой функции, |
которые отличаются фиктивными |
|||||
переменными. Однако такое различение не только полезно, но во многих случаях и необходимо. В частности, как будет видно даль ше, за счет введения фиктивных переменных можно достичь боль
шого однообразия |
в программистских |
процедурах. |
Из заданных функции путем подстановки функции вместо |
||
аргументов можно |
образовать новые |
функции (так называемые |
сложные функции, или функции от функций); в этом и заключается
действие оператора |
суперпозиции. |
|
|
|
Рассмотрим, например, одноместную функцию ср(х), определяе |
||||
мую суперпозицией одноместных |
функций j и |
g: ср(х) = |
g(l {х)). |
|
Тогда, очевидно, |
формула ЭД/ ° |
описывает |
алгоритм |
вычисле |
ния функции ф и по ней с помощью программирующего алгоритма |
||||
может быть получена тыорингова |
программа 91ф . Аналогично, хотя |
|||
и несколько сложнее, строится программа в случае суперпозиции
многоместных |
функций. |
Пусть, |
например, |
двуместная |
функция |
||||||
ф (х-,, х2) определена как суперпозиция g |
(I, (х,, л-2), |
(*,, |
л-2), / 3 |
(хь |
|||||||
л,-2)). Тогда 51/ эффективно |
строится в соответствии с формулой |
|
|
||||||||
|
|
Коп 2- |
( O l f | | | Q l f J o i f |
3 ) , 3 |
a M f o o l r |
|
|
|
|
||
Действительно, |
исходя из слова х1* |
х2 |
алгоритм |
Коп2 снимает |
|||||||
две его |
копии |
и |
вырабатывает |
слово |
xt |
» ,v2 1| ,vA |
* хг |
\\ .v, |
« |
х2 , |
|
которое |
перерабатывается |
параллельной |
композицией |
9lj |
|| »(j |
\\Щ |
|||||
102
в слово fn |
(xt, хг) |] f,2 (xx, x«) || (х1г |
x 2 ) . Для последующего примене |
|||
ния |
алгоритма 91^ предварительно |
приходится еще |
заменить |
сим |
|
вол |
|| на |
разделительным символ |
», что и делает |
алгоритм |
Зам'ц. |
Вовсе не обязательно, чтобы функции [л , [ 2 , ... (внутренние функ ции суперпозиции) зависели от одних и тех же аргументов или даже, чтобы число аргументов было у них одним и тем же. Пусть, напри
мер, |
cp (.v, у , и, г) |
•= |
g (fn [х, у), |
fl2 (х). f,3 (х, и, г)). Конечно, |
програм |
|
му |
мы могли |
бы |
построить |
исходя из |
91^, ЭД^, Slg |
способом, |
похожим — хотя |
и не совсем идентичным |
— тому, как это было сде |
||||
лано выше. Однако здесь удобнее поступать иначе. Сначала состав
ляем |
программы |
?1Л 1 , 31/,., |
для |
функций |
/Ji |
{х, у, и, г) = |
f j (Л:, у), |
Л2 (х, у, и, |
г) = /2 (х), Л3 {х, у, и, г) = |
=Ъ (*. и, г),
получаемых введением фиктивных переменных. Далее строим про грамму 3(ф исходя из «стандартной» суперпозиции
Ф (х, У, и, z) = g |
(х, у, |
и, г), |
Л2 (х, у, и, г), |
А3 (х, у, |
и, г)). |
П р и м е ч а н и е . |
Для |
многих |
конкретных |
функций |
укорени |
лись так называемые инфиксные обозначения, в которых функ
циональный |
символ ставится не впереди аргументов |
(так |
называе |
||||||||||||||||||||||
мое префиксное обозначение), а между |
ними. |
|
Например, |
употреб |
|||||||||||||||||||||
ляются инфиксные обозначения для арифметических |
функций |
д- |
+ |
||||||||||||||||||||||
•f |
у , х X у |
и т. д. Их |
|
префиксные |
обозначения выглядели бы |
так: |
|||||||||||||||||||
4 [х, |
у) |
Х(х,у) |
и т. п. Соответственно |
привычные выражения |
вида |
||||||||||||||||||||
{х |
+ у)(и |
+ |
v) |
или |
(Л: — иу) |
: (иг |
- f |
v) |
являются |
не |
чем |
|
иным, |
как |
|||||||||||
инфиксными |
записями суперпозиций X ( + (х, у), +(«, |
v)) |
|
н |
:(—(л:,Х |
||||||||||||||||||||
Х(и, |
</)), |
+ |
(Х(«, г), |
|
v)). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
11.3. |
Примитивная |
рекурсия. |
Переходим |
к |
рассмотрению |
опе |
||||||||||||||||||
раторов, |
н которых |
наиболее |
явно воплощается |
определение |
по ин |
||||||||||||||||||||
дукции. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
Сначала рассмотрим сравнительно простую разновидность при |
||||||||||||||||||||||||
митивной |
рекурсии |
— так |
называемую |
итерацию. |
|
|
|
|
|
|
|
||||||||||||||
|
Пусть заданы одноместная функция /{и фиксированное |
натураль |
|||||||||||||||||||||||
ное число с. Тогда числа с, ft (с), I (ft (с)), ft (ft (ft (с))), ... можно |
рассмат |
||||||||||||||||||||||||
ривать как |
значения |
ф (0), |
ф (1), |
ф (2), |
ф |
(3), |
... |
некоторой |
новой |
||||||||||||||||
функции |
ф. |
Ее общее |
определение |
может |
быть |
сформулировано |
|||||||||||||||||||
с |
помощью |
ф |
следующих |
двух |
соотношений: |
|
ф |
(0) = |
с — базис |
||||||||||||||||
индукции; |
(х + |
1) = I (ф (*)) |
— индукционный |
шаг. |
|
|
Первое — |
||||||||||||||||||
задает |
начальное значение функции |
ф. |
Второе же является |
возврат |
|||||||||||||||||||||
ным или, |
как |
говорят |
|
еще, |
рекуррентным |
соотношением; оно |
по |
||||||||||||||||||
зволяет |
вернуться |
от |
|
искомого |
неизвестного |
значения |
|
ф |
(х + |
1) |
|||||||||||||||
к |
ранее |
уже вычисленному |
значению |
ф |
(х). |
Например, |
|
если |
в |
ка |
|||||||||||||||
честве |
f, (х) взята линейная |
функция |
2х, |
а в качестве |
константы |
с — |
|||||||||||||||||||
число |
1. |
то |
мы |
получим |
соотношения |
|
ф |
(0) = |
1; |
ф |
(х + |
1) |
= |
||||||||||||
= 2ф |
(х), которые определяют показательную функцию |
ф |
(х) |
= |
|
2х. |
|||||||||||||||||||
Такой способ определения |
функции |
ф |
называют итерацией |
функции |
|||||||||||||||||||||
I при |
начальном значении |
с. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
J 03
Построение программы ?[ф , исходя из программы 91/, отражает тот факт, что вычисление значения ф (х) сводится к повторному при
менению Щ и к счету этих повторений до тех |
пор, пока их число не |
||||||||||||
достигнет |
х. |
Рассмотрим |
алгоритмы: |
|
х \\ т II г в |
|
|||||||
|
1) |
Э, |
перерабатывающий |
тройку |
чисел |
тройку |
|||||||
|
|
1||/(г); |
|
|
|
|
х в |
|
|
|
|
||
|
2) |
2, |
перерабатывающий |
число |
тройку л - ||0||с ; |
т мень |
|||||||
ше |
3) Ф, распознающий свойство: в |
тройке чисел |
х | | / п | | г |
||||||||||
х. |
|
|
|
|
|
|
|
|
|
|
|
|
|
Тогда формула «2° пока Ф, |
повторяй Э» задает |
алгоритм, кото |
|||||||||||
рый, |
исходя |
из значения х, |
вырабатывает |
л-1| 0 || с, потом х || 1 || ft (с), |
|||||||||
потом |
* | J 2 | | / j (JS (с)) |
и т. д. до |
тех пор, пока будет |
получена |
тройка |
||||||||
x-||.v|| ip (х). |
Поэтому формула |
2 |
° (пока |
ф, повторяй Э)° Выд, где |
|||||||||
Выд — стандартная |
программа, |
выделяющая |
крайне правую ком |
||||||||||
поненту |
тройки, задает нужный алгоритм, вычисляющий функцию |
|||||||
ср. Для |
получения |
программы |
5(ф |
остается |
только заготовить |
про |
||
граммы |
для алгоритмов 2, Ф, |
©, |
что не представляет труда. |
На |
||||
пример, |
алгоритм |
© описывается |
формулой |
£ || G || 51/, |
где |
6 — |
||
программа, вычисляющая функцию s (х) = |
х + |
1. Итак, |
класс |
вы |
||||
числимых функций замкнут относительно итерации. Заметим, что хотя внешне итерация обнаруживает некоторое сходство с Много кратной суперпозицией, тем не менее ситуация здесь существенно иная. В частности, итерация — более подходящее средства для по лучения быстро растущих функций, чем многократное применение
суперпозиции. Например, из функции f, (х) = |
2х |
посредством супер |
||||||||||||
позиций |
можно |
получить |
каждую |
из |
функций |
I {Jt (.v)) •= 2 2 ' 1 , |
||||||||
I (h U W)) = |
22 |
и |
т. д. В то же |
время разовое |
применение |
итера |
||||||||
ции |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ф |
(0) |
= 1, |
ф |
(х + |
1) |
= |
Ь (ф |
(х)), |
т. |
е. |
ср (х |
+ |
1) = 2'(*» |
|
|
|
|
|
|
|
|
. • ^ | v этажеП |
|
|
|
|
|
||
дает |
функцию |
|
Ф ( А') |
= |
2'-2 |
|
|
, |
ошеломляюще |
быстро |
||||
растущую и обгоняющую каждую из функций 2х, 2-л, 2'-2 '1 и т. д. Итерация является частным случаем более общей схемы опре деления функции ф посредством рекуррентных соотношений, назы ваемой схемой примитивной рекурсии. Одноместная функция ф определяется примитивной рекурсией, исходя из заданной двумест
ной функции I и заданной константы с соотношениями
|
|
Ч> |
(0) |
= |
с, |
|
|
|
|
|
Ф |
(Л' + |
1) |
= |
|
I |
(х, |
Ф (Л-)). |
|
|
|
П р и м е р . Пусть |
с = |
I , |
/j (х, |
у) = |
(х |
+ |
1) X у . Тогда полу |
|||
чаем примитивную |
рекурсию |
|
|
|
|
|
|
|
||
Ф (0) |
•= 1, |
ф (х |
+ |
|
1) = |
(х |
+ |
1) |
X ф (х). |
|
104
Отсюда видно, |
что |
ср (1) = |
1 X 1 = |
1, |
<р (2) =• 2 x 1 = 2 п т. д. |
||||||||
Вообще ф (х) = |
* X |
(х |
— 1) X |
(х — 2) ... 2-1 = х\ |
функции ft |
||||||||
В частности, |
могло оказаться, |
что один |
из аргументов |
||||||||||
фиктивен. |
Пусть, например, |
Ц (х, |
у) = |
q (у); |
тогда |
примитивно ре |
|||||||
курсивная |
схема |
принимает |
вид |
|
|
|
|
|
|
|
|||
|
Ф (0) = |
с; ф (х |
+ |
1) => q (ф (х)) |
|
|
|
||||||
и она определяет |
ф как итерацию функции q. Если же I (х, у) = |
г (*-), |
|||||||||||
то схема |
принимает |
вид |
|
|
|
|
|
|
|
|
|
||
|
|
|
|
ф"(0) = |
с, |
|
|
|
|
|
|
||
|
|
|
|
Ф (Л- + |
1) = г (х). |
|
|
|
• |
(ф) |
|||
В данном частном случае примитивной |
|
рекурсии по |
существу |
||||||||||
отсутствует процесс |
возвращения |
от ф ( |
А - |
+ |
1) и |
ф (х). |
|
|
|||||
В случае двуместной функции |
ф исходными считаются |
трехмест |
|||||||||||
ная функция I и одноместная |
g; соотношения |
таковы; |
|
|
|||||||||
|
|
|
|
Ф (0, |
п) |
= g (л), |
|
|
|
|
|
||
|
|
Ф (х + |
1. п) •= j |
(дг, ф (х, |
л), л). |
|
|
|
|||||
Вообще, /е-местиая функция q; определяется соотношениями
|
Ф(0. |
пу, |
п«, |
nk_]) |
|
= g(n1 |
п2, |
|
|
пк_:), |
|
|
|
|||
|
Ф(*чМ, |
«1 |
"г, |
пк_ |
\) = 1(х |
<р{х, пъ |
|
n k _ 1 y \ |
|
|||||||
|
|
|
|
|
П1. |
|
nk- |
{)• |
|
|
|
|
|
|
|
|
где I, g — заданные функции |
от k + |
1 и к — 1 переменных, |
соот |
|||||||||||||
ветственно. В схеме (*) по первому аргументу |
функции ф ведется |
|||||||||||||||
индукция; остальные же аргументы играют роль |
параметров. |
|
||||||||||||||
П р и м е р . |
Пусть |
g (л) — я, [ (х, у , п) = |
х |
X у |
X п. Тогда |
|||||||||||
в соответствии |
со |
схемой |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
Ф (0, |
п) |
= |
я, Ф (А- + 1, |
п) •= |
(х + |
1) X |
ф (х, |
л) |
X |
л |
|
||||
имеем |
ф(1, |
п ) = 1 Х п Х л |
= |
/г2, |
ф (2, |
я) = |
2 X |
/г2 |
X |
л = |
2я3 , |
|||||
ф (3, |
я) = 3 |
X |
2я3 X п = |
6я4 |
и |
вообще |
ф (А-, |
Л ) = |
j t l / i * + ' . |
|
||||||
За счет небольшого усложнения конструкций и рассуждений, применявшихся выше при рассмотрении итерации, можно получить формулы входного языка для алгоритма, вычисляющего функцию ф,
и построить по ней тыорингову |
программу |
?(ф , исходя |
из программ |
||
91/, 5(сг п обычных стандартных |
программ. |
|
|
|
|
Для одноместной |
функции |
ф формула |
имеет такой |
же вид, как |
|
и в случае итерации, |
т. е. |
|
|
|
|
2 "(пока Ф, повторяй ©) с |
Выд, с той лишь разницей, |
что под |
|||
Э следует теперь понимать алгоритм, переводящий тройку |
А - || т \\ г |
||||
105
в тройку |
х\\т |
+ |
1 || / (т, |
г). Для |
© |
формула будет чуть |
сложнее, |
|
чем |
раньше, а |
именно |
|
|
|
|
||
|
|
|
|
Коп »(Е )|S |
1 "31/), |
|
||
где |
Коп — копирующий |
алгоритм, |
перерабатывающий |
тройку |
||||
х || т || г |
в тройку |
-v || т \\ |
т*г. |
|
|
|
||
|
Аналогично можно рассмотреть примитивно рекурсивную схему |
|||||||
(*) для двуместной (и вообще для многоместной) функции |
ср и запи |
|||||||
сать на входном языке формулу для |
программы 2(ф . Если некоторые |
|||||||
из аргументов функции g и I фиктивны, то на самом деле схеме («)
можно иногда |
придавать |
и |
«неканонический» |
вид, |
например: |
|
|
|||||||||||||||||||||
или |
|
|
Ф (0, |
и) = |
g |
(л), |
ф (л- + |
1, |
л) |
=> |
q |
(ф |
(х, |
л)) |
|
(« • ) |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Ф (0, |
п ь |
|
л2 ) = |
г |
(л2 ), |
ф (х, |
|
я,, |
л2 ) = |
q (х, |
ф(х, |
я 1 : |
п2)). |
|
(***) |
|||||||||||||
|
Приведем несколько таких примеров, когда некоторые из ар |
|||||||||||||||||||||||||||
гументов исходных функций g, jj фиктивны. |
|
|
|
|
|
|
|
|
|
|||||||||||||||||||
|
Пусть g |
(л) = |
л, ? ( ( / ) = |
1 + |
У- Тогда в соответствии со |
схемой |
||||||||||||||||||||||
|
|
|
|
|
ф |
(0, |
п) |
— п, |
ф |
(дг + |
1, |
л) = |
1 + |
ф (-V-, |
л) |
|
|
|
|
|||||||||
имеем: ф (1, я) |
= |
1 + |
л, ф (2, я) |
•=• 1 + |
(1 + |
|
я) |
= |
2 + |
|
л, ф (3, |
л ) = |
||||||||||||||||
= |
1 + |
(2 + |
л) •= 3 + |
л и вообще ф (х, л) = |
х |
-+- л. Иначе |
говоря, |
|||||||||||||||||||||
эта примитивно рекурсивная схема задает сумму, исходя i n функций |
||||||||||||||||||||||||||||
п, |
I |
+ |
у. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Далее, при g (л) •= 0 и I |
(х, |
у , |
л) = |
у |
+ |
л получаем |
схему |
|
|||||||||||||||||||
|
|
|
|
|
Ф (0, |
я) |
= |
0, |
ф |
(х |
+ |
|
1, |
л) = |
ф |
(.V, |
л) + |
л, |
|
|
|
|
||||||
определяющую |
произведение |
л: X |
я, |
ибо |
|
ф ( I , |
п) = |
|
0 + |
я = |
я, |
|||||||||||||||||
ф (2, |
я) |
= |
я |
+ |
п = |
2я, ф (3, |
я) = |
2л + |
я |
= |
|
Зл и т. д. Если |
же |
по |
||||||||||||||
ложить g |
(л.) = |
1, f; {х, у, п) |
= |
I / X |
а, то получается схема ф (0, |
л) = |
||||||||||||||||||||||
= |
1, |
ф (х + |
1, |
я) = |
ф (.t, |
|
я) |
X |
я, |
определяющая |
|
функцию |
я*. |
|||||||||||||||
Действительно, |
ф (1, |
л) = |
|
1 X |
я = |
л1 , |
ф (2, |
л) = |
я ' X п = |
я 2 , |
||||||||||||||||||
Ф |
(3, |
л) |
= |
я 2 |
X я = |
л3 и т. д. Любые «неканонические» |
схемы |
тако |
||||||||||||||||||||
го рода |
можно |
преобразовать |
в «канонические» вида «(*), если пред |
|||||||||||||||||||||||||
варительно осуществить введение фиктивных переменных. |
Напри |
|||||||||||||||||||||||||||
мер, |
после |
реализации |
операторов |
g |
(nlt |
|
пг) = г |
(л2 ), I (х, |
у , л,, |
|||||||||||||||||||
"г) = |
Ё |
О*. У) |
схема |
(***) |
принимает |
вид |
|
(*). |
Поскольку |
|
класс |
|||||||||||||||||
функций, вычислимых по Тьюрингу, замкнут |
относительно |
опе |
||||||||||||||||||||||||||
ратора |
введения |
фиктивных переменных, то |
тем самым |
установлена |
||||||||||||||||||||||||
замкнутость и относительно |
|
примитивных |
рекурсий |
в |
«неканониче |
|||||||||||||||||||||||
ской» ситуации, когда в правых частях |
соотношений |
(*) отсутст |
||||||||||||||||||||||||||
вуют те или иные аргументы. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
Еще |
более |
общая |
ситуация, |
чем (*), заключается |
в том, |
что не |
|||||||||||||||||||||
сколько функции одновременно (совместно) участвуют в индуктив
ном определении. |
Например, |
для |
двух |
одноместных функций ф! |
||||||||||||
и |
ф 2 |
схема |
одновременной |
|
(совместной) |
примитивной рекурсии |
||||||||||
выглядит так: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
Ф, (0) |
= |
сг, |
ф, (А- |
+ |
1) = |
!л |
(х, |
Ф, |
(х), |
ф 2 |
(*)), |
|
||
|
|
ф 2 |
(0) |
= |
С2 , |
ф 2 (х |
+ |
1) = |
!« |
(X, |
ф! |
(х), |
ф 2 |
(л:)). |
|
|
Ф2 |
В |
соответствии |
с |
этой |
схемой |
пара |
заданных |
значений |
ф, (0), |
|||||||
(0) |
позволяет |
вычислить |
пару фх (1), |
ф 2 (1), а эта |
в свою |
очередь |
||||||||||
106
пару |
ф] (2), ф 2 (2) и т. д. Для |
двуместных функций |
схема |
принимает |
||||||||
вид |
|
|
|
|
|
|
|
|
|
|
|
|
<Pi №. л) |
= |
gl ("). ф] [х + |
1, л) = |
t-i |
(х, |
ф, |
[х, |
п), |
ф 2 {х, |
л), л), |
||
ф2 |
(0, я) |
= |
g, (л), ф; (Л- + |
-1, л) |
= |
£ |
2 (*, |
ф, |
(х, |
л), ф„ ( Л , я), л) |
||
и аналогично |
для любого |
числа |
функции |
от |
любого числа пере |
|||||||
менных. В качестве примера рассмотрим совместное определение двух функции: част (х, л) — частное при делении х на я и ост (х, я) — оста
ток, который |
при этом получается. При п = |
0 деление неосуществи |
||||||
мо, но мы доопределим |
эти функции, полагая, что они |
обращаются |
||||||
в нуль |
при |
я = |
0. |
Допустим, 'что значения |
част (х. п) |
и ост (х, я) |
||
уже известны. Тогда при переходе к х + |
1: |
|
|
|||||
1) |
если |
ост |
(х, я) = |
я — 1, то частное увеличится |
на единицу, |
|||
а остаток обратится |
в |
нуль; |
|
|
|
|||
2) |
если |
это |
не так, |
т. е. если ост (х, |
л) |
< п — 1, то |
частное ос |
|
танется прежним, а остаток увеличится на единицу. Этому словес ному предписанию можно придать вид одновременной примитивной рекурсии, которая приведена ниже. Предварительно введем неко торые обозначения. Пусть
если | < г], если | > г].
Это очень простые функции, которые очевидным образом вычислимы по Тьюрингу; мы еще неоднократно будем ими пользоваться. Иско мая схема для пары част (х, л), ост (х, я) имеет вид:
част (0, я) = 0, част (х |
+ 1, л) |
= част (х, л) |
+ Рв |
(ост |
(х, я) + |
1, |
я), |
ост (0, л) =» 0, ост (x-\r |
1, л) = |
(ост (,v, я) + |
1)хМн |
(ост |
(х, л ) + |
1, |
п). |
Совместная примитивная рекурсия для т функций от k аргу ментов как бы описывает одну функцию от k аргументов, значениями
которой являются /л-мерные векторы |
с натуральными координатами. |
||||||||||
Построение |
соответствующей |
тырринговой |
программы, |
исходя |
из |
||||||
заданных |
программ |
21 |
*>(„.,, |
|
SI),, |
5l f e |
по существу |
ничем |
|||
не отличается от того, что мы |
имеем |
для |
обычной примитивной |
ре |
|||||||
курсии. |
|
|
|
|
|
|
|
|
|
|
|
11.4. u-оператор. Примитивная |
рекурсия отличается |
от |
супер- |
||||||||
Позиции и введения |
фиктивных |
переменных тем, что она существен |
|||||||||
но учитывает специфику |
натурального |
ряда |
— возможность |
индук |
|||||||
тивного перехода от х к х -(- 1. Другое |
отличие заключается |
в том, |
|||||||||
что тыориигово программирование примитивной рекурсии |
основано |
||||||||||
на повторном (можно сказать — циклическом) применении |
исходной |
||||||||||
программы. Однако при этом заранее известно (и задано!) число пов торений. Именно при вычислении ф (л-) или ф (х, п) приходится по вторять исходный алгоритм х раз. Теперь рассмотрим такую ситуа цию, когда вычисление вновь определяемой функции, хотя и сво дится к повторному применению некоторого исходного алгоритма, однако без какой-либо априорной информации о числе повторений.
Пусть |
I {х, |
у) — предикат, т. е. функция, принимающая два значе |
||
ния: 0 |
1.. Зададим функцию ф (х) условием: при любом фиксирован |
|||
ном х0 |
, для |
которого существует хотя бы одно значение у такое, что |
||
I (*|>. У) — 1 |
( т. е. предикат истинный), ф (х„) равно |
наименьшему |
||
среди |
чисел у таких, что ft (х„, у) |
= 1; если же таких у |
не существует, |
|
то ф (л-0) не определено. В этом |
и заключается применение ц.-опера- |
|||
107
тора к функции f: (х, у ) ; символически это записывается так; ф ( А - ) =
=1Ф if- (*. у) =
Допустим теперь, что задан |
алгоритм 91/, вычисляющий |
преди |
|||||||||||||
кат fsi т. е. распознающий алгоритм, |
применимый к парам |
х \ |
\ у и вы |
||||||||||||
ясняющий, имеет |
ли место свойство 1(х, у) = |
1 Естественно, |
напра |
||||||||||||
шивается |
следующий алгоритм |
поиска |
значения ср (х0 ): проверяем |
||||||||||||
подряд условие 91/для |
пар |
х п | | 0 , |
д-01| 1, х0 |
|| |
2, ... до тех пор, пока |
||||||||||
впервые не будет обнаружено нужное у , если вообще такое у |
сущест |
||||||||||||||
вует; в противном случае процесс |
|
продолжается |
неограниченно. |
||||||||||||
Соответствующая |
формула исходного |
языка |
такова: 2 ° |
(пока 31/, |
|||||||||||
повторяй |
& | | 5 ) , |
где 2 |
перерабатывает |
х |
и х | | 0 . Она |
позволяет |
|||||||||
строить программу 3|ф , |
коль |
скоро |
|
задана 3(/. Аналогично |
обстоит |
||||||||||
дело, когда ц-оператор применяется |
к предикату |
ft |
(хи |
|
|
||||||||||
любого числа k + |
1 аргументов, |
доставляя |
функцию; |
|
|
||||||||||
|
Ф(х, . . . |
xh) = |
iiy{f(x1 |
|
|
xk. |
у) |
= |
1). |
|
|
|
|||
Допустим, что даны две функции |
gx |
(хъ .... |
х ^ , у) и gj (х,, |
||||||||||||
х;,, у ) , и имеется у , для которого |
(при фиксации |
всех |
остальных |
||||||||||||
аргументов) справедливо отношение |
|
= |
g^. Пользуясь предикатом |
||||||||||||
Рв (£, nj, можно это записать так: |
|
|
|
|
|
|
|
|
|
|
|||||
Ф ( х ь |
... х,,.) = |
ц(/(Рв |
(gi ( х ъ ... |
xh, |
|
у), |
g 2 ( x b |
..... xh, |
(/))=!} |
||||||
Поскольку суперпозиция, стоящая |
в фигурных |
скобках, |
является |
||||||||||||
предикатом, тьгорингова программа которого может быть построена,
исходя из 9 l P l l , |
9 I g o , то |
и 9(ф - может быть |
построена. Точно |
так же обстоит |
дело в случае, |
когда вместо fa = fti |
рассматривается |
отношение fn |
< f(i и т. п. Разница лишь в том, что вместо предиката |
Рв (|, ц) надо |
брать другой двуместный предикат, например Мп (%, |
ц) и т. п. |
|
Типичной 1итуацнеп применения ^-оператора является построе ние обратных функций. Допустим, что для некоторой функции у =
=I (х) существует обратная функция, т. е. для каждого натураль
ного у существует единственное значение х, для которого [t (х) = у ;
в таком случае обратная |
функция х = |
ф (у), |
очевидно, может |
быть |
определена посредством |
ц-оператора: |
ф (у) |
их (f, (х) = у ) . |
Мно |
гие функции анализа такие, как показательная сх, степенная х°, определены на всем натуральном ряде, если параметры (в нашем слу чае параметр с) выбран подходящим образом. Однако этого нельзя
утверждать |
об обратных |
функциях; |
например, log с х, |
или \f~x~, |
|||||
вообще говоря, не будет натуральным |
числом даже при натуральном |
||||||||
с. В таких |
случаях |
удобно рассматривать |
арифметические |
варианты |
|||||
обратных функций, которые заключаются в следующем: |
в качестве |
||||||||
значения |
функции |
объявляется |
целая |
часть |
истинного |
значения |
|||
функции, |
т. е. [ф (у)\. Теперь ясно, что исходя |
из функций у = с" |
|||||||
или у => х с |
, можно |
определить |
арифметические |
обратные функции |
|||||
посредством |
ц-оператора: |
|
|
|
|
|
|
||
|
|
|
[ log, ( ( / ) ] = цх (/•*+' |
> у ) ; |
|
|
|||
|
|
|
[\/"y] |
= lix((x+l)r |
>У). |
|
|
||
11.5. Рекурсивные описания и их тыориигово программирова ние. В предыдущих разделах был подробно рассмотрен ряд операто-
108
ров, которые, будучи |
примененными |
к заданным (или, |
как |
говорят, |
||||||||||
исходным) функциям, порождают |
новые функции. Допустим, что раз |
|||||||||||||
и навсегда |
зафиксирована какая-то |
система |
Q исходных |
функций; |
||||||||||
тогда имеет смысл рассматривать класс |
Q1 |
всех |
тех |
функции ср, |
||||||||||
каждая |
из которых может быть определена, исходя |
из |
Q, |
при |
||||||||||
менением |
|
наших операторов |
в |
нужном |
количестве |
и в |
нужном |
|||||||
порядке. |
Учитывая |
специфику |
этих |
операторов, |
ясно, |
что |
такое |
|||||||
определение функции ср записывается формально |
как система |
всех |
||||||||||||
равенств, |
|
входящих |
в |
фактически |
употребленные схемы |
супер |
||||||||
позиции, |
примитивных |
рекурсий |
и |
(х-операторов. |
Условимся |
на |
||||||||
зывать эту |
систему |
равенств |
рекурсивным |
описанием |
функции ср. |
|||||||||
Внимательный просмотр примеров, разобранных в предыдущих раз
делах, |
показывает, |
что для |
всех |
встречавшихся |
там |
функций |
воз |
|||||||||||||||||
можны рекурсивные описания при трех исходных функциях: |
|
|
||||||||||||||||||||||
|
1) |
константа |
нуль: |
0(л:) = 0, |
|
|
|
|
|
|
s(x)=x+l, |
|
|
|||||||||||
|
2) |
функция |
непосредственного |
следования: |
|
|
|
|||||||||||||||||
|
3) |
функция |
непосредственного |
предшествования: |
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
( х— 1 |
при |
х |
> О, |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
1 |
|
0 |
при |
х = 0. |
|
|
|
|
|
|
|
|
||
Эти |
функции |
чрезвычайно просты и очевидным образом |
вычислимы |
|||||||||||||||||||||
по Тьюрингу. Заметим, что вычислимость s(x) |
и s (х) |
по существу |
оз |
|||||||||||||||||||||
начает |
способность |
прямого |
и |
обратного |
счета чисел |
натурального |
||||||||||||||||||
ряда. |
|
|
|
|
|
|
|
|
функцию ср (у) |
|
|
|
|
|
|
|
|
|
|
|||||
|
Рассмотрим, например, |
= |
[log2 (/]. Она |
была |
оп |
|||||||||||||||||||
ределена |
как |
цл; (2A'"*"' |
> |
у) |
с привлечением |
показательной |
функции |
|||||||||||||||||
тр (А-) = |
|
2х |
и |
так |
называемой |
диагональной |
функции |
J |
(у) |
= |
у. |
|||||||||||||
Очевидно, |
J |
{у) |
= 1 |
(s (у)), |
а 2* = |
Я (х, |
2), |
где X (х, |
п) |
|
— |
степенно- |
||||||||||||
показательная функция пх. |
|
Как мы уже видели, X (0, я) = |
1, |
X (х |
+ |
|||||||||||||||||||
+ |
1, л) = |
п |
(X (х, |
л), |
л), |
р Д е П °Д 3 1 |
(*> ") следует |
понимать |
произ |
|||||||||||||||
ведение |
х |
X |
п. |
Наконец, |
произведение |
определялось |
через |
сумму: |
||||||||||||||||
|
О х |
я |
= |
О, |
(.V + |
1) X |
я = |
а |
(х |
X п, л), |
где |
а |
(х, |
|
л) = |
х |
+ |
л, |
||||||
а сумма — через функции |
J (л) |
и |
s : 0 + |
л = |
л, |
(х |
|
+ |
1) + |
я — |
||||||||||||||
<= |
s (х + |
я). |
Сведя все эти |
равенства вместе, |
получаем |
рекурсивное |
||||||||||||||||||
описание (вернее, одно из возможных рекурсивных описаний функ ции [log2 ]).
J(x)=7(s(x)),
Г0(0, n) = J(n),
\a(x+\ |
|
|
n) = |
s(o(x, |
n)); |
|
(n(0, |
|
n) = Q, |
|
|
|
|
\л(х |
+ 1, |
л) = |
а ( я ( х , |
л), |
я), |
|
! X (0, |
|
n) = |
l, |
|
|
|
(X(x |
+ |
\. |
n) = |
n(X (x, |
л), |
n). |
•ty(x) = |
X(x, |
2), |
|
|
|
|
Ф (y) = |
ц^(г|>(* +1)>J |
Щ. |
||||
Любая функция, для которой возможно рекурсивное описание при исходных функциях 0 (х), 5 (.V), s (х), называется общерекурсивион, или просто рекурсивной. Рекурсивное описание называется
109
