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:
Ideea demonstrației
Avem două limbaje regulate L1, L2 și două automate care acceptă aceste limbaje:
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:
Pe acest drum, automatul ar „accepta” mai întâi partea 00 a cuvântului, apoi partea 01. Sau poate urma drumul:
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:
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:
Surse
Capitole: Închiderea la operații, Reuniunea, Intersecția, Diferența, Complementul, Concatenarea, Închiderea Kleene