Concatenação de duas linguagens regulares

Na teoria das linguagens formais, e em particular na teoria dos autômatos finitos não determinísticos, é conhecido que a concatenação de duas linguagens regulares é uma linguagem regular. Este artigo fornece uma prova desta afirmação.

Teorema

Para quaisquer linguagens regulares L 1 {\displaystyle L_{1}} e L 2 {\displaystyle L_{2}} , a linguagem L 1 L 2 {\displaystyle L_{1}\circ L_{2}} é regular.[1]


Prova


Uma vez que L 1 {\displaystyle L_{1}} e L 2 {\displaystyle L_{2}} são regulares, existem AFNs N 1 e   N 2 {\displaystyle N_{1}e\ N_{2}} que reconhecem L 1 {\displaystyle L_{1}} e L 2 {\displaystyle L_{2}} , respectivamente.

A ideia é adicionar transições ε {\displaystyle \varepsilon } partindo dos estados de aceitação de N 1 {\displaystyle N_{1}} para o estado inicial de N 2 {\displaystyle N_{2}} , significando que ele encontrou uma parte inicial da entrada que constitui uma cadeia em L 1 {\displaystyle L_{1}} . Os estados de aceitação de N 1 {\displaystyle N_{1}} deixam de ser estados de aceitação, e o estado inicial de N 2 {\displaystyle N_{2}} deixa de ser estado inicial, passando a serem estados do autômato N {\displaystyle N} .

Por conseguinte, N {\displaystyle N} aceita uma cadeia de entrada quando podemos dividi-la em duas partes, sendo a primeira aceita por N 1 {\displaystyle N_{1}} e a segunda aceita por N 2 {\displaystyle N_{2}} . Portanto, N {\displaystyle N} "adivinha" não-deterministicamente onde fazer a divisão necessária.[2]


Seja

N 1 = ( Q 1 ,   Σ ,   T 1 ,   q 1 ,   A 1 ) {\displaystyle N_{1}=(Q_{1},\ \Sigma ,\ T_{1},\ q_{1},\ A_{1})}
N 2 = ( Q 2 ,   Σ ,   T 2 ,   q 2 ,   A 2 ) {\displaystyle N_{2}=(Q_{2},\ \Sigma ,\ T_{2},\ q_{2},\ A_{2})}


Vamos construir


N = ( Q ,   Σ ,   T ,   q 1 ,   A 2 ) {\displaystyle N=(Q,\ \Sigma ,\ T,\ q_{1},\ A_{2})}


tal que


1. Q = Q 1 Q 2 {\displaystyle Q=Q_{1}\cup Q_{2}}

Os estados de N {\displaystyle N} são todos os estados de N 1 {\displaystyle N_{1}} e N 2 {\displaystyle N_{2}} .


2. O estado inicial q 1 {\displaystyle q_{1}} de N {\displaystyle N} é o estado inicial de N 1 {\displaystyle N_{1}} .


3. Os estados de aceitação A 2 {\displaystyle A_{2}} de N {\displaystyle N} são os estados de aceitação de N 2 {\displaystyle N_{2}} .


4. Defina T de modo que para qualquer q Q {\displaystyle q\in Q} e qualquer x Σ ε {\displaystyle x\in \Sigma _{\varepsilon }} ,


T ( q , x ) = { T 1 ( q , x ) q Q 1   e   q A 1 T 1 ( q , x ) q A 1   e   x ε T 1 ( q , x ) { q 2 } q A 1   e   x = ε T 2 ( q , x ) q Q 2 {\displaystyle T(q,x)=\left\{{\begin{array}{lll}T_{1}(q,x)&&q\in Q_{1}\ e\ q\notin A_{1}\\T_{1}(q,x)&&q\in A_{1}\ e\ x\neq \varepsilon \\T_{1}(q,x)\cup \left\{q_{2}\right\}&&q\in A_{1}\ e\ x=\varepsilon \\T_{2}(q,x)&&q\in Q_{2}\\\end{array}}\right.}

Referências

  1. Michael Sipser - Introduction to the Theory of Computation.
  2. John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman - Introdução à Teoria de Autômatos, Linguagens e Computação (2ª Edição).