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

Материал из Викиконспекты
Перейти к: навигация, поиск
(Регулярные языки: два определения и их эквивалентность)
(изменены определения)
Строка 2: Строка 2:
 
{{Определение
 
{{Определение
 
|definition =
 
|definition =
Будем обозначать через <tex>Reg_t - </tex> языки <tex>t</tex>-го поколения.
+
Регулярный язык <tex> Reg </tex> над алфавитом <tex> \Sigma = \left\{c_1, c_2, ... ,c_k \right\} </tex> {{---}} язык, который может быть получен из букв алфавита при помощи последовательных применений операций объединения, конкатенации или итерации и никаких других, т.е.:
  
Рассмотрим языки нулевого поколения: <tex>Reg_0=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} ... \left\{c_k \right\} \right\}</tex>, (<tex>k - </tex>размер алфавита).
+
Обозначим <tex>R_0=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} ... \left\{c_k \right\} \right\}</tex>
  
Пусть имеем <tex>Reg_i</tex>. Построим <tex>Reg_{i+1} = Reg_i \cup \left\{L \cup M, LM, L^*| L, M \in Reg_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>.
  
Тогда по определению <em>множество регулярных языков</em>: <tex>Reg = \bigcup\limits_{i=0}^{\infty}Reg_i</tex>.
+
Тогда: <tex>Reg = \bigcup\limits_{i=0}^{\infty}R_i</tex>
 
}}
 
}}
  
 
{{Определение
 
{{Определение
 
|definition =
 
|definition =
Пусть <tex>A - </tex> множество языков. Будем говорить, что <tex>A - </tex> хорошее, если выполнены следующие свойства: языки нулевого поколения являются подмножеством <tex>A</tex> и множество <tex>A</tex> замкнуто относительно операций объединения, конкатенации и замыкания Клини, т.е.:  
+
Пусть задан алфавит <tex> \Sigma = \left\{c_1, c_2, ... ,c_k \right\} </tex>.
 +
Множество <tex>R</tex> будем называть надрезом, если:
  
#<tex>Reg_0 \subset A</tex>
+
#<tex>R_0 \subset R</tex>, где <tex>R_0=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} ... \left\{c_k \right\} \right\}</tex>
#<tex> L_1, L_2 \in A \Rightarrow L_1 \cup L_2 \in A, L_1L_2 \in A, L_1^* \in A</tex>
+
#<tex> L_1, L_2 \in R \Rightarrow L_1 \cup L_2 \in R, L_1L_2 \in R, L_1^* \in R</tex>
 
+
Тогда регулярным языком <tex>Reg'</tex> над алфавитом <tex> \Sigma = \left\{c_1, c_2, ... ,c_k \right\} </tex> называется пересечение всех надрезов: <tex>Reg'=\bigcap\limits_{R - nadrez}R</tex>
Тогда <em>множеством регулярных языков</em> будем называть <tex>Reg'=\bigcap\limits_{\text{A- xop.}}A</tex>.
 
 
}}
 
}}
  

Версия 19:53, 31 октября 2011

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

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

Обозначим [math]R_0=\left\{\varnothing, \left\{\varepsilon \right\}, \left\{c_1 \right\}, \left\{c_2 \right\} ... \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, ... ,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\} ... \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]\forall A: Reg_0 \subset A[/math]. Поэтому из того, что [math]Reg'[/math] есть пересечение всех хороших языков получаем: [math]Reg'=\bigcap\limits_{\text{A- xop.}}A \Rightarrow Reg_0 \subset Reg'[/math].

Индукционный переход: пусть [math]Reg_i \subset Reg'[/math]. Докажем, что [math]Reg_{i+1} \subset Reg'[/math]. Действительно, так как [math]Reg_i \subset Reg'[/math], то [math]\forall A: Reg_i \subset A[/math]. Рассмотрим способ построения [math]Reg_{i+1}[/math]: [math]Reg_{i+1} = Reg_i \cup \left\{L \cup M, LM, L^*| L, M \in Reg_i\right\}[/math]. Тогда, принимая во внимание вышесказанное, получаем, что [math]\forall A: L, M \in A[/math].

Так как [math]A - [/math]хорошее, получаем, что [math]Reg_{i+1}[/math] тоже содержится в [math]A[/math], т.е. [math]A - xop. \Rightarrow Reg_{i+1} \subset A[/math]. Таким образом получили, что если [math]Reg_i \subset Reg' \Rightarrow Reg_{i+1} \subset Reg'[/math]. Значит [math]Reg \subset Reg'[/math].

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

По определению [math]Reg[/math] получаем, что

  1. [math] Reg_0 \subset Reg [/math]
  1. [math] L_1, L_2 \in Reg \Rightarrow L_1 \cup L_2 \in Reg, L_1L_2 \in Reg, L_1^* \in Reg [/math]

Значит [math]Reg - [/math]хорошее множество. А так как [math]Reg'=\bigcap\limits_{\text{A- xop.}}A[/math], то [math]Reg' \subset Reg[/math].

Таким образом, теорема доказана.
[math]\triangleleft[/math]