✖

Uzávěr regulárního jazyka

Máme regulární jazyk L. Dokážeme, že uzávěr jazyka L je opět regulární jazyk.

Co je to uzávěr jazyka

Uzávěr jazyka L značíme jako L∗. Uzávěr obsahuje všechna slova, která jde poskládat zřetězením konečného množství slov z jazyka L. Uzávěr můžeme definovat jako:

L∗={a1∘a2∘⋯∘an|ai∈L,n∈N0},

kde ∘ značí operaci zřetězení. Uzávěr obsahuje i prázdné slovo, tj. ϵ.

Formální postup

Budeme postupovat velmi podobně jako v případě zřetězení jazyků. Jenom místo toho, abychom propojovali dva různé automaty, propojíme jeden automat — z koncových stavů automatu tak povedeme epsilon přechody do počátečního stavu automatu. Nicméně uzávěr musí obsahovat i prázdné slovo. Jak to zařídit? Můžeme z počátečního stavu udělat koncový stav. Pak by takový automat přijal prázdné slovo, ale mohl by přijmout i nějaké další slovo. Proto místo toho vytvoříme nový počáteční stav a z tohoto nového počátečního stavu povedeme epsilon přechod do původního počátečního stavu.

Máme regulární jazyk L1 a automat, který tento jazyk přijímá:

A1=⟨Q1,Σ1,δ1,q0,F1⟩

Sestrojíme nedeterministický automat A = ⟨Q, Σ, δ, qs, F⟩, pro který platí:

  • Q = Q1 ∪ {qs}
  • Σ= Σ1
  • F = F1 ∪ {qs}

Přechodovou funkci δ definujeme takto:

δ(q,a)={δ1(q,a)pokudq∈Q1∧q∉F1δ1(q,a)pokudq∈F1∧a≠ϵδ1(q,a)∪{q0}pokudq∈F1∧a=ϵ{q0}pokudq=qs∧a=ϵ∅pokudq=qs∧a≠ϵ

Příklad

Mějme tento automat A1, který přijímá slova 00 nebo 11:

Uzávěr jazyka L(A1) je tak jazyk všech slov, která se skládají z dvojic 00 a 11, například 0000, 110011, 11110000 atp. Automat, který by tento uzávěr přijímal, bychom sestavili tak, že bychom vytvořili nový počáteční stav qs s epsilon přechodem do bývalého počátečního stavu q0 a přidali bychom epsilon přechody ze stavů q3 a q4 do stavu q0:

Můžeme ověřit, že tento automat opravdu přijímá slova 0000, 110011, 11110000, ale nepřijme třeba slovo 1010.

Zdroje

Kapitoly: Uzavřenost regulárních jazyků, Sjednocení, Průnik, Rozdíl, Doplněk, Zřetězení, Uzávěr