Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é...

37
Identificando Linguagens Não Regulares • Linguagens regulares podem ser finitas; • Uma linguagem é regular sss, em processando qualquer cadeia, a informação a ser armazenada em qualquer estágio é estritamente limitada.

Transcript of Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é...

Page 1: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Identificando Linguagens Não Regulares

• Linguagens regulares podem ser finitas;

• Uma linguagem é regular sss, em processando qualquer cadeia, a informação a ser armazenada em qualquer estágio é estritamente limitada.

Page 2: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Exemplo: A linguagem L={ an bn|n0} não é regular.

• Suponha que L é regular. Então existe um AFD M=(Q, {a,b},S,q0,F) que a reconhe-ce. Seja k o número de estados de M. Consideremos o funcionamento de M na entrada anbn, onde n k

Page 3: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

aaaaaaaaaabbbbbbbbbb q 0 n n r

• Como nk, deve existir algum estado p tal que M está em p mais de uma vez enquanto percorrendo a parte inicial da sequência de a’s (princípio da casa dos pombos).

Page 4: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Quebre anbn em 3 pedaços u, v, w onde v é a cadeia de a’s percorrida entre duas ocorrências de p.

aaaaaa aaaa bbbbbbbbbb

q0 u p v p w r

Page 5: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Seja j=|v|>0 (j=4, no exemplo) * (q0,u) = p

* (p,v) = p * (p,w) = r F

• Logo podemos remover v o que resultaria numa cadeia ser erroneamente aceita:

Page 6: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

*(q0,uw) = *(*(q0,u),w)

= *(p,w) = r F aaaaaa bbbbbbbbbb q0 p r

u w

Page 7: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Lema do Bombeamento (Pumping Lemma)

TEOREMA: Seja L uma linguagem regular. Então existe um inteiro positivo m, tal que w L com |w| m pode ser decomposta como w= xyz com |xz|m e |y|1 tal que wi=xyiz está também em L para todo i = 0,1,2, ...

Page 8: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Prova• Sejam q0, q1,…, qn os estados do AFD

que reconhece L. Agora tome uma cadeia w L tal que |w|=km=n+1.

• Seja q0,qi,qj, … ,qf o conjunto de estados do autômato no reconhe-cimento de w. Como esta cadeia tem no mínimo n+1 entradas, pelo menos um estado deve ser repetido, e tal repetição não deve começar após o n-ésimo movimento.

Page 9: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Portanto, a sequência deve ter a seguinte forma

q0,qi,qj, … ,qr, … ,qr, …, qf

• indicando que devem existir subcadeias x, y, z de w tal que

*(q0,x)=qr, *(qr,y)=qr, *(qr, z)=qf com |xz| n+1 = m e |y|1.

• Donde segue imediatamente que *(q0,xz)=qf, *(q0, xy2z)=qf,

*(q0,xy3z)=qf ...

q.e.d

Page 10: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Gramáticas• Gramáticauma ferramenta comum e

poderosa para definir linguagens.• Definição: Uma gramática G é uma

quádrupla G=(V, T, S, P) onde:– V é um conjto finito de variáveis ou

símbolos não-terminais;– T é um conjunto finito de símbolos

terminais;– S V é um símbolo especial chamado de

símbolo inicial ou variável de início;– P é um conjunto finito de produções

Page 11: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• As regras de produção são da forma xy, onde x é um elemento de (VT)+ e y está em (VT)*.

• As produções são aplicadas como segue: – dada uma cadeia w da forma w=uxv,

dizemos que a produção é aplicável a esta cadeia e podemos usá-la para trocar x por y, obtendo assim uma nova cadeia z=uyv

• Isto é escrito por wz (w deriva z ou z é derivada de w ou z deriva de w).

Page 12: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Se w1w2...wn, dizemos que w1 deriva wn e escrevemos w1*wn

• * indica que foi tomado um número não-especificado de etapas (inclu-indo zero) para derivar wn de w1. Logo w*w sempre se dá.

• Para indicar que pelo menos uma produção foi aplicada, escreve-mos w+v

Page 13: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Aplicando as regras de produção em ordens diferentes, uma gramática pode gerar muitas cadeias. O conjunto de todas tais cadeias é a linguagem definida ou gerada pela gramática.

Page 14: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Linguagem Gerada

• Definição: Seja G = (V, T, S, P) uma gramática. Então o conjun-to L(G) = {wT* | S*w} é a linguagem gerada por G.

• Se w L (G), então a sequência Sw1w2 … wnw é uma derivação da sentença (ou palavra) w.

Page 15: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Exemplo• G = <{S}, {a,b}, S, P> onde P é dado

por SaSb e S• Então SaSb aaSbb aabb • Logo podemos escrever S*aabb • Uma gramática define completamen-te

L(G), porém pode não ser fácil obter uma descrição explícita da linguagem a partir da gramática.

• Neste exemplo, no entanto, não é difícil conjecturar que L(G)={anbn|n0}

Page 16: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Gramáticas Regulares

• Uma gramática G = <V, T,S,P> diz-se linear à direita se todas as produções são da forma

A xB ou Ax onde A, B V, e x T*.• e linear à esquerda se todas as

produções são da forma AxB Ax

Page 17: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Uma gramática regular é uma que é ou linear à direita ou linear à esquerda.

• Observe que numa gramática regular no máximo aparece uma variável no lado direito de qualquer produção. Além disso, essa variável está mais à esquerda ou mais a direita de qualquer produção.

Page 18: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Exemplos• G1 = ({s},{a,b},S,P1), P1: SabS|a é

linear à direita.• SabS ababS ababa

• L (G1) é a linguagem L((ab)*a)

• G2 = ({S,S1,S2},{a,b},S,P2), com produções SS1ab, S1S1 ab|S2, S2a é linear à esquerda.

• S S1abS1ababS2ababaabab

• L(G2) é a linguagem L(a(ab)*)

Page 19: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Cuidado!

A gramática

G=({S,A,B},{a,b},S,P)

com produções

SA AaB| BAbnão é regular!

Page 20: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Gramáticas Lineares À Direita Geram Linguagens

Regulares• Construir um AFND que simula as

derivações de uma gramática linear à direita.

Ab…cDAb…cdE por DdE• O AFND vai do estado D para o estado E

quando o símbolo d for encontrado.

Page 21: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Teorema. Seja G = (V, T, S, P) uma gramática linear à direita. Então L(G) é uma linguagem regular.

Prova. Assumir V={V0,V1,…,Vp}, com S=V0 e que temos produ-ções da forma

V0v1Vi, Viv2Vj, …, ou Vnvl, …

Page 22: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Se w é uma cadeia em L(G), então por causa das formas das produções em G, a derivação deve ter a forma da equação acima.

V0 v1Vi

v1v2Vj

* v1v2… vk Vn

v1v2… vk ve = w

Page 23: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• O autômato a ser construído repro-duzirá a derivação, consumindo cada um desses v’s.

• O estado inicial do autômato será ro-tulado V0, e para cada Vi existirá um estado não final rotulado Vi.

• Para cada Via1a2…amVj definire-mos tal que *(Vi,a1a2…am)=Vj

• Para cada Via1a2…am , *(Vi,a1a2…am)=Vf, onde Vf é um estado final. Os estados intermedi-ários não são de interesse e podem ser dados rótulos arbitrários.

Page 24: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

vi vj

vfvi

a1 a2 am

... representa Via1a2…amVj

a1 a2 am

representa Via1a2…am

Page 25: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Suponha agora que w L (G). No AFND existe uma aresta de V0 a Vi rotulada v1, de Vi a Vj rotulada v2, etc., tal que Vf *(V0, w), e w é aceita por M.

• Inversamente, suponha que w é aceita por M. Para aceitar w o autômato tem de passar pela sequência de estados V0, Vi,…,Vf usando caminhos rotulados v1,v2,…,vl

Page 26: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Portanto, w deve ter a forma w=v1v2…vkvl e a derivação

V0v1Viv1v2Vj*v1v2…vkVk

v1v2…vkvl

é possível. Logo W está em L(G), e assim o teorema está provado.

Page 27: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Exemplo• Construir um autômato que aceita a

linguagem gerada pela gramática V0aV1

V1abV0 |b

• começamos do grafo de transição com vértices V0, V1 e Vf.

Page 28: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• A primeira regra de produção cria uma aresta rotulada a entre V0 e V1. Para segunda regra, precisamos introduzir um vértice adicional tal que existe um caminho rotulado ab entre V1 e V0.

Page 29: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

v0 v1vf

b

b

a

a

v2

• Finalmente, precisamos adicionar uma aresta rotulada b entre V1 e Vf

• A linguagem gerada pela gramática e reconhecida pelo autômato é a linguagem regular L ((aab)*ab)

Page 30: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Gramáticas Lineares À Direita Para Linguagens Regulares

• Começamos agora do AFD para a linguagem e invertemos a construção do teorema anterior

• Os estados do AFD tornam-se as variáveis da gramática, e

• Os símbolos que causam as transições tornam-se os terminais nas produções

Page 31: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Teorema: Se L é uma linguagem regular sobre o alfabeto , então existe uma gramática linear à direita G = (V,,S,P) tal que L = L(G).

Page 32: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Prova: Seja M = (Q,,,q0, F) um AFD que aceita L. Assumiremos que Q = {q0,q1,…, qn) e = {a1, a2,…am}.

• Vamos construir uma gramática linear à direita G = (V, , S, P) com V = {q0, q1,…,qn} e S = q0.

• Para cada transição (qi, aj) = qk de M, colocamos em P a produção qiajqk.

• Além disso, se qk está em F, acrescentamos a P a produção q.

Page 33: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Primeiro mostramos que G defini-da dessa maneira pode gerar toda cadeia em L. Considere w L da forma

w = aiaj…akal.

• Para M aceitar essa cadeia ele deve se movimentar via

(q0, ai) = qp,

(qp, aj) = qr,

... (qs, ak) = qt,

(qt, al) = qf F

Page 34: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Por construção, a gramática terá uma produção para cada um desses ’s. Portanto, podemos fazer a derivação

q0aiqpaiajqr*aiaj…akqt

aiaj…akalqfaiaj…akal

com a gramática G, e w L(G).

Page 35: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

• Inversamente, se w L(G), então sua derivação deve ter a forma da equação acima, mas isto implica que

(q0, ai, aj…akal) = qf,

completando a prova.q.e.d.

Page 36: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Equivalência Entre Linguagens Regulares E Gramáticas

Regulares

• Os resultados anteriores estabele-cem a conexão entre linguagens regulares e gramáticas lineares à direita.

• Podemos fazer uma conexão análo-ga entre linguagens regulares e gramáticas lineares à esquerda, mostrando assim, a equivalência de gramáticas e linguagens regulares.

Page 37: Identificando Linguagens Não Regulares Linguagens regulares podem ser finitas; Uma linguagem é regular sss, em processando qualquer cadeia, a informação.

Teorema.

Uma linguagem é regular se e somente se existe uma gramáti-ca regular G tal que L = L(G).