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

Diagram

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
  1. Odstraníme nedosažitelné stavy.

  2. Přidáme ,,peklo'' a svedeme do něj nedefinované přechody.

  3. Rozdělíme stavy na dvě skupiny: koncové a nekoncové.

  4. Do tabulky přechodů označíme, do které skupiny každý přechod vede.

  5. Rozdělíme stavy do nových skupin. Ve stejné skupině budou ty stavy, u nichž se předchozí skupinové značení shoduje.

  6. Bod 4 a 5 opakujeme, dokud lze vytvářet nové skupiny podle značení z předchozí iterace.

  7. 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é.

  1. Totálně uspořádej abecedu .

  2. Projdi automat do šířky. Následníky vol v abecedním pořadí (podle uspořádání z 1).

  3. Časové známky vrcholů jsou nová číslas stavů.

Převod na regulární výraz
  1. Přidej nový počáteční a koncový stav.

  2. Odstraň zbytečné (nedosažitelné) uzly.

  3. Uplať následující nahrazení:

    • za .

    • za .

    • a za .

  4. 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
  1. Nový počáteční stav bude . Zkopíruj přechody z . .

  2. Pro dosud nezpracované a každé , přidej nový stav . Zkopíruj přechody.

  3. 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
  1. Vytvoříme nový počáteční stav takový, že .

  2. 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