Concatenazione di linguaggi regolari
Siano L1, L2 due linguaggi regolari. Dimostreremo che anche la loro concatenazione L = L1 ∘ L2 è un linguaggio regolare.
Cos’è la concatenazione
Concatenando le due parole «010» e «1111» si ottiene la parola «0101111». La concatenazione di due linguaggi è quindi un nuovo linguaggio, che si costruisce concatenando ogni parola del primo linguaggio con ogni parola del secondo. La concatenazione di due parole e di due linguaggi si indica con un cerchietto: ∘. Possiamo allora definire la concatenazione dei linguaggi L1 e L2 così:
Idea della dimostrazione
Abbiamo due linguaggi regolari L1, L2 e due automi che li accettano:
Costruiamo un automa non deterministico A = ⟨Q, Σ, δ, q, F⟩ che «contiene» entrambi gli automi A1 e A2. L’idea di base è di far leggere la parola all’automa A1 e, quando A1 arriva in uno stato finale, provare a far accettare la parte rimanente della parola all’automa A2. Se anche questo automa accetta quella parte della parola, allora l’automa A accetta la parola.
Esempio
Consideriamo questo automa A1, che accetta le parole non vuote formate solo da zeri e le parole formate da un 1 seguito solo da zeri (1, 10, 100, …):
e inoltre questo automa A2, che accetta le parole che terminano con 01:
Colleghiamo gli automi aggiungendo ε-transizioni da tutti gli stati finali dell’automa A1 allo stato iniziale dell’automa A2, poi trasformiamo gli stati finali di A1 in stati non finali. Lo stato iniziale del nuovo automa sarà lo stato iniziale di A1:
Come funziona l’automa? Cominciamo simulando il funzionamento dell’automa A1. Se arriviamo in un ex stato finale q1 o q2, sappiamo che l’automa A1 accetta una parte di questa parola. Perché l’intera parola appartenga al linguaggio L1 ∘ L2, la parte rimanente deve essere accettata dal secondo automa A2: per questo da tutti gli ex stati finali partono ε-transizioni verso lo stato iniziale originario dell’automa A2.
Prendiamo ad esempio la parola 0001. Appartiene alla concatenazione dei due linguaggi, perché si può ottenere concatenando le parole 00 ∘ 01. Ma si può ottenere anche come 0 ∘ 001. Nel nostro automa possiamo simulare entrambi i procedimenti. L’automa può seguire questo percorso:
In questo percorso l’automa prima «accetta» la parte di parola 00 e poi la parte 01. Oppure può seguire questo percorso:
e così l’automa prima «accetta» la parte di parola 0 e poi la parte 001. In entrambi i casi arriviamo naturalmente nello stato finale p2.
Procedimento formale
Ancora una volta: abbiamo due linguaggi regolari L1, L2 e due automi che li accettano:
Costruiamo un automa non deterministico A = ⟨Q, Σ, δ, q, F⟩ per cui vale:
- Q = Q1 ∪ Q2 (supponiamo inoltre che Q1 ∩ Q2 = ∅)
- Σ= Σ1 ∪ Σ2
- q = q0
- F = F2
La funzione di transizione δ si costruisce per casi:
Fonti
Capitoli: Chiusura dei linguaggi regolari, Unione di linguaggi regolari, Intersezione di linguaggi regolari, Differenza di linguaggi regolari, Complemento di un linguaggio regolare, Concatenazione di linguaggi regolari, Chiusura di Kleene di un linguaggio regolare