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

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

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

примитивно рекурсивным, если в нем ле участвует u-оператор, т.е. допускаются только операторы суперпозиции введения фиктивных переменных п примитивной рекурсии. Функция называется примитив­ но рекурсивной, если для нее существует примитивно-рекурсивное описание. Предложенное нами описание функции [log2 ] показывает, что эта функция рекурсивна; поскольку в нем встречается (i-оператор, это не дает нам основания утверждать, то [log,] примитивно рекур­ сивна. Однако это также не дает нам основания утверждать, что

функция [log2 ]

наверняка

 

не примитивно рекурсивна,

ибо заранее

не исключено,

что можно

придумать другое описание,

которое при­

митивно-рекурсивно (и н

самом деле такое можно

придумать!).

«Начальные куски» рассмотренного нами описания являются рекур­ сивными и даже примитивно рекурсивными описаниями промежу­ точных функций, возникших по пути определения [log2 ], а именно суммы, произведения и т. п.

По смыслу операторов суперпозиции, примитивной рекурсии и (.(.-оператора ясно, что рекурсивное описание некоторой функции может рассматриваться как своего рода программа — ее можно на­ зывать рекурсивной программой — для вычисления функции <р. Например, для вычисления [log,7| нужно приступать к вычислению значений 2°, 21 , 1", .... что возвращает нас к функции 1Х~ Вычисление значений этой функции сводится к вычислению значений произведе­ ния п так далее, вплоть до исходных функций. Однако, подытожи­

вая материал предыдущих разделов, мы

можем

теперь

высказать

более

точное утверждение.

Справедлива

 

 

 

 

 

Т е о р е м а .

Всякая

рекурсивная

функция

вычислима

по

Тью­

рингу;

существует

алгоритм,

который

по любой рекурсивной

про­

грамме

строит

тыорингову

программу,

вычисляющую

ту

оке

функцию.

 

 

 

 

 

 

 

 

 

На первый взгляд, выбор функции 0

( A - ) , S

( Л - )

И S

( А - )

В каче

исходных может

показаться

случайным.

В некотором

смысле

это

на самом деле так; можно было бы рассматривать

и другие

исходные

функции. Однако

весьма

примечательным

и глубоким

является то

обстоятельство, что даже при нашем бедном выборе исходных функции можно получать рекурсивные описания для всех функций, наиболее употребительных в арифметике и в теории чисел; следова­ тельно, расширение запаса исходных функций за счет присоедние

ния

других

естественно

напрашивающихся

«кандидатов»

не приве­

дет

к

расширению

класса

функций,

допускающих

 

рекурсивные

описания.

Мы ограничимся

здесь

еще

некоторыми

иллюстрациями

широты

класса рекурсивных

а значит

и класса

функций, вычисли­

мых

по

Тьюрингу.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конечные

функции.

Так

мы называет функции, которые почти

константны

в

следующем

смысле:

 

существует

такая

константа

с,

что I принимав: значения,

отличные от с не

более, чем конечное чис­

ло раз.

Пусть,

например,

I (0) =

2;

\

(1) =

Б, /;

( А

)

=

7 при

х > 3.

Тогда посредством примитивных рекурсий (типа ( # ) на

стр. 105)

по­

следовательно

определяем

f,

(0) = 5 ,

fa

+

1) =

7;

ft (0) =

2,

I (х

-\- 1) =

[Л

( А ) .

Показать,

что

все конечные

 

функции

прими­

тивно рекурсивны! Запомним следующие конечные функции, назы­ ваемые сигнум и антисигнум:

при х ф 0, при А ' = 0.

110

Арифметические функции и отношения. Мы уже установили при­ митивную рекурсивиость суммы, произведения, показательной функ­ ции и др. Применением суперпозиций можно получить всевозможные

многочлены с натуральными

коэффициентами,

а также более

слож­

ные выражения

типа

 

 

 

 

 

((5**+ 4 г)* , + 1 7 +2xyz)-2^v

+

5

 

и т.п.

 

 

 

 

 

Некоторые

затруднения

возникают в связи

с описанием

обрат­

ных операций: вычитания, деления и т.п. Поскольку они не всегда выполнимы, обычно их доопределяют дополнительными соглаше­ ниями, рассматривают так называемые арифметические варианты функций и т. п. Например, вместо разности я — х рассматривают

арифметическую

разность

п х =

{

~0 Х

при я

<

х

к 0

Т 0 Р а я

определяется

примитивной

рекурсией!

 

 

 

 

 

 

 

 

 

 

п — 0 — n п - (х + 1) = s

я).

 

 

 

 

Отсюда

видно,

что суперпозиция

sgn

— х)

описывает

предикат

Мн (х,

л), а

суперпозиция

sgn (л — х) X

sgn

л)

определяет

предикат Рв

(л,

х). Следовательно,

функции

част (х,

л)

и ост

( А - , л),

при определении которых с помощью совместной примитивной ре­ курсии (11.3) использовались предикаты Мн и Рв, также примитив­ но рекурсивны.

Отношение делимости и свойство быть простым числом прими­ тивно рекурсивны в том смысле, что примитивно рекурсивны их характеристические функции

1, если х нацело делится на я,

Ов противном случае.

1.если х простое число.

пр (х) = О в противном случае.

Действительно, х\п = Рв (ост (х, л), 0); напомним, что в соот­ ветствии с принятым ранее определением функции ост (х, л) мы долж­ ны считать х\ 0 = 1.. Что же касается пр (А-), то здесь можно посту­ пать по-разному, но мы остановимся на следующем описании! сум­ ма v (и, х) вида ( * : 0 ) + (л-- 1) + ... + ( * ' : ") равна числу делителей числа х, не превосходящих и. Эта сумма может быть описана рекур­ сивно:

v (0, х) = 1, v (и + 1, х) = v (и, х) + (х\ {и + I)). Поэтому функция п (х), равная числу всех делителей числа х, может

быть выражена так: n(x)=v

(х, х).

Наконец, х—простое число, когда

оно больше 1 и имеет в точности

три

делителя (а именно 0, 1 и само

х). Следовательно,

пр (х) =

Мн (1,

х) X Рв (л (х),

3).

 

Пусть функция

П ) пересчитывает в порядке возрастания все

простые числа, т. е. П ( 0 ) = 2 , П (1) = 3,

П ( 2 ) = 5,

...

Очевидно,

произведение пр {у)

X Мн (Я (х), у)

равно

единице

в том

и только

в том случае, когда у — простое число, превосходящее П (х). Следо­

вательно

функция П (х) рекурсивна

ибо ее

можно определить

так:

 

 

 

/7(0)

= 2 . Я ( А - + 1 ) = ( . 1 ( / ( ( П Р ( ( / ) Х М Н ( / 7 ( Л )

< / ) ) = 1)

I I I

11.6. Рекурсивное программирование функций, вычислимых по Тьюрингу. Вычислимы ли на машинах Тьюринга такие функции, которые не рекурсивны? Отрицательный ответ па &тот вопрос оытекает из следующей теоремы, доказательству которой и посвящен

данный параграф.

Пусть

машина

Тьюринга

 

вычисляет

функцию

 

Т е о р е м а .

9)f

f {х\,

* т ) ;

тогда

по заданной

функциональной

схеме машины

(по

заданной

тыорин.'оеоп

программе) можно

построить

рекурсив­

ное описание

этой

функции

f (х\,

хт).

степени примечательный

 

Таким образом,

выясняется

в высшей

факт, что два класса функций, первоначально описанные в разных терминах, а именно, класс тыорингово вычислимых функций и класс рекурсивных функций, совпадают. Доказательство теоремы само по

себе очень поучительное,

ибо оно основано на весьма любопытном

методе арифметической

интерпретации

(арифметизации),

который

уже упоминался

бегло

в н .

11.1 В нашем

случае

арифметизация на­

чинается с того, что с каждой конечной конфигурацией

К машины 9Л

сопоставляются

четверка

натуральных

чисел

s (К),

q (К),

т (К),

п (К) — координаты этой

конфигурации. Хорошо известно, сколь

плодотворным является применение координатного метода в геомет­ рии; он позволяет (в рамках аналитической геометрии) применять к решению геометрических задач хорошо разработанные алгебраи­ ческие и аналитические методы. При этом в каждой конкретной ситуации успех дела и простота решения в значительной мере за­ висят от того, насколько удачно выбрана система координат. В на­ шем случае (в отличие от аналитической геометрии!) в качестве коор­ динат используются не любые действительные числа, а натуральные числа; соответственно, на смену алгебраическим и аналитическим методам приходят теоретико-числовые (арифметические) конструк­ ции и методы.

Пусть К' — конфигурация, непосредственно следующая за /(; обозначим через s, q т п координаты «текущей» конфигурации /( и через s', q', т', п' —- координаты конфигурации К'. Наша ближай­ шая цель — описать такую координатизацнго, для которо.н выполне­ но следующее условие которое можно называть условием коррект­ ности: функции

s' = s' (s, q. m, n)\ q' = q' (s, q, m, n)\ m' •= m' (s q, т. я); n' = n' (s, q, m, n)

примитивно рекурсивны Именно такой удачный выбор «системы координат» — корректная координатизация — и обеспечит успех дела в целом, т. е. доказательство теоремы в полном объеме. Заметим

сначала, что любая конечная тыорингова

конфигурация К однознач­

но определена четверкой (si. qj, Ki,

Кр),

где$г — обозреваемый сим­

вол, qj — внутреннее

состояние.

/С; и

Кр — соответственно левое

и правое крыло конфигурации, т. е.

слова

(возможно

пустые),

располагающиеся на

ленте левее

и правее

обозреваемой

ячейки.

Разъясним это несколько подробнее. Если левее обозреваемой ячей­

ки — сплошь

пустые

символы

Л,

то /<; = л ;

в противном

случае

/<; — слово,

простирающееся

от

самого

левого

непустого

символа

до той ячейки, которая непосредственно левее оборзеваемой

Напри­

мер, для конфигурации К (рис. 27)

 

 

 

 

si=i

?/ = ?з

/</ = ! * * .

Кр =

* Л 1

 

112

Мы покажем, как закодировать каждое из названных четырех ком­

понент натуральным числом:

код

(s;).

код (</_,•).

код

(К:) код р).

Это и будет четверка координат конфигурации

/(.

 

 

 

Будем считать, что символы внешнего алфавита и символы со­

стояний занумерованы натуральными

числами S- =

{s0 , s1,

Sr-x),

Q =

{?о. 4\i

Qi' •••> Qh-yi- Соответственно положим

код

(S;-) = (',

код (qj) = /.

Для

дальнейшего

удобно считать,

что

s0

есть

пустой

знак;

итак,

ниже

всюду код (л) =

0.

Символы

s0,

 

sr_j

можно

рассматривать как цифры г-ичной системы счисления. Поэтому сло­

во Ki можно

рассматривать как о-ичную запись некоторого

натураль­

ного

числа;

это

и будет код (Ki)-

Например,

для

конфигурации

К

рис.

27,

 

полагая код

(л)

=

0,

код

(•») =

 

1,

код

( [ ) =

2.

 

имеем

троичной

системе

счисления):

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

код ;)

==-2 • З 3 +

1 • З 1

+

1 • 3" =

22 =

[211 ] 3 *>.

 

 

 

Что же касается Кр,

то при определении код (Кр)

нам удобно интер­

претировать

Кр как число, записанное «зеркально», т. е. старшие раз­

ряды записаны правее младших. Например, для

конфигурации

К

рис.

27

имеем

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

код

(Кр)

=

1,3°

+ 0,3" + 2-3? =

19 =

[201]3 .

 

 

 

 

 

 

 

Итак,

для

конфигурации

К имеем: s = 2,

9 = 3 ,

т=

22,

п=

 

19.

На рис. 27 изображена также конфигурация К',

получаемая

из

К

применением

команды

| qs

-*• »I7q2 .

Для нее s'

=

1, q' =

2,

tn'

=

=

68, п'

=

6.

Теперь

покажем, что s',

q',

/и', п'

как

функции

от s,

q,

т,

п

примитивно

рекурсивны.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ранее

мы

уже

закодировали

внешние

символы

и

состояния

числами. Закодируем еще и сдвиги:

Г — с д в и г

вправо,

2 — сдвиг

влево, 0 — отсутствие

сдвига. Тогда

функциональная

схема

маши­

ны Ш задается посредством тройки функций S (s, q),

Р (s, q),

Q (s,

q),

которые по кодам s, q входной пары вырабатывают

соответственно

коды переработанного символа, сдвига и

нового

состояния.

Эти

функции

определены

только при s

<

г и q <

k,

но, доопределяя

их

на всех остальных значениях аргументов одним и тем же констант­ ным значением, мы превращаем их во всюду определенные функции, которые конечны, а следовательно (см. п. 11.5), примитивно рекур­

сивны. Вернемся теперь к интересующим нас функциям s'

(s, q,

т,

п),

q' (s, q, tn, n),

m'

(s, q, tn, n) и n'

(s,

q,

tn,

n).

 

 

 

 

 

 

 

Примитивная

рекурсивность

функций s'

и q'

очевидна,

ибо

s'

(s, q, m, n)

=

S

(s,

q), q' (s,

q,

tn,

n) =

Q (s,

q). Что же касается

функций

т ' и

п',

то мы рассмотрим в отдельности три случая

в зави­

симости

от того,

какой сдвиг

произошел

при

переходе

от

К к

/ ( ' .

 

1. Отсутствие сдвига, т. е. Р

(s,

q) =

0. Тогда

tn' =

т,

п'

=

п.

 

2.

Сдвиг

вправо,

т. е. Р (s, q) =

1. Тогда

левое крыло Ki раз­

растается вправо

и,

захватывая

s',

образует

Ki,

Поэтому

т'

=

=

код (K'i) =

rn-r

+

s'. Правое же крыло Кр укорачивается,

отсту­

пая из

самой

левой ячейки, в которой

записан

младший

разряд чис­

ла п. Поэтому

п' => паст (п, г).

 

 

 

 

 

 

 

 

 

 

 

 

3.

Сдвиг

влево, т. е. Р (s, q) =

2.

Аналогично

проверяется,

что

т'

=

част (т.

г),

п' = n-r +

s'.

 

 

 

 

 

 

 

 

 

 

*> Нижний индекс «3» указывает систему счисления. При отсут­ ствии специальных оговорок или обозначений числа считаются записанными в десятичной системе.

113

Только что приведенные словесные формулировки могут быть записаны так:

т ' =

p B (P(s,

q),

0)-т

+ Рв (Р (s, q),

l)-(m-r + s')

+

 

 

+

Рв (Р (s.

1/),

2)

-част (//г, л)|

 

п ' =

Р в ( Р ( 5 .

q),

0)-и

+

P

B ( P

( S ,

q),

1)част(п, /•)+

 

 

 

+

Рв ( P ( s ,

q),

2)(п-

+.s')-

 

Итак, функции т'

(s,

q, т, п) и п'

(s,

q,

in, п) представлены посредст­

вом суперпозиций

примитивно

рекурсивных функций Рв, Р, s'

(она же S), част, + ,

X . Следовательно, они

примитивно

рекурсивны.

Тем самым корректность

предложенной коордииатизацни пол­

ностью проверена. В качестве прямого следствия этого факта можно установить примитивную рекурсивность и для других функций, опи­

сывающих

работу машины

Тьюринга. Пусть

машина

Ш запущена

в некоторой

конфигурации

/( с координатами s,

q, in, п.

Тогда после

t тактов возникает конфигурация, которую мы обозначим К1 (счи­

таем,

что

/<° =

К).

 

Координаты

конфигурации

 

/ ( ' , естественно,

зависят от координат исходной конфигурации

/( и от t,

т. е. являют­

ся функциями от пяти аргументов: t, s, q,

in, n; обозначим их S, Q,

M,

N-

Легко видеть,

что эта

четверка функций

определяется

одно­

временной

примитивной

рекурсией,

исходя

из

функций s',q',

 

in',

п',

а следовательно,

все

они

тоже

примитивно рекурсивны. Дейст­

вительно,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S (0, 5 ' ,

q,

т,

п)

=

s,

 

Q (0,

s,

q,

in,

п)

=

q;

 

 

 

 

 

 

 

М

(О, s,

q,

in,

п)

«=

m,

/V (0,

s,

q,

in,

n)

•=

n;

 

 

S

(t+

\,s,q.

 

in,

n) =

s'

 

(5

(/, s, q,

m, n),

Q

(I, s, q, in,

л),

M

(I, s, q.

m,

n),

 

 

 

 

 

 

 

 

 

 

N

(t, s,

q,

in,

n));

 

 

 

 

 

 

 

 

 

Q

(t +

1,

s,

q, in,

n) =

q'

(S

(I,

s,

q, in,

n),

Q (t, s,

q,

m, n), M

(I,

s,

 

 

 

 

 

 

 

 

 

q,

in,

n), N

(I,

s,

q,

m,

n));

 

 

 

 

 

 

M

(I

+

1,

s,

q,

m,

 

n)

 

=

m' (S

(I,

s,

q, in,

n),

 

 

 

 

 

 

 

Q

(t,

s,

q,

in,

n),

M

(I,

s,

q,

m,

n)

N

(t,

s,

q,

in,

n));

 

 

 

 

 

 

N

(t

+

1,

s,

q,

m,

n)

=

n'

(S

(I,

s,

q,

ill, n),

 

 

 

 

 

 

 

Q

(I,

s,

q,

m,

n),

M

[t,

 

s,

q,

in,

n),

N

(I, s,

q,

in,

n)).

 

 

 

 

 

Указанная схема выражает следующий очевидный факт: резуль­ тат применения t + 1 шагов и исходной конфигурации К — это то же самое, что результат применения одного шага к результату К1, полученному после t шагов.

Теперь мы располагаем всем необходимым для завершения дока­ зательства теоремы в целом.

Для простоты рассмотрим случай, когда на машине Ш идет вы­ числение одноместной функций ft (х)\ случай многоместной функции отличается совершенно незначительными деталями. Будем также считать, что аргументы и значения ft представлены в унарной записи; как уже отмечалось в § 11.1, это ограничение тоже несущественно. Далее, для определенности полагаем, что символ | (палочка) коди­ руется старшей цифрой системы счисления, возникающей при арифметизации, т. е. код ( | ) = г — 1. В начальной конфигурации с ар­ гументом х левое крыло пусто, правое крыло Кр состоит из х — 1

114

палочки,

а

еще одна палочка обозревается головкой

в

начальном

состоянии

qx

(см. рис. 27). Следовательно, код

(Кр)

=

(г— l ) r v ~ 2

+

+

(г — 1)гх~3

 

+ ...

+

— 1)л° =

г * - 1

1,

а

четверка

коор­

динат конфигурации

Кр

такова: г

I ,

1, 0,

г 1 " - '

— 1.

 

 

 

 

Поэтому при варьировании начальной конфигурации с унарной

записью аргумента х координатные функции S,

Q, М,

N

становятся

функциями

от

двух

переменных

I,

х.

Введем

для

них

обозначения

S,

Q, М,

N,

т. е.. S (1, х)

=

S (t,

г

1,

1. О,

г*"1 —J ) ,

Q

х)

=

<= Q (/,/•— 1,

1, 0,

г * - 1

1) и т.д_. Очевидно,

S, Q, М, 7V тоже

при­

митивно-рекурсивные функции. Пусть стоп-состояипе

закодировано

константой к; тогда функция г (х), равная числу тактов, которые

расходует машина fflj при вычислении значения I (х),

может быть вы-,

ражена посредством

ц-оператора,

 

исходя

из Q:

 

 

 

T

( X ) = U * (

Q

[I. x)

=

k),

 

а следовательно, тоже

является

рекурсивной.

 

Далее,

рекурсивная функция

 

 

 

 

 

Л/(т(х),

x) = N{%(x),

 

г — 1,

1,

0, л * - 1

_ 1)

в точности

задает

л-координату

заключительной

конфигурации

(см.

рис.

27),

которая

равна

— 1. Значит,

окончательно

для

функции

f/ (х)

получается

представление:

 

 

 

 

 

 

/(х) =

1 +

logr

[iV (т (х)

1, 0,

^ - 1 — 1 ) + 1 ] .

 

 

Этим и завершается

 

рекурсивное описание

функции

I (х).

 

 

 

 

 

§ 12. ВАРИАНТЫ ВНЕШНЕЙ ПАМЯТИ

 

 

 

Правильное течение любого вычислительного процесса обеспечи­

вается тем, что

на каждой его стадии в памяти (машины или

вычис­

лителя) сохраняются

 

те данные,

которые могут понадобиться

набо­

лев поздних стадиях. Такие данные не только

не могут быть искаже­

ны

или стерты

раньше времени,

но и должны размещаться достаточ­

но удобно в памяти,

 

чтобы их можно было отыскать и

использовать

в нужный момент. В реальных

вычислительных

машинах это,

как

известно,

достигается

засылкой

промежуточных

результатов

в

спе­

циальные устройства

— регистры машины или в ячейки

памяти с из­

вестными

адресами,

где они хранятся вплоть до того момента,

когда

они потребуются для дальнейшей обработки. Значительно сложнее обстоит дело для машины Тьюринга; ведь в ее распоряжении имеет­ ся лишь одна лента, на которой п можно записывать как исходные так и результирующие и все промежуточные данные. Мы уже столк­ нулись с этими трудностями при параллельной композиции алго­ ритмов. В этом параграфе будут изложены и иллюстрированы неко­ торые общие соображения и методы, которые позволяют преодолевать трудности, связанные со спецификой внешней памяти машины Тью­

ринга. В качестве следствия мы

получим доказательство теоремы

о программировании параллельной

композиции, сформулированной

li многократно использованной нами в предыдущих параграфах.

Однако излагаемые здесь понятия и методы представляют н само­ стоятельный интерес. Они пригодятся нам и в дальнейшем'.

115

12.1. Полуленты и параллельная композиция. Для лучшего понимания того, каким образом машина Тьюринга может успешно «эксплуатировать» свою внешнюю память, целесообразно рассматри­

вать некоторые разновидности тыоринговой

машины,

отличающие­

ся от ранее изученного основного образца

лишь

особенностями

внешней памяти, т. е. ленты. Сначала рассмотрим машину с пра­

вой полулентой (рис. 28,

о), бесконечной только в одну сторону —

а именно вправо. Можно

считать, что ячейки ленты занумерованы

слева направо числами 0, 1, 2, 3, ... В нулевой ячейке помещен спе­ циальный знак — обозначим его ||. Команды машины и их выпол-

«;

О

1

Z

. . .

II

<"/

 

 

 

Pit) P(2)

. . .

 

 

i

 

8)

И РP(2)

 

V

P(v)

Piu) А

в)

II

X

X

У

У

X

А

1

 

 

 

 

 

 

 

?

 

г)

II

X

X

У

У

X

Ч

д-

 

 

 

 

 

 

 

1

з)

Н

 

X

У

У

X

Д

гi

ег

и

X

X

У

У

X

д

 

 

 

7.

 

 

 

3

Z

/

О

 

ж) Pit)

 

 

 

ЦЪ-2)

Pto)

II

 

 

р,

 

 

 

 

 

 

 

 

 

 

 

Рис.

28.

 

 

 

 

нение имеют такой же вид, как

обычно,

с единственной

оговоркой:

в каком бы состоянии машина

 

ни обозревала

знак

|| , команда

предусматривает

сдвиг

вправо

без изменения

символа || . Иначе

говоря, если в процессе вычисления головка достигнет нулевой ячей­ ки (о чем она узнает, обозревая символ | | ) , то она покидает ее и воз­ вращается направо. Пусть в начальной конфигурации исходное сло­

во Р =

Р

(\)Р

(2) ... Р

(v)

(см. рис.

28, а) записано на краю полу­

ленты,

т.

е. в

ячейках

с

номерами

1, 2,

тогда

фактически

весь процесс вычисления

происходит правее знака || , и он

может за­

кончиться

выдачей некоторого результата

R = R (\)R

(2) ...R (s),

расположенного правее этого знака. В случае отсутствия особых

оговорок

мы,

как и

прежде, будем применять обозначение вида

Ш (Р) =

R и считать,

что начальная

и заключительная

конфигура­

ции стандартны, т. е. что обозревается

первый

символ слова (не счи­

тая символа ||

из нулевой ячейки). Аналогично определяется машина

с левой

полулентой.

Обозначение Ю? (Я) =

R будет

применяться

в следующем смысле: в начальной конфигурации слово Р располо­ жено на краю полуленты (рис. 28, ж) и обозревается первый (слева)

его

символ.

Результат — слово

R — записан

где-то левее символа

|| и

в нем

также обозревается

первый слева

символ. Совершенно

116

очевидно, что функциональную схему любой машины 9Л с полулен­ той можно перестроить в функциональную схему обычной машины Тьюринга Эь которая в точности имитирует работу машины 93J. Отсюда следует, в частности, что все проблемы, которые можно ре­ шать па машинах с полулентой, можно решать (причем «почти» тем же способом) на обычных машинах. Действительно, пусть зада-

па 93с. Тогда Ш является последовательной

композицией

трех

схем:

9i =

91 ° Ш 0

2,

где 3( переводит

слово

Я в слово

|| Я

и возвра­

щает

головку

к первой букве

слова

Я, 2

отыскивает

символ

|| ле­

вее результата

R,

стирает его

и* возвращает

головку к первому

сим­

волу этого слова. Однако оказывается (а это уже менее тривиально), что на самом деле замена неограниченной в обе стороны лепты нолулентой не ослабляет вычислительных возможностей машины.

Справедливы

следующие

утверждения.

 

 

 

 

 

 

 

 

 

 

 

Т е о р е м а

 

1.

Существует

программирующий

 

 

алгоритм,

 

ко­

торый

любую

тыорингову

программу

91 перерабатывает

в

программу

(|| 9!)

для

машины

 

с правой

полулентой;

при

этом

 

выполняются

условия:

a)

91 (Р) •= R тогда

и

только

 

тогда,

когда

(Ц91)

(Я)

=

R;

б) в машине

|| 91

результат

 

R

(так

же, как

и

Р)

записан

на

краю

полуленты.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

строится

2.

Т е о р е м а

2 формулируется

 

аналогично;

 

по 91

программа

(91 || )

для

машины

с левой

 

 

полулентой.

 

 

 

 

 

 

 

 

Прежде чем привести соответствующие доказательства,

 

пока­

жем, как из этих теорем выводится теорема о программировании

па­

раллельной композиции

'JI, || %2

двух

 

алгоритмов

?lj

я[2

Сначала

строим

программы

91, ||

и

|| 912 . Затем

 

формируем

9t, || >}12

как

ком­

позицию

следующих

четырех

 

программ:

 

 

 

 

 

 

 

 

 

 

 

1)

 

 

||)

перерабатывает

Я, || Я 2

в

31г

(Я,) ||

Я 2 ;

 

 

 

 

 

 

 

2) 2, перемещает головку с первой

 

буквы

слова

"Л, (Ях )

к

пер­

вой букве

слова

Я 2 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3)

(II 312)

продолжает

переработку

 

до

выдачи

слова

'JIj г) ||

11ч-'г (^г)•

причем

головка

обозревает

первую

букву

из

912

2 );

4)

£ 2

 

перемещает головку

с

первой

буквы

$[2

2 )

к

первой

букве

2d

 

(Pi).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Построение

стандартных

программ

 

£ 2

тривиально, и мы его

здесь

опускаем'.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

У п р а ж н е н и е .

Описать

программирующий

алгоритм

 

для'

параллельной композиции трех или более программ.

 

 

 

 

 

 

12.2.

 

Доказательство

теоремы

о

 

полуленте.

Перейдем

теперь

к доказательству

теорем

1 и 2. Для

определенности

рассмотрим

слу­

чай с правой

полулентой. Программа

 

 

(ЦЭ1)

строится

как

последо­

вательная

композиция трех программ:

 

"21»97"8,

из

которых

основ­

ную нагрузку несет

91,

в

то

 

время

 

как

21, 2

— две

стандартные

программы, не зависящие

от

исходной

 

программы

 

91 и

выполняю­

щие вспомогательные функции. Во избежание громоздкости будем считать, что в исходной программе 91 помимо пустого символа л имеются лишь два «значащих» символа х, у; в общем случае про­ цедура в принципе ничем не отличается, а становится лишь более громоздкой. Итак, опишем конструкции программ 21, 91, £ и разъ­ ясним их назначение.

1. Программа 21 (рис. 29) вписывает символ А в первую пустую ячейку исходного слова Р. Соответствующие конфигурации — ис­ ходная и заключительная — изображены на рис. 28, а, б.

117

2. Программа 9~7 (рис. 30). Итак, к началу применения програм­

мы 9 i символы ||

и Д ограничивают на лепте зону, содержащую за

пись исходного слова Р. Далее в процессе

работы

программы

9 }

сим

вол

|| (неподвижная

метка)

сохраняется

в

своем

ячейке,

а

сим­

вол

А (подвижная

метка) перемешается

вправо в каждой ситуации,

 

 

 

 

когда

выясняется,

что внутри

зоны,

ограни­

 

/7

л

 

ченной метками

||

и А

(для

краткости

будем

X

 

называть

ее просто

зоной),

нехватает

места

У

П

л

 

для вычислений. К концу

работы

программы

Л

 

 

 

9t в зоне,

которая

сложится

к

тому

времени,

 

 

 

будет расположена

запись слова

R — резуль­

Д

 

 

 

 

Л!

 

тата.

Программа

9 i

получается

путем

рас-

II

 

 

ширения

программы

9!

так,

как

 

указано в

 

 

 

 

схеме рис. 30. Алфавит U , у, Л) программы;)!

 

 

 

 

расширяется за

счет

символов

|| ,

Д.

Далее,

Рис. 29. для каждого состояния 17 программы 9 ! добав­ ляются еще 7 связанных с q состояний, которые именуются q, q^, qx, qu, qA qA, q'. Итак, число состояний в 8 раз

превосходит число состояний в Эи Проследим теперь за работой программы 9 ! и сравним ее с работой заданной программы D i . По­ ка головка находится внутри зоны, 9 i работает в точности так же, как 9с. Пусть впервые головка вышла на метку Д в некотором состоя­

нии q

(см. рис.

28, в).

Тогда

она стирает

Д (команда Aq -+

Л flq),

X

 

'7

 

г

<t« •

1х-

 

1А

 

л

 

 

 

Г\Чх *п

Уп

А^Х

 

 

 

 

Л.

 

лЩу

хЛ$у

УЩу

Л %

 

 

л

•Л

 

 

 

 

 

хП^й

УЧл

Л ffqА

 

 

л

д

 

I\t7g

 

 

 

УЧ&

 

 

 

 

 

II

 

п1п

 

 

 

 

 

 

 

 

 

/71

 

 

 

 

 

Рис.

30.

 

 

 

 

 

 

уходит

вправо

в пустую ячейку, вписывает там

Д (команда

Aij -»-

— SJIq)

и возвращается

опять-таки

в состоянии

q,

туда,

где

прежде

была

метка Д,

а теперь

уже

пустая

ячейка

(см.

рис. 28,

г).

Короче,

метка сдвинута вправо и машина продолжает работать так же, как программа 9} в расширенной зоне. Допустим, что головка вышла на метку || в состоянии q (см. рис. 28, д). Поскольку метка || непод­ вижна и, следовательно, зону нельзя расширить влево, то высво­ бождение на левом конце пустой ячейки, необходимой для вычисле­ ний по программе 97, осуществляется так. Всю запись в зоне, вклю­ чая и метку Д, перемещают на одну ячейку вправо, а в освободившую­ ся пустую ячейку по соседству с меткой || помещают головку в том же состоянии q, в котором она первоначально (в поиске «свободного

пространства»!) наткнулась на метку || (см.

рис. 28, е). Тем

самым

и достигается нужный эффект от программы

91Проследим

подроб-

118

нее по программе, как это происходит. Наткнувшись на || в состоя­ нии q головка уходит вправо (команда || q -* Яг/ц), очищает сосед­ нюю справа ячейку и, запоминая ее содержимое, уходит вправо

(команда

типа А-<7Ц -> Л/7<7Л содержит

состояние qx, «запоминаю­

щее л-»).

Из

столбцов программы, соответствующих состояниям <7ц,

qx, qv, qA,

qA,

видно, что процесс перенесения содержимого каждой

ячейки в соседнюю с ней ячейку справа

продолжится до тех пор, по­

ка головка не переместит символ Д, а потом в состоянии q' начнет

сдвиг влево, дойдет до

||

и, наконец,

в состоянии

q вернется в ячей­

ку, соседствующую с

||

справа.

 

 

Программа 2 {рис.

 

31). Заметим,

что по окончании работы

результат R записан где-то в удлинившейся по ходу вычисления

зоне. Программа £ перемещает слово

R впритык

к метке || и уби­

рает правую метку Д.

 

 

 

 

 

р,

Р.,

 

4

Рг

 

 

Ц

X

лРо:

РРХ

 

Л

У

ЛРч

"PL

щ

 

Л

Л

П

Л

л

хЛр, УПР,

л

д

1\Лр,

 

пр'у

 

л

II

 

РРх

 

Л!

 

 

 

Рг

31.

 

Тем самым теорема доказана для случая правой полуленты. Программирующий алгоритм в случае левой полуленты совсем не­

значительно отличается

от описанной

выше

конструкции.

12.3. Многоэтажные

и многомерные

ленты.

В заключение этого

параграфа укажем бегло на другие возможные модификации внешней памяти машины Тьюринга.

Сначала рассмотрим случай, когда каждая ячейка ленты состоит

из верхнего и нижнего этажей и, соответственно, способна

содержать

 

 

 

 

А'

X'

два символа — верхний

и нижний. Команды имеют вид

yq

-*• y'Pq

и выполняются так: если

в состоянии q машина обозревает верхний

символ х и нижний символ у, то она записывает на верхнем

этаже

А'', на нижнем

этаже у', осуществляет сдвиг Р н переходит в состоя­

ние q'. Легко

понять, что новая концепция

несущественно

отличает­

ся от обычной: все новшество заключается

лишь в том, что в качест­

ве внешних символов берутся пары (столбцы высотой в две

буквы)

из какого-то другого алфавита*1 . Точно так же машина с v-этажной лентой — по существу обычная машина, внешние символы которой являются столбцами высоты v из символов некоторого алфавита. Это простое замечание позволяет строго доказать, что привлечение

*> Впрочем, можно заметить, что и обычно в реальных ситуа­ циях символ, трактуемый как единый объект, можно рассматривать и как нечто состоящее из двух частей — верхней и нижней, например русские буквы й, ё пли символы типа а', Ь и т. п.

119

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