A08DPPMAT_UPS2006D00
.pdf2) Схема нормального алгорифма. Рассмотрим две буквы и , которые не входят в алфавит A. Формулой подстановки назовем выражение
u v |
(10.1) |
или выражение |
|
u v, |
(10.2) |
где u и v — произвольные слова в алфавите A.
Формула без точки (10.1) называется простой формулой, а формула с точкой (10.2) называется заключительной формулой. В обоих случаях формула имеет левую часть u и правую часть v, которые должны быть словами в алфавите A . Знаки и могут быть любыми буквами вне алфавита A . Мы могли вместо них использовать, например, греческие буквы α и β.
Схема Z нормального алгорифма A — это конечная упорядоченная последовательность формул подстановок
u1 |
v1 |
|
u2 |
v2 |
(10.3) |
|
. . . |
|
uk |
vk, |
|
|
vi могут быть формулы с точкой |
|
где вместо некоторых формул ui |
ui vi. Например, схема нормального алгорифма может иметь две формулы подстановки
u1 |
|
v1 |
(10.4) |
|
u2 |
|
v2 |
||
|
||||
|
|
|
|
|
Знаком . обозначаем любую из букв и . Поэтому вместо (10.3) |
||||
общий вид схемы можно записать так: |
|
|
||
u1 |
. |
v1 |
|
|
u2 |
. |
v2 |
(10.5) |
|
|
. . . |
|
|
|
uk |
. |
vk |
|
Формулы ui vi и ui vi рассматриваются как следующая инструкция по переработке произвольного слова P в алфавите A . Находим вхождение слова ui в слово P и заменяем его на vi.
91
Работа нормального алгорифма. Пусть на вход нормального алгорифма A со схемой Z поступило слово P . Начинаем процесс, направленный на получение из исходного слова P некоторого слова Q — результата переработки слова P . Совершаем проход по схеме Z, двигаясь сверху вниз, как показывает стрелка:
u1 |
. |
v1 |
|
u2 |
. |
v2 |
(10.6) |
|
. . . |
|
|
uk |
. |
vk |
|
|
|
|
|
Наше намерение — осуществить следующие действия 1)–5). |
|
1)Среди левых частей u1, u2, . . . , uk в (10.6) нужно отыскать первое по порядку слово ui, которое входит в слово P .
2)Заменить найденное слово ui в слове P на слово vi, и получить некоторое слово P1. Возможно несколько вхождений ui в слово P . Тогда заменяется на vi первое вхождение ui в слове P .
3)Если при замене применялась заключительная формула ui vi, то переработка слова P завершена и алгоритм останавливается. Полученное слово P1 — результат переработки слова P .
4)Если при замене применялась незаключительная формула ui vi, то слово P1 заново обрабатывается схемой Z и алгоритм продолжает работу.
5)Возможно, что при проходе по схеме Z вообще не обнаружено ни
одного вхождения слов u1, u2, . . . , uk в слово P . Тогда результат переработки — само слово P и алгоритм останавливается.
Рассмотрим естественность данных правил. Допустим, что при проходе по схеме Z среди слов u1, u2, . . . , uk обнаружено несколько вхождений
вслово P . Пусть, например, имеются вхождения u2, u5, u7. Мы выбираем первое вхождение, а именно u2 заменяем в слове P на v2. Такую однозначность, а не произвольный выбор для замены, требует условие детерминированности алгоритма. По этой же причине возникает правило замены
конкретного ( первого ) вхождения ui в слове P на vi.
Пусть при проходе по схеме Z сверху вниз вообще не обнаружено ни
одного вхождения слов u1, u2, . . . , uk в слово P . По правилу 5) результат замены — само слово P . Можно сказать, что, не выполнив ни одного действия, мы получили результат. Сравним с работой некоторого исполнителя, которому предписано: «вы должны все черные парты в аудитории пе-
92
рекрасить в белый цвет». Исполнитель, войдя в аудиторию, не обнаруживает черных парт. Поэтому работа выполнена без какого-либо действия и исходное состояние парт в аудитории — результат работы. Невыполнение предписания означает, что в аудитории осталась неперекрашенная черная парта.
Условие остановки и результат работы. Проанализируем протекание алгоритмического процесса и его результат. Обозначим дополнительно исходное слово P P0. Рассмотрим первый проход по схеме (аналогично для других проходов). Имеем две возможности а) и б).
а) Нет ни одного вхождения u1, . . . , uk в слово P |
P0. Алгорифм оста- |
навливается (1 случай остановки). P0 — результат переработки. |
|
б) Существуют вхождения u1, . . . , uk в слово P |
P0. Выполнена за- |
мена ui на vi, и получено слово P1. Если при замене применялась заключительная формула, то переработка слова P завершена. Алгорифм останавливается (2 случай остановки). P1 — результат переработки.
Если при замене применялась незаключительная формула, то полученное слово P1 заново обрабатывается схемой. При втором проходе по схеме из P1 получаем слово P2, а затем возможно P3 и т.д.
В результате получаем ровно один из двух случаев I или II.
I. Процесс переработки слов обрывается и получено слово Q A P , т.е. получен результат применения нормального алгорифма A к слову P .
II. Процесс переработки слов бесконечен. Тогда нет результата
QA P и алгорифм A неприменим к слову P .
Очевидно, что описанный выше нормальный алгорифм A удовлетворяет всем требованиям, предъявляемым к понятию алгоритма, и является точным математическим понятием.
Примеры нормальных алгорифмов. Вначале приведем примеры нормальных алгорифмов для работы с натуральными числами.
Алгорифм сложения натуральных чисел. Построим нормальный алгорифм, вычисляющий сумму двух натуральных чисел x и y. Для этого рассмотрим алфавит из трех символов A 0, , . Число n N изображаем словом
0 . . .
n
валфавите A . В этом слове n палочек, перед которыми стоит символ 0.
93
Искомый нормальный алгорифм A имеет схему из одной заключительной формулы подстановки u1 v1, где u1 0 — слово из двух букв, а v1 Λ — пустое слово. Тем самым схема алгорифма имеет вид
0
Если нужно вычислить сумму x y, то подаем на вход алгорифма A ее изображение, т.е. слово
P0 . . . 0 . . .
x y
Алгоритм A удалит из P подслово 0 и в один шаг переработает входное слово P в выходное слово Q. При этом
Q0 . . . . . .
x y
Итак, на выходе имеем слово Q, изображающее число x y, что и нужно. Алгоритм умножения чисел гораздо сложнее и рассматривается в за-
дачах 8–10.
Вычисление остатка при делении на 4. Построим нормальный алгорифм, который находит остаток от деления натурального числа x на 4. Для этого рассмотрим алфавит из двух символов A 0, .
Искомый нормальный алгорифм имеет схему из одной формулы (простой формулы подстановки, правая часть которой — пустое слово). Пусть на вход алгорифма подается слово
P 0 . . . . . .
q r
Оно изображает натуральное число x 4q r, где r 0, 1, 2, 3 — остаток от деления числа x на 4. После q проходов по схеме в слове P сотрется 4q палочек и останется r палочек. При q 1 проходе замены нет, алгорифм останавливается. Результат переработки Q равен
0 . . .
r
и изображает остаток r.
94
В последующих четырех примерах происходит переработка слов в произвольном алфавите A a1, . . . , ak .
Тождественный алгорифм. Рассмотрим алгорифм A, который задается схемой
a1 |
a1 |
|
a2 |
a2 |
(10.7) |
|
. . . |
|
ak |
ak |
|
|
|
|
Пусть P — произвольное слово в алфавите A . Алгорифм совершит один |
||
проход по схеме, переработает P в P и остановится. Поэтому A P |
P . |
Аннулирующий алгорифм. Полагаем теперь, что нормальный алгорифм A задается схемой
|
a1 |
|
|
|
a2 |
|
(10.8) |
|
|
. . . |
|
|
ak |
|
|
Пусть P |
|
|
|
ai1 . . . aim — слово на входе. Вначале алгорифм совершит m |
проходов по схеме, каждый раз стирая в слове по одной букве с наименьшим индексом. При m 1 проходе на входе пустое слово. Алгорифм останавливается. Получаем результат A P Λ.
Алгорифм, применимый лишь к пустому слову. Пусть нормальный
алгорифм задается схемой |
|
|
a1 |
a1 |
|
a2 |
a2 |
(10.9) |
|
. . . |
|
ak |
ak |
|
|
|
|
Данный алгорифм применим лишь к пустому слову. |
|
Как уже отмечалось, не все вербальные алгорифмы являются нормальными алгорифмами. Вербальные алгорифмы реализуют произвольные преобразования слов, а нормальные алгорифмы ограничены преобразованиями слов по заданной схеме.
Например, мы можем рассмотреть вербальный алгорифм в алфавите A a1, . . . , an , где n 1, с единственным правилом: любое слово P ai1 . . . aim в алфавите A перерабатывается в перевернутое слово
Qaim . . . ai1 (обращающий алгорифм). Можно доказать [17, с.170], что
95
не существует нормального алгорифма в алфавите A с данным действием.
Поэтому определение алгоритма по Маркову не будет утверждать о совпадении класса нормальных алгорифмов и класса вербальных алгорифмов, а будет иметь другую формулировку. Рассмотрим эту формулировку.
Пусть задан алфавит A . Добавим к алфавиту A новые буквы. Получим алфавит A1 с условием A A1.
ОПРЕДЕЛЕНИЕ 10.1 . Пусть заданы алфавиты A и A1. Если A A1, то алфавит A1 называется расширением алфавита A .
ОПРЕДЕЛЕНИЕ 10.2 . Нормальный алгорифм в каком-либо расширении A1 алфавита A называется нормальным алгорифмом над алфавитом A .
Покажем, что нормальный алгорифм в каком-либо расширении A1 при действии на словах алфавита A реализует более богатый набор преобразований слов по сравнению с нормальным алгорифмом в алфавите A .
Рассмотрим алгорифм A левого присоединения слова v. В нем для любого входного слова u выходным словом должно быть слово vu, которое получено приписыванием к слову u слева слова v. Искомый нормальный алгорифм A имеет простейший вид. Его схема состоит из одной формулы подстановки
v
Действительно, пусть имеется входное слово u. Оно имеет вид u Λu. Пустое слово Λ заменяется на v. Получается слово vu, что и нужно.
Аналогично можно рассмотреть алгорифм A правого присоединения слова v. В нем для любого входного слова u выходным словом должно быть слово uv. Однако здесь нас ждет неожиданное осложнение, и простейшего алгорифма, который мы имели в случае левого присоединения, нет. Для реализации правого присоединения мы расширим алфавит A a1, . . . , an . Пусть α — некоторая буква, отличная от всех букв алфавита A . Добавив букву α, получим новый алфавит A1 A α — расширение алфавита A .
Рассмотрим нормальный алгорифм A1 в новом алфавите A1. Тем самым алгорифм A1 — это алгорифм над старым алфавитом A .
96
Его схема имеет следующий вид.
αa1 |
|
a1α |
|
|
|
|
. . . |
|
|
|
|
|
(10.10) |
|
|
αan |
|
anα |
|
α |
|
v |
|
|
|
|
|
α |
|
|
|
|
на словах старого алфавита A . |
|
Рассмотрим действие алгорифма A1 |
Пусть на вход A1 поступило слово u в алфавите A . Оно не содержит буквы α. Поэтому при первом проходе по схеме сработает последняя формула подстановки α. Пустое слово в начале u заменится на α. В результате к слову u слева добавится буква α. При следующих проходах по схеме буква α перемещается несколько раз вправо, пока не станет в конце слова. При следующем проходе буква α заменится на v и алгорифм остановится. Слово u переработалось в слово uv.
Таким же образом, добавляя буквы к алфавиту A , мы можем получить схему для операции перевертывания слов в алфавите A — операции, которую нельзя реализовать схемой в алфавите A . Поэтому в данном случае добавление буквы к алфавиту A и рассмотрение расширенного алфавита A1 позволили схемой в A1 реализовать те действия над словами в исходном алфавите A , которые нельзя было реализовать схемой в A . И в других случаях, добавляя новые буквы к алфавиту A , мы получаем нормальный алгорифм A1 в расширенном алфавите A1, который при ограничении на словах из алфавита A имеет наперед заданное действие.
А.А.Марков [17] предложил следующий тезис.
Принцип нормализации. Пусть задан произвольный вербальный алгорифм A в алфавите A . Тогда существует расширение A1 алфавита A и нормальный алгорифм A1 в алфавите A1 с условием: произвольное слово P в алфавите A перерабатывается нормальным алгорифмом A1 в тот же самый результат, в который слово P перерабатывается исходным вербальным алгорифмом A.
Если мы не используем принцип нормализации, то всякий раз, имея произвольный вербальный алгорифм, мы не в состоянии обозреть все возможные действия A, B, . . . , которые производятся над перерабатываемыми объектами. Однако доказательство несуществования алгоритма A проводится примерно так. Предположим противное, пусть вербальный алгорифм A с заданной переработкой слова P в слово Q существует.
97
Мы знаем (обозреваем) все возможные действия A, B, . . . , которые производятся над P для получения Q. Проверим, что применения A, B, . . . не могут дать Q. Поэтому алгорифма A не существует.
Если мы не в состоянии обозреть все возможные действия A, B, . . . , то не сможем подобным образом доказать несуществование алгорифма A. Если мы используем принцип нормализации, то действия в произвольном вербальном алгорифме A обозримы и четко перечислены. Действительно, у нас есть нормальный алгорифм A1 в алфавите A1 и его действия на словах из A1 жестко заданы и обозримы схемой алгорифма A1 . Тем более обозримы ограничения этих действий на словах алфавита A , а это и есть действия вербального алгорифма A.
Поэтому принцип нормализации можно рассматривать как способ обозрения всевозможных действий в вербальных алгоритмах. Поскольку эти действия строго заданы, то мы имеем третий вариант определения алгоритма. В результате принятия принципа нормализации мы получили инструмент для доказательства неосуществимости задачи нахождения определенного алгоритма. Поэтому мы можем предсказывать неосуществимость определенных задач. Аналогичный тезис в физике — закон сохранения энергии (сохранение общего количества энергии в замкнутой физической системе). Он предсказывает неосуществимость задачи создания perpetuum mobile (вечного двигателя).
Доказано, что данная формулировка понятия алгоритма (принцип нормализации) эквивалентна другим формулировкам понятия алгоритма: тезису Черча, использующему частично рекурсивные функции, и тезису Тьюринга, использующему понятие вычислительной машины. Поэтому еще раз подкрепляется уверенность в том, что мы нашли и выразили в трех формах фундаментальное понятие математики, логики и информатики — понятие алгоритма. При этом частичная рекурсивность, машина Тьюринга, МНР и нормальный алгорифм — лишь различные формы выражения этого самостоятельного понятия.
98
Упражнения к лекции 10
ЗАДАЧА 1. Нормальный алгорифм A в алфавите из букв кириллицы имеет схему следующего вида:
рез сл |
|
|
у е |
х ж |
|
|
жа зон |
|
м р |
л лл |
Описать работу алгорифма A со словом муха .
« »
ЗАДАЧА 2. В схеме предыдущей задачи заменим в первой формуле букву для обозначения заключительной формулы подстановки на букву для обозначения простой формулы подстановки. Описать работу полученного алгорифма A со словом «муха». Существует ли слово на выходе алгорифма?
В следующих трех задачах рассматривается алфавит из двух символов A , α . Число n N изображается словом . . . из n палочек. Пара
n
чисел m, n изображается в виде слова . . . α . . . с использованием
разделителя α. |
m n |
|
ЗАДАЧА 3. Пусть нормальный алгорифм A в алфавите A , α имеет схему:
α αα
Показать, что если на входе алгорифма A имеется изображение пары m, n , то на выходе алгорифма вырабатывается абсолютная величина m n разности чисел m и n.
ЗАДАЧА 4. Пусть нормальный алгорифм A в алфавите A , α имеет схему:
α α
α α
α
99
Показать, что если на входе алгорифма A , α имеется изображение числа n, то на выходе алгорифма получается частное при делении числа n на 4.
ЗАДАЧА 5. Заменим схему из предыдущей задачи на следующую:
α α
Показать, что если на входе алгорифма A имеется изображение числа n, то на выходе алгорифма получается пара — частное и остаток при делении числа n на 4.
В задачах 6,7 нужно рассмотреть работу нормального алгорифма с заданной схемой и описать все случаи переработки произвольного входного слова P .
ЗАДАЧА 6. Нормальный алгорифм A имеет схему, состоящую из одной заключительной формулы, т.е. схему
Описать работу алгорифма A с данной схемой. Описать работу алгорифма со схемой, состоящей из незаключительной формулы
ЗАДАЧА 7. |
Пусть нормальный |
алгорифм |
A в алфавите |
A a1, a2, . . . , an имеет схему одного из трех видов: |
|||
a1 |
a1 |
a1 |
|
a2 |
a2 |
a2 |
|
1 . . . |
2 . . . |
3 . . . |
|
an |
an |
an |
|
|
|
|
|
|
|
|
|
Описать работу алгорифма A в каждом из трех случаев.
В следующих трех задачах нужно проанализировать алгорифм умножения натуральных чисел. Введем алфавит из пяти букв
100