Как показать, что «обратный» регулярный язык является регулярным

19

Я застрял в следующем вопросе:

«Регулярные языки - это как раз те, которые принимаются конечными автоматами. Учитывая этот факт, покажите, что если язык принят некоторым конечным автоматом, то также будет принят некоторым конечным; состоит из всех слов». из необратима «.L R L R LLLRLRL

Кот
источник
1
Ну, вы пытались построить автомат, который бы принимал LR ? Это может помочь привести пример.
Жиль "ТАК - перестань быть злым"
Спасибо за ваш ответ. Я не уверен, как это сделать. Я уверен, что любой L ^ R будет принят каким-то языком, потому что он построен на том же «алфавите» и поэтому также будет обычным языком. Хотя я не уверен, как это доказать, или как привести пример.
Кот
2
Добро пожаловать! Для таких базовых вопросов, которые напоминают домашние задания, нам нравится, если вопрос содержит (существенную) предыдущую работу спрашивающего. Вы наверняка попробовали что-то, чем вы можете поделиться (что мы можем затем использовать, чтобы направить вас в правильном направлении). Если нет, я предлагаю вам еще раз проверить свои определения и прислушаться к советам Жиля.
Рафаэль
3
@Victoria «она построена из того же« алфавита »и поэтому также будет обычным языком» - о, неоно. {anbmaon,m,oN} , {anbmann,mN} и {anbnannN} все определены над таким же алфавит, но попадают в очень разные языковые классы.
Рафаэль
1
Другой вопрос в конце главы просит меня доказать, что ни один конечный автомат не может принять все палиндромы по данному алфавиту. Я думаю, что доказательство этого зависит от того, что существует бесконечное число состояний, если мы рассматриваем все возможные палиндромы (без ограничения длины), тогда как машина является машиной конечных состояний.
Кот

Ответы:

26

Таким образом, учитывая регулярный язык , мы знаем (по существу по определению), что он принят некоторыми конечными автоматами, поэтому существует конечный набор состояний с соответствующими переходами, которые переносят нас из исходного состояния в принимающее состояние тогда и только тогда, когда это строка в L . Мы можем даже настаивать на том, что есть только одно принимающее государство, чтобы упростить вещи. Чтобы принять обратный язык, все, что нам нужно сделать, это изменить направление переходов, изменить начальное состояние на состояние принятия и принять состояние на начальное состояние. Тогда у нас есть машина, которая «назад» по сравнению с оригиналом, и принимает язык L R .LLLR

Люк Мэтисон
источник
Большое спасибо, Люк. Думаю, я понимаю, что ты сказал. Вы на месте - у меня нет абсолютно никакого практического опыта работы с конечными автоматами! Я бы «проголосовал» за вас, но у меня не хватает очков, по-видимому. Прости за это!
Кот
Это нормально, вы должны иметь возможность "принимать" ответы, которые вам нравятся (под кнопками голосования должна быть галочка). Также более формальный ответ Саадтааме - отличный следующий шаг после моего.
Люк Мэтисон
5
Для того, чтобы предположить , что существует только один прием состояние , которое мы должны либо позволить -переходы, или ε L . Я знаю, что оба не являются реальными ограничениями, поэтому ответ в порядке. ϵϵL
Хендрик Ян
1
Да, идея кажется мне очевидной. Сложная часть проверяет, что это правильно.
Никто
24

Вы должны показать , что всегда можно построить конечный автомат , который принимает строки в LR задан конечный автомат , который принимает строки в L . Вот процедура, чтобы сделать это.

  1. Переверните все ссылки в автомате
  2. Добавить новое состояние (назовите его qs )
  3. Нарисуйте ссылку, помеченную ϵ из состояния qs в каждое конечное состояние
  4. Превратите все конечные состояния в нормальные состояния
  5. Превратить начальное состояние в конечное состояние
  6. Сделать qs начальным состоянием

Давайте формализуем все это; мы начнем с формулировки теоремы.

Теорема. Если L является регулярным языком, то и LR .

Пусть A=(QA,ΣA,δA,qA,FA) NFA и L=L(A) . ϵ -NFA R определено ниже принимает язык L R .ARLR

  1. AR=(QA{qs},ΣA,δAR,qs,{qA}) иqsQA
  2. pδA(q,a)qδAR(p,a) , гдеaΣA иq,pQA
  3. ϵclosure(qs)=FA

Доказательство. Сначала докажем следующее утверждение: путь от q до p в A помеченный буквой w том и только в том случае, если путь от p до q в AR помеченный буквой wR (обратная w ) для q,pQA . Доказательством служит индукция по длине w .

  1. Базовый случай: |w|=1
    Имеет место по определению δAR
  2. Индукция: предположим, что утверждение верно для слов длины <n и пусть |w|=n и w=xa
    Пусть pδA(q,w)=δA(q,xa)
    Мы знаем, что δA(q,xa)=pδA(p,a) pδA(q,x)
    x иa - слова, содержащие меньшеn символов. По предположению индукции,pδAR(p,a) иqδAR(p,xR) . Это означает, чтоqδAR(p,axR)pδA(q,xa) .

Полагая q=qA и p=s для некоторых sFA и заменяя wR для axR гарантирует , что qδAR(s,wR) sFA . Поскольку существует путь, помеченный ϵ из qs во все состояния в FA (3. в определении AR) И путь от каждого состояния в FA в состоянии qA , меченного wR , то есть путь метил ϵwR=wR от qs к qA . Это доказывает теорему.

Обратите внимание, что это доказывает, что (LR)R=L также.

Пожалуйста, измените, если в моем доказательстве есть ошибки форматирования или недостатки ...

saadtaame
источник
1
Что вы подразумеваете под ? ϵclosure(qs)=FA
user124384
Но у вас не может быть ϵ перехода в детерминированных регулярных языках, не так ли?
Юкашима Хуксай
@yukashimahuksay Правда, но вы также всегда можете взять недетерминированный конечный автомат и превратить его в детерминированный конечный автомат. Они эквивалентны.
Pro Q
12

Для того, чтобы добавить к преобразованиям на основе автоматных , описанных выше, вы можете также доказать , что регулярные языки замкнуты при обращении, показывая , как преобразовать регулярное выражение для в регулярное выражение для L R . Для этого мы определим функцию R E V на регулярных выражениях , который принимает в качестве входных данных регулярного выражения R для некоторого языка L , а затем производит регулярное выражение R ' для языка L R . Это определяется индуктивно на структуре регулярных выражений:LLRREVRLRLR

  1. REV(ϵ)=ϵ
  2. REV()=
  3. для любого a ΣREV(a)=aaΣ
  4. REV(R1R2)=REV(R2)REV(R1)
  5. REV(R1|R2)=REV(R1)|REV(R2)
  6. REV(R)=REV(R)
  7. REV((R))=(REV(R))

Вы можете формально доказать эту конструкцию правильно в качестве упражнения.

Надеюсь это поможет!

templatetypedef
источник
Здравствуй! Я приземлился здесь, потому что думал об идее обращения регулярных выражений в обратном порядке, как о способе оптимизации сопоставления справа со строкой: передать символы обратному автомату в обратном порядке. Один проход Я записал алгебраические свойства обращения к регулярному выражению, и оно почти точно соответствует вашей таблице, даже используя rev()обозначения. :) Я тоже положил REV(R1&R2) = REV(R1)&REV(R2); У меня есть реализация регулярного выражения, которая имеет пересечение. Да; Я думаю о добавлении оператора для обращения, возможно R\r(обратный предшествующий элемент регулярного выражения).
Каз
Вот хитрый вопрос: каково алгебраическое правило для REV (~ R): отрицание регулярного выражения? REV(~R)является обратным множеству всех строк вне R. Это то же самое, что ~REV(R): множество всех строк вне обратного множества, обозначенного R? Это не совсем понятно, потому что все палиндромы Rв REV(R).
Каз
1

Используя регулярные выражения, докажите, что если регулярный язык, то \ emph {обращение} в L , L R = { w R : w L } , также регулярно. В частности, учитывая регулярное выражение , которое описывает L , показать по индукции , как превратить его в регулярное выражение , которое описывает L R . Ваше доказательство не должно прибегать к NFAs. LLLR={wR:wL}LLR

Мы будем предполагать , что задано регулярное выражение , которое описывает . Давайте сначала посмотрим на оператор конкатенации ( ), а затем мы можем перейти к более сложным операторам. Таким образом, наши случаи конкатенации имеют дело с длиной того, что конкатенируется. Итак, сначала мы разберем все конкатенации от a b до a b . При работе с ними разбейте компоненты как можно больше: ( a b a ) b ( a b a ) bLabab(aba)b(aba)b, но вы, конечно, не можете нарушить ассоциативный порядок между различными представлениями.

Когда R

Когда , у нас есть пустая строка, которая уже перевернута, поэтому механизм не меняетсяs=ϵ

Когда это просто буква, как в s Σ , обращение это только эта буква, sssΣs

Когда , у нас есть одна составляющая, поэтому мы просто обращаем эту составляющую в обратном направлении и, следовательно, σ Rs=σσR

При , где к нечетно, мы имеем регулярное выражение , которое может быть записано в виде ( сг 0сг 1 . . . Сг к - 1сг к )s=(σ0σ1...σk1σk)(σ0σ1...σk1σk), Перестановка этих строк четной длины проста. Просто переключите индекс 0 с индексом k. Затем поменяйте индекс 1 с помощью индекса k-1. Продолжайте, пока каждый элемент не будет переключен один раз. Таким образом, последний элемент теперь является первым в регистре, а первый - последним. Второе - это второе, а второе - второе. Таким образом, у нас есть обратный регистр ex ex, который будет принимать обратную строку (первая буква является последней и т. Д.) И, конечно, мы обращаем каждую составляющую. Таким образом , мы получим (σkRσk1R...σ1Rσ0R)

При , где к четно, мы имеем регулярное выражение как правило , которое может быть записано в виде ( сг 0сг 1 . . . σ к - 1σ к )s=(σ0σ1...σk/2...σk1σk)(σ0σ1...σk1σk), Перестановка этих строк четной длины проста. Просто переключите индекс 0 с индексом k. Затем поменяйте индекс 1 с помощью индекса k-1. Продолжайте, пока каждый элемент не был переключен один раз, но элемент k / 2 (целое число, потому что k четное). Таким образом, последний элемент теперь является первым в регистре, а первый - последним. Второе - это второе, а второе - второе. Таким образом, у нас есть обратный регистр ex ex, который будет принимать обратную строку (первая буква является последней и т. Д.) И эта средняя буква. И, конечно, мы меняем каждую составляющую. Таким образом , мы получим (σkRσk1R...σk/2R...σ1Rσ0R)

s1,s2s1s2s1Rs2R

s((sR)). Reversal can just move through them.

Thus to reverse this (((ab)(a))((ab)(b)))R we simply follow the rules. To reverse the outer union we simply reverse its two components. To reverse this: ((ab)(a)) kleene star, we simply reverse what is inside it (((ab)(a))R). Then to reverse a concatenation, we index and then switch greatest with least. So we start with ((ab)(a))R and get ((a)R(ab)R). To reverse that single letter, we reach our base case and get (a)R(a). This process outlined above describes an inductive description of this change.

user2524930
источник