✖

Concatenarea limbajelor regulate

Fie două limbaje regulate L1, L2. Vom demonstra că concatenarea lor L = L1 ∘ L2 este, de asemenea, un limbaj regulat.

Ce este concatenarea

Prin concatenarea cuvintelor „010” și „1111” obținem cuvântul „0101111”. Concatenarea limbajelor creează deci un limbaj nou, pe care îl construim concatenând fiecare cuvânt dintr-un limbaj cu fiecare cuvânt din celălalt limbaj. Concatenarea a două cuvinte și a două limbaje o vom nota cu un cerculeț: ∘. Putem defini atunci concatenarea limbajelor L1 și L2 astfel:

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

Ideea demonstrației

Avem două limbaje regulate L1, L2 și două automate care acceptă aceste limbaje:

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

Construim un automat nedeterminist A = ⟨Q, Σ, δ, q, F⟩ care va „conține în sine” ambele automate A1 și A2. Ideea de bază este că începem să acceptăm cuvântul cu automatul A1 și, când automatul A1 ajunge într-o stare finală, încercăm să acceptăm restul cuvântului cu automatul A2. Dacă și acest automat acceptă partea respectivă a cuvântului, atunci automatul A acceptă cuvântul.

Exemplu

Fie automatul A1, care acceptă cuvintele nevide formate numai din zerouri și cuvintele formate dintr-o unitate urmată numai de zerouri (1, 10, 100, …):

și automatul A2, care acceptă cuvintele ce se termină cu 01:

Unim automatele astfel: din toate stările finale ale automatului A1 adăugăm ε-tranziții în starea inițială a automatului A2, apoi transformăm stările finale ale lui A1 în stări obișnuite. Starea inițială a întregului automat nou va fi starea inițială a automatului A1:

Cum va funcționa automatul? Începem să simulăm funcționarea automatului A1. Dacă trecem într-una dintre fostele stări finale q1 sau q2, știm că automatul A1 acceptă o parte din cuvânt. Pentru ca întregul cuvânt să facă parte din limbajul L1 ∘ L2, restul cuvântului trebuie acceptat de al doilea automat A2 – de aceea, din toate fostele stări finale pornesc ε-tranziții în starea inițială originală a automatului A2.

Să luăm ca exemplu cuvântul 0001. El aparține concatenării celor două limbaje, deoarece cuvântul poate fi obținut prin concatenarea cuvintelor 00 ∘ 01. Dar la fel de bine poate fi obținut prin concatenarea cuvintelor 0 ∘ 001. În automatul nostru putem simula ambele variante. Automatul poate urma drumul:

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

Pe acest drum, automatul ar „accepta” mai întâi partea 00 a cuvântului, apoi partea 01. Sau poate urma drumul:

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

iar automatul ar „accepta” astfel mai întâi partea 0 a cuvântului, apoi partea 001. În ambele cazuri ajungem, desigur, în starea finală p2.

Construcția formală

Încă o dată: avem două limbaje regulate L1, L2 și două automate care acceptă aceste limbaje:

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

Construim un automat nedeterminist A = ⟨Q, Σ, δ, q, F⟩ pentru care are loc:

  • Q = Q1 ∪ Q2 (presupunem totodată că Q1 ∩ Q2 = ∅)
  • Σ= Σ1 ∪ Σ2
  • q = q0
  • F = F2

Funcția de tranziție δ o construim pe rând:

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

Surse

Capitole: Închiderea la operații, Reuniunea, Intersecția, Diferența, Complementul, Concatenarea, Închiderea Kleene