Aspectos Teóricos da Computação

Slides:



Advertisements
Apresentações semelhantes
Decidibilidade e Indecidibilidade
Advertisements

FAPE - Curso de Ciência da Computação
Introdução à Programação: uma Abordagem Funcional PD I – Engenharia Elétrica Prof.ª Claudia Boeres 2008/2.
Introdução a Algoritmos
Profa. Sandra de Amo Mestrado em Ciência da Computação 2013 – 2
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 32 Departamento de Informática Centro.
Linguagem de Montagem Visão geral.
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
Sistema para Criação e Testes de Modelos Formais
TEORIA DA COMPUTAÇÃO Parte III  Máquina de Turing
Teoria da Computação FIC– Ciência da Computação
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Objectivos, Programa, Bibliografia e Avaliação
Software Básico Silvio Fernandes
Teoria da Computação Profa. Sandra de Amo Mestrado em Ciência da Computação 2010 – 1.
Matemática para Ciência da Computação
Teoria da Computação Profa. Sandra de Amo Bacharelado em CC Mestrado em CC 2008 – 1.
Teoria da Computação BCC 244
Lógica de Programação Módulo II
Estruturas de Dados e Complexidade de Algoritmos
Construção de Compiladores
Linguagens Formais e Autômatos
Modelagem & Representação
A Lógica das Sentenças Abertas Profa. Ana Florencia Aula 9
Conceitos Básicos.
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Linguagem de Programação II Parte IX
Gramáticas Livres de Contexto
Informática Teórica Engenharia da Computação
LINGUAGENS DE PROGRAMAÇÃO PROF. DANIELA PIRES
Introdução a Programação
Algoritmos e Programação de Computadores
Introdução a Linguagens de Programação
Teoria da Computação Aula 1 Prof. Fabiano Sabha.
Teoria da Computação Aula 5 Prof. Fabiano Sabha.
Teoria da Computação Prof. Fabiano Sabha.
Teoria da Computação Aula 3 Prof. Fabiano Sabha.
Objectivos, Programa, Bibliografia e Avaliação
Inteligência Artificial
Analise sintática aula-07-analise-sintática.pdf.
ALGORITMOS Intensivo Janeiro e Fevereiro de 2011
Analise Semântica aula-10-analise-semântica.pdf.
1 TEORIA DA COMPUTAÇÃO Motivação Licenciatura em Ciência e Tecnologia da Computação Licenciatura em Engenharia Informática e de Computadores (Prep.)
Prof. Fábio Carneiro Mokarzel 2014
Campus de Caraguatatuba Aula 1: Orientações Gerais
Linguagens de Programação
Programação Lógica com Prolog
Matemática Discreta Bacharelado em Sistemas de Informação
Faculdade Pernambucana - FAPE Setembro/2007
A Linguagem Formal de Especificação VDM-SL
Prof. André Luis Roland Tancredo Engenheiro da Computação e Pesquisador em Desenvolvimento Tecnológico para Semicondutores pelo CNPq Especialista em Microeletrônica.
Fundamentos de linguagens de programação
Computabilidade e Linguagens Formais
Métodos Formais Juan Andrés Mussini.
Engenharia de Software
Algoritmos e Programação I
Sintaxe de uma Linguagem
SISTEMAS DE INFORMAÇÃO
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ Profª. Mestre Mauren L. Sguario Coelho de Andrade
Exercícios Faça um algoritmos para trocar uma lampada queimada.
INTRODUÇÃO THOBER CORADI DETOFENO, MSC. Aula 01 JOINVILLE 2015 Universidade do Estado de Santa Catarina – CCT/UDESC.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
UEZO - CURSO DE CIÊNCIA DA COMPUTAÇÃO Primeiro semestre de 2013_2.
PROGRAMAÇÃO DE COMPUTADORES Engenharia Unificado Prof. Leonardo Bacelar Lima Santos Departamento de Matemática
Lógica de Programação Aula 06 Prof. Marcelo Marcony.
Teoria da Computação Prof. Msc. Ricardo Loiola
Transcrição da apresentação:

Aspectos Teóricos da Computação Prof. Luiz Fernando R B Corrêa

O Professor Mestre em Engenharia de Software – CESAR.EDU Especialista em Planejamento e Gestão Organizacional – FCAP/UPE Especialista em TI – CIN/UFPE Graduado em Ciência da Computação - UNICAP

Durante as aulas Não conversar Participar das discussões e exercícios Celulares desligados ou no silencioso (exceções) Pontualidade Assiduidade

Faltas Máximo 25% das aulas Justificativa até a aula seguinte ou 7 dias úteis. O que ocorrer primeiro Depois do prazo de justificativa de faltas, só com a secretaria/coordenação

Chamada No fim de cada aula

Cargas Horárias Semanal: 3 horas-aula Semestral: 66 horas-aula

Horário Terças-feiras Primeira Aula: 19:10h - 20:25h Intervalo: 20:25h – 20:40h Segunda Aula: 20:40h - 21:55h

Ementa Elementos de linguagens formais, cadeias, alfabetos, linguagens, gramáticas e reconhecedores. Hierarquia de Chomsky. Expressões regulares. Autômatos finitos determinísticos e não determinísticos.

Objetivos Gerais Ao término desta disciplina o aluno deverá conhecer: Tipos de linguagens, as gramáticas que as geram e os autômatos que as reconhecem. Visando a especificação / implementação de linguagens de programação.

Objetivos Específicos Fornecer ao aluno subsídios para que o mesmo possa definir linguagens de programação, isto é, sua sintaxe e semântica, através do estudo das gramáticas formais. De tal forma que o mesmo passe a conhecer o processo de especificação e implementação de linguagens de programação, a partir do estudo dos conceitos, modelos, técnicas e ferramentas que compõem a Teoria das Linguagens Formais.

Conteúdo Programático Fundamentos Matemáticos Tipos de relações em conjuntos Fecho de uma relação Grafos bidirecionais. Conceitos Básicos de Linguagens Alfabetos Palavras sobre um alfabeto Linguagens Gramática Irrestrita: definição, regras de produção e derivação.

Conteúdo Programático Gramática Sensível ao Contexto. Gramáticas Livres de Contexto Linguagens Livres de Contexto. Árvores de derivação Ambigüidade.

Conteúdo Programático Linguagens Regulares Autômatos finitos determinísticos e não-determinísticos Expressões regulares Técnicas para identificar e descrever linguagens regulares Técnicas para mostrar que uma linguagem não é regular Propriedades de tais linguagens.

Estratégia de Trabalho Aulas expositivas seguidas de desenvolvimento de exercícios práticos. Lista de exercícios/projetos para serem resolvidas fora da sala de aula para fixação dos assuntos abordados nas aulas expositivas.

Avaliação Média das provas bimestrais com a nota das listas de exercício/projetos. O conteúdo das provas será baseado no que foi visto em sala de aula.

Bibliografia Básica LEWIS, Harry R. & PAPADIMITRIOU, Christos H. Elementos de Teoria da Computação. 2.ed. Porto Alegre, Bookman, 2000. MENEZES, Paulo Blauth. Linguagens formais e autômatos. 2.ed. Porto Alegre, Sagra Luzzatto, 1998. 165p. HOPCROFT, JOHN E.; ULLMAN, Jeffrei D.; MOTWANI, Rajeev; Introdução À Teoria de Autômatos, Linguagens e Computação; 2002; Ed Campus.

Bibliografia Complementar DIVERIO, T. A. E Menezes, P.B. Teoria da Computação Máquinas Universais e Computabilidade, Série Livros Didáticos Número 5, Instituto de Informática, da UFRGS, Editora Sagra Luzzatto, 1a edição, 1999. BRAINERD, W. S.; Landweber, L. H. Theory of computation. New York: John Wiley & Sons, 1974. SIPSER, Michael; Introdução à Teoria da Computação; 2007; Ed. Thomson Pioneira. LEWIS, HARRY ; PAPADIMITRIOU, Christos H.; Elementos de Teoria da Computação; 2a Ed 2004; Ed BOOKMAN COMPANHIA. BLAUTH, Paulo; HAPULER, Edward Hermann; Teoria das Categorias para Ciência da Computação.

Bibliografia Suporte Wikipedia: http://www.wikipedia.org Scribd: http://www.scribd.com

Aluno Nome Expectativa Trabalha? Com que? Programa? Inglês? Período Já pagou a disciplina de Grafos? Já pagou a disciplina de Lógica?

O que é? Computação WordNet Houaiss the procedure of calculating; determining something by mathematical or logical methods problem solving that involves numbers or quantities Houaiss cômputo, cálculo, contagem; operação matemática ou lógica realizada por regras práticas preestabelecidas

O que é? Computação Wikipedia Solução de um problema ou, formalmente, o cálculo de uma função, através de um algoritmo

O que é? Ciência da Computação Sabha conhecimento sistematizado relativo à computação O estudo das bases e modelos que fundamentam o funcionamento de processamentos computacionais.

O que é? Teoria da Computação Sub-campo da ciência da computação (CC) e matemática, que busca determinar quais problemas podem ser computados em um dado modelo de computação. Fundamentação teórica para a CC Tratamento matemático da CC

O que é? Teoria da Computação: Contextualização Questões Centrais Quais as capacidades e limitações fundamentais dos computadores? O que pode e o que não pode (problema) ser resolvido por computadores? O que faz alguns problemas serem computacionalmente mais difíceis que outros?

O que é? Teoria da Computação: Contextualização Áreas Centrais Teoria dos Autômatos definição e propriedades de modelos matemáticos de computação Teoria da Computabilidade tese de Church-Turing (algoritmos), decidibilidade e indecidibilidade Teoria da Complexidade Computacional classificação de problemas como fáceis ou difíceis (polinomiais x exponenciais).

Tipos de Problemas Não-Tratáveis: Não existe algoritmo que resolva o problema. Tratáveis: Existe um algoritmo que resolve o problema.

Como começou ? Com as perguntas: COMO ? (as linguagens são definidas) Estudo de gramáticas de Noam Chomsky Fonte: HARA, 2009

Como começou ? Continuação O QUE ? (o que conseguimos computar? o que é um algoritmo?) O algoritmo deve ser completo, finito e determinístico. completo: sempre produz um resultado finito: tem uma seqüência finita de instruções determinístico: sempre produz o mesmo resultado para a mesma entrada

Como começou ? Continuação O QUE ? (o que conseguimos computar? o que é um algoritmo?) necessidade de um modelo formal e abstrato de computação Exemplo: funções recursivas, cálculo lambda, máquinas RAM, máquinas de Turing (provado que são todos equivalentes)

Como começou ? Continuação O QUE ? (o que conseguimos computar? o que é um algoritmo?) Hipótese de Church-Turing: um problema tem uma solução algorítmica se, e somente se, pode ser resolvido por um dos sistemas computacionais mencionados na transparência anterior

Como começou ? Continuação O QUE ? (o que conseguimos computar? o que é um algoritmo?) Problemas com solução computacional ou sem solução computacional Exemplo de problemas sem solução: Determinar se um programa termina para todas as entradas possíveis Determinar se dois programas computam a mesma função

Como começou ? Continuação O QUE ? (o que conseguimos computar? o que é um algoritmo?) Um Modelo de Computação: Máquina Abstrata. Deve capturar aspectos relevantes O conj. de símb. para representar dados é finito (fin). Cada dado é representado de forma fin. A ação a ser executada em cada momento é determinada com base no dado que está sendo observado e no estado interno. Cada ação é executada mecanicamente, em tempo fin. O núm de possíveis estados internos distintos é fin.

Como começou ? Continuação O QUE ? (o que conseguimos computar? o que é um algoritmo?) Um Modelo de Computação: Máquina Abstrata. E abstrair aspectos irrelevantes A velocidade de execução. A capacidade da memória.

Como começou ? Continuação O QUE ? (o que conseguimos computar? o que é um algoritmo?) Um Modelo de Computação Deve ser tão simples quanto possível Conj. de símbolos para representar dados: {0; 1}. Apenas 1 símbolo é observado de cada vez. Uma ação consiste simplesmente em: ler um símbolo Verificar o estado atual mudar o estado interno mudar a posição de leitura do próximo símbolo Um estado interno pode ser um estado de parada.

Como começou ? QUANTO CUSTA? (computar) problemas tratáveis ou intratáveis Ex: intratáveis (tem solução com recursos ilimitados): computar todas as possíveis jogadas de xadrez com 1000 movimentos

Histórico/Evolução O que os computadores podem calcular? (~1930) ~1935 Resposta necessitava de um modelo formal de computabilidade ~1935 Kurt Göedel : funções μ-recursivas Alonso Church: λ-Calculus Alan Turing: Máquina de Turing ~1940 - Baseado nessas e em outras idéias foram construídos os primeiros computadores Esta questão tem suas origens na década de 1930. A resposta requer um modelo formal de computabilidade. Primeiros modelos de computabilidade (~1935): Kurt Göedel – funções -recursivas Alonso Church – -Calculus Alan Turing – Máquina de Turing Essas idéias levaram à construção dos primeiros computadores (~1940). A teoria da computação teve início nos primeiros anos do século XX, antes da invenção dos modernos computadores eletrônicos. Naquela época, os matemáticos estavam tentando descobrir quais problemas matemáticos poderiam ser resolvidos por um método simples, e quais não poderiam. O primeiro passo estava em definir o significado de um "método simples" para resolver o problema. Em outras palavras, eles precisavam de um modelo formal da computação. Diversos modelos diferentes da computação foram propostos pelos primeiros pesquisadores. Um modelo, conhecido como Máquina de Turing, propunha a construção de uma máquina universal, capaz de operar com uma sequência de instruções e dados entremeados em uma fita de comprimento infinito; a máquina poderia operar em um ponto da fita de cada vez utilizando um cabeçote de leitura e escrita, executando assim a programação que lhe for passada. Outro modelo, se baseia em funções recursivas compostas para operar diretamente sobre os números. Uma abordagem similar é o cálculo lambda. Outra classe de abordagens trabalha com regras gramaticais operando sobre cadeias de caracteres, como é o caso dos cadeias de Markov e dos sistemas de Post. Todos os formalismos propostos acima são equivalentes em termos de poder computacional—ou seja, qualquer computação que possa ser realizada com um modelo pode ser realizada com qualquer um dos outros modelos. Ainda em termos teóricos, os modelos propostos são equivalentes aos computadores eletrônicos, desde que não hajam restrições de memória envolvidas. Na verdade, acredita-se que todas as formalizações teoricamente possíveis para o conceito de algoritmo são equivalentes em poder a uma máquina de Turing; esta é a tese de Church-Turing. As questões relativas à possibilidade de realizar certos tipos de computação em determinados tipos de máquina (ou formalismo teórico) são investigadas pela teoria da computabilidade. A teoria da computação estuda os modelos de computação genéricos, assim como os limites da computação: Quais problemas jamais poderão ser resolvidos por um computador, independente da sua velocidade ou memória? (Ver: Problema da parada, Problema da Correspondência de Post.) Quais problemas podem ser resolvidos por um computador, mas requerem um período tão extenso de tempo para completar a ponto de tornar a solucão impraticável? (Ver: Aritmética de Presburger.) Em que situações pode ser mais difícil resolver um problema do que verificar cada uma das soluções manualmente? (Ver Classes P e NP). Em geral, as questões relativas aos requerimentos de tempo ou espaço (memória, em particular) de problemas específicos são investigadas pela teoria da complexidade computacional. Além dos modelos genéricos de computação, alguns modelos computacionais mais simples são úteis para aplicações mais restritas. Expressões regulares, são por exemplo utilizadas para especificar padrões de cadeias de caracteres, sendo populares em aplicações UNIX e em algumas linguages de programação, como Perl e Python. Outro formalismo matematicamente equivalente às expressões regulares são os autômatos finitos, que são utilizados em desenho de circuitos e em alguns sistemas de resolução de problemas. As gramáticas livres de contexto são utilizadas para especificar a sintaxe das linguagens de programação; um formalismo equivalente, são os autômatos com pilha, ou pushdown automata. As funções recursivas primitivas formam uma subclasse das funções recursivas. Modelos de computação diferentes podem realizar tarefas distintas. Uma forma de estudar o poder de um modelo computacional é estudar a classe das linguagens formais que o modelo pode gerar; o resultado é a hierarquia de Chomsky das linguagens. As tabelas abaixo mostram algumas das classes de problemas (ou linguagens, ou gramáticas) que são consideradas em teoria da computabilidade (azul) e em teoria da complexidade (vermelho). Se a classe X é um subconjunto propriamente contido em Y, então X é mostrado abaixo de Y, conectados por um linha escura. Se X é um subconjunto, mas não é sabido se os conjuntos são iguais ou não, então a linha que os conecta será mais clara e pontilhada.

Exemplos de Aplicação Análise léxica e análise sintática de linguagens de programação Modelagem de circuitos lógicos ou redes lógicas Modelagem de sistemas biológicos

Sintaxe e Semântica Linguagens Formais Sintaxe e Semântica problemas sintáticos das linguagens Sintaxe e Semântica

Sintaxe e Semântica Historicamente, o problema sintático Mais simples que o semântico Reconhecido/tratado antes do problema semântico

Sintaxe e Semântica Conseqüência Maior ênfase à sintaxe Criando a impressão que as questões relativas às resumiam-se às questões da sintaxe Teoria da sintaxe possui construções matemáticas Bem definidas e universalmente reconhecidas Exemplo: Gramáticas de Chomsky

Sintaxe e Semântica Linguagem de programação (ou qualquer modelo matemático) pode ser vista como uma entidade livre, sem qualquer significado associado juntamente com uma interpretação do seu significado

Sintaxe e Semântica Sintaxe Semântica Trata das propriedades livres da linguagem Ex: verificação gramatical de programas Semântica objetiva dar uma interpretação para a linguagem Ex: significado ou valor para um determinado programa

Sintaxe e Semântica Ou seja, a sintaxe: Para problemas reais manipula símbolos Não considera os seus significados Para problemas reais Necessário interpretar semanticamente os símbolos exemplo: estes símbolos representam os inteiros

Sintaxe e Semântica Sintaticamente "errado“ não existe tal noção de programa simplesmente não é um programa da linguagem Sintaticamente válido ("correto") pode não ser o programa que o programador esperava escrever

Sintaxe e Semântica Programa "correto" ou "errado“ se o mesmo modela adequadamente o comportamento desejado Limites entre a sintaxe e a semântica nem sempre são claros exemplo: ocorrência de um nome em um programa pode ser tratado facilmente com um problema sintático ou semântico entretanto, em linguagens artificiais distinção entre sintaxe e semântica é (em geral) óbvia para a maioria dos problemas relevantes

Sintaxe e Semântica Análise Léxica tipo especial de análise sintática centrada nas componentes básicas da linguagem portanto, também é ênfase das Linguagens Formais Processo de converter uma sequência de caracteres em uma sequência de tokens (símbolos léxicos) Verifica determinado alfabeto Vem antes da análise sintática propriamente dita

Ferramentas JFLAP SCTMF Visual Automata Simulator http://www.jflap.org/ SCTMF http://www.din.uem.br/~yandre/sctmf/ Visual Automata Simulator http://www.cs.usfca.edu/~jbovet/vas.html

Instalação do JFlap Ferramenta visual usada para criar e simular diversos tipos de autômatos, e converter diferentes representações de linguagens. JFLAP JAVA Formal Language and Automata Package - http://homepages.dcc.ufmg.br/~nvieira/cursos/tl/a05s2/relatorio_curso.doc

Instalação do JFlap JFLAP 7.0 Tutorial: http://www.cs.duke.edu/csed/jflap/tutorial/

Referências Aula WordNet - http://wordnet.princeton.edu/ Dicionário Houaiss da Lingua Portuguesa - http://houaiss.uol.com.br Wikipedia – http://www.wikipedia.org http://en.wikipedia.org/wiki/Theory_of_computation CI059 - Introdução a Teoria da Computação - Segundo Semestre de 2009 - Profa. Carmem Hara . http://www.inf.ufpr.br/carmem/ci059/ Teoria da Computação. Prof. Fabiano Sabha. http://www.fabianosabha.com.br Linguagens Formais e Automatos. Prof. Eduardo Araujo Oliveira. http://sites.google.com/site/eaoufpe/