Обсуждение участницы:Анна — различия между версиями
| Анна (обсуждение | вклад) | Анна (обсуждение | вклад)  | ||
| Строка 22: | Строка 22: | ||
| Пусть <tex>L</tex> {{---}} регулярный язык. Тогда язык <tex>cycle(L)</tex> также регулярен. | Пусть <tex>L</tex> {{---}} регулярный язык. Тогда язык <tex>cycle(L)</tex> также регулярен. | ||
| |proof = | |proof = | ||
| − | Так как <tex>L</tex> {{---}} регулярный язык, то существует допускающий его ДКА <tex>M = \langle \Sigma , Q , q_0 , F , \delta \rangle </tex>.   | + | [[Файл:Enfa_before.jpg|left|thumb|240px|Рис. 1. Разбиение автомата.]] | 
| + | [[Файл:Enfa-after.jpg|right|thumb|240px|Рис. 2. Перестроение.]] | ||
| + | Так как <tex>L</tex> {{---}} регулярный язык, то существует допускающий его ДКА <tex>M = \langle \Sigma , Q , q_0 , F , \delta \rangle </tex>. Построим из <tex>M</tex> недетерминированный автомат с <tex>\varepsilon-</tex>переходами следующим образом: рассмотрим состояние <tex>q \in Q</tex>, из которого есть переходы в другие состояния (то есть начиная с <tex>q</tex> можно построить непустое слово, заканчивающееся в терминальной вершине). Тогда если какое-то слово проходит через это состояние, оно может быть зациклено таким образом, что его суффикс, начинающийся с <tex>q</tex>, станет префиксом нового слова, а префикс, заканчивающийся в <tex>q</tex> {{---}} суффиксом. Разделим автомат на две части <tex>A_1</tex> и <tex>A_2</tex> такие, что <tex>A_1</tex> будет содержать все вершины, из которых достижима <tex>q</tex>, а <tex>A_2</tex> {{---}} все вершины, которые достижимы из <tex>q</tex> (см. рис. 1). Заметим, что каждая вершина может содержаться в обеих частях одновременно, такое может случиться, если автомат <tex>M</tex> содержит циклы. Теперь перестроим автомат так, что он будет принимать слова, "зацикленные" вокруг <tex>q</tex>, то есть начинающиеся с <tex>q</tex> и после достижения терминальной вершины продолжающиеся с <tex>q_0</tex>(см. рис. 2). Для этого стартовой вершиной сделаем <tex>q</tex> и построим от нее часть <tex>A_2</tex>. Теперь добавим состояние <tex>q_0</tex> и соединим с ним все терминальные состояния из <tex>A_2</tex> с помощью <tex>\varepsilon-</tex>переходов. Далее построим от <tex>q_0</tex> часть <tex>A_1</tex>. Добавим вершину <tex>q'</tex>, эквивалентную <tex>q</tex>, и сделаем ее терминальной. Данный автомат принимает слова, зацикленные вокруг выбранной вершины <tex>q</tex>. Мы хотим, чтобы автомат принимал слова, зацикленные вокруг любой такой <tex>q</tex>. Для этого создадим новую стартовую вершину <tex>q_0'</tex> и свяжем ее со всеми перестроенными автоматами (зацикленными вокруг всех подходящих <tex>q</tex>), в том числе и с изначальным автоматом. Построенный автомат допускает язык <tex>cycle(L)</tex>, следовательно, данный язык является регулярным. | ||
| }} | }} | ||
Версия 21:45, 14 декабря 2016
| Определение: | 
| Определим как множество первых половин цепочек языка , то есть множество существует , для которой , причем . | 
Например, если , то . Заметим, что цепочки нечетной длины не влияют на .
| Определение: | 
| Определим как множество цепочку можно представить в виде , где . | 
Например, если , то .
| Утверждение: | 
| Пусть  — регулярный язык. Тогда язык  также регулярен. | 
| Так как  — регулярный язык, то существует ДКА , допускающий его. Рассмотрим строку . Для того, чтобы проверить, что , нам надо убедиться, что существует строка  такой же длины, что и , которая, будучи сконкатенированной с , даст строку из , то есть если на вход автомату подать , то в конце обработки мы окажемся в терминальном состоянии. Предположим, что автомат, закончив обработку , находится в состоянии , то есть . Мы должны проверить, что существует строка  которая ведет из состояния  до какого-нибудь терминального состояния , то есть . | 
| Утверждение: | 
| Пусть  — регулярный язык. Тогда язык  также регулярен. | 
| Так как — регулярный язык, то существует допускающий его ДКА . Построим из недетерминированный автомат с переходами следующим образом: рассмотрим состояние , из которого есть переходы в другие состояния (то есть начиная с можно построить непустое слово, заканчивающееся в терминальной вершине). Тогда если какое-то слово проходит через это состояние, оно может быть зациклено таким образом, что его суффикс, начинающийся с , станет префиксом нового слова, а префикс, заканчивающийся в — суффиксом. Разделим автомат на две части и такие, что будет содержать все вершины, из которых достижима , а — все вершины, которые достижимы из (см. рис. 1). Заметим, что каждая вершина может содержаться в обеих частях одновременно, такое может случиться, если автомат содержит циклы. Теперь перестроим автомат так, что он будет принимать слова, "зацикленные" вокруг , то есть начинающиеся с и после достижения терминальной вершины продолжающиеся с (см. рис. 2). Для этого стартовой вершиной сделаем и построим от нее часть . Теперь добавим состояние и соединим с ним все терминальные состояния из с помощью переходов. Далее построим от часть . Добавим вершину , эквивалентную , и сделаем ее терминальной. Данный автомат принимает слова, зацикленные вокруг выбранной вершины . Мы хотим, чтобы автомат принимал слова, зацикленные вокруг любой такой . Для этого создадим новую стартовую вершину и свяжем ее со всеми перестроенными автоматами (зацикленными вокруг всех подходящих ), в том числе и с изначальным автоматом. Построенный автомат допускает язык , следовательно, данный язык является регулярным. | 


