Jak zasugerowano w komentarzach do pytania, postaram się udzielić (niestety częściowej) odpowiedzi na pytanie, przynajmniej w takim stopniu, w jakim sam zrozumiałem problem (oznacza to, że możesz znaleźć błędy, a jeśli znajdziesz) sposób na zwięzłe lub wyraźniejsze wyjaśnienie jednego z poniższych punktów, możesz odpowiednio edytować odpowiedź):
Po pierwsze, należy zauważyć, że tak naprawdę nie musimy obliczać uniwersalnego automatu języka, jeśli chcemy obliczyć faktoryzacje języka.
Z artykułu wspomnianego w moim komentarzu ¹ istnieje zgodność 1-1 między lewymi i prawymi czynnikami zwykłego języka, to znaczy, biorąc pod uwagę lewy czynnik języka, odpowiedni prawy czynnik jest jednoznacznie określony i odwrotnie. Dokładniej, mamy następujące:
Niech być na czynniki . Wtedy
to znaczy, że każdy lewy czynnik jest przecięciem prawych ilorazów, i każdy właściwy czynnik to przecięcie lewych ilorazów. Z drugiej strony, każdy punkt przecięcia lewych ilorazów jest tuż czynnik , a każdy punkt przecięcia prawych ilorazów jest lewy czynnik .(X,Y)L
Y=⋂x∈Xx−1L,X=⋂y∈YLy−1,
LLLL
Zauważ, że w przypadku zwykłego języka istnieje tylko skończony zestaw lewych i prawych ilorazów, a zatem problem sprowadza się do obliczenia lewego i prawego ilorazu języka, a następnie do obliczenia ich stabilnego zamknięcia, czyli minimalny nadzbiór ilorazów, który jest zamknięty na przecięciu. Są wtedy właśnie odpowiednie czynniki i pozostawione czynników, a to jest zwykle łatwo zobaczyć, które pary są podzbiory .∩L
Przykład
Aby zilustrować powyższe punkty, rozważ pierwszy przykład w pytaniu (którego również uważam za niepoprawny w pracy):
Niech . Teraz lewe ilorazy to zbiory dla , to znaczy te słowa w które mogą być poprzedzone , tj. . Kiedy dla odrębnego ? Tak jest w przypadku, jeżeli i tylko jeżeli i mogą być zwiększone do słowaL=Σ∗abΣ∗Lx−1Lx∈Σ∗uΣ∗xxu∈Ly−1L=x−1Lx,yxyLz dokładnie tymi samymi przyrostkami. Oznacza to, że mówiąc bardziej znajomo, są one odpowiednikami Nerode, a przyrostki potrzebne do dołączenia do słów w klasie Nerode są dokładnie odpowiednimi lewymi ilorazami.
Dla widzimy, że nasze klasy równoważności Nerode sąL
- N1 , zestaw słów niezawierających jako czynnika i kończących się , aba
- N2 , zestaw słów kończących się na i niezawierających jako czynnika, oraz bab
- N3 , zbiór słów zawierających jako czynnik, to znaczyabN3=L
Można je uzupełnić o następujące zestawy (to są lewe ilorazy słów w odpowiednich klasach):
- S1=x−1L dla w składa się ze wszystkich słów w (każde słowo może być uzupełnione słowem zawierającym jako czynnik, a zatem staje się słowem w ) i , że toxN1LabLbΣ∗S1=L∪bΣ∗
- S2=x−1L dla w to sam język, to znaczy ixN2S2=L
- S3=x−1L dla w to oczywiście . Oznacza to, że udało nam się znaleźć trzy odpowiednie czynniki . Ponieważ , ich stabilne zamknięcie jest trywialne , a zatem są to właśnie właściwe czynniki.xN3Σ∗LS2⊂S1⊂S3∩S1,S2,S3
Stąd nasz zestaw faktoryzacji ma postać .FL(P1,S1),(P2,S2),(P3,S3)
Teraz, dla lewych czynników , używamy równań z początku tej odpowiedzi:Pi
Pi=⋂x∈SiLx−1
.
Dla , to plony dla otrzymujemy i otrzymujemy . Możesz to zobaczyć przez inspekcję (najpopularniejsze usprawiedliwienie dla bycia zbyt leniwym, aby podać formalny dowód) lub przez jawne obliczenie właściwych ilorazów (co jest dość analogiczne, choć nie całkowicie, do obliczenia lewych ilorazów). Nasze faktoryzacje są więc podane przez gdzieP1L∪Σ∗aP2Σ∗P3LFL=u,v,w
- u=(P1,S1)=(Σ∗abΣ∗∪Σ∗a,Σ∗abΣ∗∪bΣ∗)
- v=(P2,S2)=(Σ∗,Σ∗abΣ∗) i
- w=(P3,S3)=(Σ∗abΣ∗,Σ∗)
streszczenie
Podsumowując (tak jak prosiłeś o prostą procedurę):
- Do obliczania factorizations języka , najpierw obliczyć lewo ilorazy .LL
- Można to zrobić w języku artykułu, konstruując minimalny DFA dla a następnie dla każdego stanu w (odpowiadającego jako klasa równoważności Nerode lewemu ilorazowi) obliczyć przyszłość w , uzyskując w ten sposób jeden lewy iloraz języka dla każdego stanu.ALqAqA
- Zbiór lewych ilorazów uzyskanych w ten sposób daje ogólnie podzbiór właściwych czynników.SR
- Oblicz wówczas -stabilny zamknięcie , które mogą być stosowane w praktyce przez wykonanie przecięcia każdego podzbioru i dodawania podzestawu otrzymanej w ten sposób do .∩SRSRSR
- Zestaw wraz ze wszystkimi skrzyżowaniami z poprzedniego etapu jest to zbiór odpowiednich czynników .SRL
- W celu uzyskania lewego czynniki, możemy obliczyć odpowiednie ilorazy .L
- Są to zestawy postaci , dla . Teraz jest ich znowu tylko skończonych wiele, a dla mamy wtedy i tylko jeśli dla wszystkich , , to znaczy, że mogą być poprzedzone słowami w języku za pomocą dokładnie tego samego zestawu ciągów.Ly−1y∈Σ∗x≠yLy−1=Lx−1u∈Σ∗ux∈L⇔uy∈L
- Aby obliczyć , rozważ te stany w , że jest zawarty w przyszłości . Zjednoczenie przeszłości tych państw stanowi jeden właściwy iloraz. Znajdź wszystkie te ilorazy.Lx−1qAxq
- Wiesz, że skończyłeś, gdy znalazłeś tyle lewych czynników, ile masz prawych czynników.
- Znaleźć te pary lewej i prawej strony czynników takie, że . To jest .X,YX⋅Y⊆LFL
- Uniwersalny automat Lombardii i Sakarowicza (w tekstach z logiki i gier, tom 2: Logika i automaty: historia i perspektywy , 2007)