Környezetfüggetlen nyelvek Kiegészítő nyg z Algoritmuselmélet tárgyhoz ( ónyi Ivnyos Szó: Algoritmusok könyv mellé) Friedl Ktlin BM SZI friedl@cs.me.hu 2017. ugusztus 3. A reguláris nyelveket véges utomtákkl vgy reguláris kifejezésekkel dtuk meg. ermészetesen vnnk továi lehetőségek is. Most nyelveken levő szályszerűségek egy másmilyen megdásáról lesz szó, mi reguláris nyelveken túl is lklmzhtó. z formális nyelvtn vgy röviden nyelvtn. A formális nyelvtnok nem egészen olynok, mint például mgyr nyelvtn. Bár eredetileg természetes nyelvek szályink leírásár készültek, de könnyeen hsználhtók mesterséges nyelvek, például progrmozási nyelvek pontos megdásár, mint egy eszélt nyelv helyes mondtink tökéletes leírásár. 1. Környezetfüggetlen nyelvtn A formális nyelvtnok lényegéen átírási szályokt dnk meg, melyekkel egy kezdő szimólumól kiindulv szvkt tudunk előállítni. A formális nyelvtnoknk itt csk egy speciális, tlán leggykrn hsznált fjtájávl fogllkozunk, mi már önmgán is elég hhoz, hogy nem reguláris nyelvet is leírjunk vele. 1. Definíció. gy környezetfüggetlen nyelvtn (röviden CF nyelvtn) ltt egy olyn G = (V, Σ, S, P ) rendszert értünk, hol V egy véges, nem üres hlmz, változók (vgy nemterminálisok) hlmz, Σ z áécé, krkterek (vgy terminálisok) hlmz. Feltétel, hogy V Σ =. S V kezdő változó, 1
P egy véges hlmz, z ún. levezetési (vgy produkciós, illetve átírási) szályok hlmz. P elemei A α lkúk, hol A V egy változó, α (V Σ) egy változókól és Σ elemeiől álló tetszőleges, véges hosszú sorozt. 1. Péld. Legyen V = {A}, Σ = {, }, kezdő változó természetesen z A, levezetési szályok hlmz pedig P = {A A, A ε}. zzel meg is dtunk egy CF nyelvtnt. A nyelvtnok megdásánál sokszor nem írjuk ki z összes prmétert, csk levezetési szályokt soroljuk fel. H mást nem mondunk, kkor szályokn szereplő kisetűk Σ elemei, ngyetűk változók, z első szály l oldl kezdő változó. ováá zok szályok, melyeknek l oldlán ugynz áll, összevonhtók, függőleges vonlll válsztjuk el különöző jo oldlkt. en formán z előző nyelvtn így néz ki: A A ε Amikor egy szót krunk megkpni, kezdő szimólumól indulunk ki, és minden lépésen z egyik változót helyettesítjük egy hozzá trtozó szály jo oldlávl. A cél, hogy végül egy olyn soroztot kpjunk, mien már nincs változó. Formálisn: 2. Definíció. gy G = (V, Σ, S, P ) nyelvtnnál levezetés ltt egy olyn γ 0 γ 1 γ 2 γ n véges hosszú soroztot értünk (n 0), melyen γ 0 = S, továá γ i (V Σ), és mindegyik γ i+1 megkphtó γ i -ől egy levezetési szály lklmzásávl. z zt jelenti, hogy minden 0 i < n esetén γ i felírhtó γ i = δ 1 Aδ 2 lkn, hol δ 1, δ 2 (V Σ) és A V úgy, hogy γ i+1 = δ 1 αδ 2 hol A α egy P -hez trtozó levezetési szály. 2. Péld. Az előző nyelvtn esetén egy levezetés pl. z lái A A A A (Az utolsó lépésen keletkezett ε üres részszót nem tüntettük fel kpott szó közepén, hiszen ez itt nem efolyásolj, hogy mi is szó.) Az így levezetett szó z. Könnyű látni, hogy eől nyelvtnól pontosn zok Σ = {, } feletti szvk vezethetők le, melyek n n lkúk (n 0). 1. Megjegyzés. Vegyük észre, hogy példán szereplő nyelvtn egy nem reguláris nyelvet htároz meg! 2
A levezetések közül zok lesznek számunkr érdekesek, melyeken kezdő változóól indulv végül egy olyn krktersorozthoz jutunk, mien már nincsenek változók. 3. Definíció. A G = (V, Σ, S, P ) nyelvtn áltl generált L(G) nyelv zokól w Σ szvkól áll, melyekhez vlmilyen n 0 számr vn olyn S γ 1 γ 2 γ n levezetés, mien γ n = w 2. Megjegyzés. Vegyük észre, hogy h egy levezetés során eljutunk egy w Σ szóhoz, kkor levezetés tová már iztos nem folytthtó, mivel w nem trtlmz változót, ilyenkor már egyetlen szály sem lklmzhtó. 3. Péld. ekintsük z lái nyelvtnt! S S S Itt tehát z egyetlen változó z S, z áécé z {, }. A nyelvtnól levezethető pl. z szó: S S Az is látszik, hogy nyelvtn áltl generált nyelv {, } -ól z összes nem üres szót trtlmzz, zz L = {, } \ {ε}. z zért igz, mert egy tetszőleges, leglá 1 hosszú w {, } szónk elölről kezdve egymás után tudjuk generálni krktereit: míg nem z utolsó krkterről vn szó, ddig z vgy z első vgy második szállyl, z utolsó krkter pedig 3. vgy 4. szállyl állíthtó elő. 1. Feldt. Mely szvkól áll z lái nyelvtn áltl generált nyelv? S ε Megoldás: Jelölje L zt nyelvet, mi zokól nem üres szvkól áll, melyeken z első krkter megegyezik z utolsóvl. Látszik, hogy S-ől csk ilyen szvk vezethetők le, zz h L(G) jelöli generált nyelvet, kkor L(G) L. Megmuttjuk, hogy itt egyenlőség vn, zz hogy minden L-eli szó levezethető. hhez vegyük észre, hogy -ől minden és etűkől álló sorozt előállíthtó z előző példához hsonlón. Az S szályi lehetővé teszik, hogy szó első és utolsó krkterét generáljuk. H 1-nél hossz L-eli szót krunk, kkor ez két krkter között levő részszót -ől elő tudjuk állítni. 2. Feldt. Legyen Σ = {, } és L álljon zokól szvkól, melyeken z etűk szám megegyezik etűk számávl. Adjunk olyn G nyelvtnt, mire L(G) = L. Megoldás: gy lehetséges megoldás: S SS SS ε 3
Ahhoz, hogy ez vlón jó nyelvtn, először is vegyük észre, hogy minden eseten, mikor vlmelyik szályt lklmzzuk, ugynnnyi -t generálunk, mint hány -t ezért L(G) L. Azt kell még megmuttni, hogy minden w L szó levezethető nyelvtnól. zt w hossz szerinti indukcióvl látjuk e. Nyilván ez igz 0 hosszú w = ε szór. gy hosszú szó nincs z L nyelven. A kettő hosszú szvkr is könnyű látni, mert vgy z első vgy második szály egyszeri lklmzás után hrmdik szályt kétszer hsználv megkphtjuk w szót. együk fel, hogy L legfelje k hosszú szviról már tudjuk, hogy levezethetők és legyen w = k + 1. ö eset lehetséges: mennyien w = w, kkor w L és een z eseten z S SS kezdés után S első előfordulásáól, z indukciós feltevés szerint w levezethető. A második S etűre z S ε szályt lklmzv megkpjuk w szót. Hsonlón járhtunk el, mennyien w = w. H viszont w első és utolsó etűje megegyezik, és ez etű mondjuk, kkor vegyük w-nek egy legrövide nem üres kezdőszeletét, mien ugynnnyi vn mint. Ilyen iztos vn, hiszen teljes szón ugynnnyi vn mindkét etűől. Legyen ez x és w = xy. kkor válsztásunk mitt x L, miől y L is következik. Másrészt x, mivel -vl kezdődött, ezért -re végződik, zz x = z lkú, hol z L. gy ilyen w-re jó levezetést kpunk, h z S SS lépés után z első S-ől z-t, másodikól z y-t vezetjük le (mi z indukciós feltevés mitt lehetséges). Hsonlón járhtunk el kkor is, mikor w első etűje, csk ilyenkor levezetés z S SS szállyl indul. (Vlóján z első két esetre nincs is szükség. H szó -vl kezdődik, és x legrövide kezdőszelet, mien ugynnnyi vn mindkét etűől, kkor z mindig igz, hogy w = xy = zy. és z, y L, de z előfordulht, hogy y z üres szó, mi viszont levezetést nem zvrj.) Nézzünk egy kicsit onyolult nyelvtnt! 4. Péld. S (1-2) S (3-4) ε (5-7) (8-9) z is környezetfüggetlen nyelvtn, hol kezdő változó z. Az lái levezetésen, zért, hogy könnye legyen követni, z láhúzott rész jelöli következőként lklmzott szály l oldlát, nyíl feletti szám szály sorszámát. 1 1 2 S 8 S 9 S 8 9 S 8 S 3 5 7 9 ehát kpott szó L(G). 4
A fenti levezetés során tö válsztásunk is volt, hogy melyik változót melyik szály lpján helyettesítsük. 2. Levezetési f, egyértelműség gy levezetés sokszor jon áttekinthető h lépéseket egy fá rendezzük. 4. Definíció. Legyen G egy környezetfüggetlen nyelvtn és x egy szó. Az x levezetési fáj G-en egy gyökeres f, melyen gyökér kezdő változóvl, minden nem levél csúcs egy változóvl, minden levél Σ egy elemével vgy ε-nl vn címkézve. H egy A csúcs gyerekei lról jor olvsv B 1, B 2,..., B k, kkor nyelvtnnk vn A B 1 B 2... B k szály. (Itt B i Σ V {ε}.) A levelekeli krkterek lról jor olvsv éppen z x szót dják. A definícióól világos, hogy egy x L(G) szó tetszőleges levezetéséől lehet levezetési fát készíteni, és levezetési fáól is kiolvshtó leglá egy levezetés. Fontos zonn megjegyezni, hogy míg levezetés egyértelműen meghtározz fát, visszfelé ez nem igz, áltlán egy levezetési fáól ugynnnk szónk tö levezetése is kiolvshtó, hiszen például válszthtunk, milyen sorrenden lépjünk tová z egyes ágkon. 5. Definíció. gy x L(G) szó l-levezetése egy olyn levezetés, mikor minden lépésen γ i elejéhez legközelei változót helyettesítjük egy megfelelő nyelvtni szály lpján. rre már igz, hogy egy levezetési fáól egyetlen l-levezetés olvshtó ki. 5. Péld. Az előző példán leírt levezetéshez trtozó levezetési f. ől töféle levezetés is leolvshtó, l-levezetés szályi sorrenden: 1, 8, 1, 9, 2, 3, 5, 9, 7, 9, 8, 8. Jo oldlt egy ugynehhez szóhoz trtozó másik levezetési f láthtó. 5
S S ε ε 6. Definíció. gy w L(G) szó egyértelműen levezethető G nyelvtnól, h G-en egyetlen levezetési fáj vn. A G nyelvtn egyértelmű, h G-ől minden w L(G) szó egyértelműen levezethető. Az L nyelv egyértelmű, h létezik egyértelmű nyelvtn. zek szerint z előző példeli szó nem egyértelműen levezethető, hiszen két különöző levezetési fáj is vn. Így persze nyelvtn sem egyértelmű. 3. Megjegyzés. Az egyértelműen levezethetőség fenti definíciój ekvivlens zzl, hogy szó l-levezetése egyértelmű. Lássunk most egy fontos példát, z ritmetiki kifejezések nyelvét. Csk összedást és szorzást fogunk enne hsználni, de kiegészíthető továi műveletekkel is. Az egyszerű ritmetiki nyelvtn: + () (1) Itt z egyetlen változó, z áécé elemei pedig +,,, vlmint nyitó és csukó zárójel. z egy nem egyértelmű nyelvtn, hiszen például z + kifejezéshez két különöző levezetési f is trtozik, + + 6
4. Megjegyzés. H erre két fár nem mint levezetési fákr, hnem mint kifejezés kiértékelésének módját megdó fákr gondolunk, kkor látszik, hogy míg z első megfelel z ritmetiki kifejezések szokásos kiértékelésének (elő szorzást végezzük el, után z összedást) második,,rossz sorrenden végzi műveleteket. 1. étel. Az elő látott (1) egyszerű ritmetiki nyelvtn nem egyértelmű, de z áltl generált nyelv egy egyértelmű nyelv. Bizonyítás vázlt: Jelölje G z egyszerű ritmetiki nyelvtnt. Az elő már láttuk, hogy G nem egyértelmű. A nyelv egyértelműségéhez muttnunk kell egy másik G nyelvtnt, mi egyértelmű nyelvtnt és mire L(G ) = L(G). Legyen G következő: + F F F () Világos, hogy G nyelvtnnl levezethető ritmetiki kifejezések levezethetők z eredeti nyelvtnól is. Azt kell megmuttni, hogy h w L(G), kkor w L(G ) is teljesül, sőt G -eli levezetési fáj egyértelmű. zt w hossz szerinti indukcióvl mutthtjuk meg. H w = 1, kkor csk w = lehet, és ez megkphtó G -en z F levezetéssel, és könnyű látni, hogy másként nem. Hossz szvkr zt kell észrevenni, hogy h vnnk zárójelen kívüli + jelek, kkor először ezeket kell generálni (sorrenden visszfelé) z első szály segítségével, után zárójelen kívüli jeleket, mjd zárójeleken levő kifejezéseket. 5. Megjegyzés. Vegyük észre, hogy een módosított nyelvtnn h levezetési fát kiértékelési fánk tekintjük, kkor műveletek sorrendje szokásos lesz........................................................................... 7