Учебное пособие 1518
.pdfконфигурация Т1 легко превращается в стандартную начальную конфигурацию для Т2.
Пример: Машина Т+(Ткоп) вычисляет функцию f(x)=2x для x 0. При этом машина Ткоп строит двухкомпонентный вектор, а Т+ вычисляет функцию от двух переменных.
Имеет место важный факт. Оказывается, что для вычисления на машине Тьюринга достаточно, чтобы лента была бесконечна только в одну сторону, например, вправо. Такая лента называется правой полулентой. Это следует из теоремы:
Теорема: Для любой машины Тьюринга Т существует эквивалентная ей машина ТR с правой полулентой.
Может быть предложено 2 идеи построения такой машины:
1)всякий раз, когда головке прежней машины надо зайти за левый край ленты, новая машина предварительно сдвинет все написанное (вместе с головкой) на клетку вправо;
2)лента „„перегибается„„ пополам. При этом ячейки правой половины размещаются, например, в нечетных ячейках, а ячейки левой половины – в четных.
Рассмотрим теперь вычисление предикатов на машинах Тью-
ринга. |
Машина Т вычисляет предикат Р( ) ( -слово в Аисх), если |
Т( )= |
, где =И, когда Р( ) истинно и =Л, когда Р( ) ложно. Если |
же Р( |
) не определено, то машина Т, как и при вычислении функ- |
ций, не останавливается. При обычном вычислении предиката уничтожается , что может оказаться неудобным, если после Т должна работать другая машина. Поэтому вводится понятие вычисления с восстановлением: машина Т' вычисляет Р( ) с восстановлением, если Т( )=. Если имеется машина Т, вычисляющая Р( ), то имеется и Т', вычисляющая Р( ) с восстановлением.
Возникает вопрос, для всех, ли процедур, претендующих на алгоритмичность, т. е. эффективных процедур, могут быть построены реализующие их машины Тьюринга? Ответ на этот вопрос содержится в тезисе Тьюринга: „„Всякий алгоритм может быть реализован машиной Тьюринга”. Это не теорема и не постулат, а утверждение, связывающее теорию с теми объектами, для описания которых она построена. По характеру тезис напоминает гипотезу физики об адекватности математических моделей физическим явлениям, которые они описывают.
51
4.5. Рекурсивные функции
Всякий алгоритм исходным данным, в случае, если он определен на них, ставит в соответствие результат. Поэтому с каждым алгоритмом однозначно связана функция, которую он вычисляет. Верно ли обратное: для всякой функции имеется алгоритм, вычисляющий еѐ? Оказывается, что нет. Тогда возникает вопрос; для каких функций алгоритмы существуют?
Исследование этих вопросов привело к созданию теории рекурсивных функций. В этой теории принят конструктивный финитный подход, основной чертой которого является то, что множество таких функций строится из конечного числа исходных объектов – базиса, с помощью простых операций, эффективная выполнимость которых достаточно очевидна. Операции над функциями называются операторами.
Займемся теперь конкретным выбором средств, с помощью которых будут строиться вычислимые функции. Очевидно, к вычислимым функциям следует отнести все числа: 0,1,2…. Однако в прямом включении бесконечного множеств констант нет необходимости. Достаточно одной константы 0 и функции следования f(x)=x+1, которую обозначают х , чтобы получить весь натуральный ряд. Кро-
ме того, в базис включим семейство { I mn } функций тождества (или введения фиктивных переменных):
I mn (x1,…,xn)=xm |
(m n) |
Мощным средством получения новых функций из уже имею-
щихся является суперпозиция. Оператором суперпозиции
S mn (h,g1,…,gm) называется подстановка в функцию от m переменных
функции от n переменных.
Например, для функций h(x1,…,xm),g1(x1,…,xn),…, gm(x1,…,xn)
S mn (h,g1,…,gm)=h(g1(x1,…,xn),…, gm(x1,…,xn)).
Это определение порождает семейство операторов суперпозиции { S mn }. Благодаря функциям тождества стандартизация суперпозиции не уменьшает ее возможностей: любую подстановку функций в функции можно выразить через S mn и
Пример 4.5:
f(x1,x2)=h(g1(x1,x2), g2(x1)) в стандартном виде запишется так:
52
f(x1,x2)= S 22 (h(x1,x2), g1(x1,x2), S 21 ( I12 (x1,x2), g2(x1), g3(x1))),
где g3(x1)- любая функция.
Используя подстановку и функции тождества, можно представлять и отождествлять аргументы в функции:
f(x2,x1, x3,…, xn)=f( I 22 (x1,x2), I12 (x1,x2), x3,…, xn), f(x1,x1, x3,…, xn)=f( I12 (x1,x2), I12 (x1,x2), x3,…, xn).
Таким образом, если заданы функции I mn и операторы S mn , то
можно считать заданными всевозможные операторы подстановки функций в функции, а так же переименования, перестановки и отождествления переменных.
Еще одно семейство операторов – это операторы примитив-
ной рекурсии. Оператор примитивной рекурсии Rn определяет
(n+1) – местную функцию f через n-местную функцию g и (n+2)-ме- стную функцию h следующим образом:
f(x1 , |
,xn ,0 ) |
g(x1 , ,xn |
), |
|
|
|
(4.2) |
f(x1 , |
,xn ,y |
1) h(x1 , |
,xn ,y,f(x1 , ,xn ,y)). |
Пара уравнений (4.2) называется схемой примитивной рекурсии. Тот факт, что f определена схемой (4.2), выражается равенством f(x1,…,xn)=Rn(g,h). В случае, когда h=0, т.е. определяемая функция f является одноместной, схема (4.2) принимает вид:
f(0)=с,
(4.3)
f(y+1)=h(y,f(y)), где с=const.
Схемы (4.2) и (4.3) определяют f рекурсивно не только через другие функции g и h, но и через значения f в предшествующих точках. Для вычисления f(x1,…,xn,k) понадобится (k+1) вычисление по схеме (4.2) для y=0,1,…,k.
Пример 4.6: Записать в стандартном виде n!.
f( 0 ) 1, |
h(y,z) (y 1)z y z, |
f(y 1) (y 1)f(y).
53
Индуктивное определение примитивно-рекурсивной функции.
1.Функции 0, хи I mn для всех натуральных m и n, где
mn являются примитивно – рекурсивными.
2.Если g1(x1,…,xn),…,gm(x1,…,xn), h(x1,…,xm) – прими-
тивно-рекурсивные, то S mn (h,g1,…,gm) – примитивно-рекурсивная функция для всех m, n N.
3.Если g1(x1,…,xn) и h(x1,…,xn,y,z) – примитивно-ре- курсивные, то Rn(g,h)- примитивно-рекурсивная функция.
4.Других примитивно-рекурсивных функций нет.
Пример 4.7:
1) Сложение f+(x,y)=x+y примитивно-рекурсивно f+(x,0)=x= I11 (x)
f+(x,y+1)= f+(x,y)+1= (f+(x,y)) ,
значит,
f+(x,y)=R1( I11 (x) ,h(x,y,z)), где h(x,y,z)=z =z+1.
2)Умножение f (x,y)=xy примитивно-рекурсивно f (x,0)=0
f (x,y+1)= f (x,y)+х= (f (x, f (x,y))
3)Возведение в степень fехр(x,y)=xу примитивно-рекурсивно
fехр(x,0)=1
fехр(x,y+1)= х xу = (f (x, fехр(x,y))
Пример 4.8: Вычитание.
Определим функцию х÷y (арифметическое или урезанное вычитание) так:
x y |
x y, |
если x |
y |
|
0, |
если x |
y |
||
|
Примитивно-рекурсивными являются следующие функции:
1)f(x)= x÷1 Определяется схемой: f(0)= 0÷1=1
f(y+1)= y.
2)f(x,y)=x÷y :
54
f(x,0)=x
f(x,y+1)= x÷(y+1)= (x÷y) ÷1=f(x,y) ÷1.
Для определения функции из пункта 2) используется функция из пункта 1).
3) f(x,y)=|x-y|=(x÷y)+(y÷x);
4) sg(x) |
0, |
если x |
0 |
: |
1, |
если x |
0 |
sg(0)=0
sg(x+1)=1
5)min(x,y)=x (x y) max(x,y)=y+(x y)
Спомощью функции sg(x) и ее отрицания 1-sg(x) построим примитивно-рекурсивное описание функций, связанных с делением.
Пример 4.9: Деление
1) Функция r(x,y) – остаток от деления у на х: r(x,0)=0 r(x,y+1)=(r(x,y,)+1)sg(|x-(r(x,y)+1)|)
Смысл: если у+1 не делится на х, то sg(|x-(r(x,y)+1)|)=1 и r(x,y+1)=r(x,y,)+1; если же у+1 делится на х, то r(x,y+1)=sg(|x- (r(x,y)+1)|)=0
2) Функция q(x,y)=[y/x] – целая часть дроби у/x: q(x,0)=0
q(x,y+1)=q(x,y)+ sg (|x-(r(x,y)+1)|).
Если у+1 делится на х, то q(x,y+1) на единицу больше, чем q(x,y), если нет, то q(x,y+1)= q(x,y).
В рекурсивных описаниях функций из примера 4.9 отчетливо видны логические действия: проверка условия (делимость у+1 на х) и выбор дальнейшего хода вычислений в зависимости от истинности условия.
Из функций примеров 4.7 и 4.8 легко получается примитивная рекурсивность логических функций, т.е. числовых функций на множестве {0;1}, которые ведут себя как логические.
Действительно:
55
x 1 x
x y max( x; y) |
(4.4) |
x y min(x; y).
Из полноты этого множества функций и того, что суперпозиция является примитивно-рекурсивным оператором, следует примитивная рекурсивность всех логических функций.
Определение: Характеристической функцией предиката R(x1, x2,…, xn) будем называть функцию:
|
|
1, |
если R(x1 , x2 ,..., xn ) выполняется |
R |
(x1 , x2 |
,..., xn ) |
если нет |
|
|
0, |
Предикат называется примитивно-рекурсивным, если его характеристическая функция примитивно-рекурсивна. В силу соотношений (4.4), если предикаты Р1,…,Рк примитивно-рекурсивны, то и любой предикат, полученный из них с помощью логических операций примитивно-рекурсивен.
Пример 4.10: Предикаты
1. Предикат Pdn (x) „„х делится на n” примитивно-ре- курсивен при любых n
Pd n (x) sg(r(n, x)).
2.Предикат Pdm ,n (x) „„х делится на n и m” примитивно-
рекурсивен:
Pdm ,n (x) Pdm (x) Pdn (x)
3.Отношение x1>x2 – примитивно-рекурсивно:
(x1, x2 ) sg(x1 x2 ) .
Подведем некоторые итоги. Из простейших функций - константы 0, функции х+1 и функций тождества Inm с помощью опера-
торов суперпозиции и примитивной рекурсии получено огромное разнообразие функций, включающих функции арифметики, алгебры, анализа, логики, и т.д. Тем самым выяснено, что эти функции имеют примитивно-рекурсивное описание, которое однозначно определяет
56
процедуру их вычисления, а отсюда следует, что их естественно отнести к классу вычислимых функций.
5. Автоматы
5.1. Определение основных понятий
Определение: Конечным автоматом (автоматом) называется система S={A,Q,V, , }, в которой A={a1,…, am}; Q={q1,…, qn}; V={v1,…, vk} – конечные множества (алфавиты), а : Q A Q и :
QA V – функции, определяемые на этих множествах.
Аназывается входным алфавитом, V- выходной алфавит, Q
– алфавит состояний, - функция переходов, - функция выходов. Если, кроме того, в автомате S выделено одно состояние, называемое начальным (q1), то такой автомат называется инициальным и обозначается (S,q1), таким образом, по неинициальному автомату с n состояниями можно n различными способами определить инициальный автомат. Поскольку функции и определены на конечных множествах, их можно задавать таблицами. Обычно две
таблицы сводятся в одну |
: Q A=Q V. Эта таблица называется |
||||||
таблицей автомата или просто автоматной таблицей. |
|||||||
Пример 5.1: Таблица задает функции переходов и выходов для |
|||||||
автомата с алфвитами: A={a1, a2, a3}; Q={q1, q2, q3, q4}; V={v1, v2} |
|||||||
|
|
|
|
|
Таблица 18 |
||
|
q\a |
a1 |
|
a2 |
|
a3 |
|
|
q1 |
q3,v1 |
|
q3,v2 |
|
q2,v1 |
|
|
q2 |
q4,v1 |
|
q1,v1 |
|
q1,v1 |
|
|
q3 |
q2,v1 |
|
q3,v1 |
|
q3,v2 |
|
|
q4 |
q4,v1 |
|
q2,v1 |
|
q1,v2 |
|
Еще один способ задания автомата – ориентированный мультиграф, называемый графом перехода или диаграммой переходов.
Вершины графа соответствуют состояниям; если (qi,aj)=qk и (qi,aj)=Ve, то из qi в qk ведет ребро, на котором написаны aj и Ve.
57
a3 /V1 |
|
|
|
q2 |
|
|
|
|
|
a2 /V1 |
|
|
|
|
a1 /V1 |
|
|||
|
3 |
1 |
|
1 |
1 |
|
|
|
|
a |
|
a /V |
|
|
|
|
|||
|
/V |
|
a |
2 |
1 |
|
|||
q1 |
|
|
|
|
|
|
/V |
4 |
|
|
a3 |
/V2 |
|
|
|
q |
|||
|
|
|
|
|
|
|
|||
|
|
a |
2 |
2 |
|
|
|
a1 /V1 |
|
|
|
|
/V |
|
|
|
|
|
|
a1 /V1 |
|
|
|
|
|
|
|
||
|
|
|
|
q3 |
|
|
|
|
|
|
|
|
|
a3 /V2 |
a2 /V2 |
|
|
|
|
Рис. 9
Кратные ребра не обязательны, например два ребра из q2 в q1 можно заменить одним ребром, на котором написаны обе пары q3|V1
и q2|V1.
Для любого графа переходов в каждой вершине qi выполнены следующие условия, которые называются условиями автомат-
ности и корректности:
1)для каждой входной буквы аj имеется ребро, выходящее из qi, на котором написанно aj (условие полноты);
2)любая буква aj встречается только на одном ребре, выходящим из qi (условие непротиворечивости и детерминированности).
Для данного автомата S его функции S и S могут быть определены не только на множестве А всех входных букв, но и на множестве Авсех входных слов. Для любого входного слова
|
a j a j |
...a j |
, |
|
|
|
|
|
|
1 |
|
2 |
K |
|
|
|
|
(qi |
, q j |
,..., q j |
( |
(... (qi |
, q j ),..., q j |
)q j |
). |
|
|
1 |
|
|
K |
|
1 |
K 1 |
K |
Это традиционное определение с “многоточиями”. Немного точнее читается индуктивное определение:
1)(qi, aj) задается автоматной таблицей S;
2)Для любого слова A* и любой буквы aj
(qi, aj)= ( |
(qi, ) ,aj). |
(5.1) |
|
С |
помощью |
расширенной функции |
определятся |
расширенная функция |
|
||
(qi, |
aj)= ( |
(qi, ) ,aj). |
(5.2) |
58
Зафиксируем в автомате S начальное состояние q1 и каждому
выходному слову |
a j |
a j |
...a j |
поставим в соответствие слово в |
||
|
|
1 |
|
2 |
K |
|
выходном алфавите: |
|
|
|
|
||
= |
(qi, aj1) |
(qi, aj1, aj2)… |
(qi, aj1, aj2 ,…,ajk) |
(5.3) |
||
Это соответствие, отображающее входные слова в выходные |
||||||
слова, называется |
автоматным отображением , а также автомат- |
|||||
ным (или |
ограниченно детерминированным) оператором, реали- |
зуемым оператором (S,q1).
Иногда говорят кратко – оператор (S,q1) или оператор S (если автомат S инициальный), и записывают S (q1, )= и S( )= .
Число букв в называют длиной слова и обозначают | | или l( ). Автоматное отображение также удобно определить индуктивно:
S (qi , a j ) |
(qi , a j |
); |
(5.4) |
||
S (qi , a j ) |
S (qi , ) ( (qi , a j ), a j ). |
||||
|
|||||
Автоматное отображение обладает двумя свойствами, которые |
|||||
следуют из (5.3) и (5.4): |
|
|
|||
1. слова |
и S( |
)= |
имеют одну длину:| |
|=| |; |
|
2. если |
= 1 |
2 и |
S( 1 2)= 1 2, где |
| 1|=| 1|, то S( 1)= 1. |
Другими словами: образ отрезка длиной i равен образу отрезка той же длины.
Свойство 2 отражает тот факт, что автоматные операторы – это операторы без предвосхищения, т.е. операторы, которые перерабатывая слово слева направо не «заглядывают вперед»: i-я буква выходного слова зависит только от i букв входного слова. (пример оператора с предвосхищением – оператор отражения, ставящий в
соответствие слову a j |
a j |
...a j |
слово a j |
|
...a j , здесь первая буква |
|
1 |
|
2 |
K |
K |
1 |
|
выходного слова равна последней входного). |
|
|||||
Введенные |
определения |
|
(5.1)-(5.4) |
наглядно |
интерпретируются на графе переходов. Если зафиксированна
вершина qi, то всякое слово = a j a j |
...a j |
однозначно определяет |
||
1 |
2 |
K |
|
|
путь длины к из этой вершины (обозначим его (qi, |
)), на к ребрах |
|||
которого написаны соответственно буквы a j a j |
...a j |
, поэтому (qi, |
||
|
|
1 |
2 |
K |
59
)- это последняя вершина пути (qi, ); |
(qi, )- выходная буква, |
|
написанная на последнем ребре пути (qi, |
), а отображение S(qi, |
) – |
слово, образованное к выходными буквами на к ребрах пути (qi, |
). |
Пример 5.2: Для автомата S с заданной таблицей:
(q2, a3a2)= (q2, a3a1)=q3, (q2, a3a1a1)=q2,
(q2, a3a2)=v2, (q2, a3a1)=v1, (q2, a3a1 a1)=v1,
S(q2, a3a2)= v1v2,
S(q2, a3a1)=v1 v1, S(q2, a3a1 a1)=v1 v1 v1.
Состояние qj называется достижимым из состояния qi, если имеется входное слово , такое, что (qi, )= qj.
Автомат S называется сильно связным, если его входной алфавит состоит из одной буквы: А={a}, а все слова имеют вид ааа..а.
Пример 5.3: |
1 |
|
|
|
|
|
Таблица 19 |
|
|
|
|
||
|
|
|
|
|
||
Q |
a |
0 |
|
2 |
|
|
|
|
3 |
|
8 |
|
|
1 |
3,0 |
|
|
|||
|
|
0 |
|
|
||
2 |
4,0 |
0 |
|
0 |
|
|
|
|
|
||||
3 |
4,0 |
2 |
4 |
0 |
|
|
|
|
|||||
4 |
7,0 |
|
9 |
|
||
|
|
|
|
|||
5 |
4,2 |
5 |
|
7 |
1 |
|
|
|
|||||
6 |
5,0 |
0 |
|
|
||
|
1 |
|
|
|||
7 |
6,1 |
|
|
|
||
|
|
|
|
|
||
8 |
9,0 |
|
6 |
|
|
|
9 |
9,1 |
|
|
|
Рис. 10 |
|
|
|
|
|
|
|
Автоматная таблица и граф автономного автомата, задаваемый таблицей (входные буквы на ребрах опущены); выходной алфавит V={0,1,2}. Здесь и далее символы состояний qi для краткости заменены их индексами.
60