• Nem Talált Eredményt

Reguláris halmazok

In document Formális nyelvek (Pldal 71-79)

2. Reguláris nyelvek

2.6. Reguláris halmazok

A reguláris nyelvek leírására, definiálására eddig két módszert ismertünk meg.

Egy reguláris nyelvet megadhatunk az azt generáló reguláris nyelvtannal, vagy az azt elfogadó véges automatával. Alábbiakban a reguláris nyelveknek, a jelsorozatokat tartalmazó reguláris halmazok útján egy harmadik meghatározási lehetőségével ismerkedünk meg.

Legyen tehát Σ egy alfabeta, amely a jelsorozatok karakterkészletét tartalmazza, és legyen a ennek egy eleme.

Lássuk ezután mi tekinthető reguláris halmaznak, pontosabban a Σ felett értelmezett reguláris halmaznak.

Reguláris az üres halmaz ∅, egyedül az üres jelsorozatot tartalmazó halmaz {ε}, és egy Σ halmazbeli karaktert, mint egyetlen jelsorozatot tartalmazó halmaz {a}.

Legyen most P és Q két reguláris halmaz. Néhány halmazművelet definíciószerűen nem vezet ki a reguláris halmazok világából. Ilyen az unióképzés, amelyet itt a + operátorral jelölünk, a konkatenáció, amelyet egyszerűen egymás-után írással adunk meg, végül a tranzitív lezárás, amit szokás szerint a * jelöl.

Összefoglalva, adott Σ feletti reguláris halmaznak nevezzük azokat és csak azokat a nyelveket (sztringhalmazokat) melyek a fenti módszerrel előállíthatóak.

Foglaljuk össze, milyen egyszerű halmazokat tekintünk reguláris halmazoknak, és milyen műveletek eredményeznek ismét reguláris halmazt:

∅ {ε}

{a} a ∈ Σ (2.27.)

P+Q P,Q reguláris PQ P,Q reguláris P * P reguláris

Az összeadás és a szorzás jelének az unióképzés illetve a konkatenáció műveletére való alkalmazását az indokolja, hogy az aritmetikában érvényes néhány szabály ebben a kontextusban is igaz marad. Ilyen például az operátorok precedencia szabálya. Előbb kell elvégezni a „hatványozás” értsd tranzitív lezárás műveletét mint a szorzással jelölt konkatenációt, végül a + operátorral jelölt unióképzést.

Persze itt is bevezethetjük a zárójelezést, mint a precedencia megtö-résének eszközét. A zárójelek felbontásának szabályai is emlékeztetnek az aritmetikából ismertekre. Így például

(A+B)(C+D) = AB+AD+BC+BD

Ezzel az analógiával azonban óvatosan kell bánnunk. Ha két olyan halmaznak képezzük az unióját, ahol az egyik a másik részhalmaza, akkor az

„összeadás” már eltér az aritmetikai művelettől:

ha A ⊂ B akkor A+B = B

Vegyük észre, hogy az üres halmaz a zérus, az üres jelsorozatot tartal-mazó halmaz pedig az egységelem szerepét játssza. Valóban

A+∅ = ∅+A = A és Aε = εA = A (2.28.) hiszen az üres halmazzal vett unió nem bővíti az eredeti halmazt, ugyanakkor az A halmaz bármely eleme elé vagy mögé az üres jelsorozatot írva nem gyarapí-tottuk a halmaz elemeinek számát.

A tranzitív lezárt, mint ismeretes a következőképpen fejezhető ki:

A* = U Ai (2.29.)

i = 0

Vezessük be ennek mintájára a kitevőként alkalmazott + jelölést, az alábbi értelmezéssel:

A+ = U Ai (2.30.)

i = 1

Ebből következik, hogy

A* = A++ε és A*A = A+ (2.31.) illetve ha az üres jelsorozat eleme a reguláris halmaznak

ε ∈ A ⇒ A+ = A* (2.32.) hiszen az üres jelsorozat ε mindkét halmaznak eleme. A jobboldalon egy tranzitív lezárt van, amely definíció szerint tartalmazza az üres jelsorozatot, míg a balolda-lon egy olyan A halmaz áll, amelynek feltételünk szerint eleme az üres jelsorozat.

Reguláris halmazokra lényegében ugyanúgy lehet a bevezetett jelölések alkalmazásával összefüggéseket, halmazok közötti kapcsolatokat definiálni, mint például az aritmetikai kifejezések segítségével a számok világában.

Felírhatunk halmazegyenleteket, halmazok közötti összefüggéseket, és megkereshetjük azokat a halmazokat, amelyek mellett ezek az összefüggések iga-zak lesznek, vagyis amely halmazok a halmazegyenlet megoldásai.

Vegyük például a következő egyszerű összefüggést:

X = αX+β (2.33.)

– ahol α és β adott reguláris halmazok, – X pedig ismeretlen halmaz.

Határozzuk meg az X halmazt olymódon, hogy a (2.33.) összefüggés igaz legyen. Az egyenlet megoldása:

X = α*β (2.34.)

Állításunk helyességéről könnyen meggyőződhetünk, ha a megoldást behelyettesítjük a (2.33.) egyenletbe. Valóban:

α*β = α(α*β)+β = α+β+β = (α++ε)β =α*β

Megjegyezzük, hogy a (2.34.) megoldás csak abban az esetben unikális, ha az α halmaznak ε nem eleme. Ellenkező esetben ugyanis minden

X = α*(β+γ)

alakú kifejezés megoldás, ahol γ tetszőleges reguláris halmaz.

Erről a szorgalmas olvasó egyszerű behelyettesítéssel meggyőződhet.

A fentiek alapján egyetlen „lineáris” összefüggéssel megadott reguláris halmazt könnyen meghatározhatunk. De mi történik azonban, ha több reguláris halmazt egy „lineáris egyenletrendszer” útján adunk meg.

Ilyenkor a (2.34.) megoldási képletet, és a behelyettesítést felváltva alkalmazva egy a Gauss-eliminációhoz hasonló eljárással kaphatjuk meg az ismeretlen halmazok megoldását. Hogy a megoldás során a részegyenleteknek valóban egyetlen megoldása van, az annak a következménye, hogy a véges automata nem tartalmaz ε-szabályokat.

Lássunk erre egy példát:

X1 = bX1+aX2X2 = aX1+bX2

Amennyiben a második kifejezést a (2.34.) mintájára megoldjuk, és ezt az első egyenletbe helyettesítjük, akkor a következőket kapjuk:

X2 = b*aX1

X1 = bX1+a(b*aX1)+ε = (b+ab*a)X1

Ismét a (2.34.) megoldó képletet alkalmazva ezúttal az X1 halmazra, majd a kapott eredményt visszahelyettesítve az egyenletrendszert megoldhatjuk.

X1 = (b+ab*a)* X2 = b*a(b+ab*a)*

Mint látjuk, mindkét halmazt az a és b karakterekből álló jelsorozatok alkotják, ahol a b karakterek száma és elhelyezkedése tetszőleges, az a karakterek száma az első halmaz esetében páros a másodikéban páratlan.

Könnyű belátni, hogy ez a módszer bár kissé hosszadalmas, az egyen-letek illetve ismeretlenek számától függetlenül alkalmazható.

Szeretnénk érzékeltetni, hogy a reguláris nyelvtanok éppen a reguláris halmazokat generálják.

Ehhez először azt lássuk be, hogy a halmazokra felírt olyan „lineáris”

egyenletrendszer megoldásai, amelynek „együtthatói” reguláris halmazok, szintén reguláris halmazok lesznek.

Ez valóban így van, hiszen a megoldás során a (2.34.) összefüggés felhasználásakor és a behelyettesítéskor csupa olyan műveletet – unióképzés,

konkatenáció, tranzitív lezárás – végzünk a reguláris halmazokon, amely nem vezet ki a reguláris halmazok világából.

Ugyanakkor minden reguláris halmaz felírható mint egy halmazegyenlet megoldása, ha másképpen nem megy egyenlőség formájában. Ezek szerint az említett egyenletrendszerek megoldásaiból alkotott halmaz, és a reguláris halmazok alkotta halmaz azonos.

Egy reguláris nyelvtan által generált nyelv megadható, mint egy egyenletrendszer megoldása. Ez azonnal kiadódik, ha a nyelvtan nemterminális szimbólumainak nyelvi értelmezést adunk.

Minden nemterminális szimbólum jelentse azon jelsorozatok halmazát, amelyeket a szóban forgó nemterminális szimbólumból a nyelvtani szabályok segítségével levezethetünk. Itt most visszaköszön az a felfogás, amikor a véges automaták állapotaihoz egy nyelvet rendeltünk, nevezetesen azt a nyelvet, amelyet az automata az adott állapot mint kezdőállapot mellett elfogad.

Ebben a szellemben a helyettesítési szabályoknak új értelmezést adhatunk. Az S → aA átírási szabály azt mondja, hogy minden olyan jelsorozat beletartozik az S nemterminális szimbólumból levezethető jelsorozatok halmazába, amely az a terminális szimbólummal kezdődik, és azt egy az A nemterminális szimbólumból levezethető jelsorozat követ.

Ez az interpretáció teljesen korrekt, és megegyezésben van eddigi értelmezésünkkel. Világos, hogy ebben a felfogásban a nyelvet a mondat-szimbólum reprezentálja.

Amennyiben egy nemterminális szimbólum több szabály baloldalán szerepel, akkor a szóban forgó nemterminálisból származtatott jelsorozatok bármely szabály alapján generálhatóak. Nyilvánvaló, hogy a teljes nyelvet az egyes szabályok alapján generált jelsorozatok uniója szolgáltatja.

Példaként vegyük a következő nyelvtant:

S → bS S → aA S → ε A → aS A → bA

Jelöljük az unió műveletét itt is a + operátorral, akkor az S és A nemterminálisok által reprezentált nyelvek az alábbiak szerint írhatók fel:

S = bS+aA+ε A = aS+bA

Nem kell különösebb éleslátás ahhoz, hogy felismerjük ezekben az összefüggésekben a korábban már tárgyalt egyenleteket. Az eltérés csupán annyi, hogy ott az ismeretlenek jelölése X1 és X2 volt.

Azt sem nehéz felismerni, hogy ez a nyelvtan a páros számú a karaktert tartalmazó jelsorozatokat generálja.

A módszer, amely a nemterminális szimbólumok új értelmezéséből következik, közvetlenül szolgáltatja azt az algoritmust, amellyel bármely reguláris nyelvtanból reguláris halmazokra felírt egyenletrendszer származtatható. Ebből következik, hogy minden reguláris nyelvtan által generált nyelv reguláris halmaz.

Amennyiben a reguláris halmazt meghatározó egyenletrendszer együtthatói puszta karakterek, akkor triviális, hogy ezek a reguláris halmazok egyúttal reguláris nyelvek.

Amennyiben ezek az együtthatók bonyolultabb kifejezések más utat követhetünk.

A (2.27.) meghatározta, milyen halmazokat tekintsünk reguláris halmazoknak. Tételezzük fel, hogy P és Q reguláris nyelvek, ekkor P-hez is, Q-hoz is tartozik olyan véges automata, amely ezeket a halmazokat elfogadja. A 2.24. ábra tünteti fel a (2.27.) összefüggésekben definiált reguláris halmazokhoz tartozó automatákat.

P + Q

P*

ε ε

{ a } { ε }

ε ε ε

ε Ø

ε

P

Q ε ε

P Q

P Q

P

a

2.24. ábra

Az első három automata értelmezése triviális. A továbbiakban a P és Q betűkkel jelöltük szimbolikusan azokat az automatákat, amelyek a P illetve Q reguláris halmazokat elfogadják.

Minthogy a P és Q automaták szintén reguláris halmazokat elfogadó automaták, ezek tovább felbonthatóak, és ezt az eljárást rekurzíve folytatva végül a három első automatához kell jutnunk. Ha tehát sikerül megmutatnunk, hogy ezek az automaták megvalósíthatóak, akkor igazoltuk, hogy minden reguláris halmaz véges automatával elfogadható, és a reguláris nyelvek halmaza azonos a reguláris halmazok halmazával.

Az ábrákban az ε feliratú nyilak ezekben az automatákban úgynevezett ε-mozgásokat reprezentálnak.

Az unióképzésnél a kezdő- és elfogadó állapotokat csak akkor lehet közvetlenül egyesíteni, ha a kezdőállapotokba nem térhetünk vissza, és az elfogadó állapotokból nem vezet ki nyíl. Ellenkező esetben ugyanis, mint azt már megbeszéltük, az egyik automatában egy kört futva fordulhatunk át a másik

automatába, és így egyik nyelvhez sem tartozó jelsorozatokat is elfogadhatunk.

Hasonló probléma léphet fel a konkatenáció és a tranzitív lezárás esetében is.

Könnyű belátni, hogy az ε-mozgások illetve az ε-nyilak alkalmazása segít ezen a bajon. Az ilyen ε-mozgások, illetve ε-nyilak használata az automataelméletben teljesen legális. A matematikai nyelvészet apostola Chomsky azonban nem engedélyezte az ilyen mozgásokat a 3-as nyelvosztályban.

Itt rögtön felmerül az a kérdés, hogy az ε-szabályok száműzése nem csökkenti-e az automaták erejét. A válasz most is negatív.

Minden olyan ε-szabályokat is tartalmazó automatához szerkeszthető olyan, ilyen eretnekséget nem mutató automata, amely ugyanazt a nyelvet fogadja el.

A bizonyítás ismét konstruktív lesz, vagyis megszerkesztjük az eredeti automatával egyenértékű, de ε-szabályt nem tartalmazó automatát.

A 2.25. ábrán egy automata olyan részletét tüntettük fel, amely ε-nyilat is tartalmaz.

y

x y

z w ε

x

z w x

x y

z w w

2.25. ábra

Az ábrán ügyeltünk arra, hogy mind az ε-nyíl kiinduló mind célálla-potánál legyenek befutó és kimenő nyilak is. Az ábra két lehetőséget is mutat az ε-nyíl elhagyására.

Mindkét ábrán kiemeltük az ε-nyilat. Az első részábrán azokat a nyilakat multiplikáltuk, amelyek az ε-nyíl kiinduló állapotába vezettek. A multiplikált nyilak a célállapotba mutatnak.

Világos, hogy minden valódi, nem ε-mozgást itt is végre tudunk hajtani.

Ezen túlmenően egyetlen mozgással tudjuk megoldani azoknak a mozgás-pároknak modellezését, ahol egy valódi mozgást egy ε-mozgás követ.

A második megoldásnál azokat a nyilakat multiplikáltuk, amelyek az ε-mozgás célállapotából indulnak ki. Minden ilyen nyílhoz tartozik egy olyan nyíl, amely az ε-mozgás induló állapotából ered. A valódi mozgások itt is megmaradnak, de egyetlen mozgással modellezzük azokat a mozgáspárokat is, amelyeknek első eleme az ε-mozgás.

Nyilvánvaló, hogy az eredeti és a módosított automata ugyanazt a nyelvet fogadja el. Ha az automatában több ε-nyíl van, akkor ezeket külön-külön ezzel a módszerrel kiemelhetjük az automatából.

A két lehetőség közötti választás általában rajtunk áll. Ha kedvünk úgy tartja azokat a mozgáspárokat modellezzük egyetlen mozgással, amelyeknek első eleme az ε-mozgás, de dönthetünk másképpen is. Általános esetben.

Ha azonban az ε-nyíl az automata kezdőállapotából indul ki, akkor természetesen csakis olyan modellezést választhatunk, ahol az első mozgás az ε-mozgás. Ugyanígy ha az ε-mozgás egy elfogadó állapotba vezet, akkor éppen ellenkezőleg azokat a párokat kell egyetlen valódi mozgással modelleznünk, ahol a második mozgás az ε-mozgás.

Ilyenkor tehát nem rajtunk, hanem az automatán áll a választás.

Most már úgyszólván minden esetet megvizsgáltunk. Egy eset azonban még hátra van. Mit tegyünk akkor, ha az ε-nyíl kezdőállapotból elfogadó állapotba vezet.

Sajnos ilyenkor előbb el kell érnünk, hogy a kezdőállapotba ne vezessen, és az elfogadó állapotból ne induljon ki nyíl. Erre már ismeretes a módszer, amely itt is, tehát ε-nyilakat is tartalmazó automatáknál is alkalmazható. Itt persze előfordulhat az a kellemetlen eset, amikor az átalakítás során mi hozunk létre új ε-nyilakat.

Feltételezve, hogy ezt a munkát elvégeztük, van egy automatánk, amelynek kezdőállapotából csak kiindulnak, elfogadó állapotába viszont csak befutnak nyilak. Ezen nyilak között van egy ε-nyíl, amely a kezdőállapotból az elfogadó állapotba vezet.

Vizsgáljuk meg, mikor kerülhet sor ennek a nyílnak felhasználására.

Minthogy a kezdőállapotba visszatérni nem lehet, egyetlen lehetőség, hogy evvel a nyíllal kezdjük a mozgássorozatot. Amint azonban megérkezünk az elfogadó állapotba, a sorozat befejeződik, hiszen az elfogadó állapotnak csak befutó nyilai vannak. Ez a mozgássorozat tehát csak egyetlen mozgásból áll, és azt dokumen-tálja, hogy az üres jelsorozat eleme a nyelvnek.

Ezt az ε-nyíl elvétele után úgy modellezhetjük, hogy a kezdőállapotot is elfogadó állapottá nyilvánítjuk.

Miután a kényes, a kezdőállapotot elfogadó állapottal összekötő ε nyilat kiküszöböltük, a megmaradt illetve az átalakítások során keletkezett ε nyilakat az ismert módon szüntethetjük meg.

Ezt a folyamatot szemlélteti a 2.26. ábra.

ε ε z

ε

w

x z

y x

w ε ε

x

w y

z w

y

z ε y

x

ε ε

y

z

z

y x

w x

y

z

2.26. ábra

Így bármilyen legyen is az ε-nyilak helyzete, mindig tudunk egy olyan véges automatát szerkeszteni, amely ugyanazt a nyelvet fogadja el, és nem tartalmaz ε-nyilat.

Ezzel igazoltuk azt az állításunkat, hogy az ε-mozgások megtiltása nem csökkenti az automata erejét.

In document Formális nyelvek (Pldal 71-79)