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

книги из ГПНТБ / Трахтенброт, Б. А. Алгоритмы и вычислительные автоматы

.pdf
Скачиваний:
76
Добавлен:
21.10.2023
Размер:
9.86 Mб
Скачать

ления топ же функции с использованием десятичного пред­ ставления. Для этого достаточно представить У в виде по­ следовательной композиции трех программ: программы перевода из десятичной системы в унарную, программы % программы перевода из унарной системы в десятичную. (Здесь напрашивается сравнение с электронными вычис­ лительными машинами, работающими в двоичной системе счисления; в них имеется устройство, или программа, для переработки исходных данных из десятичной системы в дво­ ичную, а также устройство, или программа, для перевода окончательной программы опять в десятичную систему.) Что

же касается

пар

чисел,

троек

чисел и т.

п., то они будут

изображаться

в

виде

х * г/,

х * у * г и

тому подобное,

где х, у, г — изображения соответствующих чисел в избран­ ной системе представления, а * — некоторый специальный символ (разделительный знак). Полезно заметить, что хотя мы намерены уделять главное внимание вычислению число­ вых функций, тем не менее это не ограничивает по существу природы алгоритмических проблем, решаемых на машинах Тьюринга. Дело в том, что если зафиксирован алфавит Л из г букв, то всякое слово 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«) || (х

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

л =

3 ,

ф (3,

я) = 3

X

3 X п =

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: (х, у ) ; символически это записывается так; ф ( А - ) =

=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

Соседние файлы в папке книги из ГПНТБ