130 likes | 229 Views
Revisão Autômatos. Teoria da Computação Pós-graduação em Ciência da Computação – UFU Profa. Sandra de Amo. Como detectar se uma linguagem não é regular ?. Seja L uma linguagem regular. Existe autômato A tal que L(A) = L. A = ({q 0 ,…,q n-1 }, S, δ , q0,F).
E N D
Revisão Autômatos Teoria da Computação Pós-graduação em Ciência da Computação – UFU Profa. Sandra de Amo
Como detectar se uma linguagem não é regular ? Seja L uma linguagem regular Existe autômato A tal que L(A) = L A = ({q0,…,qn-1}, S, δ, q0,F) w = a1 a2 a3 a4 … ak palavra de L a1 q0 qf q1 a2 ak a3 qs a4 q2 qi qj
Como detectar se uma linguagem não é regular ? Qual o comprimento máximo de w para que todos os estados percorridos sejam distintos ? O caminho percorrido tem no máximo n estados Logo w tem no máximo comprimento n-1 a1 q0 qf q1 a2 ak a3 qs a4 q2 qi qj
qf ak qs q2 q2 Como detectar se uma linguagem não é regular ? E se comprimento de w for maior ou igual a n ? O caminho percorrido terá estados repetidos Seja q2 o primeiro estado que se repete futuramente e tal que não existem estados repetidos entre as duas ocorrências de q2 a1 q0 q1 a2 a4 q2 qi a3 sem estados intermediários repetidos
Como detectar se uma linguagem não é regular ? E se comprimento de w for maior ou igual a n ? O caminho percorrido terá estados repetidos w = a1a2a3a4…ak qf ak ak a1a2 … ak a1 q0 qs a1a2 a3a4 a3a4…ak q1 a2 a1a2 a3a4 a3a4 a3a4…ak a4 q2 qi a1a2 a3 a4 … ak w = a3 x y z
O caminho percorrido pela palavra xy tem no máximo um estado repetido (q2) Logo, total de estados percorridos pela palavra é no máximo n+1. Portanto a palavra xy tem comprimento máximo n |y| = comprimento do caminho percorrido no laço (q2... qi ... q2) O número mínimo de estados dentro do laço é zero, o que produziria |y| = 1 Logo |y| > 0 a1a2 … ak a3 a4 w = x y z |x y| ≤ n e |y| > 0 qf ak ak a1 q0 qs q1 a2 a4 q2 qi a3
Como detectar se uma linguagem não é regular ? • Se L é regular e w pertence a L e |w| ≥ n, então: • w = xyz • |x y| ≤ n • | y | > 0 • xykz pertence a L para todo k ≥ 0
Como detectar se uma linguagem não é regular ? Se L é regularentão • Existe n > 0 (n = número de estados do automato minimal que aceita L) tal que: • Para toda palavra w de L com |w| ≥ n • Existe uma maneira de dividir w em 3 partes w = xyz | x y |≤ n, |y| > 0 • Para todo k ≥ 0 xykz pertence a L
Como detectar se uma linguagem não é regular ? Se a expressão abaixo nao se verifica • Existe n > 0 (n = número de estados do automato minimal que aceita L) tal que: • Para toda palavra w de L com |w| ≥ n • Existe uma maneira de dividir w em 3 partes w = xyz | x y |≤ n, |y| > 0 • Para todo k ≥ 0 xykz pertence a L então L não é regular
Para mostrar que L não é regular basta mostrar que a expressao abaixo é falsa ! • Existe n > 0 (n = número de estados do automato minimal que aceita L) tal que: • Para toda palavra w de L com |w| ≥ n • Existe uma maneira de dividir w em 3 partes w = xyz | x y |≤ n, |y| > 0 • Para todo k ≥ 0 xykz pertence a L
Para mostrar que L não é regular basta mostrar que a expressao abaixo é falsa ! • Para todo n > 0 • Existe palavra w de L com |w| ≥ n • Para toda maneira de dividir w em 3 partes w = xyz | x y |≤ n, |y| > 0 • Existe k ≥ 0 xykz nãopertence a L
Exemplo L = {0k 1k | k ≥ 0} nao é regular Para todo n > 0 Tenho de exibir uma palavra w de L com |w| ≥ n Tal que para toda maneira de dividir w em 3 partes w = com a parte | x y |≤ n, |y| > 0 Existe um k tal que x yk z não está em L. X y z
Exemplo z y x … … 1 1 1 1 0 0 0 0 0 n vezes n vezes … 0 0 1 1 0 0 0 0 0 1 1 … x y y z m vezes, m > n n vezes Não está em L