Обсуждение участницы:Анна — различия между версиями
Анна (обсуждение | вклад) |
Анна (обсуждение | вклад) |
||
Строка 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). Для этого стартовой вершиной сделаем и построим от нее часть . Теперь добавим состояние и соединим с ним все терминальные состояния из с помощью переходов. Далее построим от часть . Добавим вершину , эквивалентную , и сделаем ее терминальной. Данный автомат принимает слова, зацикленные вокруг выбранной вершины . Мы хотим, чтобы автомат принимал слова, зацикленные вокруг любой такой . Для этого создадим новую стартовую вершину и свяжем ее со всеми перестроенными автоматами (зацикленными вокруг всех подходящих ), в том числе и с изначальным автоматом. Построенный автомат допускает язык , следовательно, данный язык является регулярным. |