
- •Лекция 1 Список рекомендуемой литературы
- •Теория формальных языков. Модели языка по Хомскому
- •Обозначения
- •Лекция 2 Неоднозначность грамматики
- •Укорачивающие контекстно-свободные грамматики
- •Автоматные грамматики
- •Задача разбора
- •Нормальные формы Бэкуса-Наура. Б.Н.Ф. – нотация
- •Лекция 3
- •Контекстные условия
- •Конечные автоматы
- •Связь автоматных грамматик и конечных автоматов
- •Минимизация автоматов
- •Лекция 4 Машина Тьюринга
- •Минимизация конечного автомата
- •Кс-языки и их связь с мп-автоматами. Магазинная память (мп)
- •Мп-автоматы
- •Мп-автомат, распознающий язык {0n 1n | nN}
- •Графическое описание мп-автомата
- •Лекция 5
- •Совместимые состояния частичных автоматов
- •Нахождение максимальной группировки
- •Построение минимального частичного автомата
- •Модель динамического поведения. Асинхронный процесс как метамодель
- •Лекция 6 Асинхронный процесс
- •Лекция 7 Сети Петри
- •Пространство состояний сетей Петри
- •Анализ сетей Петри
- •Методы анализа сетей Петри. Дерево достижимости
- •Лекция 8 Матричные уравнения
- •Моделирование с помощью сетей Петри
- •События и условия
- •Одновременность и конфликт
Лекция 1 Список рекомендуемой литературы
Кузнецов О.П., Адельсон-Вельский Г.М. “Дискретная математика для инженера”.
Лескин А.А. “Сети Петри в моделировании управления”.
Вольковский В.А., Малышкин В.Э. “Синтез параллельных программ и систем на вычислительных моделях”.
Кудрявцев В.Б. “Введение в теорию автоматов”.
Теория формальных языков. Модели языка по Хомскому
Хомский при построении моделей ориентировался на лингвистику. При этом он рассматривал язык с двух точек зрения:
С точки зрения говорящего на этом языке.
С точки зрения слушающего.
Поэтому условно можно рассматривать 2 модели языков:
Порождающие.
Распознающие.
В действительности эти модели можно объединить, но получившуюся модель в различных случаях используют по-разному. Первая возникающая задача такова: требуется построить устройство, которое бы позволяло перечислять правильные фразы языка (порождение языка). Такое устройство называют грамматикой.
Грамматика
представляет собой не алгоритм, а
исчисление, позволяющее получать
правильные предложения языка. Она
представляет собой четвёрку: G={N,T,P,S},
где N
– нетерминальный алфавит, T
– терминальный алфавит,
Ø,
словарь
или алфавит грамматики,P
– множество продукций или правил вида
φ→ψ, где φ и ψ - некоторые цепочки из
алфавита грамматики, причём φ-непустая,
S
N–
некоторый начальный символ.
Цепочкой в алфавите V называется конечная последовательность символов алфавита V. Множество всех цепочек – V*. Кроме того, множеству V* принадлежит пустая цепочка ε.
U={a,b}, a, b, ab, aa, ba, bb, ababaaa – примеры цепочек в алфавите U.
Введём 2 определения:
Непосредственный вывод или порождение (алфавит грамматики
): цепочка γ непосредственно выводима из цепочки ω
(
), если ω=ξ1αξ2, γ=ξ1βξ2 и существует правило α→β
- множество правил. При этом ξ1 и ξ2 – некоторые цепочки в алфавите V, которые могут быть, в частности, пустыми; α – непустая цепочка в алфавите V, либо начальный символ S.
Вывод – цепочка γ выводима из цепочки ω (
), если ω=ξ1αξ2, γ=ξ1βξ2 и существует последовательность цепочек α0,α1,α2,…,αn, где α0=α, αn=β, и в грамматике существуют правила вида αi→αi+1, где i=0,1,…,n-1.
Языком, определяемым
грамматикой G,
называется множество LG={xT*:
S
x}.
Обозначения
Будем обозначать элементы множества N большими буквами латинского алфавита. Элементы множества T – малыми латинскими буквами. Цепочки из V* - греческими буквами. Цепочки из T* - x,y,v,w,z.
Пример:
N={B,C,S},
T={a,b}.
P: 1. S→aCa, 2. C→CBa, 3. C→b, 4. aB→Ba, 5.bB→bb.
1. S→(1)aCa → (3) aba
2. S→(1)aCa→(2)aCBaa→(3)abBaa→(5)abbaa.
Грамматики, для которых нет ограничений на правила множества P, называются грамматиками типа 0. Это самые общие грамматики. Языки, определяемые грамматиками этого типа, называются языками класса 0.
Можно строго
доказать, что множества цепочек,
определяемые грамматиками данного
типа, являются перечислимыми множествами.
Это означает следующее: если задана
грамматика G
и цепочка x
и требуется построить алгоритм, который
бы определял справедливость высказывания
,
то существует алгоритм, который при
положительном ответе на заданный вопрос
за конечное число шагов остановится, а
при отрицательном ответе будет работать
бесконечно долго.
Алгоритм таков:
поскольку множество правил конечно,
если
,
то существует вывод
.
Алгоритм будет перебирать все возможные
правила, и, как только в результате этого
встретится цепочкаx,
алгоритм прекратит свою работу. Здесь
понадобится конечное, хотя и большое,
число переборов. Накладывая различного
рода ограничения, можно получить более
простые грамматики, для которых указанная
проблема разрешима, т.е. существует
алгоритм, который для любой цепочки x
останавливается, выдавая ответ “да”
или “нет”. Подобного рода грамматики
применяются на практике.
Если правила
грамматики удовлетворяют следующему
соотношению:
,
,
то грамматика такого типа называется
неукорачивающей, а языки, определяемые
такими грамматиками, называются языками
класса 1 (
– длина цепочки).
Проблема
распознавания ставится следующим
образом: задана грамматика G,
цепочка
.
Требуется дать ответ:
или
.
Если эта проблема разрешима, то язык
распознаваемый.
Язык называется легко распознаваемым, если число шагов при решении проблемы распознавания зависит только от длины цепочки.
Теорема: Язык, определяемый неукорачивающей грамматикой, легко распознаваем.
Для доказательства этой теоремы мы должны построить алгоритм, который решает проблему распознавания, и число шагов зависит только от длины цепочки.
Доказательство:
Пусть
-
заданная цепочка длины
.
Рассмотрим возможный вывод этой цепочки
.
Если в выводе встречаются повторяющиеся
участки вида
,
то мы можем исключить их. Выводы без
таких исключаемых частей называют
бесповторными. Т.к. длина цепочки
фиксирована и равнаn,
то существует конечное число бесповторных
выводов и алгоритм может быть таков:
построить множество бесповторных
выводов всевозможных цепочек длины n.
В силу свойства грамматики длина каждой
последующей цепочки в выводе не меньше
длины предыдущей, такое множество может
быть только конечным.
Далее предъявленную
цепочку
необходимо сравнить с элементами
построенного множества. Работа данного
алгоритма (количество шагов) зависит
только от длины цепочки.
Замечание: описанный алгоритм очень неэффективен и используется только для доказательства.