Регулярные языки: два определения и их эквивалентность — различия между версиями
Gromak (обсуждение | вклад) |
м (rollbackEdits.php mass rollback) |
||
(не показано 12 промежуточных версий 6 участников) | |||
Строка 3: | Строка 3: | ||
|id = REG1 | |id = REG1 | ||
|definition = | |definition = | ||
− | '''Множество регулярных языков''' <tex>\mathrm{REG}</tex> над алфавитом <tex> \Sigma = \left\{c_1, c_2, \ldots, c_k \right\} </tex> {{---}} множество, которое может быть получено из языков, каждый из которых содержит единственное слово {{---}} <tex>c_i</tex> или <tex>\varepsilon</tex>, и пустого языка при помощи последовательных применений операций объединения, конкатенации или замыкания Клини и никаких других, то есть: | + | '''Множество регулярных языков''' (англ. ''set of regular languages'') <tex>\mathrm{REG}</tex> над алфавитом <tex> \Sigma = \left\{c_1, c_2, \ldots, c_k \right\} </tex> {{---}} множество, которое может быть получено из языков, каждый из которых содержит единственное слово {{---}} <tex>c_i</tex> или <tex>\varepsilon</tex>, и пустого языка при помощи последовательных применений операций объединения, конкатенации или замыкания Клини и никаких других, то есть: |
* Определим регулярные языки нулевого уровня как <tex> \mathrm{R_0}=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} , \ldots, \left\{c_k \right\} \right\} </tex>. | * Определим регулярные языки нулевого уровня как <tex> \mathrm{R_0}=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} , \ldots, \left\{c_k \right\} \right\} </tex>. | ||
* Регулярные языки ненулевого уровня определим рекуррентным соотношением: <tex> \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\} </tex>. | * Регулярные языки ненулевого уровня определим рекуррентным соотношением: <tex> \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\} </tex>. | ||
Строка 11: | Строка 11: | ||
{{Определение | {{Определение | ||
|definition = | |definition = | ||
− | '''Регулярное выражение''' над алфавитом <tex> \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} </tex> {{---}} способ порождения языка над <tex>\Sigma</tex>. Определяется рекурсивно следующим образом: | + | '''Регулярное выражение''' (англ. ''regular expression'') над алфавитом <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>. | ||
Строка 30: | Строка 30: | ||
|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>\mathrm{R}</tex> будем называть надрегулярным, если: | + | Множество <tex>\mathrm{R}</tex> будем называть ''надрегулярным'' множеством над алфавитом <tex> \Sigma </tex>, если: |
#<tex>\mathrm{R_0} \subset \mathrm{R}</tex>, где <tex>\mathrm{R_0}=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\}, \ldots, \left\{c_k \right\} \right\}</tex>, | #<tex>\mathrm{R_0} \subset \mathrm{R}</tex>, где <tex>\mathrm{R_0}=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\}, \ldots, \left\{c_k \right\} \right\}</tex>, | ||
#<tex> 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}</tex>. | #<tex> 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}</tex>. | ||
− | Тогда '''множеством регулярных языков''' <tex> \mathrm{REG'} </tex> над алфавитом <tex> \Sigma = \left\{c_1, c_2, | + | Тогда '''множеством регулярных языков''' <tex> \mathrm{REG'} </tex> над алфавитом <tex> \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} </tex> называется пересечение всех надрегулярных множеств над этим алфавитом. |
}} | }} | ||
Строка 49: | Строка 49: | ||
#: <tex>\mathrm{R_0} \subseteq \mathrm{R}</tex> по определению надрегулярного множества. | #: <tex>\mathrm{R_0} \subseteq \mathrm{R}</tex> по определению надрегулярного множества. | ||
# Переход: известно, что <tex>\mathrm{R_i} \subseteq \mathrm{R}</tex>, докажем, что <tex>\mathrm{R_{i + 1}} \subseteq \mathrm{R}</tex>. | # Переход: известно, что <tex>\mathrm{R_i} \subseteq \mathrm{R}</tex>, докажем, что <tex>\mathrm{R_{i + 1}} \subseteq \mathrm{R}</tex>. | ||
− | #: По определению надрегулярного множества для любых <tex>L_1, L_2 \in \mathrm{R_i} \subseteq \mathrm{R}</tex> верны утверждения: <tex>L_1 \cup L_2 \in \mathrm{R}, L_1L_2 \in \mathrm{R}, L_1^* \in \mathrm{R}</tex>. То есть: <tex>\left\{L_1 \cup L_2, L_1L_2, L_1^* | L_1, L_2 \in \mathrm{R_i}\right\} \subseteq \mathrm{R}</tex>. Вспоминая [[# | + | #: По определению надрегулярного множества для любых <tex>L_1, L_2 \in \mathrm{R_i} \subseteq \mathrm{R}</tex> верны утверждения: <tex>L_1 \cup L_2 \in \mathrm{R}, L_1L_2 \in \mathrm{R}, L_1^* \in \mathrm{R}</tex>. То есть: <tex>\left\{L_1 \cup L_2, L_1L_2, L_1^* | L_1, L_2 \in \mathrm{R_i}\right\} \subseteq \mathrm{R}</tex>. Вспоминая [[#REG1 | определение]] <tex>\mathrm{R_{i + 1}}</tex> и предположение индукции (<tex>\mathrm{R_i} \subseteq \mathrm{R}</tex>), получаем, что <tex>\mathrm{R_{i + 1}} \subseteq \mathrm{R}</tex>. |
Так как <tex>\mathrm{REG} \subseteq R</tex> для любого надрегулярного множества <tex>R</tex>, получаем, что <tex> \mathrm{REG} \subseteq \mathrm{REG'} </tex>. | Так как <tex>\mathrm{REG} \subseteq R</tex> для любого надрегулярного множества <tex>R</tex>, получаем, что <tex> \mathrm{REG} \subseteq \mathrm{REG'} </tex>. | ||
Строка 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 Википедия {{---}} Регулярные выражения] | ||
[[Категория: Теория формальных языков]] | [[Категория: Теория формальных языков]] | ||
[[Категория: Автоматы и регулярные языки]] | [[Категория: Автоматы и регулярные языки]] |
Текущая версия на 19:43, 4 сентября 2022
Регулярные языки: два определения и их эквивалентность
Определение: |
Множество регулярных языков (англ. set of regular languages)
| над алфавитом — множество, которое может быть получено из языков, каждый из которых содержит единственное слово — или , и пустого языка при помощи последовательных применений операций объединения, конкатенации или замыкания Клини и никаких других, то есть:
Определение: |
Регулярное выражение (англ. regular expression) над алфавитом
| — способ порождения языка над . Определяется рекурсивно следующим образом:
Утверждение: |
По построению очевидно, что множество языков, порождаемых регулярными выражениями, совпадает со множеством регулярных языков. |
Определение: |
Пусть задан алфавит Множество будем называть надрегулярным множеством над алфавитом , если:
| .
Теорема: |
Доказательство: |
Докажем, что и .По определению . Покажем, что , где — любое надрегулярное множество. Для этого докажем по индукции по , что для любого .
Так как для любого надрегулярного множества , получаем, что .Докажем, что является надрегулярным множеством. Для этого проверим, выполняются ли свойства надрегулярного множества на нём:
|