Concatenação de linguagens regulares
Considere duas linguagens regulares L1, L2. Vamos demonstrar que a concatenação delas, L = L1 ∘ L2, também é uma linguagem regular.
O que é a concatenação
Concatenando as duas palavras “010” e “1111”, obtemos a palavra “0101111”. A concatenação de linguagens produz, assim, uma nova linguagem, que construímos concatenando cada palavra de uma linguagem com cada palavra da outra linguagem. A concatenação de duas palavras e de duas linguagens será representada por uma bolinha: ∘. Podemos, então, definir a concatenação das linguagens L1 e L2 assim:
Ideia da demonstração
Temos duas linguagens regulares L1, L2 e dois autômatos que aceitam essas linguagens:
Construímos um autômato não determinístico A = ⟨Q, Σ, δ, q, F⟩ que “contém em si” os dois autômatos A1 e A2. A ideia básica é que começamos a aceitar a palavra com o autômato A1 e, quando o autômato A1 chega a um estado final, tentamos ainda aceitar a parte restante da palavra com o autômato A2. Se esse autômato também aceita a parte da palavra, então o autômato A aceita a palavra.
Exemplo
Considere este autômato A1, que aceita as palavras não vazias compostas apenas de zeros e as palavras compostas de um 1 seguido apenas de zeros (1, 10, 100, …):
e considere também este autômato A2, que aceita as palavras que terminam em 01:
Unimos os autômatos assim: de todos os estados finais do autômato A1, acrescentamos transições ε para o estado inicial do autômato A2 e, em seguida, transformamos os estados finais de A1 em estados comuns. O estado inicial do novo autômato inteiro será o estado inicial do autômato A1:
Como o autômato vai funcionar? Começamos simulando o funcionamento do autômato A1. Se passarmos para um ex-estado final q1 ou q2, sabemos que o autômato A1 aceita uma parte dessa palavra. Para que a palavra inteira faça parte da linguagem L1 ∘ L2, a parte restante da palavra deve ainda ser aceita pelo segundo autômato A2 — por isso, de todos os ex-estados finais saem transições ε para o estado inicial original do autômato A2.
Como exemplo, tome a palavra 0001. Ela pertence à concatenação das duas linguagens, porque a palavra pode surgir da concatenação das palavras 00 ∘ 01. Mas também pode surgir da concatenação das palavras 0 ∘ 001. No nosso autômato podemos simular os dois procedimentos. O autômato pode seguir por este caminho:
Por esse caminho, o autômato primeiro “aceitaria” a parte 00 da palavra e depois a parte 01. Ou pode seguir por este caminho:
e o autômato “aceitaria”, então, primeiro a parte 0 da palavra e depois a parte 001. Nos dois casos, é claro, chegamos ao estado final p2.
Procedimento formal
Mais uma vez: temos duas linguagens regulares L1, L2 e dois autômatos que aceitam essas linguagens:
Construímos o autômato não determinístico A = ⟨Q, Σ, δ, q, F⟩, para o qual vale:
- Q = Q1 ∪ Q2 (supomos, ao mesmo tempo, que Q1 ∩ Q2 = ∅)
- Σ= Σ1 ∪ Σ2
- q = q0
- F = F2
Construímos a função de transição δ aos poucos:
Fontes
Capítulos: Fechamento das linguagens regulares, União de linguagens regulares, Interseção de linguagens regulares, Diferença de linguagens regulares, Complemento de uma linguagem regular, Concatenação de linguagens regulares, Fecho de uma linguagem regular