A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Complementos de Engenharia de Software 2005/06

Apresentações semelhantes


Apresentação em tema: "Complementos de Engenharia de Software 2005/06"— Transcrição da apresentação:

1 Complementos de Engenharia de Software 2005/06
Introdução à Teoria da Computação: Autómatos Finitos, Expressões Regulares e Linguagens Regulares João Pascoal Faria (Com base em notas de Gabriel David e Cristina Ribeiro)

2 Índice Introdução Autómatos finitos, expressões regulares e linguagens regulares Autómatos de pilha, gramáticas livres de contexto e linguagens livres de contexto Máquinas de Turing, gramáticas com estrutura de frase e linguagens recursivamente enumeráveis Computabilidade, problemas indecidíveis Complexidade, problemas intratáveis

3 TC2- Lógica Proposicional
História Teoria dos autómatos: estudo dos dispositivos computacionais abstractos [máquinas abstractas] Úteis para modelação de hardware e software Alan Turing (1930’s) Estudou os limites de uma máquina abstracta equivalente às máquinas actuais, antes de haver computadores! 1940’s, 1950’s Estudos em autómatos finitos para modelar o cérebro Noam Chomsky (1950’s) Gramáticas formais - relacionadas com autómatos abstractos; úteis em compilação S. Cook (1969) Teoria da complexidade – o que é possível ou não computar Cristina Ribeiro

4 Hierarquia de Chomsky (1959)
Universo de Linguagens ALAN máquinas abstractas Gramáticas de estrutura de frase Tipo 0: Linguagens recursivamente enumeráveis (ou com estrutura de frase) Máquina de Turing MATHISON Linguagens recursivas Tipo 1: Linguagens sensíveis ao contexto {anbncn} Autómatos de pilha Gramáticas livres de contexto Tipo 2: Linguagens livres de contexto PALINDROME Linguagens deterministas livres de contexto {anbn} Expressões regulares Autómatos finitos Tipo 3: Linguagens regulares Produzem Reconhecem / aceitam

5 Linguagens e Problemas
Problema de computação: calcular saídas em função de entradas Problema de decisão: problema de computação em que a saída é sim ou não geralmente tem correspondente (*) codificável como codificável como Problema de tradução: traduzir cadeias de uma linguagem L para cadeias de uma linguagem M, segundo uma determinada função Problema da aceitação: decidir se uma dada cadeia de símbolos faz parte de uma determinada linguagem Fundamental para estudar a complexidade de problemas! (*) Quase todos os problema de computação se podem reduzir a problemas de decisão (de mais fácil estudo e resolução), geralmente com pouco agravamento do tempo ou espaço necessário para resolver o problema. Se se provar que o problema de decisão é difícil, temos a certeza que o problema de computação correspondente é pelo menos tão difícil.

6 Índice Introdução Autómatos finitos, expressões regulares e linguagens regulares Autómatos de pilha, gramáticas livres de contexto e linguagens livres de contexto Máquinas de Turing, gramáticas com estrutura de frase e linguagens recursivamente enumeráveis Computabilidade, problemas indecidíveis Complexidade, problemas intratáveis

7 Conceito de Alfabeto Um alfabeto é um conjunto finito e não vazio de símbolos  = {0, 1} , alfabeto binário  = {a, b, …, z} , conjunto das minúsculas Conjunto de caracteres ASCII

8 Conceito de Cadeia Uma cadeia (ou palavra) sobre um alfabeto  é uma sequência finita de símbolos escolhidos desse alfabeto Exemplo: é uma cadeia sobre o alfabeto  = {0, 1} Se w é uma cadeia, |w| denota o seu comprimento Exemplo: |01101| = 5  denota a cadeia vazia (de comprimento 0) k (k0) denota o conjunto de cadeias de comprimento k formadas por símbolos do alfabeto  Se  = {0, 1} então 0 = {}, 1 = {0, 1} , 2 = {00, 01, 10, 11}, … * (fecho de ) denota o conjunto de todas as cadeias sobre o alfabeto  * = 0  1  2  …

9 Operadores sobre cadeias
Sejam duas cadeias binárias u=01 e v=11 Concatenação: uv=0111 Potenciação: uk (k≥0) representa u concatenado consigo próprio k vezes u0= u1=u=01 u2=uu=0101 u3=uuu=010101

10 Conceito de Linguagem Uma linguagem L sobre um alfabeto  é um conjunto de cadeias sobre esse alfabeto, ou seja, é um subconjunto de * (L  *) Linguagem das cadeias com 0’s seguidos de igual nº de 1’s {, 01, 0011, , …} {0n1n | n≥0} (an é concatenação de a n vezes) Conjunto dos números binários que são primos: {10, 11, 101, 111, 1011, …} Linguagem vazia:  ou {} Linguagem só com a cadeia vazia: {}

11 * Operadores sobre Linguagens
Podem-se combinar linguagens com os operadores de conjuntos Dadas as linguagens L = {001, 10, 111} e M = {, 001} então L  M = {, 001, 10, 111}, L \ M = {10, 111} (diferença), L ∩ M = {001} Concatenação de duas linguagens L e M (denotada LM), é o conjunto de cadeias que se obtém concatenando qualquer cadeia em L com qualquer cadeia em M LM = {001, 10, 111, , 10001, } Potênciação: Lk (k≥0) representa a auto-concatenação de L k vezes Se L = {0, 11} então L0 = {}, L1 = L = {0, 11}, L2 = LL = {00, 011, 110, 1111}, … Fecho de uma linguagem L (denotado L*) é o conjunto de cadeias que se obtém concatenando cadeias de L de todas as formas possíveis (inclui a cadeia vazia) L* = i0 Li Se L= {0,1}, então L* é a linguagem das cadeias binárias

12 Autómatos Finitos Deterministas
Um autómato finito determinista (DFA) A é um tuplo S,  , , s0, F em que S é um conjunto finito de estados  é um conjunto finito de símbolos de entrada , a função de transição, é uma função de S em S (função total que indica o estado seguinte) para cada estado s e para cada símbolo a lido, só há uma transição possível – para o estado (s,a)  determinista s0 é o estado inicial (s0S) F é conjunto de estados finais ou de aceitação (FS)

13 Exemplo: Interruptor on/off
Press Start off on estado inicial estado Press entrada transição Dois estados: on e off Uma só entrada [etiquetas nos arcos]: Press Representa influência externa no sistema [transição de estado] Carregar no botão tem um efeito dependente do estado Estado inicial indicado por uma seta com a etiqueta Start Pode existir um (ou mais) estados finais ou de aceitação, indicados por círculo de linha dupla Chegar a um desses estados significa que a sequência de entradas é boa

14 Linguagem de um Autómato
A linguagem de um autómato finito A, denotada L(A), é o conjunto de todas as cadeias que o autómato aceita (reconhece) Uma cadeia é aceite sse existe um caminho do estado inicial até um estado final tal que a concatenação das etiquetas dos arcos ao longo do caminho dá essa cadeia Funcionamento do autómato para decidir se uma cadeia é aceite (só aplicável a DFA’s, contrariamente à definição anterior, que se aplica às variantes abordadas mais à frente): Cadeia de entrada: a1a2… an Estado inicial: s0 Evolução: si =(si-1,ai), i=1, …, n Se snF então a cadeia está aceite

15 Exemplo Reconhecedor de cadeias binárias que contenham a sequência 01
 = {0, 1} L = {x01y | x *  y*} A = S,  , , s0, F = {s0, s1, s2}, {0,1}, {(s0,1)s0, (s0,0)s2, (s2,0)s2. (s2,1)s1, (s1,0)s1, (s1,1)s1}, s0, {s1} Tabela de transição Diagrama de transição 1 s0 s2 s0 *s1 s1 estado inicial Start s0 s2 s1 1 0, 1 estado final

16 Exercício Construir autómato que aceita nº binários normalizados (sem zeros à esquerda, excepto se for o nº 0) 0,1 0,1 Start 0,1 1

17 Exercício Descrever a linguagem aceite pelo seguinte autómato (Cohen, pg.83): R: cadeias de a’s e b’s de comprimento par que acabam em a a a, b Start a, b a, b b

18 Interesse dos autómatos finitos
Simples Fáceis de analisar Podem ser implementados com recursos fixos Não se aplicam apenas como reconhecedores de linguagens …

19 Variantes a DFA’s com o mesmo poder expressivo (1)
Autómatos sem transições para alguns estados de origem e símbolos de entrada Possibilidade de omitir entradas inaceitáveis Função de transição parcial Autómatos com múltiplas transições com a mesma etiqueta (símbolo de entrada) e estado de origem Autómatos finitos não deterministas (NFA) Função de transição de S em 2S (faz corresponder a cada estado e símbolo de entrada, 0 ou mais estados de destino possíveis; inclui variante anterior pois pode não existir nenhum estado de destino definido)

20 Variantes a DFA’s com o mesmo poder expressivo (2)
Autómatos com transições sem símbolo de entrada Transições etiquetadas com cadeia vazia  Função de transição de S({}) em S Autómatos com transições etiquetadas com cadeias Possibilidade de ler vários símbolos de entrada de cada vez Função de transição parcial de S* em S Caso geral: função de transição parcial de S* em 2S Têm o mesmo poder expressivo que DFA’s Qualquer linguagem que pode ser definida por um DFA, pode também ser definida por um autómato em qualquer das variantes, e vice versa Variantes convenientes para simplificar os diagramas

21 Exemplo de NFA Reconhecedor as cadeias binárias com 1 na antepenúltima posição Diagrama de transição: Tabela de transição: 0,1 Start 1 0,1 0,1 s3 s0 s1 s2 1 s0 {s0} {s0,s1} s1 {s2} s2 {s3} *s3

22 Exemplo de NFA Analisar cadeia 0101 pelo autómato anterior
Em cada momento, autómato pode estar num conjunto de estados Início: {s0} Depois de ler “0”: {s0} Depois de ler “1”: {s0,s1} Depois de ler “0”: {s0,s2} Depois de ler “1”: {s0,s1,s3} A cadeia é aceite, pois um destes estados é final

23 DFA equivalente Necessário memorizar os três últimos dígitos lidos (“-” significa “0” ou não definido) Mais complexo! 1 100 -10 1 101 Start 1 --- --1 1 1 1 110 -11 1 111 1

24 Exemplo com transições 
Autómato que aceita números em vírgula flutuante com mantissa obrigatória e expoente opcional: parte inteira da mantissa lida mantissa lida mantissa e expoente lidos sinal opcional parte decimal opcional expoente opcional +,- 0,…,9 0,…,9 +,- 0,…,9 Start 0,…,9 . 0,…,9 e, E 0,…,9 Também foram omitidas entradas não aceitáveis! Qual é o DFA equivalente (sem usar variantes)?

25 Expressões Regulares Uma expressão regular (RE) sobre um alfabeto  é construída usando os símbolos de , parêntesis e as operações concatenação * (repetição 0 ou mais vezes) + (alternativa) Uma expressão regular E define um linguagem, denotada L(E) constituída por todas as cadeias que podem ser geradas por diferentes escolhas de nº de repetições e diferentes escolhas entre alternativas

26 Exemplo Escrever uma expressão regular para o conjunto de cadeias constituídas por 0’s e 1’s alternados 01 L(01) = {01} (01)*  01* L((01)*) = {, 01, 0101, 0101, …} Ainda faltam muitas! (01)*+(10)*+0(10)*+1(01)* Está bem (+1)(01)*(+0) Mais compacto

27 Expressões Regulares em UNIX
ASCII: alfabeto com 128 caracteres “.” significa “qualquer carácter” [abcd] significa a+b+c+d [A-Z] significa A+B+C+…+Z “|” significa “+” “x?” significa “x+” (0 ou 1) “*” significa 0 ou mais “+” significa 1 ou mais {n} significa n cópias de Pesquisa com expressões regulares no comando grep (global regular expression and print) Notação mais rica, mas não aumenta poder expressivo

28 Equivalência entre RE’s e FA’s
Teorema de Kleene (1956): qualquer linguagem que pode ser definida por uma expressão regular, pode também ser definida por um autómato finito, e vice versa Por outras palavras, têm o mesmo poder expressivo Demonstração: ver livro Técnicas sistemáticas de conversão REFA: ver livro Exemplo: expressão regular para as cadeias binárias que contenham a sequência 01 (ver DFA): (0+1)*01(0+1)*

29 Linguagens Regulares As linguagens que podem ser definidas por expressões regulares ou, equivalentemente, por autómatos finitos, são chamadas linguagens regulares

30 * Propriedades de fecho das LR’s
TC2- Lógica Proposicional * Propriedades de fecho das LR’s Dadas duas linguagens regulares L e M, então também são linguagens regulares L  M (reunião) * \ L (complemento, em que  é o alfabeto de L) L ∩ M (intersecção) L \ M (diferença) LR (reverso de L, constituída pelas mesmas cadeias escritas por ordem reversa) L* (fecho) LM (concatenação) Por outras palavras, o conjunto de linguagens regulares é fechado sob estas operações Cristina Ribeiro

31 Linguagens Não Regulares
Nem todas as linguagens são regulares! Exemplo: L01= {0n1n | n0} não é regular Sequências de 0’s seguidas por igual nº de 1’s Um autómato precisaria de um nº de estados igual pelo menos ao nº de 0’s lidos (para memorizar quantos foram lidos), logo precisaria de um nº infinito de estados (pois n pode ser arbitrariamente grande) Start s0 s1 s2 s3 1 1 1 1 0,1 s’0 s’1 s’2 s’3 0, 1 x 1 1 1 1

32 * Lema da bombagem Teorema (Yehoshua Bar-Hillel, Micha A. Perles, Eliahu Shamir, 1961): Seja L uma linguagem regular infinita. Então existe uma constante n (dependente de L) tal que para todas as cadeias w em L com |w|  n se pode partir w em 3 subcadeias w=xyz tais que: y ≠  |xy|  n para todo o k  0, a cadeia xykz também está em L. Isto é: pode-se sempre encontrar uma cadeia y não vazia, próxima do início de w, que pode ser “bombada” (repetida um número arbitrário de vezes ou apagada), produzindo cadeias que têm que pertencer à linguagem Útil para provar que uma linguagem não é regular

33 * Lema da bombagem - Visualização com DFA’s
Todas as cadeias mais longas que o número de estados obrigam a passar num ciclo Esse ciclo pode ser atravessado o nº de vezes que quisermos Cadeias aceites (entre outras…) xz, xyz, xy2z, xy3z, …, xykz, … y=ai+1…aj Start x=a1..ai z=aj+1…am

34 * Exemplo de aplicação do lema da bombagem
Provar que a linguagem (infinita) L01= {0n1n | n1} não é regular Pelo lema da bombagem, se a linguagem é regular, é possível escrever as cadeias na forma w = 0n1n = xyz As hipóteses para y são: y = 0i, (1  i  n) Não dá, pois xykz pode ter nº de 0’s e 1’s desigual y = 1j, (1  j  n) y = 0i1j, (1  i, j  n) Não dá, pois origina 0’s e 1’s intercalados em xykz Logo, não há qualquer escolha possível para y Logo, a linguagem não é regular (prova por contradição)

35 Exercícios Obtenha um autómato finito não determinista, tirando o máximo partido do não determinismo, para aceitar a linguagem das cadeias sobre o alfabeto {0, …, 9} tais que o dígito final já apareceu antes Escreva expressões regulares para as seguintes linguagens o conjunto das cadeias sobre o alfabeto {a,b,c} que contêm pelo menos um a e pelo menos um b o conjunto das cadeias binárias tais que todos os pares de 0’s adjacentes aparecem antes de qualquer par de 1’s adjacentes Dê uma descrição em Português da linguagem da expressão regular (1+)(00*1)*0* Mostre que todas as linguagens finitas são regulares Mostre que {0n10n | n1} não é uma linguagem regular, usando o lema da bombagem.


Carregar ppt "Complementos de Engenharia de Software 2005/06"

Apresentações semelhantes


Anúncios Google