Удаление длинных правил из грамматики — различия между версиями
(→Пример работы) |
|||
| Строка 24: | Строка 24: | ||
|proof= | |proof= | ||
<tex>\Rightarrow </tex> <br> | <tex>\Rightarrow </tex> <br> | ||
| − | Покажем, что <tex>L(\Gamma) \ | + | Покажем, что <tex>L(\Gamma) \subseteq L(\Gamma')</tex>. <br> |
Пусть <tex>w \in L(\Gamma)</tex>. Рассмотрим вывод <tex>w</tex>. Если в выводе используется длинное правило <tex>A \rightarrow a_1 a_2 \ldots a_k</tex>, то заменим его на последовательное применение правил <tex>A \rightarrow a_1B_1</tex>, <tex>B_1 \rightarrow a_2B_2</tex>, | Пусть <tex>w \in L(\Gamma)</tex>. Рассмотрим вывод <tex>w</tex>. Если в выводе используется длинное правило <tex>A \rightarrow a_1 a_2 \ldots a_k</tex>, то заменим его на последовательное применение правил <tex>A \rightarrow a_1B_1</tex>, <tex>B_1 \rightarrow a_2B_2</tex>, | ||
<tex>B_2 \rightarrow a_3B_3</tex>, <tex>\ldots </tex>, <tex>B_{k-2} \rightarrow a_{k-1}a_{k}</tex>. Получим вывод <tex>w</tex> в <tex>\Gamma'</tex>. <br> | <tex>B_2 \rightarrow a_3B_3</tex>, <tex>\ldots </tex>, <tex>B_{k-2} \rightarrow a_{k-1}a_{k}</tex>. Получим вывод <tex>w</tex> в <tex>\Gamma'</tex>. <br> | ||
<tex>\Leftarrow </tex> <br> | <tex>\Leftarrow </tex> <br> | ||
| − | Покажем, что <tex>L(\Gamma') \ | + | Покажем, что <tex>L(\Gamma') \subseteq L(\Gamma)</tex>. <br> |
Допустим, что это не так, то есть <tex>\exists w \in L(\Gamma'), w \notin L(\Gamma)</tex>. <br> | Допустим, что это не так, то есть <tex>\exists w \in L(\Gamma'), w \notin L(\Gamma)</tex>. <br> | ||
Рассмотрим вывод <tex>w</tex> в <tex>\Gamma' \cup \Gamma</tex>, минимальный по количеству примененных правил, отсутствующих в <tex>\Gamma</tex>. <br> | Рассмотрим вывод <tex>w</tex> в <tex>\Gamma' \cup \Gamma</tex>, минимальный по количеству примененных правил, отсутствующих в <tex>\Gamma</tex>. <br> | ||
Версия 16:35, 24 января 2012
| Определение: |
| Пусть — контекстно-свободная грамматика. Правило называется длинным, если . |
Постановка задачи
Пусть — контекстно-свободная грамматика, содержащая длинные правила. Требуется построить эквивалентную грамматику , не содержащую длинных правил.
Задача удаления длинных правил из грамматики возникает при попытке её приведения к нормальной форме Хомского.
Алгоритм
С каждым длинным правилом , , проделаем следующее:
- Добавим в грамматику новых нетерминала .
- Добавим в грамматику новое правило:
- ,
- ,
- ,
- ,
- .
- ,
- Удалим из грамматики правило .
Корректность алгоритма
| Теорема: |
Пусть — контекстно-свободная грамматика. — грамматика, полученная в результате применения алгоритма к . Тогда |
| Доказательство: |
|
|
Пример работы
Покажем, как описанный алгоритм будет работать на следующей грамматике:
,
,
.
Для правила вводим 2 новых нетерминала и 3 новых правила:
,
,
.
Для правила вводим 1 новый нетерминал и 2 новых правила:
,
.
В итоге полученная грамматика будет иметь вид:
,
,
,
,
,
.