Замкнутость регулярных языков относительно различных операций — различия между версиями
(→Основные операции) |
|||
Строка 2: | Строка 2: | ||
|statement= | |statement= | ||
Пусть <tex>L_1, L_2</tex> - [[Регулярные языки: два определения и их эквивалентность|регулярные языки]] над одним алфавитом <tex>\Sigma</tex>. Тогда следующие языки также являются регулярными: | Пусть <tex>L_1, L_2</tex> - [[Регулярные языки: два определения и их эквивалентность|регулярные языки]] над одним алфавитом <tex>\Sigma</tex>. Тогда следующие языки также являются регулярными: | ||
− | #<tex>L_1 \cup L_2</tex> | + | #Языки, полученные путём применения теоретико-множественных операций: |
+ | #*<tex>L_1 \cup L_2</tex> | ||
+ | #*<tex>\overline{L_1}</tex> | ||
+ | #*<tex>L_1 \cap L_2</tex> | ||
+ | #*<tex>L_1 \setminus L_2</tex> | ||
+ | #<tex>L_1^*</tex> | ||
#<tex>L_1 L_2</tex> | #<tex>L_1 L_2</tex> | ||
− | |||
− | |||
− | |||
− | |||
#<tex>\overset{\leftarrow}{L_1}</tex> | #<tex>\overset{\leftarrow}{L_1}</tex> | ||
|proof= | |proof= | ||
− | + | Как известно, [[Теорема Клини (совпадение классов автоматных и регулярных языков|классы регулярных и автоматных языков совпадают]]. Пусть языки <tex>L_1</tex> и <tex>L_2</tex> распознаются автоматами <tex>A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle </tex> и <tex>A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle </tex> соответственно. | |
− | + | # | |
− | + | #*<tex>L_1 \cup L_2</tex> является регулярным по определению [[Регулярные языки: два определения и их эквивалентность|регулярных языков]]. | |
− | + | #*Рассмотрим автомат <tex>A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 \rangle </tex>, то есть автомат <tex>A</tex>, в котором инвертировали терминальные и нетерминальные состояния. (При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.) Очевидно, он допускает те и только те слова, которые не допускает автомат <tex>A_1</tex>, а значит, задаёт язык <tex>\overline{L_1}</tex>. Таким образом, <tex>\overline{L_1}</tex> {{---}} регулярный. | |
− | < | + | #*Заметим, что <tex>L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}</tex>. Тогда по уже доказанному <tex>L_1 \cap L_2</tex> {{---}} регулярный. |
− | < | + | #*<tex>L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}</tex>. Тогда по уже доказанному <tex>L_1 \cap L_2</tex> {{---}} регулярный. |
− | + | #*<tex>L_1 \setminus L_2 = L_1 \cap \overline{L_2}</tex>. Тогда по уже доказанному <tex>L_1 \setminus L_2</tex> {{---}} регулярный. | |
− | + | #<tex>L_1^*</tex> является регулярным по определению [[Регулярные языки: два определения и их эквивалентность|регулярных языков]]. | |
− | При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.< | + | #<tex>L_1^*</tex> также является регулярным по определению [[Регулярные языки: два определения и их эквивалентность|регулярных языков]]. |
− | </ | + | #Рассмотрим [[Автоматы_с_eps-переходами._Eps-замыкание|НКА c <tex>\varepsilon</tex>-переходами]] <tex>A_1' = \langle \Sigma, Q_1, s' , \lbrace s_1 \rbrace, \delta_1' \rangle </tex>, где <tex>\delta_1' (v,c) = \lbrace u | \delta_1(u,c) = v \rbrace </tex>; <tex>\delta_1'(s', \varepsilon) = T_1</tex>. Если в исходном автомате путь по <tex>\alpha</tex> из <tex>s_1</tex> приводил в терминальное состояние, то в новом автомате существует путь по <tex>\alpha</tex> из этого терминального состояния в <tex>s_1</tex> (и наоборот). Следовательно, этот автомат распознает в точности развернутые слова языка <tex>L_1</tex>. Тогда из [[Автоматы_с_eps-переходами._Eps-замыкание|эквивалентности <tex>\varepsilon</tex>-НКА и ДКА]] язык <tex>\overset{\leftarrow}{L_1}</tex> {{---}} регулярный. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <tex> | ||
− | |||
− | <tex> | ||
− | |||
− | <tex> | ||
− | |||
− | <tex>\ | ||
− | |||
− | |||
− | <tex>L_1 \setminus L_2 = L_1 \cap \overline{L_2}</tex>. | ||
− | |||
− | |||
− | < | ||
− | < | ||
− | |||
− | Если в исходном автомате путь по <tex>\alpha</tex> из <tex>s_1</tex> приводил в терминальное состояние, то в новом автомате существует путь по <tex>\alpha</tex> из этого терминального состояния в <tex>s_1</tex> (и наоборот). Следовательно, этот автомат распознает в точности развернутые слова языка <tex>L_1</tex> | ||
− | |||
− | |||
− | |||
}} | }} | ||
Версия 06:00, 26 октября 2011
Теорема: |
Пусть регулярные языки над одним алфавитом . Тогда следующие языки также являются регулярными:
-
|
Доказательство: |
Как известно, классы регулярных и автоматных языков совпадают. Пусть языки и распознаются автоматами и соответственно.
|
Прямой и обратный гомоморфизмы
Определение: |
Отображение | , сохраняющее операцию конкатенации , называется гомоморфизмом.
Гомоморфизм однозначно задается значениями на алфавите:
.
Определение: |
Образом языка | при гомоморфизме называется язык .
Определение: |
Прообразом языка | при гомоморфизме называется язык .
Утверждение: |
— регулярный , — гомоморфизм. Тогда — регулярный. |
Рассмотрим ДКА, распознающий . Заменим в нем все переходы по символам на переходы по их образам при гомоморфизме. Полученный автомат (с переходами по строкам) распознает в точности и имеет эквивалентный ДКА. |
Утверждение: |
— регулярный , — гомоморфизм. Тогда — регулярный. |
Рассмотрим ДКА, распознающий . Отследим для каждого состояния и символа строку : и положим в новом автомате (на том же множестве состояний). Автомат с построенной таким образом функцией переходов, очевидно, распознает слова языка и только их. |