Jedną operacją, która przekształca NFA w inny NFA, ale nie robi tego w przypadku DFA, jest odwrócenie (skieruj wszystkie strzałki na odwrót i zamień stany początkowe na stany akceptujące). Językiem rozpoznawanym przez przekształcony automat jest język odwrócony .LR={un−1…u0∣u0…un−1∈L}
Dlatego jednym z pomysłów jest poszukiwanie języka o asymetrycznej konstrukcji. Idąc dalej, język ten powinien zostać rozpoznany poprzez sprawdzenie pierwszych symboli, wymagających tylko stanów n + O ( 1 ) . Przechodząc do tyłu, należy zachować pamięć ostatnich n stanów, co wymaga stanów A n + O ( 1 ) , gdzie A jest rozmiarem alfabetu.nn+O(1)nAn+O(1)A
Szukamy języka w postaci którym M n składa się ze słów o długości n , S jest nietrywialnym podzbiorem alfabetu, a M ′ nie zapewnia żadnych dalszych ograniczeń. Równie dobrze moglibyśmy wybrać najprostszy alfabet A = { a , b } (alfabet singleton nie da rady, nie ma tam mniejszych NFA) i M ′ = A ∗ . Nietuzinkowe S oznacza S = { a } . Jeśli chodzi oMnSM′MnnSM′A={a,b}M′=A∗SS={a} , wymagamy, aby nie korelował on z S (aby DFA dla języka odwróconego musiał zachować pamięć S ): weź M n = A n .MnSSMn=An
Zatem niech . Jest rozpoznawany przez prosty DFA ze stanami n + 2 .Ln=(a|b)na(a|b)∗n+2
Odwrócenie go daje NFA, który rozpoznaje .LRn=(a|b)∗a(a|b)n
LRn2n+12n+1u,v∈An+1kuk≠vkuk=avk=bubk∈LRnvbk∉LRnbkuvuvLRnubkvbk, co jest niemożliwe, ponieważ jeden prowadzi do stanu akceptacji, a drugi nie.
Potwierdzenie: ten przykład był cytowany w Wikipedii bez wyjaśnień. Artykuł zawiera odniesienie do artykułu, którego nie przeczytałem, który ma ściślejszą
więź : Leiss, Ernst (1981), „Zwięzłe przedstawienie zwykłych języków przez automaty Boolean”, Theoretical Computer Science 13 (3): 323–330, doi: 10.1016 / S0304-3975 (81) 80005-9 .