Linguagens Formais e Autômatos

Linguagens Regulares e Livres de Contexto

Última ocorrência: Não ocorreu

Posts Relacionados

Conversão de Autômatos Finitos em Expressões Regulares

Na última aula vimos como transformar uma expressão regular em um automato finito, provando que as expressões regulares, no máximo, representam o mesmo tipo de linguagem reconhecida pelos automatos finitos determinísticos (as linguagens regulares). Para provar a equivalência entre os dois formalismos, é necessário que demonstremos que qualquer autômato finito determinístico possa ser transformado em uma expressão regular.

Pra facilitar a conversão do de um automato finito em uma expressão regular vamos estudar um novo conceito, Autômato Finito Não-Determinístico Generalizado (GNFA, do inglês Generalized Nondeterministic Finite Automaton).

Autômato Finito Não-Determinístico Generalizado (GNFA)

Um autômato Finito Não-Determinístico Generalizado é semelhante a um NFA, mas permite o uso de expressões regulares como símbolo de ativação das transições.

GNFA

A diferença na computação de um GNFA é que ao invés de ler um único símbolo, a transição irá consumir toda uma string.

A aceitação ou rejeição de uma entrada é a mesma do NFA, se houver qualquer caminho que, ao final da entrada, levar a um estado de aceitação, a entrada será aceita, caso contrário, ela será rejeitada.

Por conveniência, vamos assumir uma forma especial do GNFA, onde:

GNFA Conveniente

Prova da conversão GNFA em Expressões regulares

Lema: Todo GNFA $G$ tem uma expressão regular $R$ equivalente.

Prova: Por indução do número de estados $k$ de $G$.

GNFA with k states GNFA with k states

Lema do Bombeamento

Para mastrar que uma linguagem é uma linguagem regular, é preciso contruir um DFA, ou criar a liguagem por indução utilizando os fechos de linguagens regulares.

Para mostrar que uma linguagem não é regular é preciso mostrar uma prova, e não é possível dizer que não existe um DFA para ela, pois isso não é uma prova.

Dado o alfabeto $\Sigma = \{0, 1\}$:

Lema do Bombeamento: Para toda linguagem regular $A$, existe um número $p$ (o tamanho do bombeamento), de tal modo que se $s \in A$ e $|s| \ge p$ então $s = xyz$ onde:

Informalmente: $A$ é regular se cada cadeia longa em $A$ pode ser bombeada e o resultado continua em $A$.

Pumping lemma

Prova: Seja $M$ um DFA que reconhece $A$, seja $p$ o número de estados em $M$, escolha $s \in A$ onde $|s| \ge p$

Aplicação do Lema do Bombeamento

Seja $D = \{0^k1^k | k\ge{0}\}$, demonstraremos que D não é regular por uma prova por contradição.

Seja $F = \{ww | w \in \Sigma^*\}$, demonstraremos que F não é regular por uma prova por contradição.

Voltamos agora a linguagem $B = \{w | w\; \text{tem um numero igual de 0s e 1s}\}$: