Wie in den Kommentaren zur Frage vorgeschlagen, werde ich versuchen, eine (leider teilweise) Antwort auf die Frage zu geben, zumindest in dem Maße, in dem ich das Problem selbst verstanden habe (dies impliziert, dass Sie möglicherweise Fehler finden und wenn Sie Fehler finden Wenn Sie einen der folgenden Punkte kurz oder klar erläutern möchten, können Sie die Antwort auch entsprechend bearbeiten.):
Erstens sollte man beachten, dass wir den universellen Automaten einer Sprache nicht berechnen müssen, wenn wir die Faktorierungen einer Sprache berechnen wollen.
Aus dem in meinem Kommentar1 erwähnten Artikel ergibt sich eine 1: 1-Entsprechung zwischen dem linken und dem rechten Faktor einer regulären Sprache, dh bei einem linken Faktor der Sprache ist der entsprechende rechte Faktor eindeutig bestimmt und umgekehrt. Genauer gesagt haben wir Folgendes:
Let werden , um eine Faktorisierung von L . Dann ist
Y = ⋂ x ∈ X x - 1 L , X = ⋂ y ∈ Y L y - 1 , dh
jeder linke Faktor ist ein Schnittpunkt von rechten Quotienten, und jeder rechte Faktor ist ein Schnittpunkt von linken Quotienten. Umgekehrt wird jede Kreuzung von links Quotienten von L ist ein richtiger Faktor L , und jeder Schnittpunkt der rechten Quotienten von L ist ein linker Faktor L .(X,Y)L
Y=⋂x∈Xx−1L,X=⋂y∈YLy−1,
LLLL
Man beachte, dass es für eine reguläre Sprache nur eine endliche Menge von linken und rechten Quotienten gibt und daher oder ein Problem sich darauf beschränkt, die linken und rechten Quotienten einer Sprache zu berechnen und dann ihren stabilen Abschluss zu berechnen, dh ein Minimum Obermenge der Quotienten, die unter Kreuzung geschlossen wird. Dies sind dann genau die rechten und linken Faktoren, und dann ist es normalerweise leicht zu erkennen, welche Paare Teilmengen von L sind .∩L
Beispiel
Um die obigen Punkte zu veranschaulichen, betrachten Sie das erste Beispiel in der Frage (von dem ich auch denke, dass es in der Arbeit falsch ist):
Let . Nun werden die linken Quotienten von L sind die Sätze x - 1 L für x ∈ Σ * , das heißt, diese Worte u in Σ * , die mit dem Präfix werden kann x , dh x u ∈ L . Wann ist y - 1 L = x - 1 L für verschiedene x , y ? Dies ist genau dann der Fall, wenn xL=Σ∗abΣ∗Lx−1Lx∈Σ∗uΣ∗xxu∈Ly−1L=x−1Lx,yxund kann zu Wörtern in L mit genau den gleichen Suffixen erweitert werden. Dies bedeutet, dass sie, um es bekannter zu machen, Nerode-äquivalent sind und die Suffixe, die zum Anhängen an Wörter in einer Nerode-Klasse benötigt werden, genau die jeweiligen linken Quotienten sind.yL
Für wir, dass unsere Nerodenäquivalenzklassen sindL
- , die Menge der Wörter, die kein b als Faktor enthalten und mit a enden, N1aba
- ,der Satz von Worten mitEndung b und nicht enthaltend eine b als Faktor, und N2bab
- , die Menge von Wörtern, die a b als Faktor enthalten, dh N 3 = LN3abN3=L
Sie können mit den folgenden Mengen erweitert werden (dh dies sind die linken Quotienten der Wörter in den jeweiligen Klassen):
- für x in N 1 besteht aus allen Wörtern in L (jedes Wort kann mit einem Wort, das a b als Faktor enthält, erweitert werden und wird so zu einem Wort in L ) und b Σ ∗ , das heißt S 1 = L ∪ B Σ *S1=x−1LxN1LabLbΣ∗S1=L∪bΣ∗
- für x in N 2 ist die Sprache selbst, dh S 2 = L undS2=x−1LxN2S2=L
- für x in N 3 ist offensichtlich Σ * . Das heißt, wir haben drei richtige Faktoren für L gefunden . Da S 2 ⊂ S 1 ⊂ S 3 ist , ist ihr ∩- stabiler Verschluss trivial S 1 , S 2 , S 3 , und das sind dann genau die richtigen Faktoren.S3=x−1LxN3Σ∗LS2⊂S1⊂S3∩S1,S2,S3
Daher unsere Faktorisierung Satz ist von der Form ( P 1 , S 1 ) , ( P 2 , S 2 ) , ( P 3 , S 3 ) .FL(P1,S1),(P2,S2),(P3,S3)
Nun verwenden wir für die linken Faktoren die Gleichungen des Anfangs dieser Antwort:Pi
.
Pi=⋂x∈SiLx−1
Für ergibt dies L ∪ Σ * ein , für P 2 erhalten wir Σ * und P 3 , erhalten wir L . Sie können dies durch Einsichtnahme (die häufigste Entschuldigung dafür, dass Sie zu faul sind, einen formalen Beweis zu erbringen) oder durch die explizite Berechnung der rechten Quotienten (die der Berechnung der linken Quotienten ziemlich analog, wenn auch nicht vollständig ist) erkennen. Unsere Faktorisierungen sind also gegeben durch F L = u , v , w woP1L∪Σ∗aP2Σ∗P3LFL=u,v,w
- u=(P1,S1)=(Σ∗abΣ∗∪Σ∗a,Σ∗abΣ∗∪bΣ∗)
- undv=(P2,S2)=(Σ∗,Σ∗abΣ∗)
- w=(P3,S3)=(Σ∗abΣ∗,Σ∗)
Zusammenfassung
Zusammenfassend (als Sie nach einem einfachen Verfahren fragten):
- Für die Faktorisierung einer Sprache Berechnen , zuerst die linken Quotienten berechnen L .LL
- Sie können dies in der Sprache der Arbeit tun, indem Sie einen minimalen DFA für L konstruieren und dann für jeden Zustand q in A (der als Nerode-Äquivalenzklasse einem linken Quotienten entspricht) die Zukunft von q in A berechnen Erhalten eines linken Quotienten der Sprache für jeden Zustand.ALqAqA
- Die auf diese Weise erhaltene Sammlung von linken Quotienten ergibt im allgemeinen eine Teilmenge der rechten Faktoren.SR
- Compute then the ∩-stable closure of SR, which can be done in practice by forming the intersection of any subset of SR and adding any subset obtained in this way to SR.
- The set SR together with all the intersections from the previous step is then the set of right factors of L.
- In order to obtain the left factors, we can compute the right quotients of L.
- Ly−1y∈Σ∗x≠yLy−1=Lx−1u∈Σ∗ux∈L⇔uy∈L
- um zu berechnenLx−1q in A such that x is contained in the future of q. The union of the pasts of those states constitute one right quotient. Find all these quotients.
- You know you are done when you have found as many left factors as you have right factors.
- Find those pairs of left and right factors X,Y such that X⋅Y⊆L. This is FL.
- The Universal Automaton by Lombardy and Sakarovitch (in Texts in Logic and Games, Vol 2: Logic and Automata: History and Perspectives, 2007)