Formální jazyky I
Editovat
Note
|
Chomského hierarchie formálních jazyků. Regulární jazyky, jejich reprezentace a převody mezi nimi. Varianty konečných automatů. Nedeterminismus a determinizace automatů. Uzávěrové vlastnosti regulárních jazyků. IB102/IB005 |
Formální jazyk je množina slov — posloupností znaků z konečné abecedy (taky množina), které vznikly aplikací daných pravidel.
- Gramatika
-
Čtveřice , kde
-
je neprázdná množina neterminálů,
-
je konečná množina terminálů (abeceda) taková, že ,
-
(),
-
je konečná množina pravidel,
-
je počáteční neterminál.
Terminály značíme malými písmeny, neterminály velkými. Pravidla zapisujeme .
-
Chomského hierarchie jazyků
Definovaná požadavky na tvar pravidel gramatik.
- Typ 0 (frázové jazyky)
-
Žádná omezení na pravidla. Pro každý jazyk typu 0 lze sestrojit Turingův stroj, který jej rozhoduje.
- Typ 1 (kontextové jazyky)
-
Pravidla mohou levý i pravý kontext ( a ): , který zachovávají. .
- Typ 2 (bezkontexové jazyky)
-
s výjimkou , pokud není na pravé straně žádného pravidla.
- Typ 3 (regulární jazyky)
-
a nebo ekvivaletně a . Výjimkou je , pokud není na pravé straně žádného pravidla.
Regulární jazyky
Lze je reprezentovat
-
regulární gramatikou,
-
deterministickým konečným automatem (DFA),
-
nedeterministickým konečným automatem (NFA),
-
nedeterministickým konečným automatem s -kroky (NFA),
-
regulárním přechodovým grafem (RTG),
-
regulárním výrazem (RE).
Lze převádět
Deterministický konečný automat (DFA)
Deterministický konečný automat je pětice , kde
-
je neprázdná konečná množina stavů,
-
je konečná vstupní abeceda,
-
je parciální přechodová funkce,
-
je počáteční stav,
-
je množina akceptujících stavů.
- Rozšířená přechodová funkce
-
-
pro každý stav .
-
, je-li i definováno, jinak.
-
- Akceptace
-
Slovo je akceptováno automatem , právě když .
- Zamítání
-
Slovo je zamítáno automatem , právě když .
- Přijímaní
-
Jazyk přijímaný automatem je .
- Ekvivalence
-
Automaty jsou ekvivalentní, pokud přijímají stejný jazyk.
- Minimální konečný automat
-
Má nejmenší počet stavů a totální přechodovou funkci.
- Převod na minimální konečný automat
-
-
Odstraníme nedosažitelné stavy.
-
Přidáme ,,peklo'' a svedeme do něj nedefinované přechody.
-
Rozdělíme stavy na dvě skupiny: koncové a nekoncové.
-
Do tabulky přechodů označíme, do které skupiny každý přechod vede.
-
Rozdělíme stavy do nových skupin. Ve stejné skupině budou ty stavy, u nichž se předchozí skupinové značení shoduje.
-
Bod 4 a 5 opakujeme, dokud lze vytvářet nové skupiny podle značení z předchozí iterace.
-
Výsledné skupiny tvoří nové stavy.
-
- Převod na kanonický tvar
-
U automatů v kanonickém tvaru můžeme snadno srovnávat, jestli jsou stejné.
-
Totálně uspořádej abecedu .
-
Projdi automat do šířky. Následníky vol v abecedním pořadí (podle uspořádání z 1).
-
Časové známky vrcholů jsou nová číslas stavů.
-
- Převod na regulární výraz
-
-
Přidej nový počáteční a koncový stav.
-
Odstraň zbytečné (nedosažitelné) uzly.
-
Uplať následující nahrazení:
-
za .
-
za .
-
a za .
-
-
Opakuj 3, dokud nemáš jen počáteční a koncový stav.
-
Nedeterministický konečný automat (NFA)
Nedeterministický konečný automat je pětice , kde
-
je neprázdná konečná množina stavů,
-
je konečná vstupní abeceda,
-
je totální přechodová funkce,
-
je počáteční stav,
-
je množina akceptujících stavů.
- Rozšířená přechodová funkce
-
-
,
-
.
-
- Převod na deterministický automat
-
-
Nový počáteční stav bude . Zkopíruj přechody z . .
-
Pro dosud nezpracované a každé , přidej nový stav . Zkopíruj přechody.
-
Dělej 2, dokud automat není deterministický.
DFA může být ve výsledku až exponenciálně větší.
-
- Převod na gramatiku
-
-
Pro každý přechod , kde není koncový stav, přidej pravidlo .
-
Pro každý přechod , kde je koncový stav, přidej pravidlo .
-
Pokud počáteční stav je zároveň koncový, přidej .
-
Regulární výrazy
Množiny regulárních výrazů nad abecedou je
Note
|
To, co je symbol regexu, je podtržené. |
-
a pro každé .
-
, pokud a jsou regulární výrazy.
-
nic jiného není regulární výraz.
Každý regex nad abecedou popisuje jazyk nad stejnou abecedou:
-
-
-
pro každé
-
, kde a jsou regexy
-
, kde a jsou regexy
-
, kde je regex
Regulární přechodový graf
Regulární přechodový graf je pětice , kde
-
je neprázdná konečná množina stavů,
-
je konečná vstupní abeceda,
-
je parciální přechodová funkce,
-
je počáteční stav,
-
je množina akceptujících stavů.
- Převod na NFA
-
-
Vytvoříme nový počáteční stav takový, že .
-
Opakovaně:
-
Ostraníme hrany ohodnocené .
-
Nahraď za a .
-
Nahraď za .
-
Nahraď za .
-
-
Pumping lemma pro regulární jazyky
Nechť je regulární jazyk. Pak existuje takové, že libovolné slovo , jehož délka je alespoň , lze psát ve tvaru , kde a pro každé .
Myhill-Nerodova věta
Nechť je jazyk nad , pak následující tvrzení jsou ekvivalentní:
-
je rozpozntatelný konečným automatem.
-
je sjednoceném některých tříd rozkladu určeného pravou kongruencí na s konečným indexem.
-
Relace má konečný index.
Uzávěrové vlastnosti
Operace | Formulka |
---|---|
Sjednocení |
|
Průnik |
|
Rozdíl |
|
Doplňek |
|
Zřetězení |
|
Iterace |
|
Pozitivní iterace |
|
Mocnění |
|
Revers |