Complementos de Engenharia de Software 2005/06

Slides:



Advertisements
Apresentações semelhantes
Computabilidade e Linguagens Formais
Advertisements

Computabilidade e Linguagens Formais
Revisão: Potenciação e propriedades.
REPRESENTAÇÕES DE LINGUAGENS Adorilson Bezerra Santa Cruz - RN UNIVERSIDADE DO ESTADO DO RIO GRANDE DO NORTE CAMPUS AVANÇADO DO NATAL DEPARTAMENTO DE CIÊNCIA.
POLINÔMIOS. Polinômio ou função polinomial na variável complexa x é toda função P: ℂ → ℂ definida por P(x) = a n x n + a n–1 x n–1 + a n–2 x n–2 +...
Linguagem de Programação – Aula 03 Prof. Me. Ronnison Reges Vidal.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Variáveis e Atribuições.
MATRIZ É uma tabela disposta em “m” linhas e “n” colunas.
Segundo encontro do terceiro ciclo
1) Defina sequências numéricas.
Introdução à Computação para Engenharia MAC2166
Professores: Cristiano Cassoli Lucilene Sebastião
Tópicos Preliminares Algorítmos I.
RODOLFO SOARES TEIXEIRA OBMEP NA ESCOLA
Termodinâmica e Estrutura da Matéria Unidades e medidas
Medições – parte I: Precisão.
Conjuntos numéricos A história nos mostra que desde muito tempo o homem sempre teve a preocupação em contar objetos e ter registros numéricos. Seja através.
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2016
PROFESSOR: ALEXSANDRO DE sOUSA
Fundamentos de Aritmética
Aprendizado de Máquina
pROFEssor: jean vilela
RODOLFO SOARES TEIXEIRA OBMEP NA ESCOLA
Estruturas de Repetição
Introdução à Engenharia de Computação
Instituto Federal do Ceará - IFCE Campus Aracati Disciplina: Introdução a Computação Chico Anysio Óleo sobre tela 60x40 cm.
Módulo I Capítulo 3: Fluxo de Código e Operador Condicional
Complementos de Engenharia de Software 2005/06
Prof. Wellington Franco
PROBABILIDADES.
Algoritmos e Fluxogramas
Logaritmos.
FUNDAMENTO DE PROGRAMAÇÃO
Introdução à Programação
Sistemas de Controle III N8SC3
INE 5201 – INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO
Representação dos dados
Estrutura de Repetição
Programação.
Análise Sintática Botton Up Diomara M. R. Barros
Termodinâmica e Estrutura da Matéria Entropia
Aula 02 – Produtos Notáveis
Binário, Hexadecimal, Decimal
Movimento Retilíneo Uniforme Movimento Retilíneo Variado Vetores
Aulas 17 e 18 Limites, limites laterais, limites infinitos, assíntota vertical e propriedades do limite.
, operações, intervalos e desigualdades.
Revisão: Potenciação e propriedades.
Complexidade de Algoritmos
LÓGICA DE PROGRAMAÇÃO Estruturas de Decisão
RAZÃO E PROPORÇÃO (Aula 3)
Derivadas Já definimos o coeficiente angular de uma curva y = f(x) no ponto onde x = x0. Chamamos esse limite, quando ele existia, de derivada de f em.
Introdução instrumental às Linguagens Formais
Termodinâmica e Estrutura da Matéria Entropia
Compiladores, Aula Nº 5 João M. P. Cardoso
Unidade 6 – Desenho da amostra Aspectos técnicos
CT Fundamentos de Automata e Linguagens Formais
Desenho Aplicado à Automação e Controle
Introdução à lógica de programação utilizando Scratch Aula 3
ALGORITMOS.
Profª Juliana Schivani docente.ifrn.edu.br/julianaschivani
Circuitos Sequenciais
O que você deve saber sobre
Python: Comandos Básicos
PROFESSOR: ALEXSANDRO DE sOUSA
Introdução aos Grupos de Permutações e aplicações
Introdução instrumental às Linguagens Formais
Aula 7 Professores: Conteúdo: Dante Corbucci Filho
MATEMÁTICA.
MATEMÁTICA.
MATEMÁTICA.
Transcrição da apresentação:

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 (jpf@fe.up.pt, www.fe.up.pt/~jpf) (Com base em notas de Gabriel David e Cristina Ribeiro)

Í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

TC2- Lógica Proposicional 28-01-2018 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

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

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.

Í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

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

Conceito de Cadeia Uma cadeia (ou palavra) sobre um alfabeto  é uma sequência finita de símbolos escolhidos desse alfabeto Exemplo: 01101 é 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  …

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 …

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, 000111, …} {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: {}

* 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, 001001, 10001, 111001} 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

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)

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

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

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

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

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

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 …

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)

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

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 

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

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

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)?

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

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

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

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)*

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

* Propriedades de fecho das LR’s TC2- Lógica Proposicional 28-01-2018 * 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

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

* 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

* 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

* 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)

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.