<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MikhailOK</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MikhailOK"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/MikhailOK"/>
		<updated>2026-06-11T18:23:32Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4494</id>
		<title>Приведение грамматики к ослабленной нормальной форме Грейбах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4494"/>
				<updated>2010-10-28T20:28:16Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Грамматикой в нормальной форме Грейбах (Greibach normal form) называется грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B C &amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A, B, C&amp;lt;/tex&amp;gt; - нетерминалы)&lt;br /&gt;
и, возможно, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ и не содержится в правых частях правил)&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Грамматикой в ослабленной нормальной форме Грейбах называется грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - строка из терминалов и нетерминалов)&lt;br /&gt;
и, возможно, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ и не содержится в правых частях правил)&lt;br /&gt;
}}&lt;br /&gt;
==Алгоритм приведения грамматики к ослабленной нормальной форме Грейбах==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), содержащую только правила вида &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Произвольную грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; можно привести к требуемой форме следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Алгоритм для грамматики без ε-правил===&lt;br /&gt;
Первым делом, используем [[Устранение_левой_рекурсии|алгоритм устранения левой рекурсии]]. После этого все правила грамматики будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow a \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем проведем процедуру, похожую на используемую при устранении левой рекурсии:&lt;br /&gt;
: for i = n downto 1 {&lt;br /&gt;
::for j = n downto i + 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
:::&amp;lt;tex&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;tex&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/tex&amp;gt; на&lt;br /&gt;
:::&amp;lt;tex&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/tex&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:}&lt;br /&gt;
Легко видеть, что после итерации главного цикла для значения &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; все правила для &amp;lt;tex&amp;gt;A_k, \, k \ge i&amp;lt;/tex&amp;gt; будут иметь вид &amp;lt;tex&amp;gt;A_k \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, после применения процедуры все правила грамматики будут иметь вид &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4493</id>
		<title>Устранение левой рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4493"/>
				<updated>2010-10-28T20:26:11Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит непосредственную левую рекурсию, если она содержит правило вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит левую рекурсию, если в ней существует вывод вида &amp;lt;tex&amp;gt;A \Rightarrow^* A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Алгоритм устранения левой рекурсии==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), не содержащую левой рекурсии.&lt;br /&gt;
&lt;br /&gt;
Для произвольной грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; левую рекурсию можно устранить следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
===Устранение непосредственной левой рекурсии===&lt;br /&gt;
Опишем процедуру, устраняющую все правила вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt; для фиксированного нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем все правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow A\alpha_1\,|\,\ldots\,|\,A\alpha_n\,|\,\beta_1\,|\,\ldots\,|\,\beta_m &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов (&amp;lt;tex&amp;gt;\alpha \ne \epsilon &amp;lt;/tex&amp;gt;)&lt;br /&gt;
* &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов, не начинающаяся с &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заменим правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; на:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow \beta_1A^\prime\, |\, \ldots\,  |\,  \beta_mA^\prime \,|\, \beta_1 \,|\, \ldots \,|\, \beta_m&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И создадим новый нетерминал&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A^\prime \rightarrow \alpha_1A^\prime\,  |\,  \ldots\, |\, \alpha_nA^\prime&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Устранение произвольной левой рекурсии===&lt;br /&gt;
Пусть множество всех нетерминалов &amp;lt;tex&amp;gt;N = \lbrace A_1, A_2, \ldots , A_n \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
: for i = 1 to n {&lt;br /&gt;
::for j = 1 to i – 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
:::&amp;lt;tex&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;tex&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/tex&amp;gt; на&lt;br /&gt;
:::&amp;lt;tex&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/tex&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:: устранить непосредственную левую рекурсию для &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt;&lt;br /&gt;
:}&lt;br /&gt;
Инвариант: после &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; итераций внутреннего цикла для &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;&lt;br /&gt;
*для &amp;lt;tex&amp;gt;k &amp;lt; i&amp;lt;/tex&amp;gt; правые части правил вывода из &amp;lt;tex&amp;gt;A_k&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода из &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода не начинаются с добавленных алгоритмом нетерминалов &amp;lt;tex&amp;gt;A_k ^{\prime}&amp;lt;/tex&amp;gt;&lt;br /&gt;
*грамматика не содержит ε-правил&lt;br /&gt;
(проверяется индукцией по парам &amp;lt;tex&amp;gt;(i,j)&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Таким образом, после применения алгоритма все правила вывода имеют вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; - произвольный нетерминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A_i , A_j&amp;lt;/tex&amp;gt; - нетерминалы из исходной грамматики&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i^{\prime} \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A_i^{\prime}&amp;lt;/tex&amp;gt; - новый нетерминал, &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; - нетерминал из исходной грамматики&lt;br /&gt;
&lt;br /&gt;
Если теперь перенумеровать нетерминалы, сохранив порядок для старых и присвоив всем новым меньшие номера, то все правила будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow B_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4411</id>
		<title>Устранение левой рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4411"/>
				<updated>2010-10-25T22:03:49Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит непосредственную левую рекурсию, если она содержит правило вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит левую рекурсию, если в ней существует вывод вида &amp;lt;tex&amp;gt;A \Rightarrow^* A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
==Алгоритм устранения левой рекурсии==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), не содержащую левой рекурсии.&lt;br /&gt;
&lt;br /&gt;
Для произвольной грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; левую рекурсию можно устранить следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
===Устранение непосредственной левой рекурсии===&lt;br /&gt;
Опишем процедуру, устраняющую все правила вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt; для фиксированного нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем все правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow A\alpha_1\,|\,\ldots\,|\,A\alpha_n\,|\,\beta_1\,|\,\ldots\,|\,\beta_m &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов (&amp;lt;tex&amp;gt;\alpha \ne \epsilon &amp;lt;/tex&amp;gt;)&lt;br /&gt;
* &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов, не начинающаяся с &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заменим правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; на:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow \beta_1A^\prime\, |\, \ldots\,  |\,  \beta_mA^\prime \,|\, \beta_1 \,|\, \ldots \,|\, \beta_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И создадим новый нетерминал&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A^\prime \rightarrow \alpha_1A^\prime\,  |\,  \ldots\, |\, \alpha_nA^\prime&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Устранение произвольной левой рекурсии===&lt;br /&gt;
Пусть множество всех нетерминалов &amp;lt;tex&amp;gt;N = \lbrace A_1, A_2, \ldots , A_n \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
: for i = 1 to n {&lt;br /&gt;
::for j = 1 to i – 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:: устранить непосредственную левую рекурсию для &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt;&lt;br /&gt;
:}&lt;br /&gt;
Инвариант: после &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; итераций внутреннего цикла для &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;&lt;br /&gt;
*для &amp;lt;tex&amp;gt;k &amp;lt; i&amp;lt;/tex&amp;gt; правые части правил вывода из &amp;lt;tex&amp;gt;A_k&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода из &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода не начинаются с добавленных алгоритмом нетерминалов &amp;lt;tex&amp;gt;A_k ^{\prime}&amp;lt;/tex&amp;gt;&lt;br /&gt;
*грамматика не содержит ε-правил&lt;br /&gt;
(проверяется индукцией по парам &amp;lt;tex&amp;gt;(i,j)&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Таким образом, после применения алгоритма все правила вывода имеют вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; - произвольный нетерминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A_i , A_j&amp;lt;/tex&amp;gt; - нетерминалы из исходной грамматики&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i^{\prime} \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A_i^{\prime}&amp;lt;/tex&amp;gt; - новый нетерминал, &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; - нетерминал из исходной грамматики&lt;br /&gt;
&lt;br /&gt;
Если теперь перенумеровать нетерминалы, сохранив порядок для старых и присвоив всем новым меньшие номера, то все правила будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow B_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4326</id>
		<title>Устранение левой рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4326"/>
				<updated>2010-10-22T01:45:28Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Устранение произвольной левой рекурсии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит непосредственную левую рекурсию, если она содержит правило вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит левую рекурсию, если в ней существует вывод вида &amp;lt;tex&amp;gt;A \Rightarrow^* A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм устранения левой рекурсии==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), не содержащую левой рекурсии.&lt;br /&gt;
&lt;br /&gt;
Для произвольной грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; левую рекурсию можно устранить следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
===Устранение непосредственной левой рекурсии===&lt;br /&gt;
Опишем процедуру, устраняющую все правила вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt; для фиксированного нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем все правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow A\alpha_1\,|\,\ldots\,|\,A\alpha_n\,|\,\beta_1\,|\,\ldots\,|\,\beta_m &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов (&amp;lt;tex&amp;gt;\alpha \ne \epsilon &amp;lt;/tex&amp;gt;)&lt;br /&gt;
* &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов, не начинающаяся с &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заменим правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; на:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow \beta_1A^\prime\, |\, \ldots\,  |\,  \beta_mA^\prime \,|\, \beta_1 \,|\, \ldots \,|\, \beta_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И создадим новый нетерминал&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A^\prime \rightarrow \alpha_1A^\prime\,  |\,  \ldots\, |\, \alpha_nA^\prime&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Устранение произвольной левой рекурсии===&lt;br /&gt;
Пусть множество всех нетерминалов &amp;lt;tex&amp;gt;N = \lbrace A_1, A_2, \ldots , A_n \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
: for i = 1 to n {&lt;br /&gt;
::for j = 1 to i – 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:: устранить непосредственную левую рекурсию для &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt;&lt;br /&gt;
:}&lt;br /&gt;
Инвариант: после &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; итераций внутреннего цикла для &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;&lt;br /&gt;
*для &amp;lt;tex&amp;gt;k &amp;lt; i&amp;lt;/tex&amp;gt; правые части правил вывода из &amp;lt;tex&amp;gt;A_k&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода из &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода не начинаются с добавленных алгоритмом нетерминалов &amp;lt;tex&amp;gt;A_k ^{\prime}&amp;lt;/tex&amp;gt;&lt;br /&gt;
*грамматика не содержит ε-правил&lt;br /&gt;
(проверяется индукцией по парам &amp;lt;tex&amp;gt;(i,j)&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Таким образом, после применения алгоритма все правила вывода имеют вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; - произвольный нетерминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A_i , A_j&amp;lt;/tex&amp;gt; - нетерминалы из исходной грамматики&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i^{\prime} \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A_i^{\prime}&amp;lt;/tex&amp;gt; - новый нетерминал, &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; - нетерминал из исходной грамматики&lt;br /&gt;
&lt;br /&gt;
Если теперь перенумеровать нетерминалы, сохранив порядок для старых и присвоив всем новым меньшие номера, то все правила будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow B_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4096</id>
		<title>Приведение грамматики к ослабленной нормальной форме Грейбах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4096"/>
				<updated>2010-10-16T02:08:11Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Грамматикой в нормальной форме Грейбах (Greibach normal form) называется грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B C &amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A, B, C&amp;lt;/tex&amp;gt; - нетерминалы)&lt;br /&gt;
и, возможно, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ и не содержится в правых частях правил)&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Грамматикой в ослабленной нормальной форме Грейбах называется грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - строка из терминалов и нетерминалов)&lt;br /&gt;
и, возможно, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ и не содержится в правых частях правил)&lt;br /&gt;
}}&lt;br /&gt;
==Алгоритм приведения грамматики к ослабленной нормальной форме Грейбах==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), содержащую только правила вида &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Произвольную грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; можно привести к требуемой форме следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Алгоритм для грамматики без ε-правил===&lt;br /&gt;
Первым делом, используем [[Устранение_левой_рекурсии|алгоритм устранения левой рекурсии]]. После этого все правила грамматики будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow a \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем проведем процедуру, похожую на используемую при устранении левой рекурсии:&lt;br /&gt;
: for i = n downto 1 {&lt;br /&gt;
::for j = n downto i + 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:}&lt;br /&gt;
Легко видеть, что после итерации главного цикла для значения &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; все правила для &amp;lt;tex&amp;gt;A_k, \, k \ge i&amp;lt;/tex&amp;gt; будут иметь вид &amp;lt;tex&amp;gt;A_k \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, после применения процедуры все правила грамматики будут иметь вид &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4090</id>
		<title>Приведение грамматики к ослабленной нормальной форме Грейбах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4090"/>
				<updated>2010-10-15T23:53:56Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Грамматикой в нормальной форме Грейбах (Greibach normal form) называется к.с. грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B C &amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A, B, C&amp;lt;/tex&amp;gt; - нетерминалы)&lt;br /&gt;
и, возможно, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ и не содержится в правых частях правил)&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Грамматикой в ослабленной нормальной форме Грейбах называется к.с. грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - строка из терминалов и нетерминалов)&lt;br /&gt;
и, возможно, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ и не содержится в правых частях правил)&lt;br /&gt;
}}&lt;br /&gt;
==Алгоритм приведения грамматики к ослабленной нормальной форме Грейбах==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), содержащую только правила вида &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Произвольную грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; можно привести к требуемой форме следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Алгоритм для грамматики без ε-правил===&lt;br /&gt;
Первым делом, используем [[Устранение_левой_рекурсии|алгоритм устранения левой рекурсии]]. После этого все правила грамматики будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow a \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем проведем процедуру, похожую на используемую при устранении левой рекурсии:&lt;br /&gt;
: for i = n downto 1 {&lt;br /&gt;
::for j = n downto i + 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:}&lt;br /&gt;
Легко видеть, что после итерации главного цикла для значения &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; все правила для &amp;lt;tex&amp;gt;A_k, \, k \ge i&amp;lt;/tex&amp;gt; будут иметь вид &amp;lt;tex&amp;gt;A_k \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, после применения процедуры все правила грамматики будут иметь вид &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4089</id>
		<title>Приведение грамматики к ослабленной нормальной форме Грейбах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4089"/>
				<updated>2010-10-15T23:52:39Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Грамматикой в нормальной форме Грейбах (Greibach normal form) называется к.с. грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B C &amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A, B, C&amp;lt;/tex&amp;gt; - нетерминалы)&lt;br /&gt;
и, возможно, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ)&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Грамматикой в ослабленной нормальной форме Грейбах называется к.с. грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - строка из терминалов и нетерминалов)&lt;br /&gt;
и, возможно, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ и не содержится в правых частях правил)&lt;br /&gt;
}}&lt;br /&gt;
==Алгоритм приведения грамматики к ослабленной нормальной форме Грейбах==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), содержащую только правила вида &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Произвольную грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; можно привести к требуемой форме следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Алгоритм для грамматики без ε-правил===&lt;br /&gt;
Первым делом, используем [[Устранение_левой_рекурсии|алгоритм устранения левой рекурсии]]. После этого все правила грамматики будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow a \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем проведем процедуру, похожую на используемую при устранении левой рекурсии:&lt;br /&gt;
: for i = n downto 1 {&lt;br /&gt;
::for j = n downto i + 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:}&lt;br /&gt;
Легко видеть, что после итерации главного цикла для значения &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; все правила для &amp;lt;tex&amp;gt;A_k, \, k \ge i&amp;lt;/tex&amp;gt; будут иметь вид &amp;lt;tex&amp;gt;A_k \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, после применения процедуры все правила грамматики будут иметь вид &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4088</id>
		<title>Приведение грамматики к ослабленной нормальной форме Грейбах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4088"/>
				<updated>2010-10-15T23:51:37Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Грамматикой в нормальной форме Грейбах (Greibach normal form) называется к.с. грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B C &amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A, B, C&amp;lt;/tex&amp;gt; - нетерминалы)&lt;br /&gt;
и, быть может, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ)&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Грамматикой в ослабленной нормальной форме Грейбах называется к.с. грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - строка из терминалов и нетерминалов)&lt;br /&gt;
и, быть может, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ и не содержится в правых частях правил)&lt;br /&gt;
}}&lt;br /&gt;
==Алгоритм приведения грамматики к ослабленной нормальной форме Грейбах==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), содержащую только правила вида &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Произвольную грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; можно привести к требуемой форме следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Алгоритм для грамматики без ε-правил===&lt;br /&gt;
Первым делом, используем [[Устранение_левой_рекурсии|алгоритм устранения левой рекурсии]]. После этого все правила грамматики будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow a \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем проведем процедуру, похожую на используемую при устранении левой рекурсии:&lt;br /&gt;
: for i = n downto 1 {&lt;br /&gt;
::for j = n downto i + 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:}&lt;br /&gt;
Легко видеть, что после итерации главного цикла для значения &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; все правила для &amp;lt;tex&amp;gt;A_k, \, k \ge i&amp;lt;/tex&amp;gt; будут иметь вид &amp;lt;tex&amp;gt;A_k \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, после применения процедуры все правила грамматики будут иметь вид &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4087</id>
		<title>Приведение грамматики к ослабленной нормальной форме Грейбах</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8_%D0%BA_%D0%BE%D1%81%D0%BB%D0%B0%D0%B1%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D1%84%D0%BE%D1%80%D0%BC%D0%B5_%D0%93%D1%80%D0%B5%D0%B9%D0%B1%D0%B0%D1%85&amp;diff=4087"/>
				<updated>2010-10-15T23:51:19Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: Новая страница: «{{Определение |definition=Грамматикой в нормальной форме Грейбах (Greibach normal form) называется к.с. гр…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Грамматикой в нормальной форме Грейбах (Greibach normal form) называется к.с. грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B C &amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a B&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A, B, C&amp;lt;/tex&amp;gt; - нетерминалы)&lt;br /&gt;
и, быть может, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (где &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ)&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Грамматикой в ослабленной нормальной форме Грейбах (Greibach normal form) называется к.с. грамматика, в которой содержатся только правила вида&lt;br /&gt;
&amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt; &lt;br /&gt;
&lt;br /&gt;
(где &amp;lt;tex&amp;gt;a&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - строка из терминалов и нетерминалов)&lt;br /&gt;
и, быть может, правило &amp;lt;tex&amp;gt;S \rightarrow \epsilon&amp;lt;/tex&amp;gt; (в этом случае &amp;lt;tex&amp;gt;S&amp;lt;/tex&amp;gt; - начальный символ и не содержится в правых частях правил)&lt;br /&gt;
}}&lt;br /&gt;
==Алгоритм приведения грамматики к ослабленной нормальной форме Грейбах==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), содержащую только правила вида &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Произвольную грамматику &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; можно привести к требуемой форме следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Алгоритм для грамматики без ε-правил===&lt;br /&gt;
Первым делом, используем [[Устранение_левой_рекурсии|алгоритм устранения левой рекурсии]]. После этого все правила грамматики будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow a \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Затем проведем процедуру, похожую на используемую при устранении левой рекурсии:&lt;br /&gt;
: for i = n downto 1 {&lt;br /&gt;
::for j = n downto i + 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:}&lt;br /&gt;
Легко видеть, что после итерации главного цикла для значения &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; все правила для &amp;lt;tex&amp;gt;A_k, \, k \ge i&amp;lt;/tex&amp;gt; будут иметь вид &amp;lt;tex&amp;gt;A_k \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Следовательно, после применения процедуры все правила грамматики будут иметь вид &amp;lt;tex&amp;gt;A \rightarrow a \alpha&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4086</id>
		<title>Устранение левой рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4086"/>
				<updated>2010-10-15T23:23:25Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Алгоритм устранения левой рекурсии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит непосредственную левую рекурсию, если она содержит правило вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит левую рекурсию, если в ней существует вывод вида &amp;lt;tex&amp;gt;A \Rightarrow^* A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм устранения левой рекурсии==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), не содержащую левой рекурсии.&lt;br /&gt;
&lt;br /&gt;
Для произвольной грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; левую рекурсию можно устранить следующим образом:&lt;br /&gt;
#Воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#Воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
===Устранение непосредственной левой рекурсии===&lt;br /&gt;
Опишем процедуру, устраняющую все правила вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt; для фиксированного нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем все правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow A\alpha_1\,|\,\ldots\,|\,A\alpha_n\,|\,\beta_1\,|\,\ldots\,|\,\beta_m &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов (&amp;lt;tex&amp;gt;\alpha \ne \epsilon &amp;lt;/tex&amp;gt;)&lt;br /&gt;
* &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов, не начинающаяся с &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заменим правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; на:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow \beta_1A^\prime\, |\, \ldots\,  |\,  \beta_mA^\prime \,|\, \beta_1 \,|\, \ldots \,|\, \beta_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И создадим новый нетерминал&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A^\prime \rightarrow \alpha_1A^\prime\,  |\,  \ldots\, |\, \alpha_nA^\prime&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Устранение произвольной левой рекурсии===&lt;br /&gt;
Пусть множество всех нетерминалов &amp;lt;tex&amp;gt;N = \lbrace A_1, A_2, \ldots , A_n \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
: for i = 1 to n {&lt;br /&gt;
::for j = 1 to i – 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:: устранить прямую левую рекурсию для &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt;&lt;br /&gt;
:}&lt;br /&gt;
Инвариант: после &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; итераций внутреннего цикла для &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;&lt;br /&gt;
*для &amp;lt;tex&amp;gt;k &amp;lt; i&amp;lt;/tex&amp;gt; правые части правил вывода из &amp;lt;tex&amp;gt;A_k&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода из &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода не начинаются с добавленных алгоритмом нетерминалов &amp;lt;tex&amp;gt;A_k ^{\prime}&amp;lt;/tex&amp;gt;&lt;br /&gt;
*грамматика не содержит ε-правил&lt;br /&gt;
(проверяется индукцией по парам &amp;lt;tex&amp;gt;(i,j)&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Таким образом, после применения алгоритма все правила вывода имеют вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; - произвольный нетерминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A_i , A_j&amp;lt;/tex&amp;gt; - нетерминалы из исходной грамматики&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i^{\prime} \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A_i^{\prime}&amp;lt;/tex&amp;gt; - новый нетерминал, &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; - нетерминал из исходной грамматики&lt;br /&gt;
&lt;br /&gt;
Если теперь перенумеровать нетерминалы, сохранив порядок для старых и присвоив всем новым меньшие номера, то все правила будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow B_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4084</id>
		<title>Устранение левой рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4084"/>
				<updated>2010-10-15T22:58:29Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Алгоритм устранения левой рекурсии */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит непосредственную левую рекурсию, если она содержит правило вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит левую рекурсию, если в ней существует вывод вида &amp;lt;tex&amp;gt;A \Rightarrow^* A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм устранения левой рекурсии==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), не содержащую левой рекурсии.&lt;br /&gt;
&lt;br /&gt;
Для произвольной грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; левую рекурсию можно устранить следующим образом&lt;br /&gt;
#воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \setminus \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
===Устранение непосредственной левой рекурсии===&lt;br /&gt;
Опишем процедуру, устраняющую все правила вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt; для фиксированного нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем все правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow A\alpha_1\,|\,\ldots\,|\,A\alpha_n\,|\,\beta_1\,|\,\ldots\,|\,\beta_m &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов (&amp;lt;tex&amp;gt;\alpha \ne \epsilon &amp;lt;/tex&amp;gt;)&lt;br /&gt;
* &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов, не начинающаяся с &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заменим правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; на:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow \beta_1A^\prime\, |\, \ldots\,  |\,  \beta_mA^\prime \,|\, \beta_1 \,|\, \ldots \,|\, \beta_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И создадим новый нетерминал&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A^\prime \rightarrow \alpha_1A^\prime\,  |\,  \ldots\, |\, \alpha_nA^\prime&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Устранение произвольной левой рекурсии===&lt;br /&gt;
Пусть множество всех нетерминалов &amp;lt;tex&amp;gt;N = \lbrace A_1, A_2, \ldots , A_n \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
: for i = 1 to n {&lt;br /&gt;
::for j = 1 to i – 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:: устранить прямую левую рекурсию для &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt;&lt;br /&gt;
:}&lt;br /&gt;
Инвариант: после &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; итераций внутреннего цикла для &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;&lt;br /&gt;
*для &amp;lt;tex&amp;gt;k &amp;lt; i&amp;lt;/tex&amp;gt; правые части правил вывода из &amp;lt;tex&amp;gt;A_k&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода из &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода не начинаются с добавленных алгоритмом нетерминалов &amp;lt;tex&amp;gt;A_k ^{\prime}&amp;lt;/tex&amp;gt;&lt;br /&gt;
*грамматика не содержит ε-правил&lt;br /&gt;
(проверяется индукцией по парам &amp;lt;tex&amp;gt;(i,j)&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Таким образом, после применения алгоритма все правила вывода имеют вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; - произвольный нетерминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A_i , A_j&amp;lt;/tex&amp;gt; - нетерминалы из исходной грамматики&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i^{\prime} \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A_i^{\prime}&amp;lt;/tex&amp;gt; - новый нетерминал, &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; - нетерминал из исходной грамматики&lt;br /&gt;
&lt;br /&gt;
Если теперь перенумеровать нетерминалы, сохранив порядок для старых и присвоив всем новым меньшие номера, то все правила будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow B_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4081</id>
		<title>Устранение левой рекурсии</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BB%D0%B5%D0%B2%D0%BE%D0%B9_%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B8&amp;diff=4081"/>
				<updated>2010-10-15T22:54:39Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: Новая страница: «{{Определение |definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит непосредственную леву…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит непосредственную левую рекурсию, если она содержит правило вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Говорят, что к.с. грамматика &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; содержит левую рекурсию, если в ней существует вывод вида &amp;lt;tex&amp;gt;A \Rightarrow^* A\alpha&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Алгоритм устранения левой рекурсии==&lt;br /&gt;
Приведем алгоритм, позволяющий для к.с. грамматики '''без &amp;amp;epsilon;-правил''' построить эквивалентную ей к.с. грамматику (без &amp;amp;epsilon;-правил), не содержащую левой рекурсии.&lt;br /&gt;
&lt;br /&gt;
Для произвольной грамматики &amp;lt;tex&amp;gt;\Gamma&amp;lt;/tex&amp;gt; левую рекурсию можно устранить следующим образом&lt;br /&gt;
#воспользоваться [[Удаление_eps-правил_из_грамматики | алгоритмом удаления &amp;amp;epsilon;-правил]]. Получим грамматику без &amp;amp;epsilon;-правил для языка &amp;lt;tex&amp;gt;L(\Gamma) \ \lbrace \epsilon \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
#воспользоваться алгоритмом для новой грамматики&lt;br /&gt;
#Если &amp;lt;tex&amp;gt;\epsilon&amp;lt;/tex&amp;gt; присутствовал в языке исходной грамматики, добавить новый начальный символ &amp;lt;tex&amp;gt;S'&amp;lt;/tex&amp;gt; и правила &amp;lt;tex&amp;gt;S' \rightarrow S \, | \, \epsilon &amp;lt;/tex&amp;gt;&lt;br /&gt;
===Устранение непосредственной левой рекурсии===&lt;br /&gt;
Опишем процедуру, устраняющую все правила вида &amp;lt;tex&amp;gt;A \rightarrow A\alpha&amp;lt;/tex&amp;gt; для фиксированного нетерминала &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Запишем все правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; в виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow A\alpha_1\,|\,\ldots\,|\,A\alpha_n\,|\,\beta_1\,|\,\ldots\,|\,\beta_m &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где&lt;br /&gt;
* &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов (&amp;lt;tex&amp;gt;\alpha \ne \epsilon &amp;lt;/tex&amp;gt;)&lt;br /&gt;
* &amp;lt;tex&amp;gt;\beta&amp;lt;/tex&amp;gt; - непустая последовательность терминалов и нетерминалов, не начинающаяся с &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Заменим правила вывода из &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; на:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A \rightarrow \beta_1A^\prime\, |\, \ldots\,  |\,  \beta_mA^\prime \,|\, \beta_1 \,|\, \ldots \,|\, \beta_m&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
И создадим новый нетерминал&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;A^\prime \rightarrow \alpha_1A^\prime\,  |\,  \ldots\, |\, \alpha_nA^\prime&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Устранение произвольной левой рекурсии===&lt;br /&gt;
Пусть множество всех нетерминалов &amp;lt;tex&amp;gt;N = \lbrace A_1, A_2, \ldots , A_n \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
: for i = 1 to n {&lt;br /&gt;
::for j = 1 to i – 1 {&lt;br /&gt;
:::* рассмотреть все правила вывода из &amp;lt;math&amp;gt;A_j&amp;lt;/math&amp;gt;&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_j \rightarrow \delta_1 | \ldots | \delta_k&amp;lt;/math&amp;gt;&lt;br /&gt;
:::* заменить каждое правило &amp;lt;math&amp;gt;A_i \rightarrow A_j \gamma&amp;lt;/math&amp;gt; на&lt;br /&gt;
:::&amp;lt;math&amp;gt;A_i \rightarrow \delta_1\gamma | \ldots | \delta_k\gamma&amp;lt;/math&amp;gt;&lt;br /&gt;
::}&lt;br /&gt;
:: устранить прямую левую рекурсию для &amp;lt;math&amp;gt;A_i&amp;lt;/math&amp;gt;&lt;br /&gt;
:}&lt;br /&gt;
Инвариант: после &amp;lt;tex&amp;gt;j&amp;lt;/tex&amp;gt; итераций внутреннего цикла для &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt;&lt;br /&gt;
*для &amp;lt;tex&amp;gt;k &amp;lt; i&amp;lt;/tex&amp;gt; правые части правил вывода из &amp;lt;tex&amp;gt;A_k&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_k&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода из &amp;lt;tex&amp;gt;A_i&amp;lt;/tex&amp;gt; не начинаются с &amp;lt;tex&amp;gt;A_1, A_2, \ldots , A_j&amp;lt;/tex&amp;gt;&lt;br /&gt;
*правые части правил вывода не начинаются с добавленных алгоритмом нетерминалов &amp;lt;tex&amp;gt;A_k ^{\prime}&amp;lt;/tex&amp;gt;&lt;br /&gt;
*грамматика не содержит ε-правил&lt;br /&gt;
(проверяется индукцией по парам &amp;lt;tex&amp;gt;(i,j)&amp;lt;/tex&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
Таким образом, после применения алгоритма все правила вывода имеют вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;A \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал, &amp;lt;tex&amp;gt;A&amp;lt;/tex&amp;gt; - произвольный нетерминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;A_i , A_j&amp;lt;/tex&amp;gt; - нетерминалы из исходной грамматики&lt;br /&gt;
*&amp;lt;tex&amp;gt;A_i^{\prime} \rightarrow A_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;A_i^{\prime}&amp;lt;/tex&amp;gt; - новый нетерминал, &amp;lt;tex&amp;gt;A_j&amp;lt;/tex&amp;gt; - нетерминал из исходной грамматики&lt;br /&gt;
&lt;br /&gt;
Если теперь перенумеровать нетерминалы, сохранив порядок для старых и присвоив всем новым меньшие номера, то все правила будут иметь вид&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow c \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; - терминал&lt;br /&gt;
*&amp;lt;tex&amp;gt;B_i \rightarrow B_j \alpha &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;i &amp;lt; j&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3635</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3635"/>
				<updated>2010-10-11T05:04:06Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - [[Регулярные языки: два определения и их эквивалентность|регулярные языки]] над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overset{\leftarrow}{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения [[Регулярные языки: два определения и их эквивалентность|регулярных языков]].&lt;br /&gt;
&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся [[Теорема Клини (совпадение классов автоматных и регулярных языков|эквивалентностью регулярных и автоматных языков]]. Пусть языки &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию ''произведения автоматов'': &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1, c),\delta_2 (q_2, c) \rangle&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L_1 \setminus L_2 = L_1 \cap \overline{L_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Соответствующий автомат строится как произведение автоматов для языков &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline {L_2}&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Развернем все переходы назад и поменяем стартовое состояние с терминальными: рассмотрим [[Автоматы_с_eps-переходами._Eps-замыкание|НКА c &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами]] &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s' , \lbrace s_1 \rbrace, \delta_1' \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\delta_1' (v,c) = \lbrace u | \delta_1(u,c) = v \rbrace &amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;\delta_1'(s', \varepsilon) = T_1&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Если в исходном автомате путь по &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;s_1&amp;lt;/tex&amp;gt; приводил в терминальное состояние, то в новом автомате существует путь по &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; из этого терминального состояния в &amp;lt;tex&amp;gt;s_1&amp;lt;/tex&amp;gt; (и наоборот). Следовательно, этот автомат распознает в точности развернутые слова языка &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt;, и из [[Автоматы_с_eps-переходами._Eps-замыкание|эквивалентности &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА и ДКА]] язык &amp;lt;tex&amp;gt;\overset{\leftarrow}{L_1}&amp;lt;/tex&amp;gt; - регулярный.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Прямой и обратный гомоморфизмы==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Отображение &amp;lt;tex&amp;gt;\varphi : \Sigma_1^* \to \Sigma_2^*&amp;lt;/tex&amp;gt;, сохраняющее операцию конкатенации &amp;lt;tex&amp;gt;(\varphi(\alpha\beta) = \varphi(\alpha) \varphi(\beta))&amp;lt;/tex&amp;gt;, называется гомоморфизмом.&lt;br /&gt;
}}&lt;br /&gt;
Гомоморфизм однозначно задается значениями на алфавите: &amp;lt;tex&amp;gt;\varphi(\overline{c_1 c_2 \ldots c_k}) = \varphi(c_1) \varphi(c_2)\ldots \varphi(c_k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Образом языка &amp;lt;tex&amp;gt;L \subset \Sigma_1^*&amp;lt;/tex&amp;gt; при гомоморфизме &amp;lt;tex&amp;gt;\varphi: \Sigma_1^* \rightarrow \Sigma_2^*&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace \varphi (x) | x \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Прообразом языка &amp;lt;tex&amp;gt;L \subset \Sigma_2^*&amp;lt;/tex&amp;gt; при гомоморфизме &amp;lt;tex&amp;gt;\varphi: \Sigma_1^* \rightarrow \Sigma_2^*&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi^{-1} (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace x | \varphi (x) \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=st1&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L \subset \Sigma_1^*&amp;lt;/tex&amp;gt; – регулярный , &amp;lt;tex&amp;gt;\varphi:\Sigma_1^* \rightarrow \Sigma_2^* &amp;lt;/tex&amp;gt; – гомоморфизм. Тогда  &amp;lt;tex&amp;gt;\varphi(L)&amp;lt;/tex&amp;gt; – регулярный.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим [[Детерминированные_конечные_автоматы|ДКА]], распознающий &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Заменим в нем все переходы по символам на переходы по их образам при гомоморфизме. Полученный автомат (с переходами по строкам) распознает в точности &amp;lt;tex&amp;gt;\varphi(L)&amp;lt;/tex&amp;gt; и [[Автоматы_с_eps-переходами._Eps-замыкание|имеет эквивалентный ДКА]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=st1&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L \subset \Sigma_2^*&amp;lt;/tex&amp;gt; – регулярный , &amp;lt;tex&amp;gt;\varphi:\Sigma_1^* \rightarrow \Sigma_2^* &amp;lt;/tex&amp;gt; – гомоморфизм. Тогда  &amp;lt;tex&amp;gt;\varphi^{-1}(L)&amp;lt;/tex&amp;gt; – регулярный.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим [[Детерминированные_конечные_автоматы|ДКА]], распознающий &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Отследим для каждого состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и символа &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; строку &amp;lt;tex&amp;gt;\varphi(c)&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; \langle u,\varphi(c) \rangle \vdash^* \langle v,\varepsilon \rangle&amp;lt;/tex&amp;gt; и положим &amp;lt;tex&amp;gt;\delta (u,c) = v&amp;lt;/tex&amp;gt; в новом автомате (на том же множестве состояний). Автомат с построенной таким образом функцией переходов, очевидно, распознает слова языка &amp;lt;tex&amp;gt;\varphi^{-1}(L)&amp;lt;/tex&amp;gt; и только их.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3258</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3258"/>
				<updated>2010-10-08T04:34:20Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Основные операции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - [[Регулярные языки: два определения и их эквивалентность|регулярные языки]] над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overset{\leftarrow}{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения [[Регулярные языки: два определения и их эквивалентность|регулярных языков]].&lt;br /&gt;
&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся [[Теорема Клини (совпадение классов автоматных и регулярных языков|эквивалентностью регулярных и автоматных языков]]. Пусть языки &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию ''произведения автоматов'': &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1),\delta_2 (q_2) \rangle&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L_1 \setminus L_2 = L_1 \cap \overline{L_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Соответствующий автомат строится как произведение автоматов для языков &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline {L_2}&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Развернем все переходы назад и поменяем стартовое состояние с терминальными: рассмотрим [[Автоматы_с_eps-переходами._Eps-замыкание|НКА c &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами]] &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s' , \lbrace s_1 \rbrace, \delta_1' \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\delta_1' (v,c) = \lbrace u | \delta_1(u,c) = v \rbrace &amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;\delta_1'(s', \varepsilon) = T_1&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Если в исходном автомате путь по &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;s_1&amp;lt;/tex&amp;gt; приводил в терминальное состояние, то в новом автомате существует путь по &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; из этого терминального состояния в &amp;lt;tex&amp;gt;s_1&amp;lt;/tex&amp;gt; (и наоборот). Следовательно, этот автомат распознает в точности развернутые слова языка &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt;, и из [[Автоматы_с_eps-переходами._Eps-замыкание|эквивалентности &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА и ДКА]] язык &amp;lt;tex&amp;gt;\overset{\leftarrow}{L_1}&amp;lt;/tex&amp;gt; - регулярный.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Прямой и обратный гомоморфизмы==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Отображение &amp;lt;tex&amp;gt;\varphi : \Sigma_1^* \to \Sigma_2^*&amp;lt;/tex&amp;gt;, сохраняющее операцию конкатенации &amp;lt;tex&amp;gt;(\varphi(\alpha\beta) = \varphi(\alpha) \varphi(\beta))&amp;lt;/tex&amp;gt;, называется гомоморфизмом.&lt;br /&gt;
}}&lt;br /&gt;
Гомоморфизм однозначно задается значениями на алфавите: &amp;lt;tex&amp;gt;\varphi(\overline{c_1 c_2 \ldots c_k}) = \varphi(c_1) \varphi(c_2)\ldots \varphi(c_k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Образом языка &amp;lt;tex&amp;gt;L \subset \Sigma_1^*&amp;lt;/tex&amp;gt; при гомоморфизме &amp;lt;tex&amp;gt;\varphi: \Sigma_1^* \rightarrow \Sigma_2^*&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace \varphi (x) | x \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Прообразом языка &amp;lt;tex&amp;gt;L \subset \Sigma_2^*&amp;lt;/tex&amp;gt; при гомоморфизме &amp;lt;tex&amp;gt;\varphi: \Sigma_1^* \rightarrow \Sigma_2^*&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi^{-1} (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace x | \varphi (x) \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=st1&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L \subset \Sigma_1^*&amp;lt;/tex&amp;gt; – регулярный , &amp;lt;tex&amp;gt;\varphi:\Sigma_1^* \rightarrow \Sigma_2^* &amp;lt;/tex&amp;gt; – гомоморфизм. Тогда  &amp;lt;tex&amp;gt;\varphi(L)&amp;lt;/tex&amp;gt; – регулярный.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим [[Детерминированные_конечные_автоматы|ДКА]], распознающий &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Заменим в нем все переходы по символам на переходы по их образам при гомоморфизме. Полученный автомат (с переходами по строкам) распознает в точности &amp;lt;tex&amp;gt;\varphi(L)&amp;lt;/tex&amp;gt; и [[Автоматы_с_eps-переходами._Eps-замыкание|имеет эквивалентный ДКА]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=st1&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L \subset \Sigma_2^*&amp;lt;/tex&amp;gt; – регулярный , &amp;lt;tex&amp;gt;\varphi:\Sigma_1^* \rightarrow \Sigma_2^* &amp;lt;/tex&amp;gt; – гомоморфизм. Тогда  &amp;lt;tex&amp;gt;\varphi^{-1}(L)&amp;lt;/tex&amp;gt; – регулярный.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим [[Детерминированные_конечные_автоматы|ДКА]], распознающий &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Отследим для каждого состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и символа &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; строку &amp;lt;tex&amp;gt;\varphi(c)&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; \langle u,\varphi(c) \rangle \vdash^* \langle v,\varepsilon \rangle&amp;lt;/tex&amp;gt; и положим &amp;lt;tex&amp;gt;\delta (u,c) = v&amp;lt;/tex&amp;gt; в новом автомате (на том же множестве состояний). Автомат с построенной таким образом функцией переходов, очевидно, распознает слова языка &amp;lt;tex&amp;gt;\varphi^{-1}(L)&amp;lt;/tex&amp;gt; и только их.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3256</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3256"/>
				<updated>2010-10-08T04:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Основные операции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overset{\leftarrow}{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков.&lt;br /&gt;
&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию ''произведения автоматов'': &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1),\delta_2 (q_2) \rangle&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L_1 \setminus L_2 = L_1 \cap \overline{L_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Соответствующий автомат строится как произведение автоматов для языков &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline {L_2}&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Развернем все переходы назад и поменяем стартовое состояние с терминальными: рассмотрим [[Автоматы_с_eps-переходами._Eps-замыкание|НКА c &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-переходами]] &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s' , \lbrace s_1 \rbrace, \delta_1' \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\delta_1' (v,c) = \lbrace u | \delta_1(u,c) = v \rbrace &amp;lt;/tex&amp;gt;; &amp;lt;tex&amp;gt;\delta_1'(s', \varepsilon) = T_1&amp;lt;/tex&amp;gt;.&amp;lt;br/&amp;gt;&lt;br /&gt;
Если в исходном автомате путь по &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; из &amp;lt;tex&amp;gt;s_1&amp;lt;/tex&amp;gt; приводил в терминальное состояние, то в новом автомате существует путь по &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; из этого терминального состояния в &amp;lt;tex&amp;gt;s_1&amp;lt;/tex&amp;gt; (и наоборот). Следовательно, этот автомат распознает в точности развернутые слова языка &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt;, и из [[Автоматы_с_eps-переходами._Eps-замыкание|эквивалентности &amp;lt;tex&amp;gt;\varepsilon&amp;lt;/tex&amp;gt;-НКА и ДКА]] язык &amp;lt;tex&amp;gt;\overset{\leftarrow}{L_1}&amp;lt;/tex&amp;gt; - регулярный.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Прямой и обратный гомоморфизмы==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Отображение &amp;lt;tex&amp;gt;\varphi : \Sigma_1^* \to \Sigma_2^*&amp;lt;/tex&amp;gt;, сохраняющее операцию конкатенации &amp;lt;tex&amp;gt;(\varphi(\alpha\beta) = \varphi(\alpha) \varphi(\beta))&amp;lt;/tex&amp;gt;, называется гомоморфизмом.&lt;br /&gt;
}}&lt;br /&gt;
Гомоморфизм однозначно задается значениями на алфавите: &amp;lt;tex&amp;gt;\varphi(\overline{c_1 c_2 \ldots c_k}) = \varphi(c_1) \varphi(c_2)\ldots \varphi(c_k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Образом языка &amp;lt;tex&amp;gt;L \subset \Sigma_1^*&amp;lt;/tex&amp;gt; при гомоморфизме &amp;lt;tex&amp;gt;\varphi: \Sigma_1^* \rightarrow \Sigma_2^*&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace \varphi (x) | x \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Прообразом языка &amp;lt;tex&amp;gt;L \subset \Sigma_2^*&amp;lt;/tex&amp;gt; при гомоморфизме &amp;lt;tex&amp;gt;\varphi: \Sigma_1^* \rightarrow \Sigma_2^*&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi^{-1} (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace x | \varphi (x) \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=st1&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L \subset \Sigma_1^*&amp;lt;/tex&amp;gt; – регулярный , &amp;lt;tex&amp;gt;\varphi:\Sigma_1^* \rightarrow \Sigma_2^* &amp;lt;/tex&amp;gt; – гомоморфизм. Тогда  &amp;lt;tex&amp;gt;\varphi(L)&amp;lt;/tex&amp;gt; – регулярный.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим [[Детерминированные_конечные_автоматы|ДКА]], распознающий &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Заменим в нем все переходы по символам на переходы по их образам при гомоморфизме. Полученный автомат (с переходами по строкам) распознает в точности &amp;lt;tex&amp;gt;\varphi(L)&amp;lt;/tex&amp;gt; и [[Автоматы_с_eps-переходами._Eps-замыкание|имеет эквивалентный ДКА]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=st1&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L \subset \Sigma_2^*&amp;lt;/tex&amp;gt; – регулярный , &amp;lt;tex&amp;gt;\varphi:\Sigma_1^* \rightarrow \Sigma_2^* &amp;lt;/tex&amp;gt; – гомоморфизм. Тогда  &amp;lt;tex&amp;gt;\varphi^{-1}(L)&amp;lt;/tex&amp;gt; – регулярный.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим [[Детерминированные_конечные_автоматы|ДКА]], распознающий &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Отследим для каждого состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и символа &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; строку &amp;lt;tex&amp;gt;\varphi(c)&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; \langle u,\varphi(c) \rangle \vdash^* \langle v,\varepsilon \rangle&amp;lt;/tex&amp;gt; и положим &amp;lt;tex&amp;gt;\delta (u,c) = v&amp;lt;/tex&amp;gt; в новом автомате (на том же множестве состояний). Автомат с построенной таким образом функцией переходов, очевидно, распознает слова языка &amp;lt;tex&amp;gt;\varphi^{-1}(L)&amp;lt;/tex&amp;gt; и только их.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3254</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3254"/>
				<updated>2010-10-08T04:03:09Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Прямой и обратный гомоморфизмы */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков.&lt;br /&gt;
&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию ''произведения автоматов'': &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1),\delta_2 (q_2) \rangle&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L_1 \setminus L_2 = L_1 \cap \overline{L_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Соответствующий автомат строится как произведение автоматов для языков &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline {L_2}&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Прямой и обратный гомоморфизмы==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Отображение &amp;lt;tex&amp;gt;\varphi : \Sigma_1^* \to \Sigma_2^*&amp;lt;/tex&amp;gt;, сохраняющее операцию конкатенации &amp;lt;tex&amp;gt;(\varphi(\alpha\beta) = \varphi(\alpha) \varphi(\beta))&amp;lt;/tex&amp;gt;, называется гомоморфизмом.&lt;br /&gt;
}}&lt;br /&gt;
Гомоморфизм однозначно задается значениями на алфавите: &amp;lt;tex&amp;gt;\varphi(\overline{c_1 c_2 \ldots c_k}) = \varphi(c_1) \varphi(c_2)\ldots \varphi(c_k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Образом языка &amp;lt;tex&amp;gt;L \subset \Sigma_1^*&amp;lt;/tex&amp;gt; при гомоморфизме &amp;lt;tex&amp;gt;\varphi: \Sigma_1^* \rightarrow \Sigma_2^*&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace \varphi (x) | x \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Прообразом языка &amp;lt;tex&amp;gt;L \subset \Sigma_2^*&amp;lt;/tex&amp;gt; при гомоморфизме &amp;lt;tex&amp;gt;\varphi: \Sigma_1^* \rightarrow \Sigma_2^*&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi^{-1} (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace x | \varphi (x) \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=st1&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L \subset \Sigma_1^*&amp;lt;/tex&amp;gt; – регулярный , &amp;lt;tex&amp;gt;\varphi:\Sigma_1^* \rightarrow \Sigma_2^* &amp;lt;/tex&amp;gt; – гомоморфизм. Тогда  &amp;lt;tex&amp;gt;\varphi(L)&amp;lt;/tex&amp;gt; – регулярный.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим [[Детерминированные_конечные_автоматы|ДКА]], распознающий &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Заменим в нем все переходы по символам на переходы по их образам при гомоморфизме. Полученный автомат (с переходами по строкам) распознает в точности &amp;lt;tex&amp;gt;\varphi(L)&amp;lt;/tex&amp;gt; и [[Автоматы_с_eps-переходами._Eps-замыкание|имеет эквивалентный ДКА]].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Утверждение&lt;br /&gt;
|id=st1&lt;br /&gt;
|statement=&lt;br /&gt;
&amp;lt;tex&amp;gt;L \subset \Sigma_2^*&amp;lt;/tex&amp;gt; – регулярный , &amp;lt;tex&amp;gt;\varphi:\Sigma_1^* \rightarrow \Sigma_2^* &amp;lt;/tex&amp;gt; – гомоморфизм. Тогда  &amp;lt;tex&amp;gt;\varphi^{-1}(L)&amp;lt;/tex&amp;gt; – регулярный.&lt;br /&gt;
|proof=&lt;br /&gt;
Рассмотрим [[Детерминированные_конечные_автоматы|ДКА]], распознающий &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt;. Отследим для каждого состояния &amp;lt;tex&amp;gt;u&amp;lt;/tex&amp;gt; и символа &amp;lt;tex&amp;gt;c&amp;lt;/tex&amp;gt; строку &amp;lt;tex&amp;gt;\varphi(c)&amp;lt;/tex&amp;gt;: &amp;lt;tex&amp;gt; \langle u,\varphi(c) \rangle \vdash^* \langle v,\varepsilon \rangle&amp;lt;/tex&amp;gt; и положим &amp;lt;tex&amp;gt;\delta (u,c) = v&amp;lt;/tex&amp;gt; в новом автомате (на том же множестве состояний). Автомат с построенной таким образом функцией переходов, очевидно, распознает слова языка &amp;lt;tex&amp;gt;\varphi^{-1}(L)&amp;lt;/tex&amp;gt; и только их.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3251</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3251"/>
				<updated>2010-10-08T02:39:53Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков.&lt;br /&gt;
&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию ''произведения автоматов'': &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1),\delta_2 (q_2) \rangle&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L_1 \setminus L_2 = L_1 \cap \overline{L_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Соответствующий автомат строится как произведение автоматов для языков &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline {L_2}&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Прямой и обратный гомоморфизмы==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Отображение &amp;lt;tex&amp;gt;\varphi : \Sigma_1^* \to \Sigma_2^*&amp;lt;/tex&amp;gt;, сохраняющее операцию конкатенации &amp;lt;tex&amp;gt;(\varphi(\alpha\beta) = \varphi(\alpha) \varphi(\beta))&amp;lt;/tex&amp;gt;, называется гомоморфизмом.&lt;br /&gt;
}}&lt;br /&gt;
Гомоморфизм однозначно задается значениями на алфавите: &amp;lt;tex&amp;gt;\varphi(\overline{c_1 c_2 \ldots c_k}) = \varphi(c_1) \varphi(c_2)\ldots \varphi(c_k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Гомоморфизмом языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace \varphi (x) | x \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Обратным гомоморфизмом языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi^{-1} (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace x | \varphi (x) \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3215</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3215"/>
				<updated>2010-10-07T22:56:40Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков.&lt;br /&gt;
&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию пересечения автоматов: &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1),\delta_2 (q_2) \rangle&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L_1 \setminus L_2 = L_1 \cap \overline{L_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Соответствующий автомат строится как произведение автоматов для языков &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline {L_2}&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Прямой и обратный гомоморфизмы==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Отображение &amp;lt;tex&amp;gt;\varphi : \Sigma_1^* \to \Sigma_2^*&amp;lt;/tex&amp;gt;, сохраняющее операцию конкатенации &amp;lt;tex&amp;gt;(\varphi(\alpha\beta) = \varphi(\alpha) \varphi(\beta))&amp;lt;/tex&amp;gt;, называется гомоморфизмом.&lt;br /&gt;
}}&lt;br /&gt;
Гомоморфизм однозначно задается значениями на алфавите: &amp;lt;tex&amp;gt;\varphi(\overline{c_1 c_2 \ldots c_k}) = \varphi(c_1) \varphi(c_2)\ldots \varphi(c_k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Гомоморфизмом языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace \varphi (x) | x \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Обратным гомоморфизмом языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi^{-1} (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace x | \varphi (x) \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3214</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3214"/>
				<updated>2010-10-07T22:54:31Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Основные операции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков.&lt;br /&gt;
&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию пересечения автоматов: &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1),\delta_2 (q_2) \rangle&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L_1 \setminus L_2 = L_1 \cap \overline{L_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Соответствующий автомат строится как произведение автоматов для языков &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline {L_2}&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Прямой и обратный гомоморфизмы==&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Отображение &amp;lt;tex&amp;gt;\varphi : \Sigma_1^* \to \Sigma_2^*&amp;lt;/tex&amp;gt;, сохраняющее операцию конкатенации &amp;lt;tex&amp;gt;(\varphi(\alpha\beta) = \varphi(\alpha) \varphi(\beta))&amp;lt;/tex&amp;gt;, называется гомоморфизмом.&lt;br /&gt;
}}&lt;br /&gt;
Гомоморфизм однозначно задается значениями на алфавите: &amp;lt;tex&amp;gt;\varphi(\overline{c_1 c_2 \ldots c_k}) = \varphi(c_1) \varphi(c_2)\ldots \varphi(c_k)&amp;lt;/tex&amp;gt;.&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Гомоморфизмом языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace \varphi (x) | x \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition=Обратным гомоморфизмом языка &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; называется язык &amp;lt;tex&amp;gt;\varphi^{-1} (L) \overset{\underset{\mathrm{def}}{}}{=} \lbrace x | \varphi (x) \in L \rbrace&amp;lt;/tex&amp;gt;.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3206</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3206"/>
				<updated>2010-10-07T22:27:09Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков.&lt;br /&gt;
&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;br /&amp;gt; &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol start=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;. &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию пересечения автоматов: &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1),\delta_2 (q_2) \rangle&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L_1 \setminus L_2 = L_1 \cap \overline{L_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Соответствующий автомат строится как произведение автоматов для языков &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline {L_2}&amp;lt;/tex&amp;gt; &amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3205</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3205"/>
				<updated>2010-10-07T22:15:30Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков.&lt;br /&gt;
----&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
----&lt;br /&gt;
4. Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&lt;br /&gt;
----&lt;br /&gt;
5. Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию пересечения автоматов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1),\delta_2 (q_2) \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
6. &amp;lt;tex&amp;gt;L_1 \setminus L_2 = L_1 \cap \overline{L_2}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Соответствующий автомат строится как произведение автоматов для языков &amp;lt;tex&amp;gt;L_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\overline {L_2}&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3204</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3204"/>
				<updated>2010-10-07T22:13:01Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков.&lt;br /&gt;
----&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
----&lt;br /&gt;
4. Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&lt;br /&gt;
----&lt;br /&gt;
5. Следует из пунктов 1 и 4, т.к. &amp;lt;tex&amp;gt;L_1 \cap L_2 = \overline{\overline{L_1} \cup \overline{L_2}}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Автомат для пересечения языков можно построить явно, используя конструкцию пересечения автоматов:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;A = \langle \Sigma , Q , s , T , \delta : Q \times \Sigma \rightarrow 2^{Q} \rangle &amp;lt;/tex&amp;gt;, где&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;Q = \lbrace \langle q_1, q_2 \rangle | q_1 \in Q_1, q_2 \in Q_2 \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;s = \langle s_1, s_2 \rangle&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;T = \lbrace \langle t_1, t_2 \rangle | t_1 \in T_1, t_2 \in T_2 \rbrace&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tex&amp;gt;\delta (\langle q_1,q_2 \rangle, c) = \langle \delta_1 (q_1),\delta_2 (q_2) \rangle&amp;lt;/tex&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3196</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3196"/>
				<updated>2010-10-07T20:44:29Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: /* Доказательство */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков.&lt;br /&gt;
&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
4. Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&lt;br /&gt;
5.&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3195</id>
		<title>Замкнутость регулярных языков относительно различных операций</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%BC%D0%BA%D0%BD%D1%83%D1%82%D0%BE%D1%81%D1%82%D1%8C_%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D1%85_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B9&amp;diff=3195"/>
				<updated>2010-10-07T20:43:51Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: Новая страница: «==Основные операции== Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тог…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Основные операции==&lt;br /&gt;
Пусть &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; - регулярные языки над одним алфавитом &amp;lt;tex&amp;gt;\Sigma&amp;lt;/tex&amp;gt;. Тогда следующие языки также являются регулярными:&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cup L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1^*&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\overline{L_1}&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \cap L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;L_1 \setminus L_2&amp;lt;/tex&amp;gt;&lt;br /&gt;
===Доказательство===&lt;br /&gt;
Свойства 1,2,3 непосредственно следуют из определения регулярных языков&lt;br /&gt;
При доказательстве дальнейших свойств воспользуемся эквивалентностью регулярных и автоматных языков. Пусть языки &amp;lt;tex&amp;gt;L_1, L_2&amp;lt;/tex&amp;gt; распознаются автоматами &amp;lt;tex&amp;gt;A_1 = \langle \Sigma , Q_1 , s_1 , T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;A_2 = \langle \Sigma , Q_2 , s_2 , T_2 , \delta_2 : Q_2 \times \Sigma \rightarrow 2^{Q_2} \rangle &amp;lt;/tex&amp;gt; соответственно.&lt;br /&gt;
&lt;br /&gt;
4. Инвертируем множество допускающих состояний: рассмотрим автомат &amp;lt;tex&amp;gt;A_1' = \langle \Sigma , Q_1 , s_1 , Q_1 \setminus T_1 , \delta_1 : Q_1 \times \Sigma \rightarrow 2^{Q_1} \rangle &amp;lt;/tex&amp;gt;. Очевидно, он допускает те и только те слова, которые не допускает автомат &amp;lt;tex&amp;gt;A_1&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При таком построении следует помнить, что если в исходном автомате было опущено дьявольское состояние, его нужно явно добавить и сделать допускающим.&lt;br /&gt;
5.&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Hidden&amp;diff=2867</id>
		<title>Шаблон:Hidden</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Hidden&amp;diff=2867"/>
				<updated>2010-09-27T00:51:45Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: Удалено содержимое страницы&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Hidden&amp;diff=2866</id>
		<title>Шаблон:Hidden</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Hidden&amp;diff=2866"/>
				<updated>2010-09-27T00:48:10Z</updated>
		
		<summary type="html">&lt;p&gt;MikhailOK: Новая страница: «{|border=1&amp;quot; cellspacing=0&amp;quot; cellpadding=&amp;quot;2&amp;quot; class=&amp;quot;collapsible {{{state|collapsed}}}&amp;quot; style=&amp;quot;width:100%;margin:0;padding:0;border:1px solid #999999;border-collapse:co…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|border=1&amp;quot; cellspacing=0&amp;quot; cellpadding=&amp;quot;2&amp;quot; class=&amp;quot;collapsible {{{state|collapsed}}}&amp;quot; style=&amp;quot;width:100%;margin:0;padding:0;border:1px solid #999999;border-collapse:collapse;background:#FFFFFF&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&amp;lt;div style=&amp;quot;font-weight:{{{fw1|bold}}};background-color:{{{bg1|#CCCCFF}}};text-align:{{{ta1|center}}};{{{headercss|}}}&amp;quot;&amp;gt;{{{header|{{{1}}}}}}&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;font-weight:{{{fw2|normal}}};background-color:{{{bg2|transparent}}};text-align:{{{ta2|left}}};{{{contentcss|}}}&amp;quot;|&lt;br /&gt;
{{{content|{{{2}}}}}}&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>MikhailOK</name></author>	</entry>

	</feed>