Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дискретка / Книги / Галиев Ш.И. Математическая логика и теория алгоритмов (2002).pdf
Скачиваний:
2274
Добавлен:
25.02.2016
Размер:
7.49 Mб
Скачать

210

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

(1)Графовая структура ламбда-исчисления позволяет выявить редексы для параллельной обработки.

(2)Нет необходимости в централизованном управлении операциями редукции, которые нужно делать для процедурных языков.

(3)Связь между редексами можно выполнить полностью унифицировано.

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

Ты значишь то, что ты на самом деле. Надень парик с мильонами кудрей, Стань на ходули, но в душе своей

Ты будешь все таким, каков ты в самом деле. (Мефистофель).

И. В. Гете (Фауст) Самое непостижимое в этом мире то, что он постижим.

А. Эйнштейн

§18. Основные результаты

1.Из теорем 6.5, 6.6, следствий из них, а также теорем 6.11 и 6.12 следует, что класс частично рекурсивных функций совпадает с классом функций частично вычислимых по Маркову и классом частично вычислимых по Тьюрингу функций. Более общее: с помощью детальных рассмотрений показано, что формализации, предложенные Тьюрингом, Марковым (нормальные алгоритмы), а также Клини (частично рекурсивные функции) и другими, эквивалентны, т.е. в каждом случае получается один и тот же класс функций.

Всюду определенные функции, попадающие в этот класс, являются общерекурсивными функциями. Частичные функции этого класса совпадают

склассом частично рекурсивных функций. Согласно основной гипотезе теории алгоритмов (принцип нормализации) любой алгоритм вполне эквивалентен нормальному алгоритму. Тогда совокупность частично рекурсивных функций совпадает с совокупностью частичных функций, вычислимых посредством алгоритма.

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

211

3. Доказательство указанных выше результатов обладает следующей общей структурой. В каждом случае тот факт, что один формализованный класс функций содержится в другом, доказывается путем предъявления и обоснования однообразной процедуры, согласно которой для любого набора инструкций J одной формализации указывается набор инструкции J’ другой формализации, приводящей к той же самой функции. Эта единообразная процедура оказывается в каждом случае алгоритмической (в неформальном смысле этого слова).

Если действовать не будешь Ни к чему ума палата.

Ш. Руставели (Витязь в тигровой шкуре)

§19. Вопросы и темы для самопроверки

1.Интуитивное понятие алгоритма, его свойства

2.Алфавит, слова, алгоритм в алфавите. Вполне эквивалентные в данном алфавите алгоритмы.

3.Нормальный алгоритм (алгоритм А.А.Маркова), задание, примеры.

4.Функции вычислимые и частично вычислимые по Маркову.

5.Замыкание, распространение нормального алгоритма.

6.Операции над нормальными алгоритмами: композиция, соединение, разветвление, повторение.

7.Машина Тьюринга, общее описание.

8.Задание машины Тьюринга, примеры.

9.Алгоритм Тьюринга. Вычислимость по Тьюрингу.

10.Связь между алгоритмами Тьюринга и нормальными алгоритмами.

11.Основная гипотеза теории алгоритмов (принцип нормализации или тезис Черча). Доказуема ли эта гипотеза?

12.Проблема алгоритмической неразрешимости.

13.Знаете ли вы алгоритмически разрешимые массовые проблемы?

14.Примеры алгоритмически неразрешимых массовых проблем.

15.Сведения любого преобразования слов в алфавите к вычислению значений целочисленных функций.

16.Примитивно рекурсивные и общерекурсивные функции.

17.Примитивно рекурсивность некоторых функций. Вычисление значений примитивно рекурсивных функций.

18.Частично рекурсивные функции, их связь с вычислимостью по Маркову и Тьюрингу.

19.Какие вы знаете вычислительные модели?

20.Ламбда исчисление. Синтаксис ламбда-исчисления.

21.β-преобразования в ламбда-исчислении.

212

§ 20. Упражнения

Нормальные алгоритмы (алгоритм А. А. Маркова)

1. Применим ли нормальный алгоритм

11 1

В= 1 → •1Λ 1

кслову: а) Р=111; б) Р= ; в) Р=11 ; г) Р= 1 1. Если «да», то указать результат применения.

2.Применим ли нормальный алгоритм

В = 1 →•11Λ Λ

к слову: а) Р=11111; б) Р= 111 1; в) Р= ; г) Р=1 1 1. Если «да», то указать результат применения.

3. Пусть Р=bаbbbс слово в алфавите А={а,b,с}. нормальный алгоритм В задан схемой

 

 

В ={аbа.

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

4.

Пусть задан алфавит А={b,с} и нормальный алгоритм в алфавите А:

b Λ

Применим ли алгоритм В к любому слову в алфавите А? Если он

В =

 

c Λ

 

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

 

 

b → •Λ

5.

 

 

Пусть А={а,b,с} и В = а → •Λ Как действует данный алгоритм?

 

 

 

 

 

с с

Применим ли данный алгоритм к любому слову в алфавите А?

6.Построить нормальный алгоритм, стирающий последнюю букву каждого непустого слова Р в алфавите А. Является ли построенный алгоритм алгоритмом в алфавите А или над алфавитом А?

7.Пусть А – русский алфавит. Построить нормальный алгоритм над алфавитом А, который преобразует слово «муха» в слово «слон», а любое другое слово в алфавите А в пустое слово. При этом, если слово «муха» входит в некоторое слово Q, например Q=черемуха, то слово Q алгоритм должен переработать в пустое слово.

8.Пусть А – русский алфавит. Построить нормальный алгоритм над алфавитом А, который преобразует слово «слон» в слово «муха», а любое другое слово в алфавите А в пустое слово. При этом, если слово «слон» входит в некоторое слово Q, например Q=заслон, то слово Q алгоритм должен переработать в пустое слово.

 

 

 

213

следующими схемами:

 

е) {Λ →•Q

а) {Λ →•Λ

 

 

 

 

αx xα

б) {Λ →•α

 

ж)

α →•Q(α A,x A)

 

 

 

 

 

 

 

 

 

 

 

Λ α

α →•β

 

 

 

 

 

з) {x →•Λ(x A)

в)

 

Λ α

 

 

 

α α

 

 

 

 

 

и) {x α(x A,α A)

г)

 

Λ α

 

 

 

д) {Λ α

 

 

 

10. Показать, что алгоритм, заданный схемой:

αα

β

 

 

 

 

 

βx xβ

 

 

 

β (α,β

A,x, y A)

βα

9. Пусть заданы алфавит А и некоторое непустое слово Q в этом

алфавите. Описать

действие нормальных алгоритмов, задаваемых

 

 

 

 

β →•Λ

 

αxy

yαx

 

 

 

 

 

Λ α

 

 

преобразует любое слово в алфавите А в слово, образованное из тех же букв, но в обратном порядке.

11. Пусть А – некоторый алфавит, α А; В,С,D, - заданные слова в алфавите А. Рассмотреть нормальный алгоритм над алфавитом А

xα αx

αx αα → •D

F = Bx α(α A,x A).

xB αB → •CΛ α

Показать, что этот алгоритм F применим к любому слову в алфавите А,

причем F(Р)=D, F(В)=С.

12.Пусть А={а,b,с}. Построить нормальный алгоритм, который к любому слову в алфавите А будет приписывать справа слово аbb.

13.Пусть А={1} и В={1, }. Для всякого натурального числа п

определим по индукции 0 = 1 и n +1 = n1 . Таким образом, 1 = 11, 2 = 111 и

т.д. Слова n называются цифрами. Поставим теперь в соответствие всякому вектору (n1,…,nk), где n1,…,nk – натуральные числа, слово n1 ... nk которое

214

обозначим через (n1 ,...,nk ). Так, например, (3,1,2) обозначает слово

111 11 111:

а). Показать, что схема

F = α11 α1

α1 →•1Λ α

определяет нормальный алгоритм F над алфавитом В, применимый только к тем словам в алфавите В, которые являются цифрами, и такой, что F (n)=0 для любого п.

б) Показать, что нормальный алгоритм G над алфавитом В, определяемый схемой

G= α1 → •11,Λ α

применим только к тем словам в алфавите В, которые суть цифры, причем G(n)= n +1 для любого п.

в). Построить схему нормального алгоритма в алфавите В, перерабатывающего (n1 ,n2 )в (n1 n2 ).

г). Построить нормальный алгоритм умножения на 2.

14.Построить нормальный алгоритм над алфавитом В={1, } для арифметических операций сложения и вычитания.

15.Построить нормальный алгоритм для умножения на фиксированное

число п.

16.Пусть А={1, ,а,b}. Показать, что следующий нормальный алгоритм

b11b

1

а11bа

→Λ

а→Λ

b1

1 а

 

производит умножение двух чисел, n и m, записанных в алфавите В={l, } в

виде одного слова 111...1 111...1.

123 123

nm

17.Построить нормальный алгоритм F над алфавитом А такой, что для

любого слова Р в А было F(Р)=РР.

18.Построить нормальный алгоритм для получения целой части при делении а) на 3; б) на п.

19.Построить схему нормального алгоритма, равного композиции

нормальных алгоритмов F и G в алфавите А={1, }:

215

1 1 F ={111 Λ, G = →•1

Λ

Затем применить полученный алгоритм к слову: а) Р=1111111; б) Р= 1111; в) Р=1 111; г) Р= . Результат проверить, последовательно применяя к заданному слову алгоритм F, затем G.

20. Пусть имеем нормальный алгоритм F над алфавитом А, схема которого записана с использованием букв из А и произвольного конечного числа букв, не принадлежащих А. Обозначим эти буквы, не принадлежащие А, через S1,S2,…,Sn, т.е. В=А { S1,S2,…,Sn}. Тогда алгоритм F над алфавитом А можно считать заданным в алфавите В. Показать, что для рассматриваемого алгоритма F существует вполне эквивалентный ему в алфавите А нормальный алгоритм, схема которого построена только с использованием букв алфавита С=А ,β} (α,β В). Можно ли исключить одну из букв α или β, если п>1?

21. Для каждого из приведенных ниже алгоритмов над алфавитом А={а,b} найти вполне эквивалентный ему нормальный алгоритм, схема которого, записана только с использованием букв а, b, α, β:

 

αa aε

 

 

 

 

 

 

a α

 

 

 

 

αa β

 

 

 

 

αb bα

 

 

 

 

 

 

 

α βγ

 

 

 

 

 

 

αb β

 

 

 

βb bγ

 

 

 

αβ γ .

F =

xβ βx(x A);

F

=

γb b

;

F

=

1

 

2

 

 

 

3

 

 

 

β aa

 

 

γ a

 

 

 

γγ δ

 

 

 

 

 

 

 

 

δ → •b

 

γ bb

 

 

 

 

 

 

 

 

 

 

Λ α

 

 

 

 

 

 

 

 

 

 

 

γ a

 

Λ α

 

 

 

 

 

 

 

22. Пусть А – некоторый алфавит. Составьте нормальный алгоритм над А, позволяющий для произвольных слов P и Q в алфавите А выяснять, одинаковы эти слова или нет. (Указание: Рассмотрите слово P Q(где А) и постройте алгоритм, сравнивающий в словах P и Q буквы, стоящие первыми слева и справа от , затем вторыми от и т.д.)

23.Пусть А={0,1,2,…,9}. Составьте нормальный алгоритм над А, который любое число п, записанное в десятичной системе счисления, преобразует в п+1.

24.Будем рассматривать нормальные алгоритмы в алфавите А. До сих пор мы применяли для их задания «схемы» - столбцы формул подстановок. Однако можно задавать каждый нормальный алгоритм в виде одного слова,

которое получается следующим образом. Пусть α,β,γ А. Выпишем друг за другом в порядке очередности формулы подстановок алгоритма F заменой стрелки знаком α, точки – знаком β и присоединением после каждой подстановки знака γ. Получаемое так слово будем называть изображение алгоритма F и обозначать символом F . Алгоритм F называется

216

самоприменимым, если он применим к своей собственной записи, т.е. к слову F , и несамоприменимым в обратном случае.

Являются ли самоприменимыми следующие алгоритмы:

а) F =

a b

(a,b A)

г) F

=

ab → •Λ(a,b A)

1

 

 

 

4

 

 

 

b →•b

 

 

 

 

Λ ab

 

 

 

 

 

 

11 1

б) F ={Λ Λ

 

 

д) F =

1 →•1( ,1 A)

2

 

 

 

5

 

 

 

 

 

 

 

 

Λ 1

 

 

 

 

 

 

 

a a

 

 

 

 

 

в) F =

 

(a,b A)

е) F =

1 →•11( ,1 A)

3

 

 

 

6

 

 

 

b →•Λ

 

 

 

Λ

 

 

 

 

 

 

Машины (алгоритмы) Тьюринга

25. Дана машина Тьюринга

q01Lq1 q1S01q0.

На ленте записано слово Р=1 и читающая головка находится над этим словом, а машина находится во внутреннем состоянии q0, иначе – задана начальная конфигурация q01. Описать работу машины Тьюринга.

26. Задана машина Тьюринга

q0aS0q0 q0S0Rq0 q0bS0q1

и начальная конфигурация q0P. Применима ли данная машина к этой конфигурации, если

1)

P=aabbba;

3) P=acb;

2)

P=cbb;

4) P=bac.

Если машина применима к слову Р, то чему равняется результат?

27.Пусть А={1,2,3,…,9,0}. Построить машину Тьюринга Т0, которая любое число п (в десятичной записи) перерабатывала бы в нуль, т.е. Т0(п)=0.

28.Пусть А={1,2,3,…,9,0}. Построить машину Тьюринга Т1, которая любое число п (в десятичной записи) перерабатывала бы в число п+1, т.е.

Т1(п)=п+1.

29. Построить машины Тьюринга Т1 и Т0, перерабатывающие любые числа п в 0 и п+1 соответственно, при условии, что числа записаны только с

использованием алфавита А={1}, т.е. п обозначено словом n =111...1.

123

n +1

30. Составить команды машины Тьюринга, которая будет считать записанные подряд (без пропусков) палочки и запишет их число:

1)в двоичной системе счисления;

2)в троичной системе счисления;

217

3) в системе счисления с основанием п.

31.На ленте записано число в системе счисления с основанием п. Составить команды машины Тьюринга, которая запишет число

1)непосредственно следующее за данным;

2)непосредственно предшествующее денному.

32.На ленте записано некоторое число слов Р12,…,Рk в алфавите А,

разделенных звездочками ( , А). Составить команды машины Тьюринга, которая считала бы количество слов и записывала бы их число:

1)в алфавите {1};

2)в двоичной системе счисления;

3)в троичной системе счисления;

4)в системе счисления с основанием п.

33.Построить машину Тьюринга, которая приписывала бы справа от

любого слова Р в алфавите А слово aab(a,b A).

34. Выяснить в какое слово перерабатывается слово m r машиной Тьюринга:

q01S0q0

q1 Rq1

q2 Lq2

q0S0Rq1

q1S01q2

q2S0Rq0

q11Rq1

q21Lq2.

 

(начальной конфигурацией является конфигурация q0 m n ).

35.Построить машину Тьюринга для умножения на 2.

36.Построить машину Тьюринга для вычисления целой части частного при делении на 3.

37.Построить машину Тьюринга для вычисления x-y .

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

39.Машины Тьюринга заданные с помощью команд вида

qiSjSkqr qiSjR qr qiSjL qr

можно задать с помощью пяти-символьных команд вида

qiSjqrSkQ,

объединяющей две команды qiSjSkqr и qiSjQ qr, где Q=R, Q=L или Q=S; при Q=S читающая головка не передвигается ни влево и ни вправо.

Выяснить, применимы ли следующие машины Тьюринга к заданным словам.

1)q00q20R q01q01R q20q30R q21q21L q30q*0S

218

q31q21R, P1=1110111=13013, P2=10[01]21;

2)q00q21R q01q30R q20q31L

q21q21S

q31q01S, P1=13012, P2=16;

3)q00q01R q01q20R q20q01R

q21q31L

q30q01L, P1=1012, P2=12021.

40.Построить в алфавите {0,1} машину Тьюринга с пятисимвольными командами, обладающую следующим свойством:

1)машина применима к любому непустому слову в алфавите {0,1};

2)машина не применима ни к какому непустому слову в алфавите {0,1} и зона работы на каждом слове - бесконечная;

3)машина не применима ни к какому непустому слову в алфавите {0,1} и зона работы на каждом слове ограничена одним и тем же числом ячеек, не зависящим от выбранного слова;

4)машина применима к словам вида 13n, n1, и не применима словам вида 13n+a, n1, а=1,2.

41.Построить в алфавите {0,1} машину Тьюринга с пятисимвольными командами, переводящую конфигурацию К0 в К*.

1)

К0

= q01n

К*= q*1n01n

(n1);

2)

К0

= q0 0n1n

К*= q*[01]

(n1);

3)

К0

= 1nq00

К*= q*12n

 

(n1).

42. Машину Тьюринга можно задать с помощью следующей таблицы:

 

q0

q1

 

qi

 

qn

S0

 

 

 

 

 

 

S1

 

 

 

 

 

 

 

 

 

 

 

 

 

Sj

 

 

 

qrSkQ

 

 

 

 

 

 

 

 

 

Sm

 

 

 

 

 

 

На пересечении i-го столбца и j –ой строки (i0, j0) записывается выражение qrSkQ являющееся частью команды

qiSjqrSkQ

если такая команда есть. Если команды начинающейся с qiSj нет, то на пересечении i-го столбца и j –ой строки ставится прочерк.

219

По заданной машине Тьюринга и начальной конфигурации К0 найти заключительную конфигурацию для следующих вариантов.

1)

 

 

 

q0

 

 

 

q1

 

 

 

 

 

0

 

q*1S

 

q00R

 

 

 

 

 

1

 

q10R

 

q11L

 

 

 

 

a) К0=12q01301,

 

б) К0=1q014;

 

 

 

2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

q0

 

 

 

q1

 

q2

 

 

 

0

 

q*0S

 

q*1L

 

q01L

 

 

 

1

 

q11R

 

q20R

 

q00R

 

 

a) К0=1q015,

 

 

 

б) К0=q013;01,

в) К0=10q014.

43. Доказать, что следующие функции примитивно-рекурсивны:

а) f(x)=x+n;

 

 

 

б) f(x,y)=x+y;

 

 

 

в) f(x,y)=xy;

 

 

 

 

г) f(x,y)=x×y;

 

 

 

0

если х =

0,

;

 

0

если х >0,

.

д) sg(x)=

если х >

0

е) sg(x) =

если х =

0

 

1

 

 

1