Feladat:
Készítsünk az
a(b+c(ba)*ca)*b+b
reguláris kifejezéssel megadott nyelvhez VDA-t, a Myhill Nerode tétel alapján, a maradék-nyelvek kiszámításával.
Megoldás:
0 hosszú „előtag”
maradéknyelve:
Lε = L
1 hosszú „előtag”-hoz
tartozó maradéknyelvek:
(a szó első betűje a, b, vagy c, mi lehet a folytatás)
La = (b+c(ba)*ca)*b (új, tovább kell számolni)
Lb = ε ez a szó vége, nem lehet folytatni, nem kell
tovább számolni
Lc = Ø mivel nem kezdődhet c-vel a szó, ez az üres,
halmaz, nem számoljuk tovább!
2 hosszú „előtag”-hoz
tartozó maradéknyelvek:
(csak az a-val kezdődő nyelvosztályokat kell kiszámolni, tehát meg kell nézni,
mi a maradéknyelv aa, ab, és ac kezdet esetén)
Laa = Ø
Lab = ε + (b+c(ba)*ca)*b (új, tovább kell
számolni)
Lac = (ba)*ca
(b+c(ba)*ca)*b (új, tovább kell számolni)
3 hosszú „előtag”-hoz
tartozó maradéknyelvek:
(csak az ab-vel ás ac-vel kezdődők folytatásaival foglalkozunk)
Laba = Ø
Labb = ε + (b+c(ba)*ca)*b = Lab
Labc = (ba)*ca (b+c(ba)*ca)*b = Lac
Laca = Ø
Lacb = a(ba)*ca (b+c(ba)*ca)*b (új, tovább kell számolni)
Lacc = a (b+c(ba)*ca)*b (új, tovább kell számolni)
4 hosszú „előtag”-hoz
tartozó maradéknyelvek:
(csak az acb-vel ás acc-vel kezdődők folytatásaival foglalkozunk)
Lacba = (ba)*ca (b+c(ba)*ca)*b = Lac
Lacbb = Ø
Lacbc = Ø
Lacca =(b+c(ba)*ca)*b = La
Laccb = Ø
Laccc = Ø
Nem kaptunk új maradéknyelvet, kész vagyunk. Rajzoljuk le a VDA gráfját!
Állapotok a kapott maradéknyelvek.
Kezdőállapot az Lε (=L).
Végállapotok azok, amelyekben az ε szerepel: Lb , Lab .
Az átmenet függvényt abból lehet kiolvasni, hogyan kaptuk meg az egyik maradéknyelvből a következőt (La állapotból b-t olvasva jutunk Lab állapotba, hisz a szó eleje ’a’-ról ’ab’-re növekedett.)
Az automata még nem VDA, mert parciális. A „hiba” állapottal, és a hibába futó élekkel kellene kiegészíteni, hogy VDA legyen, de a jobb áttekinthetőség miatt most ezek nélkül ábrázoljuk.
(ha hibát talál, kérem
jelezze: veanna@elte.hu címre, köszönöm)