J. Hora, P. Jedlička ÚVODNÍ PŘÍKLDY Úvodní příklady Pod slovem automat si většina lidí představí automat na kávu. Jiným toto slovo může navodit představu nonstop herny a automatů, na kterých se točí tři kotouče s obrázky banánů, pomerančů a sedmiček. ni jedno z těchto zařízení není konečný automat ve smyslu definice, která bude uvedena níže, přesto má jejich fungování s nimi mnoho společného. Proto se nejdříve budeme věnovat jednoduchému automatu na kávu a nakreslíme si jeho diagram. Tento příklad i příklad následující jsou klasickými ukázkami toho, jak zhruba fungují konečné automaty, a proto se vyskytují v mnoha materiálech týkajících se této problematiky. Představme si jednoduchý automat na kávu z devadesátých let minulého století. Je schopen připravit pouze jeden druh kávy (nevalné chuti), který stojí pět korun. utomat přijímá mince v hodnotách, 2 a 5 korun a nevrací zpět. Základní úvahu, kterou musíme udělat, je, v jakých stavech se automat může nacházet. Když automat poprvé zapneme, bude nepochybně ve stavu s kreditem Kč. Představme si nejdříve, že postupně vhazujeme korunové mince. Po vhození první z nich se automat přesune do stavu s kreditem Kč. Stavy automatů budeme označovat kolečky, ve kterých bude případně uveden jejich název. Přechody mezi nimi budou znázorněny šipkami, u kterých je vyznačeno, jaký vstup tento přechod vyvolal. Stav s nulovým kreditem nazýváme iniciální (počáteční) a je označen šipkou přicházející odnikud. Právě popsaná část automatu na kávu je na obrázku. Kč Kč 2 2 Kč Obrázek : utomat na kávu začátek konstrukce. Po vhození dalších tří mincí se automat postupně přesouvá do stavů s kreditem 2, 3 a 4. Po páté korunové minci automat vydá kávu, případně, pokud zapomněl technik doplnit kelímky, ji uvidíme protéct do odpadové mřížky. utomat se vrátí do stavu s kreditem Kč. Vidíme, že popisovaný automat si vystačí s pěti stavy podle aktuálního kreditu. Pokud tedy tento automat naprogramujeme, potřebujeme, abychom mohli do jeho paměti RM uložit jednu z pěti hodnot nula až čtyři, která vyjadřuje aktuální kredit. Stačí tedy tři bity. Navíc můžeme v budoucnu zvýšit cenu kávy až na osm korun, aniž bychom museli upgradovat pamět. V případě, že vhazujeme dvoukoruny, zvyšuje se samozřejmě kredit o dvě. Předpokládáme, že automat je poctivý, a tak v případě čtyřkorunového kreditu a vhození dvoukoruny dostaneme kávu a automat přejde do stavu s kreditem jedna, nebot automat nevrací. Pokud v libovolném stavu vhodíme pětikorunu, dostaneme kávu a kredit se nezmění, čili automat zůstane
J. Hora, P. Jedlička ÚVODNÍ PŘÍKLDY 5, Kč 5, 2 Kč 5, Kč 2, 2 2 2, 2, 4 Kč 3 Kč 5, 5, Obrázek 2: utomat na kávu. v původním stavu. Celé schéma je na obrázku 2. Na obrázku 3 je schéma obvodu se schodišt ovým vypínačem. Označme zleva Obrázek 3: Schodišt ový vypínač. vypínače, respektive B. Tento systém se může nacházet ve čtyřech různých stavech, podle pozice jednotlivých vypínačů. Pojmenujme tyto stavy U U, U D, DU a DD, podle anglických slov up and down a pozice vypínačů na obrázku 3. Vstupem pro tento systém je posloupnost složená ze symbolů a B odpovídající stiskům jednotlivých vypínačů. Pokud jsou vypínače ve stavu U U a stiskneme například vypínač, přejde systém do stavu DU. Celé schéma je na obrázku 4. Stavy UU a DD jsou označeny dvojitým kolečkem znázorňujícím, že se jedná o stavy, kdy žárovka svítí. UU DU B B B B UD DD Obrázek 4: Schéma vypínačů. 2
J. Hora, P. Jedlička 2 DEFINICE PŘÍKLDY V předchozích dvou příkladech se objevily všechny aspekty, které tvoří konečný automat. Přesto ani jeden z nich není konečný automat a je třeba chápat tyto příklady pouze jako ilustrační. 2 Definice a příklady Ještě než budeme moci definovat konečný automat, uvedeme několik pojmů, které jsou pro tuto definici potřebné. beceda je jakákoli konečná množina symbolů(znaků). becedu budeme obvykle značit symbolem Σ (velké řecké písmeno Sigma). Příklademabecedy může být binárníabeceda Σ = {,},kterou na nejnižší úrovni používají veškerá elektronická zařízení, abecedou pro automat na kávu byla množina Σ 2 = {,2,5}. Při použití automatu pro vyhledávání v textu může být abecedou například množina Σ 3 = SCII, tedy množina znaků, ze kterých se skládá prohledávaný text. Vstupem pro automat ale obvykle nebývá jen jeden znak, ale posloupnost více znaků: Slovo nad abecedou Σ je každá konečná posloupnost znaků této abecedy. Délkou slova w rozumíme počet jeho znaků a značíme ji w. Délka slova w = abbab nad abecedou {a,b} je rovna pěti, a tak w = 5. Značení. Prázdné slovo (čili slovo neobsahující žádný znak) značíme ε (čti epsilon), a platí ε =. Značení. Množinu všech slov nad abecedou Σ značíme Σ. Pokud je abeceda neprázdná, což je samozřejmě rozumný předpoklad, je Σ nekonečná množina. Jazyk je jakákoli podmnožina množiny Σ. Nyní již můžeme definovat konečný automat a další související pojmy. Tyto definice budou vysvětleny na příkladu, který po nich následuje. Konečný automat (dále jen automat) je uspořádaná pětice (Q,Σ,δ,q,F), kde Q je konečná množina stavů, Σ je konečná vstupní abeceda, δ : Q Σ Q je přechodová funkce, q Q je iniciální stav a F Q je množina přijímajících stavů. Poznámka. Předchozí definice je definicí tvz. konečného deterministického automatu, jelikož se ale v tomto materiálu nebudeme nedeterministickými automaty zabývat, není 3
J. Hora, P. Jedlička 2 DEFINICE PŘÍKLDY tato vlastnost v definici uvedena. Výpočet automatu nad slovem w = x...x n je posloupnost stavů r,...,r n tak, že r = q je iniciální stav a δ(r i,x i ) = r i, pro i =,...n. Prvním stavem každého výpočtu je vždy iniciální stav, což je možné chápat tak, že se po zpracování předchozího slova automat vždy uvede do původního nastavení. Tato situace neodpovídá automatu na kávu, nebot po vydání nápoje může být kredit i nenulový, a je tedy nutné chápat posloupnost všech vhozených mincí jako jeden dlouhý vstup. utomat dané slovo přijímá, pokud výpočet nad tímto slovem končí ve stavu náležejícím do F. Zjistěte, jaký jazyk přijímá automat na obrázku 5. q q Obrázek 5: Lichý počet jedniček. Množinastavů daného automatu je dvouprvkováq = {q,q }. Vstupní abeceda je také dvouprvková Σ = {,} a z každého stavu tedy vedou právě dvě šipky, jedna označená nulou, jedna jedničkou. Množina přijímajících stavů je jednoprvková F = {q }. Přechodová funkce δ je ve schematu znázorněna zmíněnými šipkami. Například ze stavu q vede šipka označená jedničkou do stavu q, což vyjadřujefakt, žev případě,kdy se automatnacházívestavu q a přečtesymbol, přesune se do stavu q. V matematickém zápisu vyjádřeno δ(q,) = q. Neobrázkový popis automatu, který obsahuje všechny informace, se obvykle uvádí ve formě tabulky, viz. Tabulka. Řádky jsou označeny stavy, sloupce q q q q q q Tabulka : Lichý počet jedniček. znaky vstupní abecedy. Na příslušném políčku pak je stav, do kterého automat přejde z daného stavu při přijetí daného znaku. Tabulka tedy obsahuje všechny hodnoty přechodovéfunkce δ. Šipkou dovnitř je označen iniciální stav a šipkami ven stavy přijímací. Uvažujme například slovo w =. Výpočet automatu nad tímto slovem začíná ve stavu q. Při přečtení prvního znaku se přesune do stavu q. Pak 4
J. Hora, P. Jedlička 2 DEFINICE PŘÍKLDY přečte nulu a zůstane ve stavu q atd. Celý výpočet nad slovem w je tedy q q q q q q q, a tedy automat slovo w přijímá, nebot poslední stav výpočtu je přijímající. Z diagramu automatu vidíme, že přijetí symbolu nemění stav. utomat přijímá například slova, či a zjišt ujeme, že automat přijímá právě ta slova, která obsahují lichý počet jedniček. Navrhněte konečný automat nad abecedou Σ = {, } přijímající právě ta slova, která obsahují alespoň dva znaky. Díky tomu, že přijetí slova nezávisí na tom, z jakých znaků se skládá, povedou z každéhostavu obě šipky do stejného stavu a můžeme je tedy kreslit jako jednu s dvojitým popiskem. Iniciální stav q je nepřijímající.po přečtení prvního znaku se automat přesune do stavu q, také nepřijímajícího. Další znak již přesune automat do přijímajícího stavu q 2 a další stavy již nejsou potřeba, nebot slovo bude už vždy přijato, at obsahuje jakékoli další znaky. utomat je na obrázku 6.,, q q q 2, Obrázek 6: Slova obsahující alespoň dva znaky. Navrhněte konečný automat nad abecedou Σ = {, } přijímající právě slova, která mají počet jedniček dělitelný třemi. Jelikož vlastnost, která nás u daného slova zajímá je dělitelnost počtu jedniček v něm obsažených, musíme navrhnout automat tak, aby si pamatoval, jaký je zbytek po dělení počtu jedniček číslem tři. Tento zbytek může nabývat hodnot, nebo 2. Čili budou stačit tři stavy. Iniciální stav q musí být přijímající, protože počet jedniček v prázdném slově je roven nule, což je číslo dělitelné třemi. Při čtení jedniček se bude automat cyklicky přesouvat po těchto třech stavech. Nuly ve slově obsažené nemění fakt, jestli je slovo přijímáno či nikoli, a proto automat při přečtení symbolu nemění svůj stav, dané šipky jsou smyčky. utomat je na obrázku 7. q q q 2 Obrázek 7: Počet jedniček je dělitelný třemi. 5
J. Hora, P. Jedlička 2 DEFINICE PŘÍKLDY Navrhněte konečný automat nad abecedou Σ = {, } přijímající právě slova, která mají první a poslední znak stejný, a to včetně slov jednoznakových. utomat musí být schopen si nějakým způsobem zapamatovat, jaký byl první znak a po přečtení každého dalšího znaku se přesunout do přijímajícího či nepřijímajícího stavu podle toho, zda se shoduje se znakem prvním. Je proto nutné, aby se automat v případě, kdy první znak je nula, přesunul do množiny stavů, do které se nemůže dostat, pokud byl první znak jednička, a naopak. Iniciální stav q považujeme za nepřijímající, i když je lehce nejasné, zda se první znak prázdného slova shoduje s posledním. Po přijetí prvního znaku, at už se jedná o nulu či jedničku, se automat přesune do přijímajícího stavu (bud q nebo q 3 ). V případě, že byl první znak nula, bude se další výpočet nad daným slovem odehrávat jen ve stavech q a q 2. Do stavu q se automat přesune vždy, když byl poslední přečtený znak nula, a do stavu q 2, když se jednalo o jedničku. Pokud byla prvním znakem jednička, je situace analogická. utomat je na obrázku 8. q q 2 q q 3 q 4 Obrázek 8: První a poslední znak stejný. Navrhněte konečný automat nad abecedou Σ = {, B} přijímající právě slova, která začínají na BB, Posloupnost znaků BB hraje v tomto automatu klíčovou roli, proto je dobré začít návrh automatu (a i dalších dvou) posloupností pěti stavů q až q 4 spolu se čtyřmi základními šipkami, viz. obrázek 9. Stav q 4 je přijímající. V případě, q B q q B 2 q 3 q 4 Obrázek 9: Začátek návrhu automatu. že jako první přijde znak, dané slovo nesplňuje podmínku zadání a nemůže už být nikdy přijato, proto je nutný ještě další stav q 5, ze kterého se automat už nikdy nedostane. Ze stejného důvodu povedou do stavu q 5 zbylé šipky ze stavů q 2, q 3, q 4. Pokud slovo začínalo na sekvenci BB, nezáleží na dalších znacích 6
J. Hora, P. Jedlička 2 DEFINICE PŘÍKLDY a slovo musí být automatem přijato, proto obě šipky ze stavu q 5 jsou smyčky. Celý automat je na obrázku. q B q q B 2 q 3 q 4,B B B q 5,B Obrázek : Slova začínající na BB. Navrhněte konečný automat nad abecedou Σ = {, B} přijímající právě slova, která obsahují BB, Začneme stejnou kostrou automatu jako v předchozím příkladu. Stav q 4 je stav, do kterého se výpočet automatu dostane ve chvíli, kdy přečte ze vstupního slova sekvenci BB. Takové slovo už musí být každopádně přijato, a proto automat už zůstává v tomto stavu a čeká na konec vstupu. Pokud se automat nachází ve stavu q a přijde znak B, zůstává automat v tomto stavu, nebot z hledané posloupnosti nalezl právě tento znak. V případě, že dva poslední znaky byly B (automat je ve stavu q 2 ) a přečten znak, musí se vrátit do iniciálního stavu, což znamená, že z hledané sekvence aktuálně nenašel žádnou část. Podobně bychom mohli chápat (a případně i označit) stav q 3 jako stav, ve kterém se automat nachází, pokud poslední tři znaky byly BB. Následující znak B musí automat přesunout do stavu q, viz. obrázek. B B,B q B q q 2 q 3 q 4 B Obrázek : Slova obsahující BB. Navrhněte konečný automat nad abecedou Σ = {, B} přijímající právě slova, která končí na BB. Návrh tohoto automatu je velice podobný předchozímu, nebot automat ve vstupním slově vyhledává sekvenci BB. Proto budou všechny šipky ze stavů q, q, q 2 a q 3 stejné jako v automatu předešlém. Předpokládejme, že automat přečetl část vstupního slova, která končila na sekvenci BB. Pak se nachází ve 7
J. Hora, P. Jedlička 2 DEFINICE PŘÍKLDY B B q B q q 2 q 3 B B q 4 Obrázek 2: Slova končící na BB. stavu q 4 a pokud vstupní slovo neobsahuje další znaky, je přijato. Tento automat ale v případě,kdy po sekvenci BB přijde dalšíznak, řekněme, nemůže zůstat v přijímacím stavu, nebot přečtená část vstupního slova již nekončí na BB. V tomto případě se automat přesune do stavu q, jelikož aktuální vstup nekončíani na B, ani na B, ani na BB. Jiná je situace, kdy po znacíchbb přijde B. Pak jsou poslední tři znaky BB a automat se přesouvá do stavu q 3 (pokud by následovalo další, musí se automat přesunout do přijímajícího stavu q 4 ). Podobně jako v předchozím příkladu je možné pro účely návrhu automatu označit jednotlivé stavy příslušnou čístí hledaného slova, viz. obrázek 2. Zjistěte, jaký jazyk přijímá automat E B B C E C D E D E E E E E Nejdříve je nutné automat nakreslit, viz. obrázek 3. Jako první si všimneme, B C D, E, Obrázek 3: utomat přijímající jediné slovo. že jakmile se automat dostane do stavu E, už v něm zůstane a nikdy dané slovo nepřijme. Do jediného přijímajícího stavu D se automat dostane pouze v případě, kdy první tři znaky budou. Jiné slovo ovšem automat nepřijímá, nebot přijetí jakéhokoli dalšího znaku přesune automat do stavu E. 8
J. Hora, P. Jedlička 3 REGULÁRNÍ JZYKY OPERCE S NIMI Zjistěte, jaký jazyk přijímá automat a b 2 3 2 3 3 3 3 utomat je na obrázku 4. Stav 3 opět hraje roli a a 2 odpadkového koše, čili b b 3 a,b Obrázek 4: utomat přijímající lichý počet a. nepřijímajícího stavu, ze kterého se automat již nemůže dostat. Přijetí znaku b ve stavech i 2 přesune automat právě do stavu 3. Prázdné slovo automat nepříjímá, může tedy přijímat jen slova složená ze znaků a, ne však všechna. Snadno nahlédneme, že přijímá slova a, aaa nebo aaaaa a vidíme, že jazyk automatu jsou právě slova složená z lichého počtu áček. 3 Regulární jazyky a operace s nimi Jazyk automatu je množina slov, které automat přijímá. Značíme ji L(). Jazyk L se nazývá regulární, pokud existuje konečný automat, který ho přijímá, tedy L = L(). Poslední definice naznačuje, že ne každý jazyk je regulární. Příklad takovéhoto jazyka uvidíme později. V následujících příkladech a větách ukážeme, že průnik i sjednocení dvou regulárních jazyků je opět regulární jazyk, a také že doplňek regulárního jazyka je regulární. Navrhněte konečný automat, který přijímá právě slova neobsahující sekvenci. Zadání tohoto příkladu se od předchozích liší tím, že podmínka je zadána negativně. V takových případech je mnohdy těžké navrhnout daný automat přímo a navrhuje se nejdříve automat bez negace v zadání. utomat přijímající slova, která obsahují sekvenci, je na obrázku 5. Nyní se již stačí zamyslet nad tím, v jakém stavu tohoto automatu skončí výpočet v případě, že vstupní slovo 9
J. Hora, P. Jedlička 3 REGULÁRNÍ JZYKY OPERCE S NIMI, q q q 2 q 3 Obrázek 5: utomat přijímající slova obsahující. sekvenci neobsahuje. Je zřejmé, že to bude jeden ze stavů q, q nebo q 2. Pokud tedy zaměníme přijímající a nepřijímající stavy, dostaneme automat, který přijímá právě slova nepřijímaná původním automatem. Řešení je na obrázku 6., q q q 2 q 3 Obrázek 6: utomat přijímající slova neobsahující. Princip použitý v předchozím příkladu lze zobecnit. Jelikož negace vstupní podmínky popisuje doplněk původního jazyka, dostáváme následující větu: Věta. Doplněk L = Σ \L regulárního jazyka L je regulární jazyk. Navrhněte konečný automat přijímající právě slova, která končí na a zároveň obsahují sekvenci. Zadáníobsahujedvěpodmínkyspojenélogickouspojkou asoučasně.utomat je samozřejmě možné navrhnout přímo, což v tomto konkrétním případě není obtížné(stačí pět stavů), cílem tohoto příkladu je však ukázat řešení, ve kterém stačí navrhnout automaty pro jednotlivé podmínky a následně je vhodně spojit do automatu jediného. utomat přijímající slova končící na je na obrázku 7 vlevo a automat 2 přijímajícíslova, která obsahují sekvenci na obrázku 7 vpravo. Výsledný automat bude simulovat práci obou těchto automatů, B, I II III IV Obrázek 7: Dva automaty přijímající na konci a obsahující proto jeho stavy budou kombinace stavů, B a I,II,III,IV, čili jich bude celkově osm. Iniciálním stavem bude stav I jakožto kombinace původních iniciálních stavů. Přechodovou funkci odvodíme z přechodových funkcí malých automatů.
J. Hora, P. Jedlička 3 REGULÁRNÍ JZYKY OPERCE S NIMI Pokud se automat nachází ve stavu I a na vstupu přečte symbol, přesune se do stavu BII, nebot automat by se ze stavu přesunul do B a automat 2 ze stavu I do stavu II. V případě, že ve stavu I přijde, automat zůstane ve stavu I, protože ani jeden z z původních automatů nemění v této situaci svůj stav. Tímto způsobem lze definovat přechodovou funkci automatu pro všechny jeho stavy. Zbývá určit, které stavy budou přijímající. Jelikož mají být splněny obě vstupní podmínky zároveň, přijímající stav bude pouze jeden, a to BIV. Celý automat je na obrázku 8. Právě popsaný součin automatů je také možné provést pomocí tabulek, jak je vidět v tabulce 2. I II III IV BI BII BIII BIV Obrázek 8: utomat přijímající průnik jazyků B B B 2 I I II II I III III IV III IV IV IV 2 I I BII II I BIII III IV BIII IV IV BIV BI I BII BII I BIII BIII IV BIII BIV IV BIV Tabulka 2: Součin automatů Řádky výsledného automatu simulují automat 2 a sloupce automat. Nevýhodou této konstrukce je, že výsledný automat má mnohdy více stavů, než je pro daný jazyk nutné. Tento nedostatek je možné řešit jeho následnou minimalizací, která bude uvedena níže. Uvedený postup je obecný a výsledný automat přijímá slova, která náleží jak do jakyku L( ) tak do jazyku L( 2 ), čili L() = L( ) L( 2 ). Tuto konstrukci lze navíc použít vícekrát, a tak dostáváme: Věta. Průnik dvou (konečně mnoha) regulárních jazyků je regulární jazyk. Navrhněte konečný automat přijímající právě slova, která končí na nebo obsahují sekvenci.
J. Hora, P. Jedlička 3 REGULÁRNÍ JZYKY OPERCE S NIMI Zadání je stejné jako v předchozím příkladu, jen jsou podmínky spojeny spojkou nebo.takovéautomatyjeobvykleobtížnějšínavrhnoutpřímo.nadruhou stranu lze použít stejnou konstrukci jako v předchozím příkladu a sestrojit automat, který simuluje práciobou automatů a 2. Jediný rozdílbude v množině přijímajících stavů. Tentokrát stačí, aby bylo vstupní slovo přijato jedním z automatů. by bylo slovo přijato automatem, musí výpočet skončit ve stavu B, a tak budou přijímající všechny stavy BI, BII, BIII, BIV. Podobně pro automat 2 dostáváme přijímající stavy IV a BIV. Celkově má tedy automat pět přijímajících stavů, viz. obr. 9. I II III IV BI BII BIII BIV Obrázek 9: utomat přijímající sjednocení jazyků Logická spojka nebo reprezentuje v řeči množin sjednocení, máme L() = L( ) L( 2 ). Věta. Sjednocení dvou (konečně mnoha) regulárních jazyků je regulární jazyk. Jazyk obsahující právě jedno slovo je vždy regulární, příslušný automat je možné sestrojit podobně jako na obrázku 3. V kombinaci s předchozí větou dostáváme, že každý konečný jazyk je regulární. Následující příklad ukazuje, že existují i neregulární jazyky. Dokažte, že neexistuje konečný automat, který přijímá právě slova {ε,ab,aabb,aaabbb,...} = {a i b i,i N}. Předpokládejme sporem, že takový automat existuje a označme počet jeho stavů n. Uvažme slovo w = a n b n. t q q...q n q n+...q 2n je výpočet předpokládaného automatu nad slovem w. Jelikož má automat n stavů, musí již během zpracovávání první (a-čkové) části slova w dojít k situaci, kdy se výpočet dostane do stavu, ve kterém se již nacházel, čili existují stavy q i = q j pro i j, i,j n. Jinými slovy se výpočet zacyklil. Délka tohoto cyklu je j i. Z výpočtu nad slovem w ovšem vyplývá, že pokud automatu předložíme slovo w = a n (j i) b n, které vznikne ze slova w vyříznutím zmíněného cyklu, bude výpočet nad tímto slovem q q...q i q j+...q n q n+...q 2n, a tedy automat přijme i slovow, cožje spor, nebot toto slovoneobsahuje stejně a-čekab-ček. rgument pro neexistenci automatu pro daný jazyk použitý v předchozím 2
J. Hora, P. Jedlička 4 MINIMLIZCE UTOMTŮ příkladu se nazývá pumping lemma a lze ho použít i v pro jiné jazyky. Jeho princip je založen na faktu, že jediná možnost, jak si může automat něco pamatovat, je pomocí stavů, ve kterých se nachází. Pokud ovšem automatu předložíme dostatečně dlouhé slovo, jeho pamět (počet stavů) nestačí na to, aby si zapamatoval, kolik a-ček tvořilo první část vstupního slova, a nemůže tak tento počet porovnat s počtem následných b-ček. 4 Minimalizace automatů Při návrhu automatu někdy dochází k tomu, že má výsledný automat více stavů, než je nutné. Například při použití součinové konstrukce je to běžné, viz. obr. 8. V této kapitole si ukážeme, jak minimalizovat daný (zkonstruovaný) automat minimalizovat, čili nalézt automat s minimálním počtem stavů přijímající stejný jazyk. Vlastní proces minimalizace má dvě fáze. První z nich je odstranění zbytečných stavů. Zjistěte, jaký jazyk přijímá automat B D B D B C C B D B D E B D utomat je na obrázku 2. Z něj je vidět, že po přečtení prvního znaku bude B C D Obrázek 2: První a poslední znak stejný. automat vždy v jednom ze stavů B nebo D. Jelikož přijímající stavy jsou C a E, do kterých se výpočet nad žádným slovem nedostane, a stav, sestává jazyk z jediného slova, toho prázdného. Vidíme, že odstraněním stavů C a E dostaneme menší automat se stejnou funkčností. Pozor, není možné odstranit z automatu libovolnou množinu stavů. Stav q se nazývá dosažitelný, pokud existuje slovo w takové, že výpočet nad tímto slovem končí ve stavu q. E 3
J. Hora, P. Jedlička 4 MINIMLIZCE UTOMTŮ Konečný automat se nazývá dosažitelný, pokud jsou dosažitelné všechny jeho stavy. Nalezněte dosažitelnou část automatu a následně určete, jaký jazyk daný automat přijímá. a b 5 5 2 2 7 3 4 6 4 6 5 3 6 5 4 7 8 8 2 5 Iniciální stav je vždy dosažitelný. Nalezené dosažitelné stavy budeme označovat v posledním sloupci tabulky. Ze iniciálního stavu může automat přejít pouze do stavu 5. Ten je tedy také dosažitelný. Ze stavu 5 může výpočet pokračovat do stavu nebo 3, o stavu už víme, že je dosažitelný, označíme tedy jen stav 3. Tento postup, čili označení jako dosažitelných všech stavů, kterými může výpočet pokračovat z již označených stavů, opakujeme, dokud se množina dosažitelných stavů zvětšuje. Celý postup pro tento automat je v tabulkách 3. a b D 5 5 D 2 2 7 3 4 6 4 6 5 3 6 5 4 7 8 8 2 5 a b D 5 5 D 2 2 7 3 4 6 4 6 5 3 D 6 5 4 7 8 8 2 5 a b D 5 5 D 2 2 7 3 4 6 D 4 6 5 3 D 6 5 4 7 8 8 2 5 a b D 5 5 D 2 2 7 3 4 6 D 4 6 D 5 3 D 6 5 4 D 7 8 8 2 5 Tabulka 3: Hledání dosažitelných stavů Obecný zápis algoritmu je následující. Bud D = {q } množina obsahující iniciální stav. Množinu D i, i zkonstruujeme z množiny D i : D i = D i {δ(q,x),q D i,x Σ}. Množina dosažitelných stavů automatu je taková množina D k, pro kterou platí D k = D k+. Stačí nalézt nejmenší takové k. Druhá částminimalizace řešísituaci, kdy majíněkteréstavyautomatu stejnou funkci ve smyslu výpočtu. Příklad takových stavů je na obrázku 4. Toto 4
J. Hora, P. Jedlička 4 MINIMLIZCE UTOMTŮ čtyřstavové zařízení lze nahradit dvoustavovým (přestože jsou všechny jeho stavy dosažitelné), viz. obr. 2, nebot dvojice stavů UU, DD a UD, DU lze UD DU,B,B UU DD Obrázek 2: Schéma vypínačů zjednodušené. sloučit aniž by se změnila jeho funkce. Postup si ukážeme na příkladu šestistavového automatu. Nalezněte minimální automat, který přijímá stejný jazyk jako automat. a b 3 2 3 3 6 5 4 5 5 2 4 6 6 2 utomat je dosažitelný, nebot D = {}, D = {,3}, D 2 = {,3,5,6}, D 3 = {,2,3,4,5,6}. V první fázi rozdělíme stavy automatu na dvě množiny, a to množinu přijímajících stavů P, a množinu nepřijímajících stavů N. Myšlenkou tohoto algoritmu je snaha sloučit stavy, které se vzhledem k přijetí či nepřijetí jakéhokoli slova chovají stejně. Dva stavy, které nepatří do stejné množiny (P a N) není možné sloučit do jednoho stavu, jelikož by výsledný stav musel být zároveň přijímající i nepřijímající. Pro přehlednost změníme v tabulce pořadí řádků tak, aby byly stavy těchto skupin u sebe, viz. tabulka 4. Nyní napíšeme a b 3 2 3 4 5 5 2 4 3 6 5 6 6 2 Tabulka 4: Tabulka automatu se změněným pořadím stavů tabulku automatu, ale místo konkrétních stavů ji vyplníme skupinou (P nebo N), do které stav v příslušném políčku patří. Tato tabulka (č. 5 vlevo) ukazuje, zda je možné zadaný automat zmenšit na automat dvoustavový. Jelikož skupina N obsahuje dva různé typy řádků (NP a NN), je nutné stavy odpovídající těmto řádků rozdělit do dvou skupin. Řádky skupiny P jsou stejné a 5
J. Hora, P. Jedlička 4 MINIMLIZCE UTOMTŮ proto ji není nutné v této chvíli dělit. Vidíme, že výsledný minimální automat musí obsahovat alespoň tři stavy odpovídající skupinám původních stavů {, 2}, {4,5} a {3,6}. Pojmenujme tyto skupiny postupně α, β, γ a napišme opět tabulku automatu vyplněnou těmito skupinami, viz. tabulka 5 uprostřed. Ve skupině γ jsou dva různé řádky a musíme ji tedy dále rozdělit na dvě podskupiny. Skupiny α a β můžeme ponechat. bychom zabránili nejasnostem ve značení skupin v jednotlivých fázích minimalizace, označme nové skupiny a b N P 2 N P N 4 N N 5 N N 3 P P N 6 P N a b α α γ 2 α γ 4 α β β 5 α β 3 γ β γ 6 γ α a b I III I 2 I III 4 I II II 5 I II 3 III IV II 6 IV IV I Tabulka 5: Tabulka minimalizace automatu římskými číslicemi, viz. tabulka 5 vpravo. Ta je opět místo konkrétních stavů vyplněna příslušnými (římskými) skupinami. Díky tomu, že jsou řádky v jednotlivých skupinách již stejné, algoritmus končí. Poslední tabulka je tabulkou minimálního automatu, který přijímá stejný jazyk jako automat s tím, že obsahuje některé řádky víckrát. Výslednou tabulku dostaneme vynecháním zdvojených řádků. Tu i s obrázkem máme na obrázku 22. a b I I III II I II III IV II IV IV I a b a I a II b III a IV b b Obrázek 22: Minimalizovaný automat. Poznamenejme, že postup uvedený v předchozím příkladu se opakuje, dokud některá skupina obsahuje různé řádky, a skupiny se pouze dělí, nikdy se neslučují, i kdyby byly jejich řádky shodné. Počet kroků tohoto algoritmu nelze dobře předem odhadnout. Pokud byl původní automat již minimální možný pro daný jazyk, budou se skupin dělit, dokud nebude každá obsahovat pouze jeden stav a výsledný automat bude stejný jako automat zadaný, pouze budou přejmenované stavy. Výsledný automat se nazývá maximální faktorizace původního automatu. Uved me její přesnou definici: Bud = (Q,Σ,δ,q,F) konečnýautomat.stavyq aq 2 senazývajíekvivalentní 6
J. Hora, P. Jedlička 4 MINIMLIZCE UTOMTŮ (značíme q q 2 ), pokud automaty (Q,Σ,δ,q,F) a (Q,Σ,δ,q 2,F), přijímají stejný jazyk. utomat / = (Q/,Σ,δ/,[q ],F/ ) se nazývá maximální faktorizace automatu. Následující věta shrnuje uvedený postup minimalizace konečného automatu: Věta. Maximální faktorizace automatu přijímá stejný jazyk jako automat. Pokud byl automat dosažitelný, je tato maximální faktorizace minimálním automatem (vzhledem k počtu stavů) přijímajícím jazyk L(). bychom mohli vyslovit závěrečné (a nejdůležitější) věty teorie konečných automatů, uvedeme ještě dvě definice, které zjednoduší jejich znění. Dva automaty se nazývají ekvivalentní, pokud přijímají stejný jazyk. utomat se nazývá redukovaný, pokud je dosažitelný a jeho maximální faktorizace má stejný počet stavů jako automat původní. Věta. Bud te a 2 dva redukovanéautomaty přijímajícístejný jazyk. Pak jsou tyto automaty stejné až na přejmenování stavů. Věta. Dva automaty jsou ekvivalentní (přijímají stejný jazyk) právě tehdy, když maximální faktorizace dosažitelných částí těchto automatů jsou shodné až na přejmenování stavů. Uvedené věty říkají, že pro daný jazyk existuje právě jeden minimální automat, který jej příjímá (až na názvy stavů). Díky tomu můžeme zjistit, zda dva automaty přijímají stejný jazyk tak, že provedeme jejich minimalizaci a porovnáme výsledné maximální faktorizace. 7