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

Замятин, задачник по матлогике

.pdf
Скачиваний:
470
Добавлен:
23.02.2015
Размер:
1.97 Mб
Скачать

a,bR

 

q

q0

 

λL

 

→λR

a1,b1L

λR

a1,b1λR

q1

q3

 

a,a1,b,b1, R a a1R

b b1R a,a1,b,b1, R

qa

L

qb

 

 

λaL

 

 

λbL

q2

a,bL

Рис. 6.6

Как мы видим на диаграмме, машина имеет 8 состояний. В состоянии q1 машина находит первый с конца слова w еще «не обращенный» символ x {a, b}, заменяет его маркером x1 и переходит в состояние qa или qb в зависимости от считанного символа. В состоянии qx она находит первую пустую ячейку, записывает в нее символ x и в состоянии q2 идет влево по входной ленте. При переходе через символ машина приходит в состояние q1 и цикл повторяется. Если в состоянии q1 она читает символ , то это означает, что обращение слова w завершено. Тогда машина в состоянии q3 меняет x1 на x и в состоянии q останавливается.

Пример 4. Рассмотрим машину Тьюринга, которая осуществляет перевод натуральных чисел из единичного кода в двоичный код. Эта машина должна, имея на входе x единиц, записать в начале ленты двоичное разложение числа x. Машину зададим диаграммой (см. рис. 6. 7).

Вначале машина работает, как машина проверки на четность из примера 2, только она вместо каждой нечетной единицы ставит символ , а нечетные единицы пропускает (состояния q0 , q1 , и q2 ). Если на первой пустой ячейке машина находится в состоянии q1 , то число просмотренных единиц нечетно, т. е. это число, деленное

200

q0

 

λ→0

q

λ→R

 

 

 

 

1R

,1,A,BL

1R

q6

 

 

R q1

λ→L

q3

λ→BL

,A,B→λ,0,1L

 

 

 

λ→L

1R 1R ,1,A,BL

 

q5

 

,A,BR

 

 

 

 

R q2

λ→L

q4

λ→AL

 

 

 

Рис. 6.7

на 2, дает в остатке 1. В этом случае машина слева от входного слова в первой пустой ячейке печатает символ B (состояния q1 , q3 , и q5 ). Если же при движении вправо первую пустую ячейку машина обозревает в состоянии q2 , то число просмотренных единиц четно. Тогда машина слева от входного слова в первой пустой ячейке печатает символ A (состояния q2 , q4 , и q5 ). Перевод заканчивается, когда все единицы входного слова заменены символом . Это будет в случае, когда машина в состоянии q5 будет обозревать пустую ячейку. Тогда машина движется влево, затирает символ , вместо A печатает 0, вместо B 1 и останавливается (состояния q5 , q6 , и q).

Пример 5. В качестве пятого примера рассмотрим машину Тьюринга, которую назовем “переводчиком”. Внешний алфавит этой машины есть {a1 , a2 , b1 , b2 , , λ}. Она, начиная работу на ленте

ai1 ai2 aik λ

перерабатывает ее в ленту

ai1 ai2 aik bi1 bi2 bik λ

и останавливается. Машина должна осуществлять “пословный перевод” цепочки ai1 ai 2 aik в цепочку bi 1 bi2 bik , сохраняя при этом «оригинальный текст».

Как должна работать такая машина? Она должна запомнить обозреваемый символ ai , то место, где он считан, найти первую пустую ячейку и записать туда символ bi. Скажем, символ а1 запоминается внутренним состоянием q1 , символ а2 – состоянием q2 , а обозреваемая ячейка символом внешнего алфавита λ. Пусть q0 – начальное состояние.

201

Программа машина должна, таким образом, содержать команды

q0 a1 q1 λR и q0 a2 q2 λR.

Далее, как сказано выше, машина в состоянии q1 или q2 должна дойти, двигаясь вправо, до первой пустой ячейки. Это могут “обеспечить” следующие команды

q1 x q1 xR и q2 x q2 xR,

где x {a1 , a2 , b1 , b2 , }. Если встретится первая пустая ячейка, то записать в нее символ b1 или b2 . Добавим для выполнения этого в программу команды

q1 λ q3 b1 L и q2 λ q4 b2 L .

Теперь машина должна вернуться, символ λ заменить на ai . На этом один цикл работы машины закончится. Символы q3 и q4 “обеспечивают” это возвращение:

q3 x q3 xL и q4 x q4 xL ,

где x {a1 , a2 , b1 , b2 , }. И, наконец, добавим команды

q3 λ q0 a1 R, q4 λ q0 a2 R, q0 q5 .

Символ q5 является заключительным состоянием машины.

Мы написали программу машины Тьюринга, названной переводчиком. Эта программа представлена таблицей 6.3.

 

 

 

 

 

 

Таблица 6.3

 

a1

a2

b1

b2

 

 

λ

 

q0

q1 λR

q2 λR

 

 

q5

 

 

 

q1

R

R

R

R

R

 

q3 b1 L

 

q2

R

R

R

R

R

 

q4 b2 L

 

q3

L

L

L

L

L

 

q0 a1 R

 

q4

L

L

L

L

L

 

q0 a2 R

.

Параграф содержит еще два примера машин Тьюринга, которые на первый взгляд могут показаться «экзотическими». Эти примеры включены, чтобы облегчить понимание универсальной машины, о которой речь пойдет в § 5.

Пример 6. Через hx(w) обозначим начальный отрезок слова w до первого вхождения буквы x, а через tx(w) – конечный отрезок слова w, который начинается первым вхождением буквы x.

Если w не содержит x, то hx(w) = w, а tx(w) = ε. Ясно, что w = hx(w)tx (w). Пусть А = {a, b, c, m, λ}, λ – пустой символ, Σ = {a, b, c}, w Σ*, w ≠ ε. Слово w записано на ленте. Задача состоит в том, чтобы в слове w найти первое вхождение буквы c и сдвинуть tc(w) на одну ячейку вправо, а в освободившуюся ячейку (там, где было первое вхождение буквы c) записать m. Диаграмма машины М, решающей эту задачу, приведена на рис. 6.8.

202

Исполняя команды q0 a q0 aR и q0 b q0 bR, машина находит первое вхождение буквы c. На месте этого вхождения машина ставит маркер m, переходит в состояние qc, запоминая тем самым прочитанный символ c, и сдвигается вправо. Затем она, считывая очередной символ x, печатает на ленте предшествующий символ (это индекс внутреннего состояния), переходит во внутреннее состояние qx и сдвигается вправо. Если M встречает пустой символ λ, то она печатает на ленте предшествующий символ и останавливается, переходя в состояние q. Если же слово w не содержит буквы c, то машина его не изменяет. Для ссылок машину М назовем “переносчиком”.

 

aR

bR

 

 

q0

 

 

 

aR

ε→L

 

 

qa

ε→a

 

 

baR

 

acR

abR

q

 

bR

 

ε→b

 

 

qb

 

 

 

 

 

caR cbR

bcR

 

cm

 

ε→c

 

 

 

 

qc

cR

Рис. 6. 8

Пример 7. Пусть А = {а1 , a2 , b1 , b2 , a, m, 0, 1, , λ}, λ – пус-

той символ, Σ = {a1 , a2 , a}, u, v – непустые цепочки над Σ. Необходимо построить машину М, которая определяет, равны ли отрезки ha(u) и ha (v) или различны. Более точно, машина должна начальную конфигурацию q0 mu v переводить в конфигурацию

q0u v, если ha(u) ha (v), и в конфигурацию q1u v, если ha(u) = ha(v). Диаграмма машины приведена на рис. 6.9. и 6.10.

b1,b2a1,a2L

a,a1,a2, L

a,a1,a2, L

b1,b2a1,a2L

q10

 

 

q11

q

Рис. 6. 9

203

aL

b1,b2R

q9

a1,a2,λ→L q10

 

q11

 

 

 

 

R

 

 

λ→L

a,a1,a2L

 

 

 

 

 

 

 

q7

q8

 

 

a,a1,a2R

aR

b1,b2R

 

 

R

 

 

 

 

q0

 

 

 

 

 

 

 

a1b1R

a2b2R

 

 

 

a,a1,a2R

a,a1,a2R

 

b1,b2R

 

 

q1

a,a1,a2L

 

q2

 

 

 

 

 

R

 

q6

 

R

 

 

 

b1,b2R

 

L

 

 

b1,b2R

 

q

 

q

3

4

 

 

a2 b2L

 

a1b1L q5 b1,b2L

Рис. 6. 10

Машина начинает работу в состоянии q0 . Пусть первый символ, следующий за маркером m, есть a1 . Машина запоминает это двояким образом: а1 заменяет на b1 и переходит в состояние q1 . Затем М проходит оставшуюся часть слова u, оставляя ее без изменений, и при переходе через символ меняет состояние на q3 . Если в состоянии q3 первый встретившийся ей символ из Σ {λ} будет а1 , то она заменяет его на b1 и переходит в состояние q5 . В состоянии q5 машина возвращается до символа , меняет q5 на q6 , находит первый символ из Σ в измененном слове u и переходит в состояние q0 . На этом завершается один цикл проверки. Если же в состоянии q3 первый встретившийся машине символ есть a, a2 или λ, то машина в состоянии q10 меняет символы b1 , b2 на а1 , а2 соответственно (т.е. восстанавливает цепочки u, v), маркер m заменяет на 0 и останавливается в состоянии q.

Аналогичные действия совершает машина, если она в состоянии q0 считывает а2 (см. состояния q2 , q4 на диаграмме).

Рассмотрим случай, когда в состоянии q0 машина считывает символ а. Тогда машина в состоянии q7 проходит оставшуюся часть слова u до “звездочки”, переходит в состояние q9 . Если

204

встретившийся ей символ из Σ {λ} есть а, то это означает, что ha(u) = ha (v), машина в состоянии q1 1 возвращается в начало цепочки, символы b1 , b2 заменяет на а1 , а2 соответственно, на месте маркера m печатает 1 и останавливается. Если же первый встретившийся символ есть а1 , а2 или λ, то это означает, что ha(u)ha(v), машина переходит в состояние q1 0 и выполняет действия, которые были описаны выше.

Осталось рассмотреть случай, когда в состоянии q0 машина обозревает символ . Это означает, что слово u не содержит символа а, т.е. ha(u) = u. Если измененное в процессе работы машины слово v содержит символы из Σ, то ha (u) ha(v), машина уходит в состояние q1 0 и на месте маркера m печатает 0. Если же измененное слово состоит только из символов b1 и b2 , то ha(u) = ha (v), машина переходит в состояние q1 1 и на месте маркера m печатает 1.

Две машины с одним и тем же внешним алфавитом назовем эквивалентными, если они, начиная работу на одинаковых лентах, либо завершают ее также на одинаковых лентах, либо обе работают бесконечно.

Следующее утверждение часто оказывается полезным.

Теорема 6.1. Для любой машины Тьюринга Т существует эквивалентная ей машина Тьюринга S, удовлетворяющая условиям:

1)если S имеет команды вида qa qa, то q– заключительное состояние;

2)если S имеет команды вида qa qad, где d – это L или R, то состояние qне является заключительным.

Доказательство. Пусть внутренний алфавит машины Т есть

Q= {q1 , ..., qk}, q1 – начальное, qk – заключительное состояния. Напомним соглашение о том, что если в действии команды

стоит символ d, то d = L или d = R.

Машина S получается из машины Т в результате преобразования команд. Если программа машины T содержит пару команд qaqaи qa′→q′′a′′d, то заменим эти две команды на одну qaq′′a′′d. Будем проводить это преобразование до тех пор, пока не исчезнут указанные выше пары. Далее все команды ви-

да qa qa, где q′ ≠ qk, заменим на qa qk a. И наконец, в случае, когда программа содержит команды вида С = qa qk

ad, где d – это L или R, к внутренним состояниям добавляем новые внутренние состояния qc и каждую из этих команд заме-

205

няем на две команды qa qcad и qca qk a. В результате выполнения этих преобразований и получится требуемая машина

S.

§3. Функции, вычислимые на машинах Тьюринга

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

Параграф посвящен изучению функций натурального аргумента, вычислимых на машинах Тьюринга. Пример такой функции уже был в §2, где было показано, что функция х1 +х2 вычислима на машине Тьюринга. Однако часто необходимо, чтобы головка при остановке обозревала самую левую непустую ячейку. В этом случае говорят, что машина правильно вычисляет функцию.

Дадим точное определение.

Определение. Машина Тьюринга М правильно вычисляет

функцию f(x1 , ..., xn ), если М, начиная работу в конфигурации

q0 1x1 1x 2 ... 1x n ,

заканчивает ее в конфигурации

qs1f ( x 1, ... , x n ) ,

если f(x1 , ..., xn ) определена, и работает бесконечно, если f(x1 , ..., xn ) не определена. (Здесь q0 – начальное, qs – заключительное состояния.)

Другими словами, машина Т начиная работу в состоянии q0 , обозревая первую ячейку на ленте, изображенной на рис. 5.8, заканчивает ее в состоянии qs, обозревая первую ячейку на ленте, изображенной на рис. 6.11, если f(x1 , ..., xn ) определена, и работает бесконечно в противном случае.

 

q0

 

 

Пример 1. Как уже было

λ

1→λR

 

сказано, во втором параграфе

 

 

был фактически приведен при-

 

 

 

1R

q

 

q1

мер

машины,

вычисляющей

λ→R

 

1L

 

функцию f(x1 , x2 ) = x1 +x2 . Не

 

q2

1L

 

было выполнено лишь два ус-

 

 

ловия:

первое –

головка при

Рис. 6.11

остановке не пришла в крайнее

левое положение; второе – рас-

 

206

сматривалось сложение ненулевых чисел. ”Подправим” эту машину (ее программа представлена в таблице 6.1) так, чтобы выполнялись отмеченные условия, получим машину Тьюринга, программа которой задается диаграммой на рис. 6.11

Пример 2. В качестве второго примера приведем диаграмму машины Тьюринга M, вычисляющей функцию y = 2x (см. рис. 6.12). Эта машина в качестве своей части содержит машину «переводчик» из предыдущего параграфа. Пример демонстрирует такой прием в «технологии программирования на машинах Тьюринга», как уход на подпрограмму.

 

 

1R

 

Как

видно

на

диа-

 

 

 

грамме, машина в случае,

 

p0

 

λ→λ

λ→ L

 

когда x = 0, просто пере-

p

1L

ходит в

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

 

p1

состояние p и останавли-

1→λR

 

вается. Если же x

0, то

 

машина M в конце после-

 

 

λ→R

 

p3

 

 

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

 

единиц

 

 

 

 

 

 

 

 

ставит символ и воз-

 

 

q0

 

λ→R

 

Переводчик

вращается к первой

еди-

 

 

нице. Затем она работает

p2

 

q5

(a1=a2=b1=b2=1

1L

 

как переводчик

при

a1 =

1L

 

 

a2 = b1 = b2 = 1. Напом-

 

 

 

 

 

Рис. 6.12

 

ним, что переводчик ос-

 

 

танавливается

в

состоя-

нии q5 на символе . Машина M на месте ставит 1, находит самую левую единицу, ее затирает и останавливается.

Чтобы привести более сложные примеры, нам понадобятся два утверждения – теорема 6.2 и теорема 6.3. Для простоты теоремы сформулированы для одноместных функций, хотя их утверждения справедливы и для многоместных функций.

Теорема 6.2. Пусть функции y = f(x) и y = g(x) правильно вычислимы. Тогда их суперпозиция g(f(x)) тоже правильно вычислима.

Доказательство. Пусть S – машина, вычисляющая функцию y = f(x), а Т – машина, вычисляющая функцию y = g(x) и U = {u1 , …, uk }, V = {v1 , …, vl } – множества внутренних состояний этих машин (u1 , v1 – начальные состояния, uk , vl – заключительные). Можно считать, что UV = . Условимся, что машины S и Т удовлетворяют утверждению теоремы 5.1. Рассмотрим машину М, множество внутренних состояний которой есть {u1 , ..., uk - 1 ,

207

v1 , ..., vl }, u1 – начальное, vl – заключительное состояния. Внешний алфавит машины М равен объединению внешних алфавитов машин S и Т. Команды машины М получаются также объединением команд машин S и Т со следующей “корректировкой”: команда машины S вида uia uka′ заменяются на uia

v1 a′.

Если функция y = f(x) определена, то машина S, начиная работу в конфигурации u1 1x , заканчивает ее в конфигурации uk1f ( x ) . Предположим, что на последнем такте S применила команду uia uka′. Машина М на всех тактах, кроме последнего, работает так же, как и S, а на последнем такте применяет команду uia v1 a′. Это означает, что машина М конфигурацию u1 1x переводит в конфигурацию v1 1f( x ) и далее работает как машина Т при вычислении g(z), где z = f(x). Если функция g(z) оп-

ределена, то машина Т М) заканчивает работу в конфигура-

ции vl1g ( f ( x )) .

Если же f(x) или g(z) при z = f(x) не определены, то машина М работает бесконечно.

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

Определение. Предикат P(x1 , x2 , …, xn), заданный на множестве N, правильно вычислим на машине Тьюринга М, если М, начиная работу в конфигурации

q0 1x1 1x 2 … 1x n ,

заканчивает в конфигурации qs1, если P(x1 , x2 , …xn ) истинно, и в конфигурации qs0, если P(x1 , x2 , …, xn ) ложно. (Здесь q0

– начальное, qs – заключительное состояния.)

Сделаем замечание, касающееся понятия правильной вычислимости предиката. Правильная вычислимость предиката P(x1 , x2 , ..., xn ) равносильна правильной вычислимости характеристической функции этого предиката, т.е. функции

1, если P(x1 , x2 , ..., xn ) истинно,

f(x1 , x2 , ..., xn ) =

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

Несмотря на это, будем пользоваться сформулированным выше определением.

Приведем два примера правильной вычислимости предика-

та.

208

Пример 3. Предикат P(x) – «x есть четное число» правильно вычислим. Рассмотрим машину, которая читает входное слово,

 

q0

 

переходя поочередно в состояния q0 и q1

λ→1

1→λR

1→λR

и затирая единицы. Если первую (справа

q2

 

от x) пустую ячейку машина будет обо-

λ→0

q1

зревать в состоянии q0 , то

x четное

 

 

число; если в состоянии q1 ,

то x нечет-

 

Рис. 6.13

 

 

 

ное число. Диаграмма машины приведена

 

 

 

на рис. 6.13.

Пример 2. Покажем, что предикат P(x, y) = «x меньше или равно y» правильно вычислим. Машина Тьюринга входное слово 1x 1y будет «обрабатывать» следующим образом. Она будет поочередно затирать сначала левую единицу первого аргумента, уходить вправо, затем правую единицу второго аргумента и возвращаться влево. Если при этом вначале «обнулится» первый аргумент, то x y; если второй, то – x > y. Диаграмма машины приведена на рис. 6. 14.

 

q0

 

 

 

λ→R

 

 

 

→λR

1→λR

 

 

 

 

 

 

 

1R

 

 

 

1→λR q1

R

q2

L

q5

1L

λ→1

 

λ→L

 

 

1→λL

 

 

q λ→0

q4

→λL

 

q3

 

 

 

 

 

 

 

 

 

 

 

1→λL

 

 

Рис. 6.14

 

 

 

Определение. Пусть y = f(x1 , x2 ,…, xn ) и y = g(x1 , x2 ,…, xn ) –

функции, а Р(x1 , x2 ,…, xn ) – предикат, заданные на N. Функция

f(x1 , x2 ,…, xn ), если Р(x1 , x2 ,…, xn ) истинно,

h(x1 , x2 ,…, xn ) =

g(x1 , x2 ,…, xn ), если Р(x1 , x2 ,…, xn ) ложно,

называется ветвлением функций y = f(x1 , x2 ,…, xn ) и y = g(x1 , x2 ,…, xn ) по предикату Р(x1 , x2 ,…, xn ).

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

209