Марковские подстановки
Алфавитом (как и прежде) называется любое непустое множество. Его элементы называются буквами, а любые последовательности букв — словами в данном алфавите. Для удобства рассуждений допускаются пустые слова (они не имеют в своем составе ни одной буквы). Пустое слово будем обозначать . Если
и
— два алфавита, причем
, то алфавит
называется расширением алфавита
.
Слова будем обозначать латинскими буквами: (или этими же буквами с индексами). Одно слово может быть составной частью другого слова. Тогда первое называется подсловом второго или вхождением во второе. Например, если
— алфавит русских букв, то можем рассмотреть такие слова:
. Слово
является подсловом слова
, а
— подсловом
и
, причем в
оно входит дважды. Особый интерес представляет первое вхождение.
Определение 34.1. Марковской подстановкой называется операция над словами, задаваемая с помощью упорядоченной пары слов , состоящая в следующем. В заданном слове
находят первое вхождение слова
(если таковое имеется) и, не изменяя остальных частей слова
, заменяют в нем это вхождение словом
. Полученное слово называется результатом применения марковской подстановки
к слову
. Если же первого вхождения
в слово
нет (и, следовательно, вообще нет ни одного вхождения
в
), то считается, что марковская подстановка
неприменима к слову
.
Частными случаями марковских подстановок являются подстановки с пустыми словами:
Пример 34.2. Примеры марковских подстановок рассмотрены в таблице, в каждой строке которой сначала дается преобразуемое слово, затем применяемая к нему марковская подстановка и, наконец, получающееся в результате словно:
Преобразуемое слово | Марковская подстановка | Результат |
138 578 926
|
(8 578 9, 00)
|
130 026
|
тарарам
|
(ара, Λ)
|
трам
|
шрам
|
(ра, ар)
|
шарм
|
функция
|
(Λ, ζ-)
|
ζ-функция
|
логика
|
|
лог
|
книга
|
|
книга
|
поляна
|
(пор, т)
|
[неприменима]
|
Для обозначения марковской подстановки используется запись
. Она называется формулой подстановки
. Некоторые подстановки
будем называть заключительными (смысл названия станет ясен чуть позже). Для обозначения таких подстановок будем использовать запись
, называя ее формулой заключительной подстановки. Слово
называется левой частью, а
— правой частью в формуле подстановки.
Нормальные алгоритмы и их применение к словам
Упорядоченный конечный список формул подстановок
в алфавите называется схемой (или записью) нормального алгоритма в
. (Запись точки в скобках означает, что она может стоять в этом месте, а может отсутствовать.) Данная схема определяет (детерминирует) алгоритм преобразования слов, называемый нормальным алгоритмом Маркова. Дадим его точное определение.
Определение 34.3. Нормальным алгоритмом (Маркова) в алфавите называется следующее правило построения последовательности
слов в алфавите
, исходя из данного слова
в этом алфавите. В качестве начального слова
последовательности берется слово
. Пусть для некоторого
слово
построено и процесс построения рассматриваемой последовательности еще не завершился. Если при этом в схеме нормального алгоритма нет формул, левые части которых входили бы в
, то
полагают Равным
, и процесс построения последовательности считается завершившимся. Если же в схеме имеются формулы с левыми частями, входящими в
, то в качестве
берется результат марковской подстановки правой части первой из таких формул вместо первого вхождения ее левой части в слово
; процесс построения последовательности считается завершившимся, если на данном шаге была применена формула заключительной подстановки) и продолжающимся — в противном случае. Если процесс построения упомянутой последовательности обрывается, то говорят, что рассматриваемый нормальный алгоритм применим к слову
. Последний член
последовательности называется результатом применения нормального алгоритма к слову
. Говорят, что нормальный алгоритм перерабатывает
и
.
Последовательность будем записывать следующим образом:
Мы определили понятие нормального алгоритма в алфавите . Если же алгоритм задан в некотором расширении алфавита
, то говорят, что он есть нормальный алгоритм над
.
Рассмотрим примеры нормальных алгоритмов.
Пример 34.4. Пусть — алфавит. Рассмотрим следующую схему нормального алгоритма в
Нетрудно понять, как работает определяемый этой схемой нормальный алгоритм. Всякое слово в алфавите
, содержащее хотя бы одно вхождение буквы
, он перерабатывает в слово, получающееся из
вычеркиванием в нем самого левого (первого) вхождения буквы а. Пустое слово он перерабатывает в пустое. (Алгоритм не применим к таким словам, которые содержат только букву
.) Например,
Пример 34.5. Пусть — алфавит. Рассмотрим схему
Она определяет нормальный алгоритм, перерабатывающий всякое слово (в алфавите ) в пустое слово. Например,
Нормально вычислимые функции и принцип нормализации Маркова
Как и машины Тьюринга, нормальные алгоритмы не производят собственно вычислений: они лишь производят преобразования слов, заменяя в них одни буквы другими по предписанным им правилам. В свою очередь, мы предписываем им такие правила, результаты применения которых мы можем интерпретировать как вычисления. Рассмотрим два примера.
Пример 34.6. В алфавите схема
определяет нормальный алгоритм, который к каждому слову в алфавите
(все такие слова суть следующие:
и т.д.) приписывает слева 1. Следовательно, алгоритм реализует (вычисляет) функцию
.
Пример34.7. Дана функция где
— число единиц в слове
. Рассмотрим нормальный алгоритм в алфавите
со следующей схемой:
Этот алгоритм работает по такому принципу: пока число букв 1 а слове не меньше 3, алгоритм последовательно стирает по три буквы. Если число букв меньше 3, но больше 0, то оставшиеся буквы 1 или 11 стираются заключительно; если слово пусто, оно заключительно переводится в слово 1. Например:
Таким образом, рассмотренный алгоритм реализует (или вычисляет) данную функцию.
Сформулируем теперь точное определение такой вычислимости функций.
Определение 34.8. Функция , заданная на некотором множестве слов алфавита
, называется нормально вычислимой, если найдется такое расширение
данного алфавита
и такой нормальный алгоритм в
, что каждое слово
(в алфавите
) из области определения функции
этот алгоритм перерабатывает в слово
.
Таким образом, нормальные алгоритмы примеров 34.6 и 34.7 показывают, что функции и
нормально вычислимы. Причем соответствующие нормальные алгоритмы удалось построить в том же самом алфавите
, на словах которого были заданы рассматривавшиеся функции, т.е. расширять алфавит не потребовалось
. Следующий пример демонстрирует нормальный алгоритм в расширенном алфавите, вычисляющий данную функцию.