Прямое произведение ДКА — различия между версиями
Kris (обсуждение | вклад) м  | 
				м (rollbackEdits.php mass rollback)  | 
				||
| (не показано 8 промежуточных версий 7 участников) | |||
| Строка 1: | Строка 1: | ||
{{Определение  | {{Определение  | ||
|definition=  | |definition=  | ||
| − | '''Прямым произведением''' двух [[Детерминированные конечные автоматы|ДКА]] <tex>A_1 = \langle \  | + | '''Прямым произведением''' двух [[Детерминированные конечные автоматы|ДКА]] <tex>A_1 = \langle \Sigma_1, Q_1, s_1, T_1, \delta_1 \rangle</tex> и <tex>A_2 = \langle \Sigma_2, Q_2, s_2, T_2, \delta_2 \rangle</tex> называется ДКА <tex>A = \langle \Sigma, Q, s, T, \delta \rangle</tex>, где:  | 
| − | * <tex>Q = Q_1 \times Q_2  | + | * <tex>\Sigma = \Sigma_1 \cup \Sigma_2</tex>  | 
| − | * <tex>s = \langle s_1, s_2 \rangle  | + | * <tex>Q = Q_1 \times Q_2</tex>  | 
| − | * <tex>T = T_1 \times T_2  | + | * <tex>s = \langle s_1, s_2 \rangle</tex>  | 
| − | * <tex>\delta(\langle q_1, q_2 \rangle, c) = \langle \delta_1(q_1, c), \delta_2(q_2, c) \rangle  | + | * <tex>T = T_1 \times T_2</tex>  | 
| + | * <tex>\delta(\langle q_1, q_2 \rangle, c) = \langle \delta_1(q_1, c), \delta_2(q_2, c) \rangle</tex>  | ||
}}  | }}  | ||
| Строка 11: | Строка 12: | ||
[[Файл:Multi_DKA_source.png]]  | [[Файл:Multi_DKA_source.png]]  | ||
| − | Возьмем   | + | Возьмем автоматы:  | 
| + | * <tex>A_1 = \langle \Sigma = \lbrace 0, 1 \rbrace, Q_1 = \lbrace s_1, t_1 \rbrace, s_1, T_1 = \lbrace t_1 \rbrace, \delta_1 \rangle</tex>  | ||
| + | * <tex>A_2 = \langle \Sigma = \lbrace 0, 1 \rbrace, Q_2 = \lbrace s_2, q_2, t_{21}, t_{22} \rbrace, s_2, T_2 = \lbrace t_{21}, t_{22} \rbrace, \delta_2 \rangle</tex>.  | ||
[[Файл:Multi_DKA_result.png]]  | [[Файл:Multi_DKA_result.png]]  | ||
| − | |||
| − | |||
Согласно определению:  | Согласно определению:  | ||
| Строка 27: | Строка 28: | ||
#*<tex>\delta(\langle s_1, q_2 \rangle, 0) = \langle \delta_1(s_1, 0), \delta_2(q_2, 0) \rangle = \langle s_1, q_2 \rangle </tex>  | #*<tex>\delta(\langle s_1, q_2 \rangle, 0) = \langle \delta_1(s_1, 0), \delta_2(q_2, 0) \rangle = \langle s_1, q_2 \rangle </tex>  | ||
#*<tex>\delta(\langle s_1, q_2 \rangle, 1) = \langle \delta_1(s_1, 1), \delta_2(q_2, 1) \rangle = \langle t_1, t_{21} \rangle </tex>  | #*<tex>\delta(\langle s_1, q_2 \rangle, 1) = \langle \delta_1(s_1, 1), \delta_2(q_2, 1) \rangle = \langle t_1, t_{21} \rangle </tex>  | ||
| − | #*...  | + | #*<tex>\ldots</tex>  | 
| + | {{Утверждение  | ||
| + | |statement=Автомат <tex>A = \langle \Sigma, Q, s, T, \delta \rangle</tex>, построенный как прямое произведение автоматов <tex>A_1</tex> и <tex>A_2</tex> будет их пересечением.  | ||
| + | |proof=Возьмем слово <tex>\alpha</tex>, которое допускает автомат <tex>A_1</tex> и автомат <tex>A_2</tex>. Выпишем все состояния в порядке допуска слова <tex>\alpha</tex> автоматом <tex>A_1</tex> {{---}} <tex>a_{11}, a_{12},\ldots, a_{1|\alpha|}</tex> и все состояния проходимые при допуске слова автоматом <tex>A_2</tex> {{---}} <tex>a_{21}, a_{22},\ldots, a_{2|\alpha|}</tex>. Построим список пар <tex>\langle a_{1i}, a_{2i} \rangle</tex>,  где <tex>i = 1, 2,\ldots, |\alpha|</tex>. Данный список является списком состояний в процессе допуска слова <tex>\alpha</tex> автоматом <tex>A</tex>, так как:  | ||
| + | |||
| + | *<tex>\langle a_{11}, a_{21} \rangle = \langle s_1, s_2 \rangle</tex> {{---}} сохраняется стартовое состояние  | ||
| + | |||
| + | *<tex>\delta_1(a_{1i-1},c) = a_{1i}</tex>, <tex>\delta_2(a_{2i-1},c) = a_{2i}</tex>, <tex>\delta( \langle a_{1i-1}, a_{2i-1} \rangle, c) = \langle \delta_1(a_{1i-1},c), \delta_2(a_{2i-1},c) \rangle = \langle a_{1i}, a_{2i} \rangle</tex> {{---}} переходы верны  | ||
| + | |||
| + | *<tex>a_{1|\alpha|} \in T_1, a_{2|\alpha|} \in T_2, \langle a_{1|\alpha|}, a_{2|\alpha|} \rangle \in T_1 \times T_2 = T</tex> {{---}} сохраняется терминальное состояние  | ||
| + | Следовательно автомат <tex>A</tex> допускает слова, которые допускает автомат <tex>A_1</tex> и автомат <tex>A_2</tex>.  | ||
| + | |||
| + | Возьмем слово <tex>\beta</tex>, которое не допускает автомат <tex>A_1</tex> или автомат <tex>A_2</tex>, тогда <tex>a_{1|\beta|}</tex> или <tex>a_{2|\beta|}</tex> {{---}} нетерминальное состояние, следовательно <tex>\langle a_{1|\beta|}, a_{2|\beta|} \rangle \notin T_1 \times T_2</tex>.  | ||
| + | }}  | ||
== Применение ==  | == Применение ==  | ||
| Строка 34: | Строка 48: | ||
[[Файл:Multi_DKA_united.png]]  | [[Файл:Multi_DKA_united.png]]  | ||
| − | Необходимо разрешать любую цепочку, удовлетворяющую первому или второму автомату  | + | Необходимо разрешать любую цепочку, удовлетворяющую первому или второму автомату. Для этого сделаем терминальными следующие вершины <tex>T = (T_1 \times Q_2) \cup (Q_1 \times T_2)</tex>. Полученный автомат удовлетворяет нашим требованиям, так как попав в какое-либо состояние из <tex>T_1</tex> или <tex>T_2</tex>, цепочка будет удовлетворять первому или второму автомату соответственно.  | 
=== Разность ДКА ===  | === Разность ДКА ===  | ||
[[Файл:Multi_DKA_division.png]]  | [[Файл:Multi_DKA_division.png]]  | ||
| − | Рассмотрим автомат <tex>\overline{M} = \langle \Sigma , Q , s , Q \setminus T , \delta \rangle </tex>, то есть автомат <tex>M</tex>, в котором терминальные и нетерминальные состояния инвертированы. Очевидно, он допускает те и только те слова, которые не допускает автомат <tex>M</tex>, а значит, задаёт язык <tex>\overline{M}</tex>.   | + | Рассмотрим автомат <tex>\overline{M} = \langle \Sigma , Q , s , Q \setminus T , \delta \rangle </tex>, то есть автомат <tex>M</tex>, в котором терминальные и нетерминальные состояния инвертированы, если в автомате было опущено «дьявольское состояние», его необходимо добавить и сделать терминальным. Очевидно, он допускает те и только те слова, которые не допускает автомат <tex>M</tex>, а значит, задаёт язык <tex>\overline{M}</tex>.  | 
| + | |||
| + | Заметим, что если <tex>L</tex> и <tex>M</tex> {{---}} регулярные языки, то <tex>L \setminus M = L \cap \overline{M}</tex> {{---}} так же регулярный.   | ||
| + | |||
| + | Следовательно, надо построить пересечение двух автоматов, предварительно инвертировав во втором терминальные и нетерминальные состояния. Заметим, что меняется только набор терминальных вершин, следовательно в итоговой конструкции произведения ДКА сделаем терминальными следующие вершины <tex>T = T_1 \times (Q_2 \setminus T_2)</tex>.  | ||
| − | |||
| − | Таким образом  | + | Таким образом получено альтернативное доказательство [[Замкнутость регулярных языков относительно различных операций|замкнутости регулярных языков относительно теоретико-множественных операций]].  | 
== См. также ==  | == См. также ==  | ||
| Строка 51: | Строка 68: | ||
== Источники информации ==    | == Источники информации ==    | ||
* [[wikipedia:Deterministic_finite_automaton | Wikipedia {{---}} Deterministic finite automaton]]  | * [[wikipedia:Deterministic_finite_automaton | Wikipedia {{---}} Deterministic finite automaton]]  | ||
| − | *   | + | * [http://www.andrew.cmu.edu/user/ko/pdfs/lecture-3.pdf Lecture "Formal languages, automata and computation" : Carnegie Mellon University in Qatar]  | 
| − | |||
* ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. {{---}} М.:Издательский дом «Вильямс», 2002. {{---}} С. 152-154.  | * ''Хопкрофт Д., Мотвани Р., Ульман Д.'' Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. {{---}} М.:Издательский дом «Вильямс», 2002. {{---}} С. 152-154.  | ||
[[Категория: Теория формальных языков]]  | [[Категория: Теория формальных языков]]  | ||
[[Категория: Автоматы и регулярные языки]]  | [[Категория: Автоматы и регулярные языки]]  | ||
Текущая версия на 19:12, 4 сентября 2022
| Определение: | 
| Прямым произведением двух ДКА  и  называется ДКА , где:
 | 
Содержание
Пример
Возьмем автоматы:
- .
 
Согласно определению:
| Утверждение: | 
Автомат , построенный как прямое произведение автоматов  и  будет их пересечением.  | 
|  
 Возьмем слово , которое допускает автомат и автомат . Выпишем все состояния в порядке допуска слова автоматом — и все состояния проходимые при допуске слова автоматом — . Построим список пар , где . Данный список является списком состояний в процессе допуска слова автоматом , так как: 
 
 
 Следовательно автомат допускает слова, которые допускает автомат и автомат . Возьмем слово , которое не допускает автомат или автомат , тогда или — нетерминальное состояние, следовательно . | 
Применение
Изменив конструкцию, можно получить автомат, допускающий разность или объединение двух языков.
Объединение ДКА
Необходимо разрешать любую цепочку, удовлетворяющую первому или второму автомату. Для этого сделаем терминальными следующие вершины . Полученный автомат удовлетворяет нашим требованиям, так как попав в какое-либо состояние из или , цепочка будет удовлетворять первому или второму автомату соответственно.
Разность ДКА
Рассмотрим автомат , то есть автомат , в котором терминальные и нетерминальные состояния инвертированы, если в автомате было опущено «дьявольское состояние», его необходимо добавить и сделать терминальным. Очевидно, он допускает те и только те слова, которые не допускает автомат , а значит, задаёт язык .
Заметим, что если и — регулярные языки, то — так же регулярный.
Следовательно, надо построить пересечение двух автоматов, предварительно инвертировав во втором терминальные и нетерминальные состояния. Заметим, что меняется только набор терминальных вершин, следовательно в итоговой конструкции произведения ДКА сделаем терминальными следующие вершины .
Таким образом получено альтернативное доказательство замкнутости регулярных языков относительно теоретико-множественных операций.
См. также
Источники информации
- Wikipedia — Deterministic finite automaton
 - Lecture "Formal languages, automata and computation" : Carnegie Mellon University in Qatar
 - Хопкрофт Д., Мотвани Р., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — М.:Издательский дом «Вильямс», 2002. — С. 152-154.
 



