Вы находитесь на странице: 1из 45

Глава 2.

МОДЕЛИ ВЫЧИСЛЕНИЙ

Глава 2
МОДЕЛИ ВЫЧИСЛЕНИЙ

В данной главе рассмотрим различные способы представления


вычислений (обработки данных) в виде моделей; эти способы связаны с
различной природой вычислений.
Модель – математическая абстракция для класса объектов (процес-
сов), в которой выделяются существенные свойства класса и отбрасы-
ваются несущественные; чем грубее модель, тем шире класс. Хорошо
сформулированная модель обладает ясным физическим смыслом и адек-
ватна (соответствует, отвечает требованиям точности) данному классу.
Например, в планетарной модели небесные тела представляются в виде
материальных точек, не имеющих размеров, но имеющих конкретную
массу; эта модель позволяет достаточно точно предсказывать, например,
лунные затмения.
Целью построения моделей вычислений является, в первую оче-
редь, возможность уточнения понятия алгоритм, что необходимо для
получения доказательного ответа на главный вопрос теории алгоритмов:
существует или нет алгоритм для данного класса задач? С прикладной
точки зрения важно также, что подходящая модель вычислений может быть
использована и для оценки сложности алгоритма.
Для вычислений в широком смысле построены разнообразные моде-
ли, учитывающие характер вычислений (численные, логические, символь-
ные), разрядность чисел (битовые либо байтовые), постоянство длины
обрабатываемых слов в ЭВМ и т. д.

52
О.Н. Паулин. Основы теории алгоритмов

Ниже рассматриваются 2 модели вычислений в узком смысле:


 ассоциативные исчисления;
 рекурсивные функции,
а также 2 модели дискретной переработки информации – автоматы и
машины Тьюринга.
Логические алгоритмы содержат инструкции, относящиеся не к чис-
лам, а к объектам любой природы. Примерами логических алгоритмов
могут служить алгоритм поиска пути в лабиринте, игровые алгоритмы,
алгоритм переключения светофора и т. д. Моделью логических вычис-
лений являются ассоциативные исчисления.
Численные алгоритмы сводят решение поставленной задачи к ариф-
метическим действиям над числами. Пример — алгоритм Евклида для
нахождения наибольшего общего делителя двух заданных положительных
чисел. К численным алгоритмам сводится решение многих задач: вычис-
ление корней алгебраических уравнений, решение систем уравнений,
численное интегрирование и т. п. Моделью таких вычислений являются
рекурсивные функции.
Очень широкий класс задач связан с дискретной переработкой
информации (символов). Это, например, кодирование и декодирование
сообщений. В качестве моделей таких преобразований используются
конечные автоматы.
Автоматная модель с расширенными возможностями – машина
Тьюринга – позволяет не только реализовать различные вычисления и
преобразования информации, но и проверить существование алгоритма
для данного класса задач.

53
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

2.1. Ассоциативные исчисления

2.1.1. Определения, операции, свойства

Исчисление — определённый набор операций над совокупностью


математически однородных объектов и правила преобразования этих
объектов с использованием данных операций. Примером исчисления, кото-
рое широко используется в процессе синтеза логических схем, являются
преобразования алгебры логики. Набор правил (аксиом, законов, тождеств)
говорит лишь о том, как можно преобразовать исходное булево выражение,
но ничего не говорит о том, как надо его преобразовывать (в какой последо-
вательности и что делать на каждом шаге), чтобы, например, на заданном
логическом базисе получить минимальную задержку схемы. Таким образом,
исчисление, в отличие от алгоритма, не содержит указаний, куда нужно
идти, чтобы получить результат, а содержит только список допустимых
преобразований.
Расширение понятия алгоритма за счёт введения в рассмотрение
объектов нечисловой природы связано с ассоциативным исчислением.
Ассоциативное исчисление строится на множестве всех слов в данном
алфавите с помощью определённой совокупности операций.
Алфавит — любая конечная совокупность различных символов,
называемых буквами. Любая конечная совокупность n букв некоторого
алфавита является словом длины n в этом алфавите.
Если слово L является частью слова M, то говорят, что слово L
входит в слово M. Например, в слове abcbcbad имеются два варианта
вхождения слова bcb и одно вхождение слова ba.
В качестве операций ассоциативного исчисления определяется
система допустимых подстановок, с помощью которых одни слова

54
О.Н. Паулин. Основы теории алгоритмов

преобразуются в другие. Подстановка вида L — M, где L и M — слова в том


же алфавите, означает: слово L заменяется на M и наоборот.
Например, пусть имеется алфавит А = {a, b, c}. Рассмотрим слово
abcbcbab; к этому слову можно применить подстановку ab - bcb четырьмя
способами. Заменяя вхождение ab дважды, получим: bcbcbcbbcb. В то же
время к слову bacb эта подстановка не применима.
Рассмотрим особую подстановку P - #. Она означает, что из преоб-
разуемого слова удаляется вхождение слова P (оно заменяется пустым
символом), а также, что между двумя какими-либо буквами преобра-
зуемого слова, впереди него либо за ним, вставляется слово Р. Например,
заданы слово dbcd и подстановка abc - #. В результате подстановки
получаем: dabcbcd.
Итак, ассоциативное исчисление (АИ) — это множество всех слов
в некотором алфавите вместе с конечной системой допустимых
подстановок.
Эквивалентность слов. Два слова называют эквивалентными, если
одно из них можно получить из другого последовательным приме-нением
допустимых подстановок.
Последовательность слов R1, R2, R3, …, Rn, когда каждое слово
является результатом однократного применения допустимой подстановки к
предыдущему слову, образует дедуктивную цепочку, причём соседние
слова в этой цепочке называются смежными. Очевидно, что любые два
слова в дедуктивной цепочке являются эквивалентными.
Эквивалентность слов (обозначается L ~ M) обладает всеми свой-
ствами отношения эквивалентности — рефлексивностью, симметрич-
ностью и транзитивностью.
Если L ~ M, то при наличии в каком-либо слове R вхождения L в
результате подстановки L - M получается слово R', эквивалентное R.

55
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

Например, используя эквивалентность acd ~ cad, из слова R = bacdc


получаем эквивалентное ему слово R' = bcadc.
В каждом АИ возникает своя специфическая проблема слов, которая
заключается в следующем: для любых двух слов в данном исчислении
требуется узнать, эквивалентны они или нет. Решение этой проблемы
аналогично поиску пути в лабиринте, площадки которого соответствуют
смежным словам.
Очевидно, эквивалентность двух слов означает, что соответствующие
им площадки связаны некоторым путём, который представляет собой дедук-
тивную цепочку от одного слова к другому. Проблема слов является далеко
идущим обобщением задачи поиска пути в конечном лабиринте. Так как в
любом АИ содержится бесконечное множество различных слов, то соответ-
ствующий лабиринт имеет бесконечное число площадок, и, следовательно,
решение вопроса об эквивалентности слов сводится к поиску пути в
бесконечном лабиринте.
С помощью алгоритма перебора решается ограниченная проблема
слов: требуется установить, можно ли одно из заданных слов преобра-
зовать в другое применением допустимых подстановок не более чем К раз,
где К — произвольное, но фиксированное целое число. Такое ограни-чение
в случае лабиринта означает, что расстояние между рассматри-ваемыми
площадками не превышает К коридоров.
Однако перебор не подходит для неограниченной проблемы слов.
Поэтому для получения желаемых результатов необходимо применять
другие идеи, основанные на анализе самого механизма преобразования
посредством допустимых подстановок.
В некоторых случаях могут быть обнаружены и использованы свой-
ства, остающиеся неизменными для всех слов дедуктивной цепочки

56
О.Н. Паулин. Основы теории алгоритмов

(дедуктивные инварианты). На основе дедуктивного инварианта можно


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

2.1.2. Примеры ассоциативных исчислений

Приведём два примера АИ, точнее, опишем их основные положения.


Исчисление высказываний. Формула называется выводимой в
исчислении высказываний, если она может быть получена из конечной
совокупности исходных формул путём конечного числа шагов применения
правил вывода. Строго доказано, что можно выбрать такую конечную
совокупность аксиом исчисления высказываний, из которой выводимы все
тождественно истинные формулы. Это важное положение решает проб-
лему полноты исчисления высказываний. Процесс эквивалентных преоб-
разований или вывода логических следствий может быть представлен как
преобразование слов, причём роль допустимых подстановок играют логи-
ческие законы и аксиомы.
Таким образом, вопрос выводимости какой-либо формулы становит-
ся вопросом существования дедуктивных цепочек, ведущих от слов, пред-
ставляющих посылки, к словам, представляющим следствия.
В ряде интерпретаций ассоциативного исчисления, в частности в
теории вывода, используются подстановки вида L  M, которые допускают
лишь подстановку слева направо (слово L в слово M). Это соответствует

57
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

лабиринту, по каждому коридору которого можно двигаться только в одном


направлении.
В качестве другого примера АИ рассмотрим порождение классов
формальных языков (в том числе языков программирования и соответ-
ствующих им трансляторов). В теории алгоритмов рассматриваются раз-
личные абстрактные системы, предназначенные для моделирования
функционирования дискретных систем. Их способность адекватно описы-
вать сложное поведение моделируемых систем можно охарактеризовать
классами порождаемых ими языков, которые определённым образом
кодируют разные возможные способы функционирования систем.
Приведём неформальное описание языка.
В основе каждого языка лежит словарь. Его элементы обычно назы-
вают словами, но в теории формальных языков их называют символами.
Совокупности слов характеризуются тем, что некоторые из них считаются
правильными предложениями языка, а другие — неправильными, или не
принадлежащими данному языку. Правильность предложения определяется
грамматикой, синтаксисом языка. Синтаксис определяется как множество
правил или формул, которые задают множество (формально правильных)
предложений.
Любое предложение можно получить из начального символа после-
довательным применением правил подстановки.
Синтаксические единицы (грамматические категории) называются
нетерминальными символами, а слова в данном алфавите — терми-
нальными символами.
Классы языков порождаются конечными множествами правил, назы-
ваемых порождающими грамматиками. Каждая грамматика представляет
собой набор (A, V, P, S0),
где А — алфавит терминальных символов;

58
О.Н. Паулин. Основы теории алгоритмов

V — алфавит нетерминальных символов;


P — конечное множество продукций (правил подстановки);
S0 — начальный символ.
Обозначим А* (V*) множество всех слов в алфавите А (V).
Продукция имеет вид , где V*, (AUV)*. Продукция 
может быть применена к некоторому слову вида 1 и преобразует его к
виду  . Последовательность слов …n такая, что слово i, 1 i  n,
полученное из слова i с помощью некоторой продукции из P, называется
выводом из данной грамматики, а слово n выводимо в ней из слова 
Язык, порождаемый грамматикой, — это множество всех терминальных
слов (слов из А*), выводимых из слова S0 с помощью продукций из P.

2.1.3. Нормальный алгоритм А.А. Маркова

Говорят, что задан алгоритм в алфавите А, который применим к


слову L и преобразует его в слово M, если отправляясь от L и действуя
согласно инструкциям, в конце концов получим M, на котором процесс
заканчивается.
Множество слов, к которым применим данный алгоритм, называется
его областью применения. Два алгоритма называются эквивалентными,
если их области применения совпадают и результаты преобразования ими
любого слова совпадают.
А.А. Марков ввёл определённые указания о порядке использования
подстановок в алгоритме. Определение нормального алгоритма Маркова
сводится к следующему. Задаётся алфавит А и фиксируется в опреде-
лённом порядке система ориентированных подстановок. Исходя из про-
извольного слова R в алфавите А, просматриваются подстановки в таком
порядке, в котором они заданы. Первая встретившаяся подстановка

59
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

P1: L1  M1 с левой частью, входящей в R, используется для


преобразования слова R, в которое вместо первого вхождения левой части
подставляется его правая часть, в результате чего получаем новое слово
R1: P1 (R) = R1. Далее процесс повторяется исходя из слова R1, затем из
R2 и т. д. до тех пор, пока он не остановится.
Признаки остановки
1. Слово Rn не содержит ни одной из левых частей допустимых
подстановок.
2. Для получения Rn использована последняя подстановка.
Пример 2.1. Заданы алфавит А = {1, +} и система подстановок:
+  # (# — пустое слово); 11.
Слово 111 + 11 + 1111 + 1 этот алгоритм преобразует следующим
образом:
0 - шаг 111 + 11 + 1111 + 1
1 - шаг 11111 + 1111 + 1
2 - шаг 111111111 + 1
3 - шаг 1111111111
4 - шаг 1111111111
Процесс заканчивается применением заключительной подстановки,
которая перерабатывает слово само в себя. Как видим, алгоритм
суммирует количество единиц, т. е. осуществляет операцию сложения.
Эквивалентный ему алгоритм можно задать с помощью системы
подстановок: 1 +  + 1, + 1 1, 1  1.
Накопленный опыт позволил высказать смелую гипотезу: любой
алгоритм может быть представлен в виде нормального алгоритма Маркова.
Иначе говоря, нормальный алгоритм Маркова можно использовать в
качестве стандартной формы любого алгоритма.

60
О.Н. Паулин. Основы теории алгоритмов

2.2. Вычислимые и рекурсивные функции

Арифметическая функция y=(x1, x2, ...,xn) - это целочисленная


функция, зависящая от целочисленных значений аргументов, т.е. это фун-
кция, построенная на множестве {0, 1, 2, ...}. Под  понимается суперпози-
ция операций сложения, вычитания, умножения и деления, операций
определения абсолютного значения результата при вычитании и целой
части - при делении, а также некоторых специальных операций, например
 (x  y)  x  y 
min(x, y) = 
 2


.
 

Заметим здесь же, что логические функции являются частным


случаем арифметических функций, а “мостом”, связывающим арифметику
и логику, являются предикаты.
Арифметические функции, значения которых можно вычислять посред-
ством некоторого алгоритма, называются вычислимыми функциями. Поня-
тие вычислимой функции, основанное на интуитивном смысле алгоритма,
также является интуитивным. Однако между ними имеется существенная
разница: совокупность вычислительных процессов, удовлетворяющих приз-
накам 1-5 алгоритма (п. В.1), очень обширна; напротив, совокупность вычис-
лимых функций для самых разных процессов, удовлетворяющих признакам
1-5, оказалась одной и той же, и при том легко описываемой в обычных
математических терминах. Точно описанная совокупность арифметических
функций, совпадающая с совокупностью всех вычислимых функций при
самом широком до сих пор известном понятии алгоритма (см. признаки 1-5),
носит название совокупности рекурсивных функций.

2.2.1. Построение класса примитивно-рекурсивных функций

61
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

Рассмотрим, каким образом может быть построен класс рекурсивных


функций.
Определение. Функция y=(x1, x2, ..., xn) называется алгоритмически
вычислимой (просто вычислимой), если существует алгоритм, позво-
ляющий определить значение функции y при любых значениях пере-
менных х1, х2, ..., хn.
Определение. Предикат Р(х1, х2, ..., хn), определённый на множестве
целых чисел, называется алгоритмически разрешимым (просто разреши-
мым), если существует алгоритм для определения значений предиката Р
при любых значениях переменных х1, х2, ..., хn.
Эти определения являются неточными, поскольку ещё не сформули-
ровано точно понятие алгоритма. Для их уточнения построим класс вычис-
лимых функций, начав с элементарных. Элементарными являются все
функции вида
(x)=x+1, (y)=12y, (a, b, c)=ab+c, (b)=bn и т.п.
Рассмотрим эти функции подробнее. Если в функции (x)=x+1 поло-
жить x=0 (начальное значение) и затем многократно использовать эту
формулу с предыдущим значением, то таким путём можно получить все
числа натурального ряда. Многократное применение одной и той же
формулы (вычислительного процесса) называют итерацией. Операцию
сложения двух чисел a+b можно представить как применение формулы x+1
b раз, если в качестве начального значения x положить a; таким образом,
сложение двух целых чисел - это итерация добавления единицы. Нетрудно
видеть, что произведение an=a+a+...+a  n раз повторенное сложение
(умножение  итерация сложения).
Функция  может быть представлена в виде =d+c, где d=ab, так что
 включает в себя две операции: умножение как итерацию сложения и

62
О.Н. Паулин. Основы теории алгоритмов

операцию сложения как итерацию добавления единицы (в последнем


случае полагаем d начальным значением для x  см. функцию f). Все эти
функции растут довольно медленно, и по этому признаку их относят к
элементарным.
Рассмотрим операцию возведения в степень. Для функции (b) име-
ем bn= bb...b - n раз повторенное умножение на число b, т. е. это итерация
n

умножения: b =  b . Эта функция, хотя и растёт довольно быстро,


n
1

является ещё элементарной, так как она выражается через произведение.


Построим еще более быстро растущую функцию, которая является
итерацией возведения в степень: (0, a)=a, 1, a)=aa, (2, a)=a (aa) и в
общем виде
(n+1, a)=a(n,a). (2.1)
Функция (2.1) растёт чрезвычайно быстро; эта функция, начиная с
некоторого а=а*, мажорирует все элементарные функции, т. е. для любой
элементарной функции (a) найдётся такое число n*, что будет
выполняться неравенство (а)<(n*, a) для всех а  а*.
Таким образом, итерация возведения в степень позволяет получить
неэлементарную функцию. В то же время (n, a) заведомо вычислима.
Действительно, пусть необходимо вычислить значение (n, a) при любых
n=n*, a=a*. При a=a* формула (2.1) даёт
(n+1, a*)=(a*)(n, a*) . ( 2.1’)
Обозначим (a*)mmm) - элементарная, всюду однозначно вы-
числимая функция. Алгоритм её вычисления сводится к повторенному m
раз умножению на a*.

Запись (см. (2.1’))


nn 

63
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

связывает значение функции  в данной точке с её значением в преды-


дущей точке.
Достаточно теперь задать начальное значение (0, a*) = a*, чтобы
получить вычислительную процедуру, которая последовательно даёт сле-
дующие значения:


Этот процесс следует продолжать, пока не будет достигнуто зна-
чение (n*, a*).
Очевидно, этим способом функция  определена всюду и однознач-
но, так как вычисление её значений сводится к вычислению значений
функции (m), которая является всюду определённой и однозначной.
Рассмотрим подробнее способ определения функции (n, a). Эта
функция была задана по индукции: было задано начальное значение фун-
кции 0, a) и был указан способ вычисления её значения по предыдущим
значениям с помощью допустимых операций. Как видим, был применён
метод математической индукции. Используем этот метод в качестве
основы для определения вычислимой функции. Но сперва несколько
уточним и расширим схему определения по индукции.
Обозначим через x функцию “следовать за”, которая означает пере-
ход к следующему элементу заданного множества; для множества нату-
ральных чисел функция x совпадает с x+1. Общую схему определения
вычислимой функции (x) теперь можно уточнить таким образом:
1) задано (0);
2) для любого x указывается, каким образом значение (x)
выражается в терминах x и (x):
(0)=q, (x)=(x,x)). (2.3)

64
О.Н. Паулин. Основы теории алгоритмов

В более общем случае в функции  могут присутствовать ещё и


неизменяемые в процессе индукции параметры x2, x3, ..., xn (обозначим (
x2 , xn ). Схема (2.3) тогда будет иметь вид
(0, x 2 , x n )=( x 2 , x n )
x x 2 , x n =xx1 x 2 , x n , x 2 , x n ) . 
Если фунции  и  известны и вычислимы, то с помощью
схемы (2.4) для заданных x2=x2*, x3=x3*, ... может быть организована
процедура вычисления последовательно (1, x 2* , x n* ), (2, x 2* , x n* ) и т. д.
Значит, схема, заданная выражениями (2.4), действительно определяет
вычислимую функцию.
Добавим к описанной выше функции x также функцию-константу и
функцию-тождество. Эти три функции будем считать первоначально изве-
стными, или просто первоначальными.
Итак, получены такие первоначальные функции:
I. (x)=x  описанная выше функция следования, применённая для
множества натуральных чисел.
II. ( x1 , x n )=q  функция-константа.
III. ( x1 , x n )=xi  функция-тождество.
Далее включим в число допустимых операций схему подстановки:
V x1 , x n  x1 , x n  x1 , x n  x1 , x n 
И наконец, введём в систему допустимых операций схемы (2.3) и (2.4)
определения вычислимой функции:
Va - соответствует схеме (2.3);
Vb - соответствует схеме (2.4).
Итак, схемы I-III задают первоначальные функции (они играют роль
аксиом), а IV и V - правила вывода. Применяя многократно эти схемы,
можно построить обширный класс вычислимых функций.

65
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

Определение. Функция ( x1 , x n ) называется примитивно-рекурсив-


ной, если она может быть построена с помощью конечного числа приме-
нений схем I-V.
Это определение раскрывает механизм построения класса прими-
тивно-рекурсивных функций; этот класс включает в себя подкласс всех
элементарных функций.
Отметим, что с помощью примитивной рекурсии могут быть опреде-
лены конечные суммы и произведения вида
y y
  (i, x ) и   (i, x ) .
i 0 i0

Рассмотрим пример построения примитивно-рекурсивной функции.


Пример 2.2. Определим функцию (y, x) так:
(0, x)=x, (A) (y, x)=((y, x)) (B)
Согласно этой схеме имеем
(1, x) = ((0, x)) = x = x+1,
(2, x) = ((1, x)) = (x+1) = x+1+1 = x+2,
(3, x) = ((2, x)) = (x+2) = x+3, и вообще (y, x)=x+y .
Назовём представляющей функцией предиката P( x1 , x n ) такую
функцию ( x1 , x n ), которая обращается в нуль лишь для тех и только тех
x1, x2, ..., xn, для которых P( x1 , x n ) истинно. Тогда истинность P( x1 , x n )
соответствует равенству ( x1 , x n ) = 0.
Определение. Предикат называется примитивно-рекурсивным, если су-
ществует примитивно-рекурсивная функция, представляющая этот предикат.
Из сущности механизма построения класса примитивно-рекурсивных
функций видно, что каждая примитивно-рекурсивная функция является
вычислимой. Верно ли обратное утверждение: всякая вычислимая функция -
примитивно-рекурсивная? Иначе: все ли вычислимые функции охватывает
этот механизм? Ответ на этот вопрос даётся в подразд. 2.2.2.

66
О.Н. Паулин. Основы теории алгоритмов

2.2.2. Построение класса общерекурсивных функций

Математиками были предприняты попытки построения вычислимых


функций, не являющихся примитивно-рекурсивными, и такие функции бы-
ли получены. Это позволило сделать вывод, что класс примитивно-рекур-
сивных функций не охватывает всех вычислимых функций и нуждается в
расширении. Однако нас ограничивает, прежде всего, принятая форма
индукции (схема V), которая определяет функцию  через уже известные
функции  и .
Пример 2.3. Вычислим для примера 2.2 значение (3, 5). Формально
проанализируем, какие операции нужно совершить, чтобы, пользуясь
схемой (A) и (B), вычислить (3, 5).
1. Подставим в (B) вместо переменных числа n=2, x=5. Получим
(3, 5)=(2, 5)+1.
2. Подставим в (B) n=1, x=5 и определим (2, 5): (2, 5)=(1, 5)+1.
3. Аналогично получим (1, 5)=(0, 5)+1.
4. Подставим в (A) x=5. Получим (0, 5)=5.
5. Заменим в выражении п. 3 (0, 5) на 5, согласно п. 4:
(1, 5)=5+1=6.
6. Заменив (1, 5) в выражении п. 2 её значением из п. 5, получим
(2, 5)=6+1=7.
7. Наконец, заменив (2, 5) в выражении п. 1 её значением из п. 6,
получим (3, 5)=7+1=8.
В этом примере для организации вычислений понадобились лишь две
операции:
1) подстановка чисел на место переменных;

67
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

2) замена вхождений, т. е. замена правой части в одном из равенств


левой частью другого равенства (или наоборот).
Если некоторое равенство может быть выведено с помощью этих
двух операций из заданной системы равенств Е, то говорят, что это
равенство выводимо в системе Е. В примере 2.2 системой Е является
само описание функции (n, x).
Определение. Функция ( x1, xn ) называется общерекурсивной, если
существует такая конечная система равенств Е, что для любого набора чисел
x1* , xn* найдётся такое одно и только одно число y*, что равенство ( x1* , xn* )=y*
может быть выведено из Е с помощью конечного числа применений операций
подстановок чисел на место переменных и замены вхождений.
Говорят, что Е рекурсивно определяет функцию . Здесь не требует-
ся, чтобы значения функции вычислялись с помощью её значений в пре-
дыдущих точках; не требуется, чтобы входящие в систему Е вспомо-
гательные функции были всюду вычислимы; не фиксируется никакая схема
индукции. Требуется только, чтобы система равенств Е так определяла
данное значение  с помощью других значений  и некоторых значений
вспомогательных функций, чтобы  во всех точках можно было однозначно
вычислять на основании системы Е.
Приведенное определение общерекурсивной функции не конструк-
тивно, так как не раскрывает механизма вычислительной процедуры на-
хождения числа y*. Можно, конечно, попробовать выводить из Е все воз-
можные равенства до тех пор, пока не встретится нужное равенство.
Однако при таком подходе нет никакой гарантии, что этот процесс
перебора не продлится неопределённо долго (ср. с лабиринтом).
Процессу перебора можно придать определённую регулярность, так
чтобы этот процесс годился для вывода равенства ( x1* , xn* )=y* за конеч-
ное, но не ограниченное заранее число шагов.

68
О.Н. Паулин. Основы теории алгоритмов

Предварительно отметим, что равенство ( x1* , xn* )=y* может быть


представлено в эквивалентной форме ( x1* , xn* , y)=0. Последнее равенство
в общем случае имеет вид ( x1, xn , y)=0; этому выражению может быть
поставлен в соответствие предикат P( x1, xn , y), истинный в случае =0.
Гёдель предложил метод сведения любого алгоритма к численному
алгоритму путём специальным образом организованной нумерации любых
выражений (своеобразной их кодировки). Этот метод носит название
гёделизации. Рассмотрим этот метод.
Включим все условия задачи, доступные для переработки данным
алгоритмом A, в занумерованную неотрицательными целыми числами
последовательность A0, A1, …, An. Аналогично записи возможных решений
также включим в занумерованную последовательность B0, B1,..., Bm.
Теперь можно любой алгоритм, перерабатывающий запись условий
An в запись решения Bm, свести к вычислению значений некоторой число-
вой функции m = (n), т.е. можно говорить об алгоритме, который перера-
батывает номер записи условия в номер записи решения. Этот алгоритм
будет численным алгоритмом. Очевидно, что если есть алгоритм, реша-
ющий исходную задачу, то имеется и алгоритм вычисления соответ-
ствующей функции. Справедливо и обратное утверждение.
Гёдель предложил рассматривать запись некоторого числа n в фор-

ме n = p a a1 am
0 p1 ... p m , где p0=2, p1=3, p2=5 и вообще pm - m-е простое
0

число.
Из этой записи видно (в силу теоремы о единственности разложения
любого числа на простые множители), что каждому числу n однозначно соот-
ветствует набор a1, a2, .., am и, наоборот, каждому набору a1, a2, ..., am
однозначно соответствует число n. Например, при n=60 имеем: 60 = 22 31 51,
т.е. a1 = 2, a2 = 1, a3 = 1.

69
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

C помощью этого метода можно нумеровать теперь любые упоря-


доченные последовательности, состоящие из m чисел. Рассмотрим
следующие примеры.
1. Каждой паре чисел a1 и a2, для которой нужно найти её
наибольший общий делитель q, может быть поставлен в соответствие

гёделевский номер этой пары n = 2a1  3a2 .

Алгоритм Евклида сведётся тогда к вычислению функции q =(n).


2. Пусть требуется занумеровать все слова в некотором алфавите A.
Это легко сделать, поставив в соответствие каждой букве алфавита какое-
либо число. Тогда каждому слову в алфавите A будет соответствовать
последовательность чисел. Проводя затем обычным способом
гёделизацию, получим гёделевский номер этой последовательности. Ясно,
что номер слова определяется выбранной системой соответствий между
буквами и числами. Теперь легко пронумеровать все последовательности
слов (например, все дедуктивные цепочки). Здесь также имеется
однозначное соответствие последовательности слов и
последовательности гёделевских номеров этих слов. Проведя
гёделизацию вторично, можно определить гёделевский номер самой
последовательности гёделевских номеров отдельных слов.
Итак, с помощью гёделизации арифметические алгоритмы сводятся к
вычислению значений целочисленных функций. Аналогично любой нормаль-
ный алгоритм Маркова может быть также сведен к вычислению значений
целочисленных функций. Поэтому алгоритм вычисления значений целочис-
ленных функций можно считать универсальной формой алгоритма.
Оказывается, что путём гёделизации процесс перебора всех выводов
из Е (см. с. 68) сводится к применению оператора наименьшего числа .

70
О.Н. Паулин. Основы теории алгоритмов

Введение в рассмотрение этого оператора приводит к иному способу


определения рекурсивных функций.
Оператор наименьшего числа  ставит в соответствие примитивно-
рекурсивному предикату P( x1, xn , y) (или примитивно-рекурсивной функ-
ции ( x1, xn , y), представляющей предикат P) примитивно-рекурсивную
функцию ( x1, xn ) следующим образом:
( x1, xn )=y| P( x1, xn , y)=  y| ( x1, xn , y)=0 (2.5)
при условии
(  x1)(  x2)...(  xn)(  y)| P( x1, xn , y), (2.6)
или
(  x1)(  x2)...(  xn)(  y)|( x1, xn ,y)=0. (2.7)
Утверждение. Любая общерекурсивная функция ( x1, xn ) может быть
представлена в виде
( x1, xn )=(y|( x1 , xn ,y)=0), (2.8)
где  и  - примитивно-рекурсивные функции, причём для функции 
справедливо выражение
(  x1)(  x2)...(  xn)(  y)|( x1 , xn ,y)=0. (2.9)
Типичной ситуацией применения -оператора является построение
обратных функций. Допустим, что для некоторой функции y=f(x) существу-
ет обратная функция, т. е. для каждого натурального y существует един-
ственное значение x, для которого f(x)=y; в таком случае обратная функция
x=(y) может быть определена посредством -оператора:
(y)=  x |f(x)=y. (2.10)
Многие функции анализа, такие как показательная cx и степенная xc ,
определены на всём натуральном ряде, если параметр c выбран подхо-
дящим образом. Однако этого нельзя утверждать об обратных функциях;
например, logcx или c
x , в общем случае не будет натуральным числом
даже при натуральном c. В таких случаях удобно рассматривать арифме-

71
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

тические варианты обратных функций, которые заключаются в следу-


ющем: в качестве значений функции объявляется целая часть истинных
значений функции, т. е. ](y)[, где ]x[ - целая часть числа x. Теперь ясно,
что, исходя из функции у=cx или y=xc, можно определить арифметические
обратные функции посредством -оператора:
]logr(y)[ =x | rx+1>y;
]r y [ =x |(x+1)r >y.
Рекурсивное описание называется примитивно-рекурсивным, если в
нём не участвует -оператор, т. е. допускаются только операторы супер-
позиции, введения фиктивных переменных и примитивной рекурсии.
Если к уже известным схемам определения примитивно-рекурсивных
функций добавить схему VI, составленную из (2.8) и (2.9), то в результате
конечного числа применений схем I-VI получим общерекурсивную функцию
( x1, xn ).
Таким образом, примитивно-рекурсивные функции являются частным
случаем общерекурсивных функций; всякая примитивно-рекурсивная фун-
кция есть общерекурсивная функция, но не наоборот.

2.3. Модели дискретной обработки информации

2.3.1. Конечные автоматы

Автомат - это математическая абстракция, которая предназначена


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

72
О.Н. Паулин. Основы теории алгоритмов

человека - теории и практике административного управления, лингвистике


(анализ синтаксиса формального языка, расшифровка древних рукописей)
и т. д. Универсальность теории автоматов позволяет рассматривать с
единой точки зрения различные объекты, учитывать связи и аналогии
между ними, переносить результаты из одной области в другую.
Автомат описывается шестёркой элементов А=(Q, X, Y, ,q1),
где Q = {q1, q2,..., qr} - множество состояний (алфавит состояний);
X = {x1, x2,..., xn} - множество входных символов (входной алфавит);
Y = {y1, y2,..., ym} - множество выходных символов (выходной алфавит);
 - функция переходов, реализующая отображение множества D,
DQX, на множество Q (qp = (qj, xj), qpQ);
 - функция выходов, реализующая отображение множества D DQX,
на множество Y (yd = (qj, xi), yd  Y);
q1 - начальное состояние автомата.
В общем случае автомат может иметь некоторое количество входов и
выходов, и тогда каждому входу и каждому выходу может соответствовать
свой алфавит. Рассмотрим более простой случай автомата с одним входом
и одним выходом.
Автомат называется конечным, если конечны множества Q, X и Y.
Автомат называется полностью определённым, если D=D=QX; у
частичного автомата функции  и  определены не для всех пар (qj,
xi)QY.
Символами xi и yk обозначают события в процессе или сигналы в
устройствах. Иногда используют вместо понятия “символ” понятие “буква”;
а последовательность букв называют словом.
В отличие от привычного рассмотрения времени (время непрерывно и
задается на континууме), при изучении и проектировании автоматов удобно
рассматривать воображаемое дискретное время (автоматное время,

73
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

заданное на счётном множестве). Разобьём непрерывную числовую


полуось на бесконечное число конечных интервалов, не обязательно
равных между собой, и обозначим точки, разделяющие интервалы,
неотрицательными целыми числами, начиная с 0 (рис. 2.1,а).
Будем называть дискретным временем t время, которое принимает
лишь эти целочисленные значения. Моменты времени, обозначенные
числами 0,1,2,..., будем называть тактами.
Отметим, что в реальных условиях сигналы представляются
непрерывными функциями времени, поэтому для надежного различения
сигналов требуется, чтобы новые значения на входах появлялись после
окончания переходных процессов, связанных с предыдущими значениями.
При рассмотрении логической структуры автоматов обычно отвлекаются от
существа этих процессов и считают, что переменные изменяются
мгновенно в тактовые моменты.
Кроме входных и выходных переменных, можно выделить некоторую
совокупность промежуточных переменных, которые связаны с внутренней
структурой автомата; именно они характеризуют состояние конечного
автомата (КА).
При рассмотрении КА значения символов состояний и входов
существенны лишь в моменты тактов и несущественны - в промежутках
между ними. Поэтому эту модель можно использовать и для описания
непрерывных устройств (процессов), если фиксировать значения символов
состояний и входов в моменты тактов; при этом важно, чтобы в
рассматриваемые дискретные моменты множество возможных состояний
было конечным и чтобы удовлетворялось требование однозначной связи
между состояниями в соседних тактах.

74
О.Н. Паулин. Основы теории алгоритмов

Понятие “состояние автомата” определяет некоторую предысторию


его поведения как реакции на символы, которые поступали ранее на его
входы, т. е. состояние соответствует некоторой памяти о прошлом.
Строгое определение понятия состояния связывается с той ролью,
которую оно играет при определении конечных автоматов. Во-первых,
значение выходной переменной на p-м такте (p-present-настоящее) y(p)
однозначно определяется состоянием q(p) и значением входной
переменной x(p) на том же такте, т. е. y(p)=(q(p), x(p)). Во-вторых,
состояние q(p+1) в следующем, (p+1)-м такте, однозначно определяется
состоянием q(p) и входной переменной x(p) в рассматриваемом такте -
q(p+1)=(q(p), x(p)).
Таким образом, состояние КА в любой тактовый момент
характеризуется значением такой переменной, которая вместе с заданным
значением входной переменной позволяет определить выходную
переменную в данный тактовый момент и состояние в следующий
тактовый момент.
Ясно, что автоматы должны обладать способностью сохранять
предыдущее состояние до следующего такта, в связи с чем их называют
автоматами с памятью (последовательностными машинами). В
качестве памяти могут использоваться элементы задержки, на выходах
которых повторяются входные воздействия со сдвигом во времени на
интервал между тактами t.
Термин “состояние” позволяет устранить время как явную
переменную и выразить выходные символы как функцию состояний
автомата и входов в данный момент (такт). В каждый момент t=0,1,2,...
дискретного времени КА находится в определённом состоянии q(t) из
множества Q состояний автомата, причём в начальный момент t=0 он
всегда находится в начальном состоянии q(0)=q1. В момент p (рис. 2.1,б),

75
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

находясь в состоянии q(p), КА способен воспринять на входе символ x(p)X


и выдать на выходе сигнал y(p)=(q(p), x(p)), переходя в состояние
q(p+1)=(q(p), x(p),); q(p)Q, y(p)Y.
Таким образом, КА реализует некоторое отображение  множества
слов входного алфавита X во множество слов выходного алфавита Y: если
на вход автомата, установленного в начальное состояние q1, подавать
некоторую последовательность букв входного алфавита x(0), x(1), x(2),...,
т. е. входное слово, то на выходе КА будут последовательно появляться
буквы выходного алфавита y(0), y(1), y(2),..., т. е. выходное слово. Относя к
каждому входному слову соответствующее ему выходное слово, получим
отображение , индуцированное конечным автоматом.
Автомат без памяти называется тривиальным автоматом, или
комбинационной схемой. В таких автоматах значения выходных
переменных определяются только комбинацией входных переменных в
данный момент; для комбинационных схем функция переходов не имеет
смысла, а функция выходов вырождается к виду y(p)=(x(p)).
На практике наибольшее распространение получили автоматы Мили
и Мура, приведенные на рис. 2.1,в и г; здесь: F1 и F2 - комбинационные
схемы; D - задержка на один такт (память), q’ - новое (следующее)
состояние в момент t = p.
Закон функционирования автомата Мили задается уравнениями:
q(t+1) = (q(t), x(t)); y(t) = (q(t), x(t)), t = 0, 1, 2, ..., (2.11)
а автомата Мура -
q(t+1) = (q(t), x(t)); y(t) = (q(t)), t = 0, 1, 2, ..., (2.12)

76
О.Н. Паулин. Основы теории алгоритмов

Отметим особенности функционирования автоматов Мили и Мура:


 оба автомата одинаково формируют новое состояние (q, x)q’,
которое затем задерживается на один такт, q(p+1) = q’(p);
 выходной символ в автомате Мили определяется непосредственно
входным символом и состоянием в текущий момент t=p ((q, x)y), а в
автомате Мура - только состоянием в текущий момент (qy) и
опосредованно - состоянием и входным символом в предыдущий момент
t=p-1 (y(p)=(q(p)), где q(p)=(q(p-1), x(p-1)));
 поскольку в автомате Мура выходной символ однозначно
определяется его состоянием, то это позволяет идентифицировать
состояние автомата по символам на его выходе, т. е. проверять
правильность функцио-нирования синтезированного автомата;

77
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

 автомат Мили обычно проще (в смысле меньшего числа состояний)


эквивалентного ему автомата Мура.
При анализе и синтезе КА используются в основном две стандартные
формы представления автомата: табличная и графическая. Рассмотрим
эти формы.
Автомат может быть представлен двумя таблицами для каждой из
функций  и  либо совмещённой таблицей, несколько отличающейся для
автоматов Мили и Мура.
При табличном представлении строки именуются символами
состояний, а столбцы - символами входа; в клетках таблиц проставляются
символы состояний, причём состояния записываются рядом через
разделитель “/” с соответствующими выходными символами: для автомата
Мили - в клетках, а для автомата Мура - в именующем столбце.
Для примера табл. 2.1 описывает поведение автомата Мили, а табл.
2.2 - автомата Мура.
Таблица 2.1 Таблица 2.2
A1 x1 x2 A2 x1 x2
q1 q2/y1 q3/y2 q1/ y1 q2 q4
q2 q3/y3 --- q2/y1 q5 q2
q3 q4/y3 q2/y1 q3/y3 q5 q2
q4 --- q2/y2 q4/y2 q3 q1
q5/y3 q3 q1

Граф автомата - ориентированный связный граф, вершины которого


соответствуют состояниям, а дуги - переходам между ними. Две вершины
графа автомата qi и qj (исходное состояние и состояние перехода)
соединяются дугой, направленной от qi к qj, если в автомате есть переход
qiqj, т. е. если qj=(qi, xk) при некотором xkX. В случае автомата Мили
дуге графа приписываются входной символ xk и выходной символ yg=(qi,
xk), Если некоторые состояния автомата не определены, то в

78
О.Н. Паулин. Основы теории алгоритмов

соответствующих клетках таблицы ставится прочерк; в этом случае


автомат является частичным. Если переход qiqj происходит под
действием нескольких входных символов, то дуге (qi, qj) приписываются все
эти входные и соответствующие выходные символы. При описании
автомата Мура в виде графа выходной символ yg=(qj) записывается рядом
с вершиной qj (или внутри неё).
На рис. 2.2 и 2.3 приведены заданные ранее табл. 2.1 и 2.2 графы
автоматов А1 (частичный автомат Мили) и А2 (автомат Мура; здесь
переход q2q2 является петлёй).

79
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

2.3.2. Машина Тьюринга, её свойства и особенности

Во введении были отмечены интуитивно очевидные требования к


алгоритмам: детерминированность, массовость и результативность. При
этом не важно, как алгоритм реализуется: человеком или машиной. Из
отличительных свойств алгоритмов вытекают общие требования к машине,
выполняющей алгоритм:
 машина должна быть полностью детерминированной и действовать
в соответствии с заданной системой правил;
 машина должна допускать ввод различных начальных данных,
соответствующих различным задачам из заданного класса задач.
 заданная система правил работы машины и класс решаемых задач
согласованы так, чтобы всегда можно было "прочитать" результат работы
машины.
Предложены различные конструкции машин, способные выполнять
алгоритмы. Наиболее наглядную конструкцию предложил английский
математик Тьюринг (рис. 2.4,а).
Машина содержит бесконечную одномерную ленту, которая разде-
лена на ячейки. Будем считать, что лента бесконечна лишь в одном на-
правлении (вправо), так что существует ячейка, про которую можно ска-
зать, что она нулевая (самая левая). В каждой ячейке может быть записан
лишь один символ xi из конечного алфавита X={x0, x1,..., xn}; символ x0
выделяем специально: если в некоторой ячейке записан символ x0, то эта
ячейка "пустая". В дальнейшем будем считать, что непустых символов на
ленте каждый раз имеется конечное (но сколь угодно большое) число,
остальные ячейки - пустые. Символом # отмечается левый конец ленты.
В конструкцию МТ входит также специальное устройство,
содержащее считывающую и записывающую головку (далее - просто

80
О.Н. Паулин. Основы теории алгоритмов

головка), которая может располагаться над любой из ячеек ленты и по


команде извне может "стереть" записанный в этой ячейке символ и
записать новый.
Головка может также по команде uU = { R, L, S} перемещаться на
одну позицию вправо (R- Right) или влево (L-Left), если она не находится в
самой левой ячейке, либо не перемещаться (S – Stop). Команды на головку
подаются от управляющего устройства, которое в свою очередь получает
от головки сигнал о наличии того или иного символа в ячейке ленты,
расположенной под головкой.
Управляющее устройство (УУ) машины Тьюринга – это конечный
автомат, который имеет конечное число состояний (m+1) из множества
Q={q0, q1,..., qm} и работает в дискретном времени t = 0,1,2… . Структурная
схема УУ как автомата приведена на рис 2.4,б; здесь F1, F2, F3 –
комбинационные схемы (преобразователи дискретной информации без
памяти); D1, D2 – элементы задержки символа (сигнала) на один такт.

Нетрудно видеть, что блоки F1, D1, F2 образуют автомат Мили (рис.
2.1,б), который формирует новый символ x, xX, для записи на ленте, а

81
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

дополнительные к ним блоки F3, D2 формируют команду uU на


перемещение головки.
Машина Тьюринга (точнее, её УУ) описывается, как и автомат,
шестёркой T = (Q, X, Y, , , q1), однако в данном случае имеются
особенности. Выходной алфавит Y и функция выхода  имеют смысл,
отличный от аналогичных элементов шестёрки автомата: символы
выходного алфа-вита Y машины составлены из пар XY, YXU, функция

выхода состав-лена из двух подфункций =(1, 2), так что (q, x)  y=(x, u)
1 2
или (q, x)  x, (q, x)  u, где u – символ из алфавита U = { R, L, S}.
Рассмотрим функционирование машины Тьюринга.
Входным данным для УУ является символ xi, считываемый головкой с
текущей ячейки с номером l.
Выходными данными для УУ являются: символ xk, который головка
должна записать в ячейку, а также команда u из алфавита U.
Пусть в момент t головка находилась напротив второй ячейки l, в
которой был записан символ xi, а управляющее устройство находилось в
состоянии qj. УУ в зависимости от пары символов (qj, xi,) выдаёт символ xk
(т.е. головка стирает старый символ xi и записывает новый символ xk), а
затем - один из символов перемещения головки R, L, S. После этого УУ
переходит в новое состояние qr (также однозначно определяемое парой
символов (qj, xi,)). Тем самым в момент t+1 в l-ой ячейке будет записан
символ xk, УУ будет находиться в состоянии qr, а головка расположится
напротив l+1, l-1 или l-ой ячейки.
Важно отметить, что МТ работает последовательно, т. е.
последовательно обрабатывает ячейку за ячейкой (данные, записанные в
них) в зависимости от команд, формируемых УУ.

82
О.Н. Паулин. Основы теории алгоритмов

Функционирование машины Тьюринга осуществляется в соответствии


с так называемой функциональной схемой (совмещённой таблицей, подоб-
ной таблицам автоматов  см. подразд. 2.3.1), в каждой клетке которой
записывается тройка символов: символ нового состояния и новый входной
символ, а также символ команды на перемещение головки; это реакция
машины на входной символ в зависимости от состояния, в котором
находилась машина, т.е. (q, x)  (q, x, u).
В табл. 2.3 приведены различные варианты реакции УУ, при которых
символ в ячейке и состояние изменяются либо нет, перемещение головки
имеется либо отсутствует.
Каждую строку функциональной схемы можно рассматривать как
условный оператор с множеством альтернатив, определяемых значением
входного символа, а имя строки (данное состояние машины) – как метку
этого оператора. Тогда вся функциональная схема (ФС) представляет
собой программу функционирования МТ.
Таблица 2.3
МТ x0 ... xi ... xn
q0 q0 x0 S ... q0 xi S ... q0 xn S
... ... ... ... ... ...
qj q0 x0 L ... qr xk S ... qj xi R
... ... ... ... ... ...

Если функциональная схема МТ задана, то при каждом заполнении


ленты работа машины однозначно определена.
Далее будем считать, что символ q0 состояния УУ означает состояние
покоя МТ, т. е. строка q0 ФС обладает следующими свойствами:
 первым символом в каждой клетке этой строки всегда является q0;
 вторым символом в клетке столбца xi этой строки является символ xi;
 третьим символом в каждой клетке строки является символ S.

83
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

Поэтому, если УУ в какой-то момент имеет состояние q0, то где бы ни


находилась головка и каким бы ни было заполнение ленты, в последуюший
момент времени УУ будет оставаться в том же состоянии, заполнение
ленты останется прежним, головка также не сдвинется. Для упрощения
записи ФС строка q0 в ней опускается.
В дальнейшем для простоты будем предполагать, что алфавит
символов Х состоит из двух символов: "пустого" - 0 и "не пустого" - 1.
Рассмотрим несколько примеров МТ. Начальным состоянием машины
здесь и далее будем считать состояние q1; рассмотренные в этих примерах
машины имеют по одному состоянию (не считая состояния покоя).
Пример 2.4. Машина А (табл. 2.4). Если в начальный момент машина
воспринимает заполненную ячейку, то она "отыскивает" на ленте первую
пустую (т.е. заполненную символом 0 ячейку) справа от той, над которой
находится головка, вписывает туда символ 1 и останавливается. Если
вначале головка находится напротив пустой ячейки, то машина её
"заполняет" и останавливается, не передвигая головку.
Пример 2.5. Машина B (табл. 2.5) "стирает" единицу в той ячейке, над
которой находится головка (если ячейка не пустая), передвигает головку
влево и останавливается. Если в начальный момент ячейка под головкой
пустая, то машина передвигает головку влево до тех пор, пока не найдёт
заполненную ячейку, очищает её, передвигает головку влево и
останавливается.
Пример 2.6. Машина С (табл. 2.6), отправляясь от заполненной
ячейки, идёт влево и останавливается левее группы единиц на две ячейки.
Пример 2.7. Машина D (табл. 2.7), имея два состояния покоя,
распознает, напротив какой ячейки находится, - пустой либо заполненной;
в зависимости от этого переходит в первое либо второе состояние покоя.

84
О.Н. Паулин. Основы теории алгоритмов

В некоторых случаях МТ может быть недоопределена в том смысле,


что не все ячейки её ФС заполнены. Это допускается в тех случаях, когда
можно заранее сказать, что некоторые сочетания состояний машины и
символов на ленте по тем или иным причинам никогда не встречаются.

Иногда МТ может иметь несколько состояний покоя: q '0 , q '0' , q '0'' ... .
Таблица 2.4 Таблица 2.5 Таблица 2.6 Таблица 2.7

A 0 1 B 0 1 C 0 1 D 0 1
’’
q1 q01S q11R q1 q10L q00L q1 q00L q11L q1 q0’0S q 1S
0

Суперпозиция машин Тьюринга

Относительно МТ применимы такие соглашения:


 работа машины однозначно определена функционированием УУ в
соответствии с её функциональной схемой;
 МТ всегда начинает работу от начального состояния (символ q1) и
имеет состояние покоя (символ q0), которым заканчивается её работа.
Эти соглашения позволяют определить операции над МТ, благодаря
которым можно по заданным ФС получать новые ФС. Различают
следующие операции над машинами Тьюринга: композиция (произведение)
и ите-рация, а также их комбинации, что позволяет строить суперпозиции
МТ.
Пусть имеются две МТ: Т1 и Т2. Произведением МТ Т1 и Т2
называется машина Т, T=T1T2, ФС которой строится так:
 если УУ машин Т1 и Т2 имеют m1 и m2 состояний соответственно
(исключая состояние покоя), то УУ машины Т имеет m1+m2 состояний,
причём начальным состоянием машины Т является начальное состояние

машины Т1 ( q1  q11 ), а конечным - состояние покоя машины Т2 ( q 0  q 02

), т. е. машина Т1 начинает работу, затем передает «эстафету управления»


машине Т2, а Т2 заканчивает её;

85
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

 ФС машины Т состоит из двух частей: верхняя описывает машину


Т1, а нижняя - Т2, причём состояние покоя Т1 отождествляется с
1 2
начальным состоянием Т2, т. е. q 0  q1 .
Операция умножения машин обладает свойствами:
1) Т1 Т2  Т2 Т1 (некоммутативность);
2) ( Т1 Т2 ) Т3 = Т1 ( Т2 Т3 ) = Т1 Т2 Т3 (ассоциативность).
Возможен случай произведения одинаковых машин - степень МТ:
Тn = ТТ...Т - n раз.
До сих пор рассматривалось умножение машин, имеющих одно
состояние покоя. В том случае, когда одна из перемножаемых машин
имеет несколько состояний покоя, умножение определяется аналогично
описанному, но обязательно должно присутствовать указание, какое из
состояний покоя предыдущего сомножителя отождествляется с начальным
состоянием данного. Так, например, если машина Т1 имеет два состояния
покоя, то произведение Т1 и Т2 может быть обозначено через
(1)T2
T=T1  либо T=T1 (2.13)
(1)

( 2) ( 2)T2

в зависимости от того, отождествляется ли начальное состояние машины


Т2 с первым или со вторым состоянием покоя машины Т1. Машина Т в
этом случае также имеет два состояния покоя: для первого варианта -
состояние покоя машины Т2 либо второе состояние покоя машины Т1, для
второго варианта - первое состояние покоя машины Т1 либо состояние
покоя машины Т2.
Из предыдущего определения ясен также смысл такой, например,
записи (формулы):
(1)T2 T3
Т= T1 
( 2)T 4
. (2.14)
Здесь умножение производится независимо по двум "каналам",
которые связаны с первым либо вторым состоянием покоя машины Т1.

86
О.Н. Паулин. Основы теории алгоритмов

Рассмотрим операцию итерации, которая применяется к одной


машине. Пусть машина Т1 имеет r состояний покоя. Выберем какое-либо l-е
состояние покоя и отождествим его в ФС машины Т1 с начальным
состоянием. Полученная машина является результатом итерации машины
Т1 и обозначается через
(1 )


Т= .
...

 
( l )

T1 



...
(r )

(2.15)
Здесь точки над Т1 и l указывают на отождествление l-го состояния
l
покоя машины Т1 с её начальным состоянием ( q1  q 0 ). Отметим, что
если Т1 имеет лишь одно состояние покоя, то после применения итерации
получается машина, не имеющая вовсе состояния покоя.
Если обратиться к понятию программа для МТ, то, как не трудно
видеть, композиции машин соответствует линейное представление общей
программы, итерации - циклическое представление, а множеству стоп-
состояний – разветвление в программе. Таким образом, в программе
(алгоритме, поскольку программа – одно из представлений алгоритма) для
суперпозиции МТ можно выделить три базовых фрагмента, присущих
схемам алгоритма. Из этого следует принципиальная возможность
создания МТ (её ФС), реализующей любой алгоритм. Эта возможность
утверждается в основной гипотезе теории алгоритмов: всякий алгоритм
может быть задан посредством тьюринговой функциональной схемы и
реализован в соответствующей машине Тьюринга.
Пример 2.7 Пусть имеются 4 машины (A, B, C и D), заданные своими
ФС (табл. 2.4 - 2.7). Суперпозиция N из заданных МТ описывается
формулой
  

(2.16)

N  C D B .

 A

87
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

Для суперпозиции N требуется построить: 1) функциональную схему;


2) схему алгоритма; 3) граф переходов, а также записать словесное
описание работы машины N.
1. Составляем для машины N функциональную схему, заполняя её
строками из ФС каждой исходной машины в том порядке, в каком они
записаны в формуле (слева направо и сверху вниз); далее записываем
состояния в первой колонке таблицы в порядке возрастания их номеров,
обозначив состояния машины N pq, и соответственно проводим
переобозначение состояний в двух других колонках с учётом правил
передачи эстафеты управления. В результате получаем табл. 2.8.
Таблица 2.8
N 0 1 Список обозначений
p1 p20L p11L
C C D B A
p1  q1 , p2  q1 , p3  q1 , p4  q1 ;
p2 p30S p41S
D p3 p30L p10L '
C D B
B p4 p01S p41R q0  q1  p2 ; qD
0  q1  p3;

A
''
B C A A
q0  q1  p1 ; qD
0  q1  p 4 ; q0  p0

2. По полученной ФС строим схему алгоритма, исходя из того, что


каждая строка ФС может рассматриваться как условный оператор
программы функционирования МТ, а состояние (имя строки) – как метки
этой программы.
На рис. 2.5,а представлена СА функционирования машины N. Здесь
SL(x) (SR(x)) – процедура SEARCH поиска на ленте символа x (X={0, 1})
при движении головки влево (вправо); R, L, S – команды на перемещение
головки; Z - содержимое текущей ячейки. Для примера на рис. 2.5,б
показана процедура SL(x).

88
О.Н. Паулин. Основы теории алгоритмов

3. В соответствии с табл. 2.8 строим граф переходов машины N (рис.


2.5,в), отмечая на переходах из состояния в состояние реакцию УУ
(команды головке на запись символа в ячейке и на перемещение головки) в
зависимости от символа, обозреваемого головкой на ленте.

На рис. 2.6 приведен пошаговый процесс обработки данных на ленте


(подчёркнута ячейка, над которой находится головка в данном такте;
жирным шрифтом отмечена цифра, которая изменилась на прошлом
такте).

Такт Номер Ситуация на ленте


состояния
0 1 …110100111100…

89
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

1 1 …110100111100…
2 1 …110100111100…
3 1 …110100111100…
4 1 …110100111100…
5 2 …110100111100…
6 3 …110100111100…
7 3 …110100111100…
8 1 …110000111100…
9 2 …110000111100…
10 4 …110000111100…
11 4 …110000111100…
12 0 …111000111100…

Рис. 2.6. Ситуации на ленте (к концу такта) при работе машины N

4. По СА функционирования (это можно сделать и по ФС)


сформируем один из вариантов словесного описания алгоритмов
функционирования машины N: машина, двигаясь влево, проходит группы
пустых или заполненных ячеек, причём первую заполненную ячейку после
группы пустых очищает, отыскивает на ленте одинокую пустую ячейку
(ситуацию ...101...), заполняет её и останавливается над ней.
Отметим, что при отсутствии на ленте указанной ситуации головка
дойдёт до левой границы ленты, что можно рассматривать как аварийное
завершение работы машины.

90
О.Н. Паулин. Основы теории алгоритмов

2.4. Уточнение понятия алгоритма. Тезис Чёрча

Неразрешимость некоторых алгоритмических проблем поставила перед


математиками трудную задачу точного определения понятия “алгоритм”.
Решение этой задачи было получено в 30-х гг. XX в. в двух формах:
1) решение основано на понятии рекурсивной функции;
2) решение основано на описании точно очерченного класса вычис-
лительных процессов, реализуемых на машинах Тьюринга.
Отправляясь от аксиоматики Гильберта, Гёдель описал класс всех
рекурсивных функций как класс всех арифметических функций, определи-
мых в некоторой формальной системе. Исходя из других предпосылок,
Чёрч пришёл в 1936 г. к тому же классу арифметических функций. Анализ
идей, которые привели к этому классу функций, позволил Чёрчу выдвинуть
гипотезу о том, что класс рекурсивных функций тождествен классу всюду
определённых вычислимых функций (тезис Чёрча). Так как понятие
“вычислимые функции” точно не определено, то тезис Чёрча доказать
нельзя. Этот тезис является научной гипотезой, в пользу которой высказан
ряд важных доводов и которую не удалось опровергнуть. Одним из таких
доводов является то, что различные уточнения понятия “алгоритм”,
сделанные разными авторами, оказались равносильными. Так, например,
нормальный алгоритм Маркова оказался сводимым к ОРФ.
Для того, чтобы охватить бесконечно длящиеся процессы перера-
ботки исходных данных, Клини ввёл понятие частично рекурсивной функ-
ции и высказал гипотезу, что все частичные (т. е. не обязательно опреде-
лённые для всех значений аргументов) функции, вычислимые посредством
алгоритмов, являются частично рекурсивными. Более общая гипотеза
Клини также недоказуема, как и гипотеза Чёрча. В дальнейшем под
гипотезой Чёрча будет пониматься расширенная Клини формулировка.

91
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

Тезис Чёрча оказался достаточным, чтобы придать необходимую


точность формулировкам алгоритмических проблем и в ряде случаев
сделать возможным доказательство их неразрешимости. Отметим, что
понятие рекурсивной функции строгое. Поэтому обычная математическая
техника позволяет иногда непосредственно доказать, что решающая
задачу функция не может быть рекурсивной. Именно этим путём Чёрчу
удалось первому доказать неразрешимость основной алгоритмической
проблемы логики предикатов - проблемы тождественной истинности
формул исчисления высказываний.
Точное описание класса частичных рекурсивных функций вместе с
тезисом Чёрча даёт одно из возможных решений задачи об уточнении
понятия алгоритма. Однако это решение не вполне прямое, так как понятие
вычислимой функции является вторичным по отношению к понятию алго-
ритма. Спрашивается, нельзя ли уточнить непосредственно само понятие
алгоритма и уже затем при его помощи определить точно и класс вычисли-
мых функций? Это было сделано Постом и Тьюрингом независимо друг от
друга и почти одновременно с упомянутыми выше работами Чёрча и Клини.
Основная мысль Поста и Тьюринга заключалась в том, что алгорит-
мические процессы - это процессы, которые может осуществлять подхо-
дяще устроенная “машина”. В соответствии с этой мыслью ими были
описаны в точных математических терминах довольно узкие классы
машин, но на этих машинах оказалось возможным осуществлять или
имитировать все алгоритмические процессы, которые фактически когда-
либо описывались математически. Алгоритмы, осуществимые на данных
машинах, было предложено рассматривать в качестве математических
“представителей” вообще всех алгоритмов.
Несложные выкладки показали, что класс функций, вычислимых на
этих машинах, в точности совпадает с классом всех частично рекурсивных

92
О.Н. Паулин. Основы теории алгоритмов

функций. Тем самым было получено ещё одно фундаментальное


подтверждение тезиса Чёрча. Машины Поста и Тьюринга отличались
несущественно и в дальнейшем стали называться машинами Тьюринга.
Интуитивное определение как численных, так и логических алгорит-
мов похоже: в обоих случаях алгоритм определяется как система правил
для решения определённого класса задач, которая обладает свойствами
детерминированности, массовости и результативности.
Для уточнения понятия алгоритма в рассмотрение введен
нормальный алгоритм Маркова; эта форма алгоритма удобна для
специалиста по логике. Для тех же специалистов, которые имеют дело с
численными алгоритмами, удобней иметь стандартный аппарат, более
близкий к их естественной форме. Таким аппаратом является машина
Тьюринга.
В процессе построения теории численных алгоритмов было выяснено,
что любой логический алгоритм можно простыми методами свести к числен-
ному алгоритму. По мере усовершенствования этих методов стало ясно, что
вообще любой алгоритм может быть всегда сведен к численному алгоритму.
Таким образом, теория численных алгоритмов (это понятие тожде-
ственно понятию “теория вычислимых функций”) стала универсальным
аппаратом для исследования всех алгоритмических проблем.
Поскольку понятия “алгоритм” и “вычисление значений арифмети-
ческой функции” тождественны, то в соответствии с тезисом Чёрча задача
оказывается алгоритмически разрешимой лишь тогда, когда арифметиче-
ская функция, к вычислению которой сводится задача, оказывается
общерекурсивной. Иначе: алгоритм существует лишь тогда, когда может
быть построена общерекурсивная функция (просто рекурсивная функция).

93
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

Наоборот, в силу тезиса Чёрча алгоритмическая неразрешимость


проблемы означает, что арифметическая функция, к вычислению которой
сводится задача, не является рекурсивной.
Заключение

Рассмотрены 3 модели вычислений: ассоциативные исчисления (для


логических вычислений), рекурсивные функции (для численных вычисле-
ний) и машины Тьюринга (для общего случая вычислений, включая сим-
вольную обработку). Последняя модель используется также для доказа-
тельства существования алгоритма решения класса задач. Алгоритмы,
соответствующие этим моделям, равносильны и могут быть получены друг
из друга. Существуют и другие, специализированные модели.
Уточнение понятия алгоритм основано на использовании тезиса
Чёрча (классы ВФ и ОРФ равны) и на строгом определении двух объектов:
1) класс ОРФ; 2) МТ. В 1-м случае уточнение косвенное, во 2-м – прямое.
Исчисление – это не алгоритм, однако упорядочение допустимых
подстановок, предложенное А.А. Марковым, позволило создать
нормальный алгоритм; к нормальному алгоритму может быть сведен
любой вычислительный процесс, удовлетворяющий признакам 1-5 (см.
Введение) – это ещё одна формулировка, эквивалентная тезису Чёрча.
Различные формулировки тезиса Чёрча эквивалентны, что говорит об
их глубокой общности, суть которой состоит в том, что вычислительный
процесс для некоторого класса задач может быть построен, если его можно
описать рекурсивными функциями. Проверка такой возможности может
быть проведена на соответствующим образом построенной МТ.
Несуществование алгоритма для того или иного класса задач не
означает неразрешимости вообще; это означает лишь, что
рассматриваемый класс задач настолько широк, что единого

94
О.Н. Паулин. Основы теории алгоритмов

эффективного метода для решения всех задач данного класса не


существует.
Рекомендуем читателю ознакомиться с [6, 7, 8] для более глубокого
понимания материала данной главы.

Контрольные вопросы. Упражнения

1. Чем отличаются логические алгоритмы от численных?


2. Чем отличается исчисление от алгоритма?
3. Какие исчисления, в том числе ассоциативные, знаете Вы?
4. В чём заключается идея нормального алгоритма А.А. Маркова?
5. Каково соотношение множеств вычислимых, элементарных,
примитивно-рекурсивных и общерекурсивных функций?
6. За счёт чего расширен класс ПРФ до класса ОРФ?
7. Что общего и в чём различие классов ПРФ и ОРФ?
8. Почему недоказуема гипотеза Чёрча?
9. Заданы начальное слово P1=abcbcbab и система допустимых под-
становок: 1. abcd; 2. bcdd; 3. dcabc; 4. acca. Постройте дедуктив-
ную цепочку преобразований слов в соответствии с нормальным алгорит-
мом А. А. Маркова и объясните результат.
10. Определите примитивно-рекурсивные функции (y, x), заданные
своими схемами вычислений и начальными значениями:
а) (y’, x)=(y, x)x, (0, x)=1; е)(y, x)=(y, x)x, (0, x)=x;
б) (y, x)=(y, x)+x, (0, x)=0; ж)(y, x)=(y, x)+x (0, x)=0;
в) (y, x)=(y, x)+x, (0, x)=x; з)(y, x)=((y, x)+x) (0, x)=x;
г) (y, x)=(y, x)x, (0, x)=1; и)(y, x)=((y, x)+x)x (0,
x)=0;
д)(y, x)=(y, x)x, (0 x)=x; к)(y, x)=(y, x)+x, (0, x)=1.

95
Глава 2. МОДЕЛИ ВЫЧИСЛЕНИЙ

11. Используя условия п. б) и в) предыдущего упражнения, запишите


вид функций, определяемых соответствующими выражениями
y y
  ( i , x ) и   (i , x ) .
i 0 i 0

96