Нормальные алгорифмы Маркова

advertisement
Нормальные алгорифмы Маркова
Нормальные алгорифмы Маркова ...............................................................................................1
Определение ...............................................................................................................................1
Эквивалентность алгорифмов ..................................................................................................8
Теорема о переводе ...................................................................................................................9
Теоремы сочетания ..................................................................................................................11
Объединение ........................................................................................................................15
Разветвление ........................................................................................................................16
Повторение ...........................................................................................................................17
Определение
Подобно понятию машины Тьюринга понятие нормального алгорифма
Маркова (называемого далее нормальным алгорифмом или даже просто
алгорифмом) есть одно из математических уточнений интуитивного
представления об алгоритме.
Нормальный алгорифм в алфавите V задается как упорядоченная
тройка
A  (V , P, PT ) ,
где V - конечный алфавит, P - упорядоченный набор
вывода (формул подстановок), PT - выделенные
(кортеж) правил
в
наборе
P
заключительные правила вывода (формулы подстановки).
Правило вывода, не являющееся заключительным (и называемое
простым), задается как слово в алфавите V  {}, где символ 
(«стрелка») не есть символ алфавита
V , вида u  v , в котором u, v
-
слова в алфавите V . Заключительное правило вывода задается как слово в
алфавите V  {,}, где символы  («стрелка») и · («точка») не
V , вида u  v , в котором u, v - слова в
алфавите V . В правиле вывода u  v , где  есть либо пустое слово,
либо «точка», слово u называется левой частью, а слово v - правой
являются символами алфавита
частью правила вывода. Термин «правило вывода» часто заменяется его
синонимом – термином «формула подстановки», иногда даже просто
термином «подстановка» или «формула».
Пара S  ( P, PT ) называется схемой нормального алгорифма A .
Таким образом, схема нормального алгорифма есть кортеж формул
подстановки, в котором выделены заключительные формулы. Заметим, что в
схеме заключительных формул может и не быть.
Как и машина Тьюринга, нормальный алгорифм определяет некоторый
процесс преобразования заданного слова в алфавите V . Но если в теории
2
машин Тьюринга этот процесс определялся в терминах конфигураций
машины и отношения выводимости на множестве конфигураций, то в теории
нормальных алгорифмов отношение выводимости задается на самом
множестве слов в рассматриваемом алфавите.
Определим отношение непосредственной выводимости по схеме
алгорифма A на множестве слов в алфавите V .
Говорят, что слово y непосредственно выводится из слова x по
схеме S алгорифма A и записывают это как A : x ├ y (или x ├A y ), если
слово y может быть получено из слова x в результате выполнения
следующих действий:
1) в схеме S отыскивают первую в упорядоченном наборе P формулу
подстановки, левая часть которой входит в слово x (такую формулу
называют подходящей для слова x );
2) первое вхождение левой части этой формулы заменяют ее правой
частью.
Если при этом указанная формула является заключительной, то будем
писать A : x ├  y (или x ├ A y ) .
Таким образом, в силу определения отношения ├ и ├  функциональны
по второй компоненте (т.е. для каждого x существует не более одного слова
y , для которого x ├A y или x ├ A y ) и его область определения есть
множество всех таких слов в алфавите V , в которые входит левая часть хотя
бы одной формулы подстановки заданной схемы. В таком случае говорят,
что слово поддается схеме нормального алгорифма A .
Итак, имеет место x ├A y тогда и только тогда, когда слово y есть
результат замены первого вхождения левой части первой подходящей для
слова x формулы в схеме алгорифма A ее правой частью, причем эта
формула не является заключительной. Отношение же x ├ A y выполняется
при тех же условиях, но для заключительной формулы. При этом, если  указанная формула, то говорят, что слово y получено из слова x
применением формулы  .
Дадим теперь определение процесса работы нормального алгорифма
A с заданным словом x0 в алфавите V .
Так называют последовательность (конечную или бесконечную) слов в
алфавите V
x0 , x1 ,..., xn ,...
такую, что для каждого
i0
имеет место
xi ├A xi 1,
если слово
определено, причем последовательность является конечной, и слово
xi 1
xn
ее
3
последнее слово тогда и только тогда (по определению), когда
из
xn 1
применением
некоторой
заключительной
xn
получено
формулы
схемы
A , или слово x n не поддается схеме алгорифма.
Если процесс работы алгорифма A со словом x0 конечен и имеет вид
x0 , x1 ,..., xn , то слово xn называется результатом работы алгорифма
A со словом x0 и обозначается A( x0 ) . Говорят также, что алгорифм A
перерабатывает слово x0 в слово x n , используя при этом запись
A : x0 ╞ xn (или x0 ╞A xn ). В частности, если слово xn получено
применением некоторой заключительной формулы схемы алгорифма A к
предыдущему слову, то говорят, что алгорифм A заключительно
перерабатывает слово x0 в слово x n , записывая A : x0 ╞ · x n (или
x0 ╞A · xn ).
Мы будем писать A : x0 ╞ x n и в том случае, когда существует
последовательность слов x0 , x1 ,..., xn такая, что для каждого i  1, n  1
xi ├A xi 1. В этом случае слово xn не будет вообще говоря результатом
работы A с x0 .
Таким образом, каждый алгорифм A в алфавите V определяет
частичную словарную функцию f A в алфавите V . Областью определения
этой функции является множество всех таких слов x в алфавите V , что
определено слово A(x ) . В этом случае говорят, что алгорифм A применим
к слову x и пишут ! A( x) , а множество всех таких слов x , что имеет место
! A( x) , называют областью применимости алгорифма A .
Алгорифм A , который каждое слово x из множества M  V *
такое, что ! A( x) , перерабатывает в слово из множества N  V *,

N ; если (x  M )(! A( x)) , то
называют алгорифмом типа M 

алгорифм A называют алгорифмом типа M  N .

N)
Таким образом, алгорифм типа M  N (типа M 

определяет функцию (частичную функцию) из M в N .
Если M  N  V *, то говорят об алгорифме типа V  V (или
V

V ).

алгорифма
4
Алгорифм называют алгорифмом над алфавитом
является алгорифмом в некотором расширении V1
V
f
f
в алфавите
V.
называют вычислимой по Маркову (или нормально
вычислимой), если существует такой нормальный алгорифм
V

V

если он
алфавита V .
Пусть теперь задана частичная словарная функция
Функцию
V,
Af
типа
над алфавитом V , что ! A f
( x) тогда и только тогда, когда x
принадлежит области определения функции f , и для каждого такого слова
x имеет место равенство A f ( x)  f ( x) . Про алгорифм A f говорят
тогда, что он вычисляет функцию f .
Замечание. Мы используем термин «существует» для обозначения
классического квантора существования. В противоположность этому термин
«можно построить» (или «осуществим») мы применяем в определении или
формулировки теоремы в том случае, когда это определение или
доказательство теоремы дает метод построения объекта, существование
которого утверждается.
Заметим, что согласно данному определению алгорифм
алгорифм типа
V

V,

Af
есть
в схеме которого вообще говоря могут быть
буквы из алфавита, более широкого, чем. Кроме того, для алгорифма типа
V

V над алфавитом V , каковым и является алгорифм A f вводится

понятие области применимости относительно алфавита V : множества
всех таких слов в этом алфавите, к которым применим данный алгорифм.
A f , вычисляющего функцию f ,
алфавита V совпадает с областью
Тогда можно сказать, что для алгорифма
область применимости относительно
определения функции f .
Примеры. 1) Тождественный алгорифм. Алгорифм
схемой
Id , задаваемый
 
любое слово в заданном алфавите V перерабатывает в это же слово за один
шаг, т.е.
(x  V * )( Id : x ├· x ) .
2) Алгорифм левого присоединения фиксированного слова.
5
Алгорифм
Lc , заданный схемой
 u ,
где u - фиксированное слово в алфавите V , вычисляет функцию левого
присоединения к любому слову в алфавите V данного слова u , т.е.
(x  V * )( Lc : x ├· ux) .
3) Алгорифм правого присоединения фиксированного слова.
Алгорифм Rc , заданный схемой
в
 #    # ,  V

#  u


#

алфавите V1  V  {# } , где # V ,
вычисляет функцию правого
присоединения данного фиксированного слова
слову в алфавите V , т.е.
u
в алфавите
Vк
любому
(x  V * )( Rc : x ╞· xu) .
Действительно, к произвольному слову x  V применима только
самая нижняя формула в схеме алгорифма Rc . После ее применения
оказывается применимой одна из формул верхней строки, если слово x не
пусто. Эти формулы применяются до тех пор, пока «решетка» (#) не
окажется последней буквой очередного слова, выводимого из исходного
слова x . Тогда она посредством применения средней формулы схемы
заключительно заменяется на слово u . Для пустого входного слова имеем:
Rc :  ├ #├ · u .
Для непустого слова x  x(1) x(2)...x(m), m  0, получим:
Rc : x(1) x(2)...x(m) ├ #x(1)x(2)…x(m) ├ x(1)#x(2)…x(m)├…├x#├·xu .
*
4) Алгорифм удвоения
Рассмотрим алгорифм Double, задаваемый схемой в алфавите V1 =
V{, }, причем ,   V:
6
    ,   V
   , ,   V




 



Можно показать, что (x  V )( Double :
алгорифм удваивает любое входное слово в алфавите V.
Например, пусть x = abca. Тогда
*
x ╞· xx) ,
т.е. этот
Double: abca ├ abca ├ aabca ├ aabbca ├ aabbcca├
aabbccaa
├
ababccaa├
abacbcaa├
abacbaca├
abcabaca ├ abcaabca├
abcaabca ├4 abcaabca ├ · abcaabca = xx .
Можно заметить следующее: ко входному слову применима только
формула нижней строки рассматриваемой схемы. После ее применения
посредством применения формул верхней строки каждая буква входного
слова копируется и «копия» слева отмечается буквой  (буква  играет роль
указателя и продолжает «бежать» вправо). После того, как указатель 
пробежит все слово, начинают работать формулы второй строки, в результате
применения которых каждая «копия» «добегает» до конца исходного слова
(т.е. так, чтобы после нее не было «оригинальных» букв). Затем все буквы 
и указатель  стираются.
Можно заметить также, что если вместо формулы   поставить
формулу    , то копия будет инвертирована, т.е. получится слово
xx R .
5) Инвертирующий алгорифм
Зададим алгорифм Rv над алфавитом V такой схемой:
7
   ,  ,  V
    ,   V


  

  

 




В этой схеме буквы  и  не принадлежат алфавиту V.
Пусть x=x(1)x(2)…x(m), m > 0, есть непустое слово в алфавите V.
В схеме алгорифма Rv к слову x применима только самая нижняя формула.
После ее применения, при условии, что m > 1, будет применима одна из
формул верхней строки. Эти формулы применяются до тех пор, пока слово
 не окажется в конце слова:
x(1)x(2)…x(m) ├  x(1)x(2)…x(m) ├ x(2)x(1) …x(m) ├ …
├x(2) x(3) …x(m)x(1) .
Затем буква  «превратится» в букву  (вторая сверху строка схемы) и
получится слово x(2) x(3) …x(m)x(1) . К нему опять-таки применима только
самая нижняя формула; после ее применения будем иметь:
x(2) x(3) …x(m)x(1) ├ x(2) x(3) …x(m)x(1) ├
├ x(3) x(2) …x(m)x(1) ├ … ├ x(3)… x(m) x(2) x(1) ├
├ x(3)… x(m) x(2) x(1) ├ x(3)… x(m) x(2)x(1).
Потом буква x(3) (если она есть) будет точно так же перенесена в конец слова
и т. д. до тех пор, пока не получится слово x(m)  x(m-1)…x(2)x(1).
Далее:
x(m)  x(m-1)…x(2)x(1) ├ x(m)  x(m-1)…x(2)x(1) ├
├ x(m)  x(m-1)…x(2)x(1) ├ x(m) x(m-1)…x(2)x(1)
├ x(m) x(m-1)…x(2)x(1) ├ · x(m) x(m-1)…x(2)x(1).
Итак, алгорифм Rv перерабатывает слово x, длина которого больше 1,
в его инверсию xR.
Для пустого и однобуквенного слова соответственно имеем:
 ├ ├  
и
8
a ├ a ├ a ├ a ├  a .
Итак, мы можем утверждать, что
(x  V * )( Rv ( x)  x R ) .
Эквивалентность алгорифмов
Алгорифмы A и B над алфавитом V называют эквивалентными
относительно алфавита V , если для всяких слов x, y  V * таких, что
A( x)  y
выполняется
B( x)  y
и наоборот (с переменой ролей
алгорифмов A и B ).
Алгорифмы A и B над алфавитом V называют вполне
эквивалентными относительно алфавита V , если для всякого слова
x V * имеет место ! A( x) ! B( x) и если выполняется ! A( x) , то
A( x)  B( x) .
Требование полной эквивалентности алгорифмов является более
сильным, чем требование простой эквивалентности. В последнем случае из
неприменимости одного из алгорифмов с исходному слову в алфавите V
вообще говоря не следует неприменимость к нему другого алгорифма. Но
тогда, если, скажем, ! A( x) , но ! B( x) , слово B (x ) не есть слово в
алфавите V , так как иначе согласно определению оно оказалось бы равно
слову A(x ) , которое не определено. Если алгорифмы A и B оба суть
алгорифмы типа
V

V,

то эквивалентность их относительно
алфавита V влечет их полную эквивалентность относительно этого
алфавита.
В теории нормальных алгорифмов используется выражение
A( x)  B( x) ,
называемое условным равенством, смысл которого состоит в том, что левая
часть его определена тогда и только тогда, когда определена правая, и в этом
случае они обозначают одно и то же слово. Это не что иное, как записанное
для слова x требование полной эквивалентности алгорифмов A и B , т.е.
алгорифмы A и B вполне эквивалентны относительно алфавита V тогда и
только тогда, когда (x  V *)( A( x)  B( x)) .
Как уже упоминалось, останов нормального алгорифма при работе его
с исходным словом, т.е. существование результата работы алгорифма с этим
словом, возможен в двух случаях: либо на некотором шаге произойдет
применение к очередному слову процесса работы заключительной формулы,
либо будет получено слово, не поддающееся схеме алгорифма, произойдет,
как говорят в таких случаях, естественный обрыв процесса работы. Можно
9
показать, что для любого алгорифма типа V


V может быть построен

V алгорифм, останов которого
вполне эквивалентный ему относительно
происходит только в силу первой причины.
Действительно, добавим к схеме исходного алгорифма, в конец ее,
формулу   . Полученной таким образом схеме поддается любое слово в
алфавите V , а новый алгорифм будет вполне эквивалентен исходному
относительно V . Этот алгорифм называют замыканием исходного
алгорифма. Замыкание алгорифма
A обозначают через A .
Теорема о переводе
Можно доказать, что существует словарная функция в алфавите V ,
вычислимая по Маркову, но такая, что для нее невозможен вычисляющий ее
нормальный алгорифм в алфавите V , а требуется алгорифм над алфавитом
т.е. алгорифм в некотором расширении V1 алфавита V . В качестве
такой функции можно взять функцию обращения слов, т.е. такую функцию
V,
Rv : V *  V *, что для каждого x  V выполняется Rv ( x)  x R .
В этой связи возникает вопрос, сколь много в общем случае может
потребоваться «дополнительных букв» для получения вычисляющего
данную функцию в алфавите V нормального алгорифма над этим
алфавитом?
Ответ на этот вопрос дает так называемая теорема о переводе,
принадлежащая А.А. Маркову: оказывается, что всегда можно обойтись
всего лишь двумя дополнительными буквами.
Пусть
V-
некоторый
Рассмотрим алфавиты
Буквы
и 
алфавит,
V1  V  { ,  }
 ,  ,  1 ,..., n V .
V2  V  { 1 ,..., n }.
буквы  1 ,..., n попарно
буквы
и
отличны друг от друга, а все
 и  могут совпадать с некоторыми из букв
 1 ,..., n ). Каждой букве  i , i  1, n , сопоставим слово вида  i ,
которое назовем переводом буквы  i . Перевод любой буквы алфавита
различны (хотя буквы
V совпадает, по определению, с ней самой. Перевод непустого слова
x  x(1)...x(m)  V2 * есть по определению слово, обозначаемое [ x и



равное [ x (1) ...[ x ( m) , где [ обозначает перевод буквы   V ;
переводом пустого слова считается пустое слово.
10
Таким образом, с точки зрения теории формальных языков, перевод
V2 *
есть морфизм из
подстановок:
в
V1 * ,
задаваемый такой системой конечных
 1  
...............
 n   
   , V
n
.
Пусть теперь дан нормальный алгорифм A в алфавите V 2 . Если в его
схеме левую и правую части каждой формулы заменить ее переводом,
получится схема нормального алгорифма в алфавите V1 , который называется
переводом алгорифма A .
Имеет место такая теорема:
Теорема (о переводе, А.А. Марков). Если
V2 , а A
- его перевод, то для любого слова


A - алгорифм в алфавите
*
x  V2 имеет место условное
равенство A([ x )  [ A( x ) .
Доказательство этой теоремы мы не приводим.
Содержательный смысл сформулированного результата состоит в том,
что перевод алгорифма работает с переводами слов «точно так же», как сам
алгорифм со своими исходными словами.
A - алгорифм в алфавите V 2
*
то (x  V )( A( x )  A( x )).
Следствие. Если
типа
*
,
V* 

V

Это как раз и означает, что всякий алгорифм над алфавитом V ,
который перерабатывает слово в алфавите V в слово в том же алфавите (при
*
V* 

V
может быть

заменен вполне эквивалентным ему относительно алфавита V алгорифмом в
некотором двухбуквенном расширении алфавита V .
условии останова), т.е. всякий алгорифм типа
С переходом к более широкому алфавиту для алгорифмов в заданном
V связаны понятия естественного и формального
алфавите
распространения алгорифма на более широкий алфавит.
Для алгорифма A в алфавите V можно той же самой схемой задать
алгорифм A' в более широком алфавите (т.е. подавать на его вход слова в
некотором расширении алфавита V ). Тогда очевидно, что для любого слова
11
x в алфавите V имеет место A( x)  A' ( x). Таким образом, алгорифмы
A и A' вполне эквивалентны относительно алфавита V . Алгорифм A'
называют при этом естественным
алгорифма на более широкий алфавит.
распространением
исходного
f
Формальное распространение A алгорифма A на более широкий
алфавит V '  V определяется тем, что к схеме алгорифма A , в начале ее
(«сверху»), приписываются формулы    для всех букв  из V '\V .
Тогда, как нетрудно видеть,
от
естественного
(x  V * )( A f ( x)  A( x)) , но, в отличие
распространения,
имеет
место
(y  V '\V )(! A f ( x)) , т.е алгорифм A f не применим ни к одному из
слов, не являющимся словом в алфавите V .
Теоремы сочетания
Алгоритм (в интуитивном смысле) может быть «запрограммирован» не
только в виде нормального алгорифма – выписыванием его схемы, но через
определенные правила комбинации (сочетания) уже построенных
нормальных алгорифмов.
Например, следующее предписание определяет точный алгоритм
переработки слов в заданном алфавите:
1) применить к исходному слову x нормальный алгорифм A ;
2) если слово A(x ) определено, то к нему применить нормальный
алгорифм B ;
3) результатом считать слово
B( A( x)) , если оно определено.
Это предписание не является априори нормальным алгорифмом,
поскольку оно не задано единой схемой такого алгорифма, а оперирует
нормальными алгорифмами, словно некоторыми «блоками». Оно определяет
один из способов сочетания нормальных алгорифмов, называемый
композицией (иногда последовательной композицией).
Оказывается, что и композицию и другие сочетания нормальных
алгорифмов, которые будут рассмотрены ниже, можно «запрограммировать»
в виде схем нормальных алгорифмов. Теоремы о возможности построения
таких схем называются теоремами сочетания.
Рассмотрим более подробно теорему композиции:
Теорема (о композиции нормальных алгорифмов). Каковы бы ни были
нормальные алгорифмы
A
в алфавите
V1 и B
в алфавите
V 2 , может быть
12
построен такой нормальный алгорифм
C
над алфавитом V
 V1  V2 , что
x  V * имеет место условное равенство
C ( x)  B( A( x))
(при этом предполагается, что если слово x не есть слово в алфавите V1 , то
выражение A(x ) не определено).
для любого слова
Доказательство. Вполне строгое доказательство теоремы композиции
мы не приводим (техника строгих доказательств в теории нормальных
алгорифмов вообще выходит за пределы нашего курса). Обсудим построение
схемы алгорифма C «на уровне идеи»
Эта схема приведена ниже (см. сл. стр.).
Она, по построению, является схемой нормального алгорифма в
V V  { ,  }, где V - алфавит, составленный из «буквдвойников» букв алфавита V , т.е. каждой букве   V сопоставляется
буква   V - «двойник» буквы  так, что соответствие является взаимно
однозначным и пересечение V  V пусто. Буквы  и  считаются не
принадлежащими алфавиту V  V .

Через A обозначен набор формул подстановок, образованный из

схемы замыкания A алгорифма A заменой всех «точек» (обозначающих
алфавите
 : тем самым каждая заключительная

схеме A заменяется простой формулой
заключительную формулу) буквой
формула вида
u  v .
Через
B
u  v
в
обозначен набор формул подстановок, полученный из

схемы замыкания B алгорифма B путем замены в ней каждой буквы
алфавита V ее «двойником», всех «точек» буквами  и после этого замены
каждой формулы вида  v (т.е. формулы с пустой левой частью) формулой
  v .
Работа алгорифма
следующим образом.
C
с исходным словом может быть описана
Поскольку в исходном слове x  V нет вхождений букв  и  , а
также вхождений букв-«двойников», то ни одна из формул строк (1) – (8) не
применима к x .
*
13
   
   

  
    

   
  

   
 B
 
 A
(  V )
(  V )
(1)
(2)
( ,  V )
(  V )
(  V )
(3)
(4)
(5)
( ,  V )
Таким образом, к слову
(6)
(7)
(8)
(9)
x
будет применима первая формула набора
A , т.е. первая формула схемы алгорифма A , если она простая, и формула
вида u  v , если соответствующая формула в схеме алгорифма A
является заключительной.
Можно тогда показать, что если
A : x ╞n y , то и C : x ╞n y , откуда
следует, что неприменимость A к x влечет неприменимость C к x .
Пусть алгорифм A применим к слову x . Тогда, поскольку сам

алгорифм A заменен его замыканием, а набор формул A построен по
схеме замыкания алгорифма A , то на последнем шаге работы алгорифма
A со словом x будет применена заключительная формула; но тогда на
соответствующем шаге работы алгорифма C со словом x будет применена
формула вида u  v , и, таким образом, если A : x ╞ · y , то
C : x ╞ y1y 2 , где y1 y 2  y .
Итак, посредством применения формул (9) к исходному слову x
алгорифм C «эмулирует» работу алгорифма A , причем если определено
слово y  A(x) и только в этом случае, то на некотором шаге работы C с
x будет получено слово y1y 2 , где y1 y 2  y .
Появление в слове, выводимом из x по схеме алгорифма C , буквы 
«переключает» схему C на применение формул строки (1), которые
«передвигают» букву  в начало слова, т.е. имеет место выводимость
14
C : x ╞ y1y 2 ╞ y .
Как только  оказывается первой буквой слова, формулы (1)
становятся неприменимыми, и начинают «работать» формулы строк (2) и (3),
в результате чего слово y  A(x) будет преобразовано в слово y «двойник»
y
в алфавите V 1.
После этого могут быть применены только формулы набора
B ,
B со
посредством применения которых «эмулируется» работа алгорифма
словом y  A(x) , а именно, если B : y ╞m z , то C : y ╞m z , откуда
! B( y) влечет !C (y ) и, соответственно, !C ( x) .
Если же ! B ( y ) , то (ввиду перехода к замыканию B ) на последнем шаге

будет применена заключительная формула схемы B , что означает в
процессе работы C с y применение на соответствующем шаге формулы
вида u  v , где u, v - слова в алфавите V  { } . Это значит, что
если B : y ╞  z , то C : y ╞ z1  z 2 , где z  z1 z 2 .
Появление буквы  на очередном шаге работы алгорифма C
следует, что
означает «переключение» его схемы на применение формул строки (4),
которые «перегоняют»  влево до тех пор, пока оно не окажется перед
первой буквой слова z и после буквы  , неизменно стоящей на первом
месте во всех словах выводимых из y по схеме алгорифма C . Таким
образом, имеет место выводимость
C : y ╞ z1 z 2 ╞ z .
После этого посредством применения формул строк (5) и (6)
происходит «превращение» букв-«двойников» в сами буквы алфавита V , т.е.
из слова z выводится слово  z . В результате формулы строк (1) – (6)
становятся неприменимыми, и применяется заключительная формула (7), т.е.
в итоге получаем:
C : y ╞ z1 z 2 ╞ z z ╞  z  B( A( x)) .
A(x) или B( A( x)) не
определено, т.е. ! A( x) или ! B( A( x)) , то !C ( x) , а если ! A( x) и
Следовательно, если хотя бы одно из слов
1
Т.е. при
y  y (1)...y (m) выполняется y  y (1)...y (m) . Пустое слово, разумеется, совпадает со
своим двойником.
15
! B( A( x)) , то C ( x)  B( A( x)) , и
C ( x)  B( A( x)) доказано.
Нормальный алгорифм C над алфавитом V
условное
равенство
с представленной выше
схемой, называется (последовательной) композицией алгорифмов A и B и
обозначается B  A .
Помимо композиции определяют также следующие комбинации
(сочетания) нормальных алгорифмов.
Объединение
Это сочетание определяется таким предписанием:
1) к исходному слову x применить алгорифмы A и B (независимо
друг от друга);
2) если оба слова A(x ) и B (x ) определены, то результатом
считается слово
A( x) B( x) .
Объединение нормальных алгорифмов также может быть задано
схемой некоторого нормального алгорифма, т.е. доказывается следующая
теорема:
Теорема (об объединении нормальных алгорифмов). Каковы бы ни
A в алфавите V1 и B в алфавите V 2 , может
быть построен нормальный алгорифм C над алфавитом V  V1  V2
*
такой, что для любого слова x  V выполняется условное равенство
C ( x)  A( x) B( x) .
были нормальные алгорифмы
Теорема об объединении доказывается уже с учетом доказанной
теоремы о композиции, т.е. доказательство состоит в том, что объединение
сводят к композиции. Это доказательство мы не приводим (даже «на уровне
идеи»).
Замечание. Объединение алгорфмов иногда называют параллельной
композицией. Существуют также разные варианты определения этой
комбинации нормальных алгорифмов. Один из них таков: алгорифмы A и
B (независимо друг от друга) применяются к словам x и y соответственно,
а для алгорифма
C
выполняется условное равенство (для любых слов
x  V1* , y  V2* )
C ( x  y)  A( x)  B( y) ,
где «звездочка» (*) – буква, не принадлежащая объединению алфавитов
V1 и V 2 .
16
Нормальный алгорифм C , построенный согласно теореме об
объединении, обозначают A  B .
Разветвление
Этот способ сочетания нормальных алгорифмов задан так:
1) к исходному слову x применить алгорифм C ;
2) если слово C (x) существует и равно пустому слову, то к слову
x
применить алгорифм A ;
3) если слово C (x) существует и не равно пустому слову, то к слову
применить алгорифм B и считать слово B (x ) общим
результатом;
4) если слово C (x) не определено, то не определен и общий
результат.
x
Теорема о «программировании» разветвления нормальных алгорифмов
в виде схемы некоторого нормального алгорифма называется теоремой о
разветвлении и формулируется следующим образом.
Теорема (о разветвлении нормальных алгорифмов). Каковы бы ни
были нормальные алгорифмы
A, B
и
C
в алфавитах
соответственно, может быть построен алгорифм
D
V1 ,V2 ,V3
над объединением
x V *
выполняется следуюшее: 1) если !C ( x) то ! D ( x) ; 2) если !C ( x ) , то
D( x)  A( x) при C (x)   и D( x)  B( x) при C (x)   .
алфавитов
V  V1  V2  V3
такой, что для любого слова
Доказательство теоремы о разветвлении основано на предыдущих
теоремах: композиции и объединения.
Нормальный алгорифм D , который может быть построен согласно
теореме о разветвлении, будем обозначать C ( A  B) и называть C разветвлением алгорифмов A и B . Коротко этот алгорифм можно задать
такой записью:
 A( x), при C ( x)  
.
(
A

B
)(
x
)


C
B( x), при C ( x)  
В программистских терминах C -разветвеление можно описать так:
if C (x)   then y : A( x) else y : B ( x) .
17
Повторение
Зададим такой алгоритм с использованием нормальных алгорифмов
и
B:
while B( x)   do
A
x : A( x) end,
B (x) определено и пусто, то к слову x надлежит применить
алгорифм A , если же слово B (x ) не есть пустое, то результатом всего
рассматриваемого алгоритма считается само слово x . Далее, если слово
A(x) определено, и B( A( x))   , то к слову A(x) надлежит применить
снова алгорифм A ; если же B( A( x))   , то общим результатом является
слово A(x ) и т. д.
т.е. если слово
Заданный таком образом алгоритм называют повторением
нормального алгорифма A , управляемым нормальным алгорифмом B ,
или, короче, B -повторением нормального алгорифма A .
Можно доказать, что и повторение нормального алгорифма
программируется в виде нормального алгорифма.
Теорема (о повторении нормального алгорифма). Каковы бы ни были
V 2 , может быть
построен нормальный алгорифм C над алфавитом V  V1  V2 такой, что
*
для любого слова x  V , что имеет место равенство y  C (x) тогда и
нормальные алгорифмы
только
тогда,
A
когда
в алфавите
V1 и B
существует
x  x0 , x1 ,..., xm  y такая, что m  0 ,
в алфавите
последовательность
слов
y  x и B( x)   , или m  0 и
(i  1, m)(( xi  A( xi1 ))  ((j  0, m  1)( B( x j )   ))  ( B( xm )   )

Нормальный алгорифм C будем обозначать B A}.
Условие повторения цикла можно изменить на противоположное.
Такое повторение будем обозначать B  A  .
Рассмотрим решение задач на построение некоторых алгорифмов с
использованием теорем сочетания.
Проекцирующие алгорифмы. Построим семейство алгорифмов
 i , i  1,..., n , над алфавитом V  {$} так, что для любых слов x1 , x 2 ,..., x n в
алфавите V выполняется
 i ( x1 $ x2 $...$ xn )  xi , i  1,..., n.
Построим алгорифм P1 со схемой
18
$  $,  V  {$}

$ 
 

Нетрудно видеть, что P1 ( x1 $ x2 $...$ xn )  x1 .
Теперь построим алгорифм P2 со схемой
 #  #, V

#  

$#

Понятно, что P2 ( x1 $ x 2 $...$ x n )  x 2 $...$ x n .
P2  ...  P2 ) . Обозначая k  кратную композицию
Тогда  i  P1  ( 

i 1
алгорифма A с самим собой через A k и полагая при этом, что A 0  Id ,
получим  i  P1  P2i 1 . В частности 1  P1.
Алгорифм распознавания равенства слов. Построим алгорифм
EQ
 {*} такой, что для любых двух слов x, y  V * имеет
место EQ( x * y )    x  y.
Обозначая Rv инвертирующий алгорифм (см. пример № 5), искомый
над алфавитом V
алгорифм получим в виде:
Comp( Id ( x) * Rv( y)) ,
где Comp - алгорифм, задаваемый схемой:
 *  *,  V
.

*

x, y  V * выполняется
!Comp( x * y)  Comp( x * y)    x  y.
Очевидно,
что
для
любых
двух
слов
Алгорифм определения «центра» слова.
Построим алгорифм C , который любое слово x в алфавите V переводит в
слово x1 $ x2 , где | x1 || x2 | при четной длине слова x , и | x2 || x1 | 1 в
противном случае; $ V .
Это можно реализовать, определив алгорифм C следующим образом:
19
CB
A
 L R  , где схемы входящих в указанное сочетание алгорифмов,
выглядят так:
   (  V ,  ,   V )
  

R:
  
 
  

L :    (  V ,  V )
 

   (  V , ,   V )

A :   
 

  $
B:
 $
Алгорифм R вводит правый «челнок»  , который при каждом
повторении сдвигается влево на букву (при первом повторении это делает
«челнок»  , тут же превращающийся в  ).
Алгорифм L вводит левый «челнок»  , при каждом повторении
сдвигающийся на букву вправо. Верхняя формула служит для «блокировки»
работы этой схемы в том случае, когда вхождение  уже возникло.
Как только «челноки»  и  встречаются, цикл прекращается
(условие выхода из цикла проверяет алгорифм A ).
Алгорифм B заменяет вхождение  на «доллар». Поскольку правый
«челнок» опережает левый на шаг, то при нечетной длине входного слова
правая часть разделенного «долларом» слова будет длиннее левой на одну
букву.
Заметим, что если входное слово x пустое, то A( x)   , и управление
сразу передается алгорифму B , печатающему лишь один «доллар».
Download