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:
A bizonyítás ötlete
Adott két reguláris nyelv, L1, L2, és két automata, amely ezeket elfogadja:
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:
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:
é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:
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:
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