Wie man zeigt, dass eine "umgekehrte" reguläre Sprache regulär ist

19

Ich stecke in der folgenden Frage fest:

"Reguläre Sprachen sind genau diejenigen, die von endlichen Automaten akzeptiert werden. Zeigen Sie, dass, wenn die Sprache von einem endlichen Automaten akzeptiert wird, auch von einem endlichen akzeptiert wird; besteht aus allen Wörtern von umgekehrt. "L L R LLRLRL

Katze
quelle
1
Haben Sie versucht, einen Automaten zu konstruieren, der akzeptiert ? Es kann hilfreich sein, ein Beispiel zu zeichnen. LR
Gilles 'SO- hör auf böse zu sein'
Danke für Ihre Antwort. Ich bin mir nicht sicher, wie ich das machen soll. Ich bin sicher, dass jedes L ^ R von einer Sprache akzeptiert wird, da es aus dem gleichen 'Alphabet' aufgebaut ist und daher auch eine reguläre Sprache sein wird. Ich bin mir nicht sicher, wie ich es beweisen oder ein Beispiel zeichnen soll.
Cat
2
Herzlich willkommen! Für solche Grundfragen, die nach Hausaufgaben riechen, mögen wir, wenn die Frage (signifikante) Vorarbeiten des Fragestellers enthält. Sie haben sicherlich etwas ausprobiert , das Sie mit anderen teilen können (anhand dessen wir Sie dann in die richtige Richtung führen können). Wenn nicht, sollten Sie Ihre Definitionen überprüfen und Gilles 'Rat befolgen.
Raphael
3
@Victoria "Es ist aus dem gleichen 'Alphabet' aufgebaut und wird auch eine reguläre Sprache sein" - oh, nonono. , und sind alle über dasselbe Alphabet definiert, fallen jedoch in sehr unterschiedliche Sprachklassen. { a n b m a n | n , m N } { a n b n a n | n N }{anbmaon,m,oN}{anbmann,mN}{anbnannN}
Raphael
1
Die andere Frage am Ende des Kapitels fordert mich auf zu beweisen, dass kein endlicher Automat alle Palindrome über ein bestimmtes Alphabet akzeptieren kann. Ich denke, dass der Beweis dafür von der Tatsache abhängt, dass es unendlich viele Zustände gibt, wenn wir alle möglichen Palindrome berücksichtigen (keine Längenbeschränkung), während die Maschine eine endliche Zustandsmaschine ist.
Cat

Antworten:

26

Wenn wir also eine reguläre Sprache , wissen wir (im Wesentlichen per Definition), dass sie von einigen endlichen Automaten akzeptiert wird. Es gibt also eine endliche Menge von Zuständen mit geeigneten Übergängen, die uns genau dann vom Ausgangszustand in den akzeptierenden Zustand bringen, wenn die Eingabe erfolgt ist eine Zeichenkette in . Wir können sogar darauf bestehen, dass es nur einen akzeptierenden Staat gibt, um die Dinge zu vereinfachen. Um die Umkehrsprache zu akzeptieren, müssen wir nur die Richtung der Übergänge umkehren, den Startzustand in einen Akzeptanzzustand und den Akzeptanzzustand in den Startzustand ändern. Dann haben wir eine Maschine, die im Vergleich zum Original "rückwärts" ist und die Sprache akzeptiert .L L RLLLR

Luke Mathieson
quelle
Vielen Dank Luke - ich glaube ich verstehe was du gesagt hast. Sie sind genau richtig - ich habe absolut keine praktischen Erfahrungen mit endlichen Automaten! Ich würde dich "up vote", aber ich habe anscheinend nicht genug Punkte. Das tut mir leid!
Cat
Das ist in Ordnung, Sie sollten in der Lage sein, die gewünschten Antworten zu "akzeptieren" (unter den Abstimmungsschaltflächen sollte ein Häkchen angezeigt werden). Auch Saadtaames formellere Antwort ist ein hervorragender nächster Schritt nach meiner.
Luke Mathieson
5
Um anzunehmen, dass es nur einen akzeptierenden Zustand gibt, müssen wir entweder -Übergänge zulassen oder . Beides sind keine wirklichen Einschränkungen, ich weiß, also ist die Antwort in Ordnung. ϵ LϵϵL
Hendrik Jan
1
Ja, die Idee scheint mir offensichtlich. Der schwierige Teil ist die Überprüfung, ob es richtig ist.
Niemand
24

Sie müssen zeigen, dass Sie immer einen endlichen Automaten konstruieren können, der Zeichenfolgen in akzeptiert, vorausgesetzt, dass ein endlicher Automat Zeichenfolgen in akzeptiert . Hier ist ein Verfahren, um das zu tun.LRL

  1. Kehre alle Links im Automaten um
  2. einen neuen Zustand hinzu (nenne es )qs
  3. Zeichnen Sie eine Verknüpfung mit der Bezeichnung vom Zustand bis zu jedem Endzustandϵqs
  4. Verwandle alle Endzustände in normale Zustände
  5. Verwandle den Anfangszustand in einen Endzustand
  6. Machen Sie zum Ausgangszustandqs

Lassen Sie uns das alles formalisieren. Wir beginnen mit dem Satz.

Satz. Wenn eine reguläre Sprache ist, ist es auch .LLR

Sei eine NFA und sei . Das unten definierte -NFA akzeptiert die Sprache .A=(QA,ΣA,δA,qA,FA)L=L(A)ϵARLR

  1. AR=(QA{qs},ΣA,δAR,qs,{qA}) undqsQA
  2. pδA(q,a)qδAR(p,a) , wobei undaΣAq,pQA
  3. ϵclosure(qs)=FA

Beweis. Zunächst wir beweisen die folgende Aussage: ein Pfad von zu in , markiert mit , wenn und nur wenn ein Pfad von zu in , markiert mit (die Umkehrung von ) für . Der Beweis erfolgt durch Induktion über die Länge von .qpAwpqARwRwq,pQAw

  1. Grundgehäuse: gilt per Definition von|w|=1δ A R
    δAR
  2. Induktion: Nehmen wir an, die Aussage gilt für Wörter der Länge und lassen und Es sei Wir wissen, dass und sind Wörter mit weniger als Symbolen. Nach der Induktionshypothese sind und . Dies impliziert, dass .<n|w|=nw=xap δ * A ( q , w ) = δ * A ( q , x a ) , x ) x ein n p 'δ A R ( p , a
    pδA(q,w)=δA(q,xa)
    δA(q,xa)=pδA(p,a) pδA(q,x)
    xanpδAR(p,a)qδAR(p,xR)qδAR(p,axR)pδA(q,xa)

Vermietung und für einige und Substituieren für gewährleistet , daß . Da es einen mit bezeichneten Pfad von zu jedem Zustand in (3. in der Definition von ) und einen mit bezeichneten Pfad von jedem Zustand in zu dem Zustand gibt, gibt es einen Pfad markiert mit von bis . Dies beweist den Satz.q=qAp=ssFAwRaxRqδAR(s,wR) sFAϵqsFAARFAqAwRϵwR=wRqsqA

Beachten Sie, dass dies beweist, dass .(LR)R=L

Bitte bearbeiten Sie, wenn es irgendwelche Formatierungsfehler oder Fehler in meinem Proof gibt ....

Saadtaame
quelle
1
Was meinen Sie mit ? ϵclosure(qs)=FA
user124384
Aber Sie können doch keinen Übergang in deterministische reguläre Sprachen haben, oder?
Yukashima Huksay
@yukashimahuksay Stimmt, aber Sie können auch immer einen nicht deterministischen endlichen Automaten nehmen und ihn in einen deterministischen endlichen Automaten verwandeln. Sie sind gleichwertig.
Pro Q
12

Um die oben beschriebenen automatenbasierten Transformationen zu ergänzen, können Sie auch beweisen, dass reguläre Sprachen unter Umkehr geschlossen sind, indem Sie zeigen, wie ein regulärer Ausdruck für in einen regulären Ausdruck für konvertiert wird . Dazu definieren wir eine Funktion für reguläre Ausdrücke, die einen regulären Ausdruck für eine Sprache als Eingabe akzeptiert und dann einen regulären Ausdruck für die Sprache . Dies wird induktiv über die Struktur regulärer Ausdrücke definiert:L R R E V R L R ' L RLLRREVRLRLR

  1. REV(ϵ)=ϵ
  2. REV()=
  3. a ΣREV(a)=a für ein beliebigesaΣ
  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))

Sie können diese Konstruktion formal als Übung nachweisen.

Hoffe das hilft!

templatetypedef
quelle
Hallo! Ich bin hier gelandet, weil ich über die Idee der Umkehrung regulärer Ausdrücke nachgedacht habe, um eine rechts verankerte Übereinstimmung mit einer Zeichenfolge zu optimieren: Führe die Zeichen in umgekehrter Reihenfolge dem umgekehrten Automaten zu. Einem Durchgang. Ich habe die algebraischen Eigenschaften der Regex-Umkehrung aufgeschrieben und sie passt fast genau zu Ihrer Tabelle, auch unter Verwendung der rev()Notation. :) hab ich auch hingelegt REV(R1&R2) = REV(R1)&REV(R2); Ich habe eine Regex-Implementierung, die Schnittmenge hat. Ja; Ich denke über das Hinzufügen eines Operators für die Umkehrung möglicherweise R\r(umgekehrtes vorangehendes Regex-Element).
Kaz
Hier ist eine knifflige Frage: Wie lautet die algebraische Regel für REV (~ R): Regex-Negation? REV(~R)ist die Umkehrung der Menge aller Saiten außerhalb von R. Ist das dasselbe wie ~REV(R): die Menge aller Saiten außerhalb der Umkehrung der mit R bezeichneten Menge? Dies ist überhaupt nicht klar, da alle Palindrome in Rauch in sind REV(R).
Kaz
1

Beweisen Sie mit regulären Ausdrücken, dass, wenn eine reguläre Sprache ist, die \ emph {Umkehrung} von , auch regulär ist. Insbesondere wird ein regulärer Ausdruck gegeben, der beschreibt , zeigen mit Induktion , wie sie in einem regulären Ausdruck umzuwandeln , die beschreibt . Ihr Beweis sollte nicht auf NFAs zurückgreifen. L L R = { w R : w L } L L RLLLR={wR:wL}LLR

Wir gehen davon aus, dass wir einen regulären Ausdruck erhalten, der beschreibt . Schauen wir uns zuerst den Concatination-Operator ( ) an und gehen wir dann zu fortgeschritteneren Operatoren über. Unsere Verkettungsfälle befassen sich also mit der Länge dessen, was verkettet wird. Also werden wir zuerst alle Verkettungen von nach aufbrechen . Wenn Sie sich mit diesen befassen, teilen Sie die Komponenten so weit wie möglich auf: , aber Sie können natürlich die assoziative Reihenfolge zwischen verschiedenen Auffassungen nicht aufbrechen.a b a b ( a b a ) b ( a b a ) bLabab(aba)b(aba)b

WennR

Wenn , haben wir die leere Zeichenkette, die bereits umgekehrt ist, so dass sich der Mechanismus nicht änderts=ϵ

Wenn nur ein Buchstabe ist, wie in , ist die Umkehrung nur dieser Buchstabe,s Σ sssΣs

Wenn , haben wir einen einzelnen Bestandteil, so dass wir diesen Bestandteil einfach umkehren und somitσ Rs=σσR

Wenn wobei k ungerade ist, haben wir einen regulären Ausdruck, der geschrieben werden kann als . Die Umkehrung dieser Saiten mit gerader Länge ist einfach. Den 0-Index einfach mit dem k-Index tauschen. Dann wechseln Sie den 1-Index mit k-1-Index. Fahren Sie fort, bis jedes Element einmal geschaltet wurde. Somit ist das letzte Element jetzt das erste in der Reg-Ex und das erste ist das letzte. Der vorletzte ist der zweite und der zweite der vorletzte. Wir haben also eine umgekehrte Reg-Ex, die die umgekehrte Zeichenfolge akzeptiert (der erste Buchstabe ist der letzte usw.). Und natürlich kehren wir jeden Bestandteil um. So würden wir erhalten( σ 0σ 1 . . . σ k - 1σ k ) ( σ R ks=(σ0σ1...σk1σk)(σ0σ1...σk1σk)(σkRσk1R...σ1Rσ0R)

Wenn wobei k gerade ist, haben wir im Allgemeinen einen regulären Ausdruck, der geschrieben werden kann als . Die Umkehrung dieser Saiten mit gerader Länge ist einfach. Den 0-Index einfach mit dem k-Index tauschen. Dann wechseln Sie den 1-Index mit k-1-Index. Fahren Sie fort, bis jedes Element einmal gewechselt wurde, aber das k / 2-Element (eine ganze Zahl, weil k gerade ist). Somit ist das letzte Element jetzt das erste in der Reg-Ex, und das erste ist das letzte. Der vorletzte ist der zweite und der zweite der vorletzte. Wir haben also einen umgekehrten reg ex, der den umgekehrten String akzeptiert (der erste Buchstabe ist der letzte usw.). Und dieser mittlere Buchstabe. Und natürlich vertauschen wir jeden Bestandteil. So würden wir bekommen( σ 0σ 1 . . . σ k - 1σ k ) ( σ R k σ R k - 1 . . . σ R k / 2 . . .s=(σ0σ1...σk/2...σk1σk)(σ0σ1...σk1σk)(σkRσk1R...σk/2R...σ1Rσ0R)

Okay, der schwierige Teil ist erledigt. Schauen wir uns den Operator an. Dies ist nur eine Vereinigung von Mengen. So zwei Saiten gegeben, , die Umkehrung der nur . Die Gewerkschaft wird sich nicht ändern. Und das macht Sinn. Dies fügt einer Menge nur Zeichenfolgen hinzu. Es spielt keine Rolle, in welcher Reihenfolge sie zum Set hinzugefügt werden, alles, was zählt, ist, dass sie es sind.s 1 , s 2 s 1s 2 s R 1s R 2s1,s2s1s2s1Rs2R

Der kleene Sternoperator ist der selbe. Es fügt lediglich Strings zu einem Set hinzu und sagt uns nicht, wie wir das String-Persay aufbauen sollen. Also, um einen kleene Stern einer Zeichenfolge umzukehren , ist nur . Umkehrung kann nur durch sie bewegen.( ( s R ) )s((sR))

So umkehren diese wir einfach an die Regeln. Um die äußere Vereinigung umzukehren, kehren wir einfach die beiden Komponenten um. Um dies umzukehren: kleene star, wir kehren einfach um, was sich darin befindet . Um dann eine Verkettung umzukehren, indizieren wir und schalten dann am wenigsten um. Wir beginnen also mit und erhalten . Um diesen einzelnen Buchstaben umzukehren, erreichen wir unseren Basisfall und erhalten . Dieser oben beschriebene Prozess beschreibt eine induktive Beschreibung dieser Änderung. ( ( a b(((ab)(a))((ab)(b)))R((ab)(a))(((ab)(a))R) ( ( a ) R( a b ) R ) ( a ) R( a )((ab)(a))R((a)R(ab)R)(a)R(a)

user2524930
quelle