Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
~automat(theory).docx
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
88.44 Кб
Скачать

27 Теорема о разрастании (накачке - pumping) для (cfl) контекстно-свободных языков.

Пусть L — контекстно-свободный язык над алфавитом Σ. Тогда найдётся такое натуральное число p, что для любого слова w ∈ L длины не меньше p найдутся слова u, v, x, y, z ∈ Σ, для которых верно uvxyz = w, vy ≠ ε (то есть v ≠ ε или y ≠ ε), |vxy|≤p и uvixyiz ∈ L для всех i ∈ N. Доказательство. Пусть язык L порождается грамматикой в нормальной форме Хомского G = <N,Σ, P, S>. Индукцией по k легко доказать, что для любого дерева вывода в грамматике G длина кроны дерева не превышает 2k−2, где k — количество вершин в самом длинном пути, начинающемся в корне дерева и заканчивающемся в некоторой вершине, помеченной символом из Σ. Положим p = 2|N|. Пусть w ∈ L и |w| ≥p. Зафиксируем некоторое дерево вывода с кроной w в грамматике G. Рассмотрим самый длинный путь в этом дереве. Этот путь содержит не менее |N|+2 вершин. Среди них найдутся две вершины с одинаковыми метками, причём их можно выбрать среди последних |N| + 2 вершин рассматриваемого пути. Выберем слова u, v, x, y и z так, что uvxyz = w, поддерево с корнем в одной из найденных вершин имеет крону x и поддерево с корнем в другой найденной вершине имеет крону vxy. Из того что G — грамматика в нормальной форме Хомского, заключаем, что vxy ≠ x. Неравенство |vxy| ≤ 2|N| следует из того, что самый длинный путь в соответствующем слову vxy поддереве содержит не более |N|+2 вершин. Для каждого i ∈ N можно построить дерево вывода с кроной uvixyiz, комбинируя части исходного дерева вывода.

28 Теорема о существовании эвивалентных автоматов.

Теорема: Для каждого НДА существует эквивалентный ДКА. Д/во: Пусть M = <K, Σ, ∆, s, F> - НДА. хотим сконструировать ДКА M = <K', Σ', δ, s', F'>, эквивалентный M. если M имеет пять состояний {q0, . . . , q4} и после прочтения некоторого слова может оказаться в состояниях q0, q2 или q3, но не q1 или q4, то в качестве его текущего состояния надо рассматривать множество {q0, q2, q3}, а не неопределенный элемент этого множества. И если следующий вводимый символ может перевести M из q0 в q1 или q2, из q2 в q0, а из q3 в q2, то в качестве следующего состояния M следует рассматривать множество {q0, q1, q2}. Мн-вом состояний M будет K' = 2^k мн-во подмн-в мн-ва состояний M . Мн-во конечных состояний M будет состоять из тех подмн-в K , которые содержат хотя бы одно конечное состояние M . Определение функции перехода для M' будет немного более сложным. Базовая идея заключается в том, чтобы машина M при чтении символа a ∈ Σ имитировала бы действие машины M при чтении символа a, возможно, следующего после любого количества срабатываний M при вводе пустого слова. Для любого состояния q ∈ K будем обозначать через E(q) множество всех состояний M, которые достижимы из состояния q без чтения ввода. То есть, E(q) = {p ∈ K|<q, e> |-∗M <p, e>}. Таким образом, E(q) может быть вычислено по следующему алгоритму: изначально полагаем E(q) := {q}; while существует переход <p, e, r> ∈ ∆ с p ∈ E(q) и r ∉ E(q) do E(q) := E(q) ∪ {r}; Каждое выполнение цикла while добавляет еще одно состояние к E(q), и их не может быть добавлено больше, чем имеется всего состояний, поэтому данный алгоритм заканчивает работу самое большее после |K| итераций.