Primeiro quadrimestre de 2017

Turmas: A-diurno e A-noturno

Período letivo: de 07/02 a 29/04 de 2017 (mais a reposição do feriado de 28/02)

Horários e salas: ATENÇÃO PARA MUDANÇA DE SALA!!!

  • MANHÃ 3a 08:00-10:00 e 5a 10:00-12:00 --- S-209-0 S-208-0
  • NOITE 3a 19:00-21:00 e 5a 21:00-23:00 --- A-114-0 S-212-0

Professor: Jerônimo C. Pellegrini

Sala do professor: S 805 (bloco B)

Email do professor: jeronimo.pellegrini ufabc edu br

Novidades

10/05 -- Notas após o exame disponíveis
03/05 -- Pontos de lista disponíveis. Se o seu não estiver e você fez mais que duas listas, mande um email
         COM SEU RA!
03/05 -- Notas da P3 disponíveis
27/04 -- Datas da SUB e Exame marcadas
25/04 -- Listas V e VI corrigidas (havia problemas em dois enunciados)
22/04 -- Adicionada referência para Complexidade
22/04 -- Lista VI disponível
10/04 -- Lista V disponível
06/04 -- Data de revisão da P2 anunciada!
05/04 -- Notas da P2 (TODAS) disponíveis
04/04 -- Notas da P2 (somente matutino) disponíveis
02/04 -- Referência sobre diagonalização na bibliografia!
18/03 -- LISTAs 03 e 04 PARA DIA 21 até final do dia
16/03 -- Lista IV corrigida
14/03 -- AVISO: vista / revisão de prova no dia 16/03, no horário da aula!
14/03 -- Lista IV disponível. Prazo 20/03
09/03 -- Lista III disponível. Prazo 20/03
08/03 -- Notas da P1 disponíveis
20/02 -- Lista II disponível. Esta lista deve ajudar na preparação para a prova.
15/02 -- Datas das provas listadas no site
12/02 -- Lista I, exercício 2: autômato estava errado; agora está correto (baixe novamente)
11/02 -- Lista I, exercício 1.c: enunciado agora está mais claro (baixe novamente)
09/02 -- Lista I disponível
08/02 -- mudança de sala de aula!
07/02 -- início do curso

Ementa

Conceitos básicos. Linguagens regulares: autômatos determinísticos e não-determinísticos, expressões regulares. Linguagens livres de contexto: gramática, autômatos a pilha. Linguagens recursivamente enumeráveis: máquinas de Turing determinísticas e não-determinísticas. Indecidibilidade: o problema da parada. Complexidade: definição das classes P e NP

Objetivo

A disciplina tem grande importância e seus objetivos existem em várias dimensões.

Em uma dimensão prática, linguagens formais são usadas na descrição de linguagens de programação, e portanto o conhecimento delas é essencial ao trabalho em Compiladores, Interpretadores e outros programas similares; usam-se autômatos em descrições formais dos mais variados tipos -- de dispositivos eletrônicos a protocolos abstratos; autômatos são objetos fundamentais em verificação de modelos, e descrevem convenientemente cadeias de Markov, usadas para modelar uma vasta quantidade de processos probabilísticos.

A disciplina também aborda os fundamentos teóricos da Computação, uma vez que identifica o modelo abstrato que descreve tudo o que pode ser efetivamente realizado por computadores; permite compreender estruturas descrevendo-as como linguagens, sendo por isso de grande valor.

Há também outro aspecto da disciplina que não pode ser ignorado: o treinamento em abstração e raciocínio rigoroso, trabalhado também nas disciplinas de Matemática Discreta e Teoria dos Grafos.
A habilidade de implementar algoritmos já definidos tem característica operacional, trabalha o concreto. Já a habilidade de modelar e demonstrar fatos relaciona-se com o abstrato, e permite reusar soluções de problemas e encontrar outras, mais simples do que as já conhecidas.

Além disso, para qualquer assunto pode haver aplicações inusitadas. Vejam, por exemplo, o programa Context Free Art, que constrói imagens a partir de gramáticas livres de contexto.

Os objetivos específicos são dados a seguir.

  • Construir autômatos, gramáticas e expressões regulares para linguagens
  • Provar que linguagens são, ou que não são, regulares, livres de contexto e recursivamente enumeráveis
  • Demonstrar propriedades simples de linguagens
  • Compreender conceitos básicos relacionados a computabilidade

Requisitos

Oficialmente a Universidade recomenda Programação Estruturada, mas deve-se dar atenção também à posição da disciplina na grade curricular do Bacharelado em Computação -- NÃO se trata de disciplina introdutória!

Avaliação

O conceito final da disciplina poderá ser:

  • F - Reprovado. O aluno deve cursar novamente a disciplina.
  • C - Desempenho mínimo satisfatório, demonstrando capacidade de uso adequado dos conceitos da disciplina, habilidade para enfrentar problemas relativamente simples e prosseguir em estudos avançados.
  • B - Bom desempenho, demonstrando boa capacidade de uso dos conceitos da disciplina.
  • A - Desempenho excepcional, demonstrando excelente compreensão da disciplina e do uso da matéria.

Faremos três avaliações escritas com duas horas de duração: P1, P2 e P3. Cada avaliação vale exatamente 0, 1, 2 ou 3. A nota final é a soma das notas das provas, com mais um ponto para quem fizer as listas de exercícios (direi mais sobre isto depois).

AS AVALIAÇÕES SERÃO REALIZADAS SEM CONSULTA A QUALQUER MATERIAL!

COLA/PLÁGIO RESULTAM EM F NA DISCIPLINA

As notas serão convertidas em conceito de acordo com a seguinte regra: seja n a soma das notas das provas e do ponto de exercícios. Então o conceito final será:

  • n ∈ [0, 5)→F
  • n ∈ [5, 7)→C
  • n ∈ [7, 9)→B
  • n ∈ [9, 10]→A

Datas das avaliações

  • P1: 23/02
  • P2: 23/03
  • P3: 27/04
  • Subtitutiva: 02/05, horário da aula
  • Exame: 09/05, horário da aula

EXAME:

Calcule (P1 + P2 + P3 + E)/2, some com a nota das listas, e aplique a tabela novamente.

Exercícios

Conceitos

Notas:

Programa

Este programa está sujeito a mudanças simples. Grandes mudanças não devem acontecer.

Tentaremos seguir de perto a abordagem no livro do Michael Sipser, mas em alguns momentos teremos que recorrer a outras referências.

No programa a seguir há indicação de trechos de livros indicados para cada tópico.

I - LINGUAGENS REGULARES

  1. Autômatos finitos :: Sipser 1.1 | Hopcroft 2.1, 2.2
  2. Autômatos finitos não-determinísticos :: Sipser 1.2 | Hopcroft 2.3, 2.5
  3. Expressões regulares :: Sipser 1.3 | Hopcroft 3
  4. Gramáticas regulares :: A DEFINIR
  5. Propriedades de linguagens regulares :: Hopcroft 4.2, 4.3
  6. Lema do bombeamento :: Sipser 1.4 | Hopcroft 4.1

II - LINGUAGENS LIVRES DE CONTEXTO

  1. Gramáticas livres de contexto :: Sipser 2.1 | Hopcroft 5.1
  2. Ambiguidade :: Sipser 2.1 | Hopcroft 5.2, 5.4
  3. Autômatos com pilha :: Sipser 2.2 | Hopcroft 6
  4. Propriedades de linguagens livres de contexto :: Hopcroft 7.3-7.4
  5. Lema do bombeamento :: Sipser 2.3 | Hopcroft 7.2

III - LINGUAGENS RECURSIVAMENTE ENUMERÁVEIS

  1. Máquinas de Turing :: Sipser 3.1 | Hopcroft 8
  2. Agoritmos, linguagens recursivas e recursivamente enumeráveis :: Sipser 3 | Hopcroft 8
  3. Modelos de computação: funções recursivas e λ-Cálculo :: Jung | Rojas
  4. Decidibilidade e problema da parada :: Sipser 4 | Hopcroft 9
  5. Reduções e indecidibilidade :: Sipser 5

IV - CLASSES DE COMPLEXIDADE

  1. Noções de complexidade computacional. Classes P e NP :: Notas de Criptografia, Apêndice C: [ C.1 antes de C.1.1 ]; C.4; [ C.6 excetp classes BPP e PSPACE]; [ C.7 até antes de C.7.1 ] | Papadimitriou-Steiglitz 8.1-8.5, 15

Bibliografia

Principal

  • SIPSER, M. "Introdução à Teoria da Computação." Thomson, 2007. 59 exemplares em SA, 30 em SBC [ 511.3 SIPi2 ]
  • J.E. HOPCROFT, R. MOTWANI, J.D. ULLMAN. "Introdução à teoria de autômatos, linguagens e computação". Campus, 2003. 7 exemplares em SA, 1 em SBC [ 511.3 HOPi2 ]
  • H. R. LEWIS, C. H. PAPADIMITRIOU. "Elementos de Teoria da Computação" (2ª ed.) Bookman, reimpressão de 2008 13 exemplares em SA, alguns em SBC [ 511.3 LEWe2 ]
  • S. DASGUPTA; C. PAPADIMITRIOU; U. V. VAZIRANI "Algoritmos" McGraw-Hill, 2009. 25 exemplares em SA, 1 em SBC [ 518.1 DASa ]
  • A. JUNG "A Short Introduction to the λ-Calculus"
  • R. ROJAS "A Tutorial Introduction to the λ-Calculus"
  • Notas de matemática discreta (leia o Capítulo dois; se precisar, o Capítulo um também pode ser útil)
  • Notas de Criptografia.

Secundária

  • YAN, S. Y. "An Introduction to Formal Languages and Machine Computation", World Scientific Publishing Company, 1998. [ 004.0151 YANin ]
  • RICH, E. A. "Automata, Computability and Complexity: Theory and Applications", Prentice Hall; 1st edition, 2007. [ 511.3 RICHau ]
  • ANDERSON, J. "Automata Theory with Modern Applications", Cambridge University Press, 2006. [ 511.3 ANDEau ]
  • SHALLIT, J. "A Second Course in Formal Languages and Automata Theory", Cambridge University Press, 1st edition, 2008. [ 005.131 SHAs ]
  • SALOMAA, Arto. "Computation and automata". Cambridge University Press, 1985. (Encyclopedia of mathematics and its applications, v. 25). [ 511.3 SALc ]
  • XAVIER, Eugene. "Theory of automata, formal languages and computation". New age, 2004. [ 511.3 XAVIth ]
  • C. H. PAPADIMITRIOU, K. STEIGLITZ. "Combinatorial Optimization: algorithms and complexity". Dover, 1998. 3 exemplares em SA [ 519 PAPAco ]
  • D. BRIDGES "Computability : a mathematical sketchbook". Springer, 1994 [ 511.3 BRIc ]
  • Notas de Semântica de Linguagens de Programação, Cap. 8 (sobre λ-Cálculo)