Регулярные языки: два определения и их эквивалентность — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м
Строка 4: Строка 4:
 
Регулярный язык <tex> Reg </tex> над алфавитом <tex> \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} </tex> {{---}} язык, который может быть получен из букв алфавита при помощи последовательных применений операций объединения, конкатенации или итерации и никаких других, т.е.:
 
Регулярный язык <tex> Reg </tex> над алфавитом <tex> \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} </tex> {{---}} язык, который может быть получен из букв алфавита при помощи последовательных применений операций объединения, конкатенации или итерации и никаких других, т.е.:
  
Обозначим <tex>R_0=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} , \ldots, \left\{c_k \right\} \right\}</tex>
+
обозначим <tex>R_0=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} , \ldots, \left\{c_k \right\} \right\}</tex>;
  
Определим <tex>R_{i+1}</tex> через <tex>R_i</tex>:  <tex>R_{i+1} = R_i \cup \left\{L_1 \cup L_2, L_1L_2, L_1^* | L_1, L_2 \in R_i\right\}</tex>.
+
определим <tex>R_{i+1}</tex> через <tex>R_i</tex>:  <tex>R_{i+1} = R_i \cup \left\{L_1 \cup L_2, L_1L_2, L_1^* | L_1, L_2 \in R_i\right\}</tex>,
 
Тогда: <tex>Reg = \bigcup\limits_{i=0}^{\infty}R_i</tex>.
 
Тогда: <tex>Reg = \bigcup\limits_{i=0}^{\infty}R_i</tex>.
 
}}
 
}}

Версия 17:31, 11 ноября 2011

Регулярные языки: два определения и их эквивалентность

Определение:
Регулярный язык [math] Reg [/math] над алфавитом [math] \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} [/math] — язык, который может быть получен из букв алфавита при помощи последовательных применений операций объединения, конкатенации или итерации и никаких других, т.е.:

обозначим [math]R_0=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} , \ldots, \left\{c_k \right\} \right\}[/math];

определим [math]R_{i+1}[/math] через [math]R_i[/math]: [math]R_{i+1} = R_i \cup \left\{L_1 \cup L_2, L_1L_2, L_1^* | L_1, L_2 \in R_i\right\}[/math],

Тогда: [math]Reg = \bigcup\limits_{i=0}^{\infty}R_i[/math].


Определение:
Пусть задан алфавит [math] \Sigma = \left\{c_1, c_2, \ldots ,c_k \right\} [/math].

Множество [math]R[/math] будем называть надрезом, если:

  1. [math]R_0 \subset R[/math], где [math]R_0=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\}, \ldots, \left\{c_k \right\} \right\}[/math]
  2. [math] L_1, L_2 \in R \Rightarrow L_1 \cup L_2 \in R, L_1L_2 \in R, L_1^* \in R[/math]
Тогда регулярным языком [math]Reg'[/math] над алфавитом [math] \Sigma = \left\{c_1, c_2, ... ,c_k \right\} [/math] называется пересечение всех надрезов: [math]Reg'=\bigcap\limits_{R - nadrez}R[/math].


Теорема:
Определения 1 и 2 эквивалентны.
Доказательство:
[math]\triangleright[/math]

Докажем, что [math]Reg \subset Reg'[/math] и [math]Reg' \subset Reg[/math].

  • [math]Reg \subset Reg'[/math]

По определению [math]Reg = \bigcup\limits_{i=0}^{\infty}R_i[/math]. Рассмотрим любое множество [math] R_i [/math] и любой надрез [math] R [/math]: [math]R_i \subset R[/math] (следует из определения [math]R_i[/math] и определения надреза).

Это верно для любого надрезa [math] R [/math], следовательно [math] R_i \subset Reg'[/math]. Это выполнено для любого [math] R_i [/math], значит [math] \bigcup\limits_{i=0}^{\infty}R_i \subset Reg' [/math].

  • [math]Reg' \subset Reg[/math]

Докажем, что [math] Reg [/math] является надрезом. Для этого проверим, выполняются ли свойства надреза на нем:

  1. [math] R_0 \subset Reg [/math] — выполнено (следует из определения [math] Reg [/math]).
  2. Рассмотрим [math] L_1, L_2 \in Reg [/math]. Так как [math]Reg = \bigcup\limits_{i=0}^{\infty}R_i[/math] , то [math] \exists i [/math], что [math] L_1\in R_i [/math] и [math] \exists j [/math] , что [math] L_2 \in R_j [/math]. Тогда из определения [math] Reg [/math], следует, что [math] L_1L_2 \in R_{max(i, j)+1}, L_1 \cup L_2\in R_{max(i, j)+1}, L_1^* \in R_{i + 1}[/math]. Так как [math]Reg = \bigcup\limits_{i=0}^{\infty}R_i[/math], то получаем, что [math] L_1L_2 \in Reg, L_1 \cup L_2\in Reg, L_1^* \in Reg [/math]. Следовательно второе свойство также выполнено.
Значит, [math]Reg[/math] — надрез. А так как [math]Reg'=\bigcap\limits_{\text{R- nadrez}}R[/math], то [math]Reg' \subset Reg[/math].
[math]\triangleleft[/math]

Литература

  • Хопкрофт Д., Мотвани Р., Ульман Д.Введение в теорию автоматов, языков и вычислений, 2-е изд. : Пер. с англ. — Москва, Издательский дом «Вильямс», 2002. — 528 с. : ISBN 5-8459-0261-4 (рус.)