Регулярные языки: два определения и их эквивалентность — различия между версиями
Gromak (обсуждение | вклад) |
Gromak (обсуждение | вклад) |
||
Строка 11: | Строка 11: | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | '''Регулярное выражение''' над алфавитом <tex> \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} </tex> {{---}} | + | '''Регулярное выражение''' над алфавитом <tex> \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} </tex> {{---}} способ порождения языка над <tex>\Sigma</tex>. Определяется рекурсивно следующим образом: |
* Для любого <tex>i</tex> слово <tex>c_i</tex> является регулярным выражением, задающим язык из одного слова <tex>c_i</tex>. | * Для любого <tex>i</tex> слово <tex>c_i</tex> является регулярным выражением, задающим язык из одного слова <tex>c_i</tex>. | ||
− | * <tex>\varepsilon</tex> является регулярным выражением, задающим язык из одной пустой строки. | + | * <tex>\varepsilon</tex> является регулярным выражением, задающим язык из одной пустой строки, а <tex>\varnothing</tex> {{---}} пустой язык. |
* Если <tex>\alpha_1</tex> и <tex>\alpha_2</tex> являются регулярными выражениями, задающими языки <tex>L_1</tex> и <tex>L_2</tex> соответственно, то <tex>(\alpha_1)|(\alpha_2)</tex> {{---}} регулярное выражение, задающее <tex>L_1 \bigcup L_2</tex>. | * Если <tex>\alpha_1</tex> и <tex>\alpha_2</tex> являются регулярными выражениями, задающими языки <tex>L_1</tex> и <tex>L_2</tex> соответственно, то <tex>(\alpha_1)|(\alpha_2)</tex> {{---}} регулярное выражение, задающее <tex>L_1 \bigcup L_2</tex>. | ||
* Если <tex>\alpha_1</tex> и <tex>\alpha_2</tex> являются регулярными выражениями, задающими языки <tex>L_1</tex> и <tex>L_2</tex> соответственно, то <tex>(\alpha_1)(\alpha_2)</tex> {{---}} регулярное выражение, задающее <tex>L_1L_2</tex>. | * Если <tex>\alpha_1</tex> и <tex>\alpha_2</tex> являются регулярными выражениями, задающими языки <tex>L_1</tex> и <tex>L_2</tex> соответственно, то <tex>(\alpha_1)(\alpha_2)</tex> {{---}} регулярное выражение, задающее <tex>L_1L_2</tex>. | ||
Строка 41: | Строка 41: | ||
{{Теорема | {{Теорема | ||
|statement= | |statement= | ||
− | Определения | + | Определения множеств [[#Reg1 | <tex>\mathrm{Reg}</tex>]] и [[#Reg2 | <tex>\mathrm{Reg'}</tex>]] эквивалентны. |
|proof= | |proof= | ||
Докажем, что <tex>\mathrm{Reg} \subseteq \mathrm{Reg'}</tex> и <tex>\mathrm{Reg'} \subseteq \mathrm{Reg}</tex>. | Докажем, что <tex>\mathrm{Reg} \subseteq \mathrm{Reg'}</tex> и <tex>\mathrm{Reg'} \subseteq \mathrm{Reg}</tex>. | ||
Строка 56: | Строка 56: | ||
Докажем, что <tex> \mathrm{Reg} </tex> является надрегулярным множеством. Для этого проверим, выполняются ли свойства надрегулярного множества на нём: | Докажем, что <tex> \mathrm{Reg} </tex> является надрегулярным множеством. Для этого проверим, выполняются ли свойства надрегулярного множества на нём: | ||
# <tex> \mathrm{R_0}\subseteq \mathrm{Reg} </tex> {{---}} выполнено (по определению <tex> \mathrm{Reg} </tex>). | # <tex> \mathrm{R_0}\subseteq \mathrm{Reg} </tex> {{---}} выполнено (по определению <tex> \mathrm{Reg} </tex>). | ||
− | # Рассмотрим <tex> L_1, L_2 \in \mathrm{Reg} </tex>. Так как <tex> \mathrm{Reg} = \bigcup\limits_{i=0}^{\infty}\mathrm{R_i}</tex>, то <tex> | + | # Рассмотрим <tex> L_1, L_2 \in \mathrm{Reg} </tex>. Так как <tex> \mathrm{Reg} = \bigcup\limits_{i=0}^{\infty}\mathrm{R_i}</tex>, то найдутся такие индексы <tex>i</tex> и <tex>j</tex>, что <tex>L_1 \in \mathrm{R_i}</tex> и <tex>L_2 \in \mathrm{R_j}</tex>. Тогда из определения <tex> \mathrm{Reg} </tex> следует, что <tex> L_1L_2 \in \mathrm{R_{max(i, j) + 1}}, L_1 \cup L_2\in \mathrm{R_{max(i, j) + 1}}, L_1^* \in \mathrm{R_{i + 1}}</tex>. Так как <tex> \mathrm{Reg} = \bigcup\limits_{i=0}^{\infty}R_i</tex>, то получаем, что <tex> L_1L_2 \in \mathrm{Reg}, L_1 \cup L_2\in \mathrm{Reg}, L_1^* \in \mathrm{Reg} </tex>. Следовательно, второе свойство также выполнено. |
Значит, <tex> \mathrm{Reg} </tex> {{---}} надрегулярное множество. А так как <tex> \mathrm{Reg'}=\bigcap\limits_{\mathrm{R} \in \mathrm{REG}}\mathrm{R}</tex>, то <tex> \mathrm{Reg'} \subseteq \mathrm{Reg} </tex>. | Значит, <tex> \mathrm{Reg} </tex> {{---}} надрегулярное множество. А так как <tex> \mathrm{Reg'}=\bigcap\limits_{\mathrm{R} \in \mathrm{REG}}\mathrm{R}</tex>, то <tex> \mathrm{Reg'} \subseteq \mathrm{Reg} </tex>. | ||
}} | }} |
Версия 15:50, 20 октября 2013
Регулярные языки: два определения и их эквивалентность
Определение: |
Множество регулярных языков
| над алфавитом — множество, которое может быть получено из языков, каждый из которых содержит единственное слово — или , и пустого языка при помощи последовательных применений операций объединения, конкатенации или замыкания Клини и никаких других, то есть:
Определение: |
Регулярное выражение над алфавитом
| — способ порождения языка над . Определяется рекурсивно следующим образом:
Утверждение: |
По построению очевидно, что множество языков, порождаемых регулярными выражениями, совпадает со множеством регулярных языков. |
Определение: |
Пусть задан алфавит Множество будем называть надрегулярным, если:
Семейство всех надрегулярных множеств обозначим Тогда множеством регулярных языков . над алфавитом называется пересечение всех надрегулярных множеств: . | .
Теорема: |
Доказательство: |
Докажем, что и .По определению . Покажем, что , где — любое надрегулярное множество. Для этого докажем по индукции по , что для любого .
Так как для любого надрегулярного множества , получаем, что .Докажем, что является надрегулярным множеством. Для этого проверим, выполняются ли свойства надрегулярного множества на нём:
|