Linguagens Formais e Automata
Primeiro trimestre de 2009
Horário: alfa (4ª 8-10, 6ª 10-12)
Sala de aula: S 504 (bloco B)
Sala do professor: S 805 (bloco B)
Email do professor: jeronimo.pellegrini ufabc edu br
Novidades:
18/05 -- CONCEITOS FINAIS
18/05 -- Notas da lista 13
18/05 -- Notas da prova 2 disponíveis
18/05 -- Questão 7 da primeira seção do Jung (da lista 13) anulada
16/05 -- Notas das listas atrasadas (12)
09/05 -- Pequeno erro na lista 13 corrigido (onde se lia ``(λ • y axa)'', agora se lê ``(λ y • axa)''
08/05 -- Notas da lista 11
08/05 -- Notas da lista 12
08/05 -- Lista 12 teve um exercício cancelado
07/05 -- Mais duas notas da lista 5 (estavam por corrigir)
02/05 -- Lista 13 disponível
02/05 -- Indicação de leitura (tutorial de λ-cálculo de Raúl Rojas)
01/05 -- Indicação de leitura (Arora/Barak, capítulo sobre Computação Quântica)
01/05 -- Indicação de leitura (tutorial de λ-cálculo de Achim Jung)
25/04 -- Link para gerador de imagens a partir de gramáticas livres de contexto
16/04 -- Prazo da lista 12 adiado (1º de Maio é feriado!)
16/04 -- Cronograma alterado: 1º de Maio é feriado!
16/04 -- Lista 12 disponível
16/04 -- Notas remanescentes de listas atrasadas já computadas
16/04 -- Notas da lista 5
15/04 -- Notas da lista 10
15/04 -- Programa do curso mudou (Computabilidade Quântica incluída)
15/04 -- Mais indicações de livros (bibliografia secundária, Lanzagorta/Uhlmann e Marinescus)
11/04 -- Notas da lista 9
11/04 -- A partir de agora, lista com atraso tem desconto!
10/04 -- Lista 11 disponível
09/04 -- Notas da prova disponíveis
31/03 -- QUEM QUISER REFAZER AS LISTAS 6 E 8 PODERÁ FAZÊ-LO UMA VEZ!
30/03 -- Lista 10 disponível
30/03 -- Lista 5 adiada novamente
30/03 -- Notas da lista 8
30/03 -- Mais uma indicação de livro (bibliografia secundária, Aho/Sethi/Ullman/Lam)
27/03 -- Média das listas já corrigidas adicionadas à tabela de notas
27/03 -- Notas da lista 7
27/03 -- Notas da lista 6
27/03 -- Notas da lista 4
26/03 -- Textos sobre análise sintática disponíveis (link na seção de bibliografia principal)
26/03 -- Mais uma indicação de livro (bibliografia secundária, livro do Louden)
20/03 -- Notas da lista 3
18/03 -- Prazo do exercício 5 extendido
17/03 -- Lista 9 disponível
17/03 -- Notas das listas já entregues disponíveis
16/03 -- Lista 8 (FÁCIL: refazer exercício feito em sala) disponível
13/03 -- MAIS UM LIVRO NA BIBLIOTECA (e na bibliografia principal): Lewis & Papadimitriou
12/03 -- Lista 7 disponível
11/03 -- Lista 6 disponível
11/03 -- Lista 4 reestruturada, lista 5 disponível
06/03 -- Lista de exercícios 4 disponível
27/02 -- O LIVRO DO SIPSER (EM PORTUGUÊS) ESTÁ DISPONÍVEL NA BIBLIOTECA! (Comemorem!)
27/02 -- Lista de exercícios 3 disponível
12/02 -- Primeiras listas de exercicios disponíveis
Assuntos Relacionados
Context Free Art
Alguém encontrou uma forma de produzir imagens (algumas bastante interessantes) usando
gramáticas livres de contexto! Vejam o Context Free Art
(tem um programinha para baixar e usar em casa -- vocês mesmos podem criar gramáticas para
gerar imagens).
Ementa
Linguagens Regulares. Linguagens Livres de Contexto. Linguagens Enumeráveis Recursivamente e Sensíveis ao Contexto. Hierarquia de
Chomsky. Indecidibilidade.
Avaliação
Há três notas:
- E = listas de exercícios
- P1 = prova 1
- P2 = prova 2
Uma nota final será composta da seguinte forma:
N = (E + 3P1 + 4P2 / 8)
O conceito final na disciplina será dado por:
- F, se N < 5
- C, se N ≥ 5
- B, se N ≥ 7
- A, se N ≥ 9
Exercícios
TODOS OS EXERCÍCIOS DEVEM SER MANUSCRITOS, SEM O USO DE IMPRESSORA!
Em todas as listas, façam apenas os exercícios que não estão já respondidos no livro.
A partir da lista 11, entregas atrasadas terão desconto!
Notem: × = entregue ecorrigido. ∗ = entregue, ainda não corrigido.
- × Exercícios (e problemas) do Capítulo 0 do Sipser (segunda edição) -- somente os que não vem com resposta no livro. Prazo: 27/02
- × Exercícios do Capítulo 0 do Carroll/Long (Somente 0.13, 0.24--0.27, 0.29--0.31). Prazo: 04/03
- × Exercícios 1.4--1.6, 1.12, 1.31--1.33 e problema 1.45 do capítulo 1 do Sipser. Prazo: 13/03
- × Exercícios 1.14 e 1.15, e problemas 1.34-1.36 do capítulo 1 do livro do Sipser, 6.3--6.5 e 6.43 de Carroll/Long,
37, 38, 39 e 41 do capítulo 1 do livro do Xavier. Prazo: 18/03
- × Seja o operador c tal que, para quaisquer linguagens A e B,
c(A,B) = {w | w ∈ A, ∃ w' ∈ B tal que |w| = |w'|} ∪
{w | w ∈ B, ∃ w' ∈ A tal que |w| = |w'|}.
Descreva informalmente o conjunto c(A,B), e prove que as linguagens regulares são (ou que não são) fechadas
sob a operação c.
Prazo: 20/03 04/04 15/04
- × Faça o problema 1.46 do capítulo 1 do Sipser. Prazo: 25/03
- × Faça os problemas 1.53, 1.55, 1.63 do capítulo 1 do Sipser. Prazo: 25/03
- × Em sala de aula, vimos a prova de que L não é regular, onde L = { an | n é primo }.
Refaça a prova, cuidadosamente e com muita clareza. Você pode usar o seguinte fato
(no enunciado, todas os números são inteiros ≥ 0):
∀ c, não existem a, b tais que:
- c = a+b
- ∀ k ≥ 0, a + kb é primo
(basta tomar k = 2a e verificar -- inclua isto em sua prova!)
Atenção: nesta questão você deve mostrar que consegue expressar claramente, de maneira simples
porém rigorosa o raciocínio (que já vimos em sala). Não complique a prova, tenha certeza que
o raciocínio está claro e fácil de seguir.
Prazo: 27/03
- × Faça os exercícios 3.1.2, 3.1.3, 3.1.5 e 3.1.9 do capítulo 3 do Lewis & Papadimitriou. Prazo: 01/04
- × Faça os exercícios 4.4.3, 4.4.4 e 4.5.3 do Aho/Sethi/Ullman/Lam.
♦ Ao fazer o exercíco 4.5.3, mostre
a configuração (pilha + símbolos a serem lidos) em dois momentos, um deles na iminência de
uma redução e outro na iminência de um deslocamento.
♦ Use a definição de FIRST e FOLLOW que ele dá no livro, ou a de φ e Δ dada nas notas de aula que deixei neste site. Prazo: 15/04
♦ Quando ele pede ``give bottom-up parses'', isto significa todo o processo de parsing (passo a passo).
- × Faça o exercício 3.8 e o problema 3.14 do Capítulo 3 do Sipser. Prazo: 22/04 Após o prazo haverá desconto na nota!
- × Faça o exercício 5.4 e os problemas 5.13, 5.17 e 5.24 do Capítulo 5 do livro do Sipser e o exercício
9.3.2 do livro do Aho. Prazo: 01/05 06/05
Na verdade era para ser o exercício do Hopcroft; como errei e disse "Aho", esta parte da lista está cancelada.
- × (Esta lista é fácil!) Prazo: 13/05 (dia da prova) -- MAS RECOMENDO TENTAR FAZER E TIRAR DÚVIDAS MUITO ANTES DISSO!
- Ache a forma normal dos termos (é mais fácil se você der nomes a subtermos):
- (λ e • eue) (abc)
- (((λ x • (λ y • axa)) q) r)
- (λ a • (λ x • xaux)) (λ y • yy)
- Determine os tipos dos termos e dos átomos cujos tipos não estão especificados:
- (λ w:CHAR • x:INT)
- (λ x:INT • (λ u:INT • a:CHAR))
- (λ x:CHAR • (λ u:INT • a:INT)) (λ j:INT • k)
- O tutorial do Jung tem duas pequenas listas de exercícios (seções 8 e 15). Faça os exercícios 2, 3, 4 e 7 da seção 8 e o
exercício 4 da seção 15. Ponto extra para quem dizer o exercício 8 da seção 8.
- Descreva uma gramática que gere infinitos λ-termos sem forma normal. Prove que qualquer palavra gerada por sua gramática é
um λ-termo sem forma normal.
- Mostre que o λ-cálculo pode gerar linguagens livres de contexto.
Notas
Notem: como eu havia mencionado, a parte final da disciplina é mais difícil e precisa de mais dedicação. Este certamente é
o motivo da queda na média das notas da P1 para a P2.
Veja as notas das listas e provas até agora.
Programa aproximado
Este programa está sujeito a mudanças simples. Grandes mudanças não devem acontecer.
Bibliografia
Principal
Tentaremos usar principalmente o livro do Michael Sipser, mas em alguns momentos usaremos outros livros.
Peguem as erratas dos livros nos sites dos autores!
- Sipser Sisper, M. "Introdução à Teoria da Computação." Thomson, 2007
- Hopcroft/Motwani/Ullman J.E. Hopcroft, R. Motwani, J.D. Ulman. "Introduction to automata theory, languages and computation". Addison-Wesley, 2001
- Lewis/Papadimitriou H. R. Lewis, C. H. Papadimitriou. Elementos de Teoria da Computação (2ª ed.) Bookman, reimpressão de 2008
Há também dois textos sobre análise sintática, usados em um curso na Unicamp em 2000. Um sobre análise descendente e
outro sobre análise ascendente. Estes são para ler devagar.
Secundária
- Hopcroft/Ullman J.E. Hopcroft, J.D. Ulman, "Formal Languages and Their Relation to Automata". Addison-Wesley, 1979. Este é mais difíicl que os da bibliografia principal.
- Carroll/Long Carrol, J.; Long, D. "Theory of Finite Automata with an introduction to formal languages". Prentice Hall, 1989. Bom livro, com muitos exercícios.
- Salomaa A. Salomaa, "Formal languages". Acad. Press, 1973. Só para quem se interessar muito pelo assunto. Não é um livro fácil.
- Shallit Shallit, J. "A Second Course on Formal Languages and Automata Theory" .Cambridge University Press, 2009. Excelente livro para quem tiver gostado do curso.
- Xavier Eugene Xavier, "Theory of Automata, Formal Languages and Computation". New Age, 2005.
Pouca conversa, muitos exemplos e muitos exercícios.
- Shen Shen, A.; Vereshchagin, "Computable Functions". AMS, 2003.
- Davis Davis, M. "Computability and Unsolvability". Dover, 1982. Um livro clássico, muito conhecido, e muito bem escrito. Para quem gostou de Computabilidade tentar ler (devagar).
- Chiswell Chiswell, I. "A Course in Formal Languages, Automata and Groups" Springer, 2009.
- Louden Louden, K. Compiladores: princípios e práticas. Thomson, 2004. De todos os livros sobre compiladores, este é um dos mais claros. Os capítulos 3, 4 e 5
falam sobre Gramáticas Livres de Contexto e Análise Sintática.
- Aho/Sethi/Ullman/Lam Aho, Sethi, Ullman e Lam. Compilers: principles, techniques & tools 2 ed. Pearson, 2007. Outro ótimo livro sobre Compiladores.
- Lanzagorta/Uhlmann Lanzagorta, M. Uhlmann, J. Quantum Computer Science Morgan & Claypool, 2009. Um livro que apresenta, em um nível de abstração alto, um pouco de
Algoritmos Quânticos e Computabilidade Quântica. Razoável, mas o Arora/Barak me pareceu melhor.
- Marinescus Dan Marinescu & Gabriela Marinescu. Approaching Quantum Computing Pearson Prentice Hall, 2005. Mais detalhes que o Lanzagorta/Uhlmann. Um bom ponto de partida
para quem quiser trabalhar com algoritmos quânticos.
- Jung Jung, A. A short introduction to the λ-calculus. Uma boa introdução, não muito formal. Tem uma foto do Church na primeira página... O texto está disponível na página de tutoriais dele.
- Rojas Rojas, R. A Tutorial Introduction to the Lambda Calculus Outro tutorial interessante. Disponível na página do autor
- Arora/Barak Arora, S.; Barak, B. Computational Complexity: A Modern Approach Um dos poucos livros que conseguem expor Computação Quântica para quem tem formação em Computação. Se não quiser ler o livro dos Marinescus e só quiser ter uma noção de como funciona Computação Quantica, pegue este livro e leia o capítulo dez.