|
|
Строка 58: |
Строка 58: |
| Значит, <tex> \mathrm{REG} </tex> {{---}} надрегулярное множество. А так как <tex> \mathrm{REG'}</tex> является пересечением всех надрегулярных множеств, то <tex> \mathrm{REG'} \subseteq \mathrm{REG} </tex>. | | Значит, <tex> \mathrm{REG} </tex> {{---}} надрегулярное множество. А так как <tex> \mathrm{REG'}</tex> является пересечением всех надрегулярных множеств, то <tex> \mathrm{REG'} \subseteq \mathrm{REG} </tex>. |
| }} | | }} |
| + | |
| + | == Ссылки == |
| + | [http://en.wikipedia.org/wiki/Regular_language Wikipedia {{---}} Regular language] |
| + | |
| + | [http://en.wikipedia.org/wiki/Regular_expression Wikipedia {{---}} Regular expression] |
| + | |
| + | [http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA Википедия {{---}} Регулярный язык] |
| + | |
| + | [http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F#.D0.92_.D1.82.D0.B5.D0.BE.D1.80.D0.B8.D0.B8_.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D0.BB.D1.8C.D0.BD.D1.8B.D1.85_.D1.8F.D0.B7.D1.8B.D0.BA.D0.BE.D0.B2 Википедия {{---}} Регулярные выражения] |
| | | |
| [[Категория: Теория формальных языков]] | | [[Категория: Теория формальных языков]] |
| [[Категория: Автоматы и регулярные языки]] | | [[Категория: Автоматы и регулярные языки]] |
Версия 15:48, 21 октября 2013
Регулярные языки: два определения и их эквивалентность
Определение: |
Множество регулярных языков [math]\mathrm{REG}[/math] над алфавитом [math] \Sigma = \left\{c_1, c_2, \ldots, c_k \right\} [/math] — множество, которое может быть получено из языков, каждый из которых содержит единственное слово — [math]c_i[/math] или [math]\varepsilon[/math], и пустого языка при помощи последовательных применений операций объединения, конкатенации или замыкания Клини и никаких других, то есть:
- Определим регулярные языки нулевого уровня как [math] \mathrm{R_0}=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} , \ldots, \left\{c_k \right\} \right\} [/math].
- Регулярные языки ненулевого уровня определим рекуррентным соотношением: [math] \mathrm{R_{i+1}} = \mathrm{R_i} \cup \left\{L_1 \cup L_2, L_1L_2, L_1^* | L_1, L_2 \in \mathrm{R_i}\right\} [/math].
- Тогда [math]\mathrm{REG} = \bigcup\limits_{i=0}^{\infty}\mathrm{R_i}[/math].
|
Определение: |
Регулярное выражение над алфавитом [math] \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} [/math] — способ порождения языка над [math]\Sigma[/math]. Определяется рекурсивно следующим образом:
- Для любого [math]i[/math] слово [math]c_i[/math] является регулярным выражением, задающим язык из одного слова [math]c_i[/math].
- [math]\varepsilon[/math] является регулярным выражением, задающим язык из одной пустой строки, а [math]\varnothing[/math] — пустой язык.
- Если [math]\alpha_1[/math] и [math]\alpha_2[/math] являются регулярными выражениями, задающими языки [math]L_1[/math] и [math]L_2[/math] соответственно, то [math](\alpha_1)|(\alpha_2)[/math] — регулярное выражение, задающее [math]L_1 \bigcup L_2[/math].
- Если [math]\alpha_1[/math] и [math]\alpha_2[/math] являются регулярными выражениями, задающими языки [math]L_1[/math] и [math]L_2[/math] соответственно, то [math](\alpha_1)(\alpha_2)[/math] — регулярное выражение, задающее [math]L_1L_2[/math].
- Если [math]\alpha_1[/math] является регулярным выражением, задающим язык [math]L_1[/math], то [math](\alpha_1)^*[/math] — регулярное выражение, задающее [math]L_1^*[/math].
- Операции указаны в порядке возрастания приоритета, при этом скобки повышают приоритет аналогично арифметическим выражениям.
|
Утверждение: |
По построению очевидно, что множество языков, порождаемых регулярными выражениями, совпадает со множеством регулярных языков. |
Определение: |
Пусть задан алфавит [math] \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} [/math].
Множество [math]\mathrm{R}[/math] будем называть надрегулярным, если:
- [math]\mathrm{R_0} \subset \mathrm{R}[/math], где [math]\mathrm{R_0}=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\}, \ldots, \left\{c_k \right\} \right\}[/math],
- [math] L_1, L_2 \in \mathrm{R} \Rightarrow L_1 \cup L_2 \in \mathrm{R}, L_1L_2 \in \mathrm{R}, L_1^* \in \mathrm{R}[/math].
Тогда множеством регулярных языков [math] \mathrm{REG'} [/math] над алфавитом [math] \Sigma = \left\{c_1, c_2, ... ,c_k \right\} [/math] называется пересечение всех надрегулярных множеств. |
Теорема: |
|
Доказательство: |
[math]\triangleright[/math] |
Докажем, что [math]\mathrm{REG} \subseteq \mathrm{REG'}[/math] и [math]\mathrm{REG'} \subseteq \mathrm{REG}[/math].
- [math]\mathrm{REG} \subseteq \mathrm{REG'}[/math]
По определению [math]\mathrm{REG} = \bigcup\limits_{i=0}^{\infty}\mathrm{R_i}[/math]. Покажем, что [math]\bigcup\limits_{i=0}^{\infty}\mathrm{R_i} \subseteq \mathrm{R}[/math], где [math]\mathrm{R}[/math] — любое надрегулярное множество. Для этого докажем по индукции по [math]i[/math], что [math]\mathrm{R_i} \subseteq \mathrm{R}[/math] для любого [math]i[/math].
- База: [math]i = 0[/math].
- [math]\mathrm{R_0} \subseteq \mathrm{R}[/math] по определению надрегулярного множества.
- Переход: известно, что [math]\mathrm{R_i} \subseteq \mathrm{R}[/math], докажем, что [math]\mathrm{R_{i + 1}} \subseteq \mathrm{R}[/math].
- По определению надрегулярного множества для любых [math]L_1, L_2 \in \mathrm{R_i} \subseteq \mathrm{R}[/math] верны утверждения: [math]L_1 \cup L_2 \in \mathrm{R}, L_1L_2 \in \mathrm{R}, L_1^* \in \mathrm{R}[/math]. То есть: [math]\left\{L_1 \cup L_2, L_1L_2, L_1^* | L_1, L_2 \in \mathrm{R_i}\right\} \subseteq \mathrm{R}[/math]. Вспоминая определение [math]\mathrm{R_{i + 1}}[/math] и предположение индукции ([math]\mathrm{R_i} \subseteq \mathrm{R}[/math]), получаем, что [math]\mathrm{R_{i + 1}} \subseteq \mathrm{R}[/math].
Так как [math]\mathrm{REG} \subseteq R[/math] для любого надрегулярного множества [math]R[/math], получаем, что [math] \mathrm{REG} \subseteq \mathrm{REG'} [/math].
- [math] \mathrm{REG'} \subseteq \mathrm{REG} [/math]
Докажем, что [math] \mathrm{REG} [/math] является надрегулярным множеством. Для этого проверим, выполняются ли свойства надрегулярного множества на нём:
- [math] \mathrm{R_0}\subseteq \mathrm{REG} [/math] — выполнено (по определению [math] \mathrm{REG} [/math]).
- Рассмотрим [math] L_1, L_2 \in \mathrm{REG} [/math]. Так как [math] \mathrm{REG} = \bigcup\limits_{i=0}^{\infty}\mathrm{R_i}[/math], то найдутся такие индексы [math]i[/math] и [math]j[/math], что [math]L_1 \in \mathrm{R_i}[/math] и [math]L_2 \in \mathrm{R_j}[/math]. Тогда из определения [math] \mathrm{REG} [/math] следует, что [math] 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}}[/math]. Так как [math] \mathrm{REG} = \bigcup\limits_{i=0}^{\infty}R_i[/math], то получаем, что [math] L_1L_2 \in \mathrm{REG}, L_1 \cup L_2\in \mathrm{REG}, L_1^* \in \mathrm{REG} [/math]. Следовательно, второе свойство также выполнено.
Значит, [math] \mathrm{REG} [/math] — надрегулярное множество. А так как [math] \mathrm{REG'}[/math] является пересечением всех надрегулярных множеств, то [math] \mathrm{REG'} \subseteq \mathrm{REG} [/math]. |
[math]\triangleleft[/math] |
Ссылки
Wikipedia — Regular language
Wikipedia — Regular expression
Википедия — Регулярный язык
Википедия — Регулярные выражения