✖

Reguláris nyelvek összefűzése

Legyen adott két reguláris nyelv, L1, L2. Bebizonyítjuk, hogy az összefűzésük (konkatenációjuk), L = L1 ∘ L2 is reguláris nyelv.

Mi az a konkatenáció

A „010” és az „1111” szó összefűzésével a „0101111” szó keletkezik. Nyelvek összefűzésével új nyelv keletkezik, amelyet úgy szerkesztünk meg, hogy az egyik nyelv minden szavát összefűzzük a másik nyelv minden szavával. Két szó és két nyelv konkatenációját egy kis körrel jelöljük: ∘. Az L1 és L2 nyelv összefűzését ekkor így definiálhatjuk:

L1∘L2={a∘b|a∈L1,b∈L2}

A bizonyítás ötlete

Adott két reguláris nyelv, L1, L2, és két automata, amely ezeket elfogadja:

A1=⟨Q1,Σ1,δ1,q0,F1⟩A2=⟨Q2,Σ2,δ2,p0,F2⟩

Megszerkesztünk egy A = ⟨Q, Σ, δ, q, F⟩ nemdeterminisztikus automatát, amely „magában foglalja” az A1 és az A2 automatát is. Az alapötlet az, hogy a szót az A1 automatával kezdjük elfogadni, és amikor az A1 automata végállapotba jut, a szó hátralévő részét megpróbáljuk még elfogadtatni az A2 automatával. Ha ez az automata is elfogadja a szó egy részét, akkor az A automata elfogadja a szót.

Példa

Adott ez az A1 automata, amely elfogadja a csak nullákból álló nemüres szavakat, valamint azokat a szavakat, amelyek egy egyesből állnak, és utána csak nullák következnek (1, 10, 100, …):

továbbá adott ez az A2 automata, amely azokat a szavakat fogadja el, amelyek 01-re végződnek:

Az automatákat úgy kapcsoljuk össze, hogy az A1 automata összes végállapotából epszilon-átmenetet vezetünk az A2 automata kezdőállapotába, majd az A1 végállapotait közönséges állapotokká tesszük. Az egész új automata kezdőállapota az A1 automata kezdőállapota lesz:

Hogyan fog működni az automata? Az A1 automata működésének szimulálásával kezdünk. Ha átmegyünk a q1 vagy q2 egykori végállapotba, akkor tudjuk, hogy az A1 automata elfogadja ennek a szónak egy részét. Ahhoz, hogy az egész szó az L1 ∘ L2 nyelvhez tartozzon, a szó hátralévő részét még el kell fogadnia a második automatának, az A2-nek – ezért vezet az összes egykori végállapotból epszilon-átmenet az A2 automata eredeti kezdőállapotába.

Vegyük például a 0001 szót. Ez mindkét nyelv összefűzéséhez tartozik, mert a szó keletkezhet a 00 ∘ 01 szavak összefűzésével. De ugyanígy keletkezhet a 0 ∘ 001 szavak összefűzésével is. Az automatánkban mindkét eljárást le tudjuk szimulálni. Az automata haladhat ezen az úton:

q0→0q1→0q1→εp0→0p1→1p2

Ezen az úton az automata először „elfogadná” a szó 00 részét, majd a 01 részét. Vagy haladhat ezen az úton:

q0→0q1→εp0→0p0→0p1→1p2

és így az automata először „elfogadná” a szó 0 részét, majd a 001 részét. Mindkét esetben természetesen a p2 végállapotba jutunk.

Formális eljárás

Még egyszer: adott két reguláris nyelv, L1, L2, és két automata, amely ezeket a nyelveket elfogadja:

A1=⟨Q1,Σ1,δ1,q0,F1⟩A2=⟨Q2,Σ2,δ2,p0,F2⟩

Megszerkesztjük az A = ⟨Q, Σ, δ, q, F⟩ nemdeterminisztikus automatát, amelyre teljesül:

  • Q = Q1 ∪ Q2 (egyúttal feltesszük, hogy Q1 ∩ Q2 = ∅)
  • Σ= Σ1 ∪ Σ2
  • q = q0
  • F = F2

A δ átmeneti függvényt fokozatosan állítjuk össze:

δ(q,a)={δ1(q,a)haq∈Q1∧q∉F1δ1(q,a)haq∈F1∧a≠εδ1(q,a)∪{p0}haq∈F1∧a=εδ2(q,a)haq∈Q2

Források

Fejezetek: A reguláris nyelvek zártsága, Reguláris nyelvek uniója, Reguláris nyelvek metszete, Reguláris nyelvek különbsége, Reguláris nyelv komplementere, Reguláris nyelvek összefűzése, Reguláris nyelv lezárása