440 likes | 604 Views
Ключевые автоматы. Определение 14.6. Как было отмечено ранее, конечные автоматы являются простейшими распознавателями. Конечный автомат является моделью лексического анализатора языка. Недетерминированный конечный автомат – это пятерка M=(Q, , , q0, F), где.
E N D
Определение 14.6 • Как было отмечено ранее, конечные автоматы являются простейшими распознавателями. Конечный автомат является моделью лексического анализатора языка. • Недетерминированный конечный автомат – это пятерка M=(Q, , , q0, F), где
Q – конечное множество состояний управляющего устройства; • – конечное множество допустимых входных символов (алфавит входной ленты); • : Q 2Q (отображение множества Q в множество всех подмножество множества Q) - функция переходов конечного автомата; • q0 Q – начальное состояние управляющего устройства; • F Q – множество заключительных состояний.
Для того, чтобы определить будущее поведение конечного автомата, нужно знать лишь: • текущее состояние управляющего устройства и • цепочку символов на входной ленте, состоящую из символа под головкой и всех символов, расположенных вправо от него.
Определение 14.7 • Если М = (Q, , , q, F) – конечный автомат, то пара (q,) Q * называется конфигурацией автомата М. Определение 14.7 • Конфигурация (q0, ) называется начальной, а конфигурация (q, ), где qF, а - пустая цепочка, называется заключительной (или допускающей).
Таким образом, конфигурация конечного автомата является заключительной лишь тогда, когда справа от входной головки нет ни одного символа. Если же в процессе работы состоянием управляющего устройства является некоторое состояние из множества заключительных состояний, а справа от входной головки есть символы, то такая конфигурация конечного автомата не является заключительной. • Такт автомата М представляется бинарным отношением |-M (или |-, если М подразумевается). Определим отношение |- следующим образом.
Определение 14.9 • Будем говорить, что между двумя конфигурациями (q, a) и (q', ) имеет место отношение |- (записывается как (q, a) |- (q', )), если q' (q, a). • Наличие отношения |- между двумя конфигурациями конечного автомата говорит о том, что если М находится в состоянии q, и входная головка обозревает символ a, то автомат М может сделать шаг, за который он переходит в состояние q' и сдвигает головку на один символ вправо.
Запись C |- 0M C' означает, что C=C', а C0 |- kM Ck (для k1) – что существуют такие конфигурации C1,…,Ck, что Ci |-M Ci+1 для всех 0i<k, C |- +M C' означает, что C |- kM C' для некоторого k1, а C |- *M C'– что C |- kM C' для k0. • Таким образом, отношения |- +M, |-*M являются транзитивным и рефлексивно-транзитивным замыканием отношения |-M.
Определение 14.10 • Будем говорить, что автомат М допускает цепочку , если (q0, ) |- *(q, ) для некоторого qF. Определение 14.10 • Языком, определяемым (распознаваемым, допускаемым) автоматом М (обозначается L(M)), называется множество входных цепочек, допускаемых автоматом М, т. е. • L(M)={ | * и (q0, ) |-* (q, ) для некоторого qF}
Язык, допускаемый конечным автоматом, будем называть конечно-автоматным языком. • Заметим, что конечный автомат допускает пустую цепочку, если его начальное состояние принадлежит множеству заключительных состояний. • Одним из способов представления конечных автоматов является таблица переходов. Информация размещается в таблице переходов в соответствии со следующими соглашениями:
Столбцы помечены входными символами. • Строки помечены символами состояний. • Элементами таблицы являются множества (возможно, пустые) символов новых состояний, если автомат недетерминированный, либо символ нового состояния, если автомат детерминированный. • Первая строка помечена символом начального состояния. • В детерминированном автомате строки, соответствующие заключительным состояниям, помечены справа единицами.
Пример 14.1. • Пусть М=({p, q, r}, {0,1}, , p, {r}) – конечный автомат, где задаётся следующей таблицей переходов:
М допускает все цепочки нулей и единиц, содержащие два стоящих рядом нуля. • Начальное состояние p можно интерпретировать так: «два стоящих рядом нуля еще не появились, и предыдущий символ не был нулем». • Состояние q означает, что «два стоящих рядом нуля еще не появились, но предыдущий символ был нулем». • Состояние r означает, что «два стоящих рядом нуля уже появились». • Заметим, что, попав в состояние r, автомат М остается в этом состоянии. • Для входа 01001 единственной возможной последовательностью конфигураций, начинающейся конфигурацией (p,01001), будет
(p,01001) |– (q,1001) • |– (p,001) • |– (q,01) • |– (r,1) • |– (r,) • Таким образом, 01001 L (M). • Часто бывает удобным использовать графическое представление конечного автомата в виде диаграммы (пример такого представления приведен на рис. 14.2).
Определение 14.12 • Пусть M =(Q, , , q0, F) – недетерминированный конечный автомат. Диаграммой (или графом переходов) автомата М называют неупорядоченный помеченный граф, вершины которого помечены именами состояний и в котором есть дуга (p, q), если существует такой символ a , что q (p,a). Кроме того, дуга (p, q) помечается списком, состоящим из таких a, что q (p,a). Начальное состояние указывается на диаграммах направленной в него стрелкой, помеченной словом "начало", а заключительные состояния обводятся кружком.
Определение 14.13 • Назовем автомат M = (Q, q0, F) детерминированным, если для любой пары q Q и a множество (q,a) содержит не более одного состояния для любых q Q и a .
Определение 14.14 • Пусть M = (Q, q0, F) - конечный автомат. Если для любой пары q Q и a множество (q, a) не пусто, то автомат M назовем полностью определенным. • Таким образом, можно ввести следующую классификацию конечных автоматов: • 1. Недетерминированный не полностью определенный: для всех пар q Q и a имеет место ((q,a)) 0, причем существует хотя бы одна пара q Q и a такая, что ((q,a)) = 0, а также хотя бы одна пара q' Q и a' такая, что ((q',a')) > 1.
2. Недетерминированный полностью определенный: для всех пар q Q и a имеет место ((q,a)) > 0, причем существует хотя бы одна пара q' Q и a' такая, что ((q',a')) > 1. • 3. Детерминированный не полностью определенный: для всех пар q Q и a имеет место ((q,a)) 1, причем существует хотя бы одна пара q Q и a такая, что ((q,a)) = 0. • 4. Детерминированный полностью определенный: для всех пар q Q и a имеет место ((q,a)) = 1. • Конечный автомат примера 15.1. является полностью определенным детерминированным автоматом.
Определение 14.15 • Состояние p называется достижимым, если существует такая цепочка w, что (q0, w) |– * (p, ). Определение 14.16 • Назовем два конечных автомата M и M' эквивалентными, если имеет место L(M) = L(M') (т.е. два конечных автомата являются эквивалентными, если они допускают одинаковые языки).
Теорема 14.1 • Если L = L(M) для некоторого недетерминированного конечного автомата M, то L= L(M') для некоторого детерминированного конечного автомата M'. • Доказательство. Пусть M = (Q, q0, F). Построим M' = (Q', ' q'0, F') следующим образом: • Q' есть множество всех подмножеств Q, т.е. состояниями автомата M' являются множества состояний автомата M; • q'0 = {q0}; • F' состоит из всех таких подмножеств S множества Q, что S F ; • '(S,a) = S' для всех S Q, где S' = {p p (q,a) для некоторого q S}. • Легко показать, что оба автомата эквивалентны. • Далее будем говорить только о детерминированных конечных автоматах.
Лемма 14.1 • Если L = L(M) для некоторого конечного автомата M, то L = L(G) для некоторой праволинейной грамматики G. • Доказательство. Пусть M = (Q, q0, F) – конечный (детерминированный) автомат. Возьмем грамматику G = (Q, , P, q0), где схема P определяется следующим образом: • q ar P, если(q,a) = r, • p P, если p F. • Покажем индукцией по i, что • (*) q i+1 w для q Q тогда и только тогда, когда (q,w) |– i (r, ) для некоторого r F.
Базис для i = 0 очевиден, т.е. q тогда и только тогда, когда (q, ) |– 0 (q, ) для q F. • Шаг индукции. Предположим, что (*) истинно для i. Покажем что (*) истинно для i+1. Возьмем w = ax, где x = i. Тогда q i+1 w равносильно тому, что q as i ax для некоторого s Q. По определению грамматики q as равносильно (q,a) = s. По предположению индукции s i x тогда и только тогда, когда (s, x) |– i-1 (r, ) для некоторого r F. Следовательно, q i+1 w равносильно (q,w) |– i (r, ). • Отсюда заключаем, что q + w тогда и только тогда, когда (q0,w) |– * (r, ) для некоторого r F. Таким образом, L(M) = L(G).
Лемма 14.2 • Пусть - конечный алфавит. Множества , {}, {a} для всех a являются конечно-автоматными языками. • Доказательство. • Любой конечный автомат с пустым множеством заключительных состояний допускает язык . • Пусть M = ({q0}, q0, {q0}), где ((q,a)) = 0 при всех a . Тогда L = {}. • Пусть M = ({q0, q1}, q0, {q1}), где ((q0,a)) = q1, а в остальных случаях функция не определена. Тогда L = {a}.
Лемма 14.3 • Пусть L1 = L(M1) и L2 = L(M2) для конечных автоматов M1 и M2. Множества L1 L2, L1 L2, L1* являются конечно-автоматными языками. • Доказательство. Пусть M1 =(Q1, 1, 1, q1, F1) и M2 =(Q2, 2, 2, q2, F2), Q1Q2= • I. Построим конечный автомат M, допускающий язык L1 L2: M = (Q1 Q2 {q0}, , , q0, F), где • - = 1 2; • - q0 Q1 Q2 – новое состояние; • - если L1 L2, то F = F1 F2; • - если L1 L2, то F = F1 F2 {q0}; • - для всех q Q1 и a определим (q, a) = 1(q, a);
- для всех q Q2 и a определим (q, a) = 2(q, a); • - для всех a определим (q0, a) = (q1, a) (q2, a). • Таким образом, данный автомат из начального состояния может перейти к моделированию автомата M1 либо автомата M2. • II. Построим конечный автомат M, допускающий язык L1 L2: • M = (Q1 Q2, , , q1, F), где • (1) = 1 2; • (2) если q2 F2, то F = F2; • (3) если q2 F2, то F = F1 F2; • (4) для всех q Q1 \ F1 и a 1 определим (q, a) = 1(q, a);
(5) для всех q F1 и a 1 2 определим (q, a) = 1(q, a) 2(q2,a); • (6) для всех q Q2 и a 2 определим (q, a) = 2(q, a). • Таким образом, автомат M начинает работу с моделирования M1, а когда приходит в заключительное состояние автомата M1, может начать моделировать автомат M2. • Докажем, что L(M) = L1 L2. • Вначале докажем L1 L2 L(M). Пусть x L1, y L2 (xy L1L2). Тогда (q1,xy) |–M *(q, y) для некоторого q F1. Если x = , то q = q1. Если y, то, применяя один раз (4) и нуль или более раз (5), получим (q,y) |–M+ (r,) для некоторого r F2. Если y = , то q2 F2 и, следовательно, q F, xy L(M) и L1L2 L(M).
Теперь докажем L(M) L1L2. Пусть w L(M). Тогда (q1,w) |–M+ (q,) для некоторого q F. Возможные случаи: q F1 либо q F2. • Пусть q F2, тогда w = xay для a , причем (q1, xay) |–M* (r, ay) |–M (s, y) |–M*(q, ), где r F1, s Q2, s 2(r, a), следовательно, xL1, ay L2, w L1L2. • Пусть q F1, тогда q2 F2 и L2, следовательно, w L1, wL1L2 и L(M) L1L2 , из чего следует, что L(M) = L1L2. • III. Построим конечный автомат M, допускающий язык L1*: • M = (Q1 {q'}, 1, , q', F1 {q'}), где q' – новое состояние (q'Q1), а функция переходов определяется следующим образом
(1) для всех q Q1 \ F1 и a 1 определим (q, a) = 1(q, a); • (2) для всех q F1 и a 1 определим (q, a) = 1(q, a) 1(q1,a); • (3) для всех a 1 определим (q', a) = 1(q1, a). • Таким образом, когда M попадет в заключительное состояние, автомата M1, он может либо продолжить моделирование автомата M1, либо начать заново моделировать M1 с начального состояния. Цепочка L(M), т.к. q' F – заключительное состояние для автомата M.
Теорема 14.2 • Язык допускается конечным автоматом тогда и только тогда, когда он является праволинейным языком. • Доказательство следует из предыдущих лемм Задание 15 • Для праволинейной грамматики задания 6 построить конечный автомат, допускающий тот же язык. • По данному конечному автомату M можно построить наименьший эквивалентный ему конечный автомат.
Определение 14.17 • Пусть М=(Q, , , q0, F) – конечный автомат, а q1 и q2 – различные его состояния. Будем говорить, что цепочка x * различает состояния q1 и q2, если (q1, x) |–* (q3, ), (q2, x) |–* (q4, ) и одно из состояний q3 или q4 принадлежит F (является заключительным), а другое нет. Определение 14.18 • Будем говорить, что состояния q1 и q2 являются k-неразличимыми (и писать q1 k q2), если не существует цепочки x, длина которой |x| k, которая бы различала q1 и q2.
Определение 14.19 • Будем говорить, что состояния q1 и q2 неразличимы (и писать q1q2), если они k-неразличимы для любого k0. Определение 14.19 • Состояние qQ называется недостижимым, если не существует такой входной цепочки x, что (q0, x) |–* (q, ).
Определение 14.21 • Автомат М называется приведённым (каноническим), если множество Q не содержит недостижимых состояний и не существует двух неразличимых состояний. Лемма 14.4 • Пусть M = (Q, , , q0, F) — конечный автомат с n состояниями. Состояния q1 и q2 неразличимы тогда и только тогда, когда они (n–2)-неразличимы.
Доказательство. • Необходимость условия тривиальна. Достаточность тривиальна в тех случаях, когда F имеет 0 или n элементов. • Покажем, что • n-2 n-3... 2 1 0 • Для этого заметим, что для любых состояний q1 и q2 • 1) q1 0 q2 тогда и только тогда, когда q1 и q2 оба либо принадлежат, либо не принадлежат F. • 2) q1 k q2 тогда и только тогда, когда q1 k–1 q2 и (q1,a) k–1 (q2,a) для всех a . • Отношение 0 грубейшее, оно разбивает Q на два класса: F и Q\F.
Если k+1 k, то отношение k+1 тоньше, чем k, т.е. в нем по крайней мере на один класс эквивалентности больше, чем в k. Так как каждое из множеств содержит не более, чем (n-1) элементов, то можно получить не более (n-2) последовательных уточнений отношения 0. Если же k+1 = k, то в силу условия (2) k+1 = k+2 = ... . Таким образом, это первое из отношений k, для которых k+1 = k. Лемма доказана. • Тем самым, если два состояния можно различить, то их можно различить с помощью входной цепочки, длина которой меньше числа состояний автомата.
Алгоритм 14.1 • Построение канонического конечного автомата. • Вход: Конечный автомат M = (Q, , , q0, F). • Выход: Эквивалентный приведенный конечный автомат M'. • Метод. • Шаг 1. Устранить все недостижимые состояния. • Шаг 2. Строить отношения эквивалентности 0, 1, …, как описано в лемме 14.4. до тех пор, пока не будет найдено k, такого что отношение k+1 совпадет с отношением k. Взять в качестве отношения отношение k.
Шаг 3. Построить конечный автомат M'=(Q', , ', q0', F'), где • а) Q' — множество классов эквивалентности отношения (обозначим через [p] класс эквивалентности отношения , содержащий состояние p); • б) ([p],a) = [q], если(p,a) = q; • в) q0' — это [q0]; • г) F' = {[q] | qF}.
Пример 14.2. Пусть конечный автомат задан таблицей 14.1. • Отношения k для k 0 имеют следующие классы эквивалентности: • классы отношения0 : {A,F},{B,C,D,E} • классы отношения1 : {A,F},{B,E},{C,D} • классы отношения2 : {A,F},{B,E},{C,D} • Так как 2 = 1, то = 1. Приведенным автоматом M' будет автомат ({[A],[B],[C]},{a,b},',A,{[A]}), где функция ' определяется таблицей 14.2.
Теорема 14.3 • Здесь мы выбрали [A] для представления класса {A,F}, [B] — для представления {B,E} и [C] — для {C,D}. • Автомат M', который строится алгоритмом 14.1, имеет наименьшее число состояний среди всех конечных автоматов, допускающих язык L(M).
Разрешимые проблемы, связанные с конечными автоматами: • Проблема принадлежности: «Даны определенного типа описание языка и цепочка w; принадлежит ли w этому языку?» • Проблема пустоты: «Дано определенного типа описание языка; пуст ли этот язык?» • Проблема эквивалентности: «Даны два описания одинакового типа; определяют ли они один и тот же язык?»
Алгоритм 14.2 • Решение проблемы принадлежности для конечных автоматов. • Вход: конечный автомат M=(Q, , , q0, F) и цепочка w*. • Выход: «Да», если wL(M); «Нет», если wL(M). • Метод: Пусть w=a1a2 … an. Найти последовательно состояния q1=(q0, a1), q2=(q1, a2), … , qn=(qn-1, an). Если qnF, сказать «Да»; если qnF, сказать «нет».
Алгоритм 14.4 • Решение проблемы пустоты для конечных автоматов. • Вход: конечный автомат M=(Q, , , q0, F). • Выход: «Да», если L(M); «Нет» в противном случае. • Метод: Вычислить множество состояний, достижимых q0. Если это множество содержит какое-нибудь заключительное состояние, то сказать «Да», в противном случае сказать «нет».
Алгоритм 14.4 • Решение проблемы эквивалентности для конечных автоматов. • Вход: два конечных автомата • M1=(Q1, 1, 1, q1, F1) и • M2=(Q2, 2, 2, q2, F2), таких, что Q1Q2=. • Выход: «Да», если L(M1) = L(M2); «Нет» в противном случае. • Метод: Построить конечный автомат M=(Q1Q2, 12, 12, q1, F1F2). С помощью леммы определить, различимы ли состояния q1 и q2. Если да, то сказать «Нет», в противном случае сказать «Да».
Задание 16 • Привести пример конечного автомата. Описать допускаемый им язык. Построить для него канонический конечный автомат.