http://www.pedro.jmrezende.com.br/tc.htm
Ciência da Computação - UnB
Prof.: A
DESIGNAR
Semestre 2019.2: Terça e Quinta,
19:00 às 20:40h – Local: PJC
BT 044
Mantenha-se em contato com esta página até o
final do semestre.
Notas, prazos, tarefas, avisos, etc. serão
divulgados aqui.
Esta página
contém partes atualizadas periodicamente.
Primeira
versão: 07.08.2019 -
Ultima atualização: 11.12.2019
Menções
finais
Material
do curso
Apresentação
Objetivos
Programa
Metodologia
Avaliação
Datas, provas e pesos
Listas de Exercícios
Bibliografia
Qual a origem e os fundamentos da computação, quais são os seus limites, inclusive evolutivos?
Qual a base para a crença de que tais limites existem, e como compreendê-los?
Esses limites seriam outros se os fundamentos e o caminho trilhado nesta evolução fossem outros?
Os profissionais da informática devem ter uma compreensão adequada ou suficiente dessas questões? Até que ponto?
Essas questões são abordadas na disciplina Teoria da Computação. Ao longo do semestre, conheceremos as idéias formais que deram respostas às tres primeiras. Respostas cujos desdobramentos resultaram na Ciência da Computação, e por conseguinte na informática, que temos hoje. Quanto à última questão, nossa abordagem buscará respondê-la, com a colaboração dos alunos, também ao longo do semestre.
Estudaremos os modelos computacionais mais relevantes (autômatos, máquinas abstratas, gramáticas gerativas), seu poder expressivo ou computacional (computabilidade, decidibilidade), e relações importantes entre os mesmos (hierarquia de Chomski). Também, as relações entre esses modelos e os processos produtivos na microeletrônica, no desenvolvimento de softwares, e na resolução de problemas computacionais (aplicações, complexidade), inclusive históricas (hipótese de Church-Turing). Para isso, precisamos aprender a ler (e entender) e a escrever em um formalismo capaz de permitir a formulação dos conceitos e a compreensão dos resultados. Estudaremos, pois, esses temas por meio deste formalismo. Começaremos com (uma rápida revisão d)o mínimo de linguagem matemática necessária para tal, coberta nos pre-requisitos desta disciplina.
A ementa oficial da disciplina é a seguinte
1 - Fundamentos
Revisão de conceitos matemáticos
2 - Linguagens formais e autômatos
Linguagens regulares, autômatos finitos (máquinas de estado), expressões regulares, não-determinismo
Gramáticas livres de contexto, autômatos de pilha
3 - Computabilidade
Máquina de Turing
A hierarquia de Chomski e a tese de Church-Turing
Decidibilidade e Redutibilidade
4 - Complexidade
Temporal
Espacial
A bibliografia a ser seguida tem como referência o livro de Michael Sipser, "Introdução à Teoria da Computação", e/ou Hopcroft, Ullmand & Motwani, "Introdução à Teoria de Autômatos, Linguagens e Computação". As aulas expositivas seguirão o material preparado pelo professor anterior da disciplina, que seleciona e condensa tópicos cobertos por Sipser, não necessariamente na mesma ordem. O conteúdo de ambos os livros de referência é mais amplo do que o tempo e o contexo da disciplina nos permite cobrir, mas dele veremos o suficiente para cobrir quase toda a ementa.
As aulas terão como roteiro as transparências linkadas no segundo bullet do item “Material e Ferramentas de Referência” da Bibliografia (no final desta página), complementadas por conteúdo da Wikipedia (para os tópicos Máquina Universal de Turing, Hipótese de Church-Turing, Hierarquia de Chomski, e Teorema de Cook-Levin), além de exercícios com a ferramenta JFlap, linkada para download no quinto bullet do mesmo item da Bibliografia.
Para atividades fora de aula, serão passadas listas de exercícios (no próximo tópico desta página), pelo menos a primeira de entrega obrigatória (valendo nota). As demais listas, de entrega opcional, serão avaliadas caso, ao final do semestre, o aluno queira, com a média destas, arredondar a média de pontos da avaliação, em até dois décimos de ponto (escala 0 a 10). A 1ª lista, que será corrigida com comentários e devolvida antes da primeira prova. Esta lista cobre o mínimo em linguagem matemática necessária para abordarmos o programa da disciplina. Os comentários na correção desta 1ª lista visam, portanto, a permitir que o aluno possa balizar sua fluência nesse conteúdo básico presumido dos pré-requisitos, além de ter uma ideia de como serão avaliadas as provas (mas não do conteúdo das provas).
O professor estará disponível para atendimento aos alunos mediante agendamento por e-mail.
Aluno |
Lista |
Prova1 |
Prova2 |
Faltas |
Menção |
12/0066751 |
4.5 |
5.3 |
5.2 |
|
MM |
15/0073208 |
7.5 |
8.1 |
6.1 |
|
MS |
16/0166179 |
10.0 |
7.8 |
6.3 |
|
MS |
18/0124684 |
2.5 |
8.3 |
6.3 |
|
MM |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Datas, Provas e Pesos -
Haverá duas provas escritas, a primeira no começo da nona semana do semestre letivo, em 10/10, cobrindo os itens 1) e 2) da ementa, e a segunda no final do semestre, em 10/12, cobrindo os itens 3) e 4).
Média das listas obrigatórias, peso = 2
Primeira prova, peso = 4
Segunda prova, peso = 4
Listas obrigatórias serão aceitas com atraso mediante redução na nota máxima. Não haverá prova de reposição.
1a. Lista de Exercícios (com exercícios do Sipser) - obrigatória para entrega a ser marcada ao final do tópico 1.
Faça quatro das seguintes
questões
1.5.4- Mostre, com argumentos
lógicos, que se A e B são conjuntos finitos quaisquer, então
existem |B||A| funções com domínio em A e contradomínio
em B. Determine quantas dessas funções são bijetoras. E quantas
são sobrejetoras?
1.5.6- Mostre que em
qualquer grupo de no mínimo duas pessoas, há pelo menos duas que
têm o mesmo número de conhecidos dentro do grupo, considerando que
a relação "conhecido de" é simétrica (use o princípio
da correspondência).
1.5.9- Um conjunto
enumerável é um conjunto que pode ser domínio ou contradomínio de
uma bijeção com os números naturais. Mostre o seguinte: Se
soubermos que A é um conjunto não-enumerável, e B um subconjunto
enumerável de A, então A - B (isto é, A sem os elementos de B) é
também não-enumerável. (Sugestão: use argumento por
contradição)
*-Considere a linguagem formal L = {0, 1}+.
Se a cada cadeia de L associarmos o número natural que ela
representa no sistema numérico posicional binário, tal associação
descreve uma função de L em N (conjunto
dos números naturais) que é sobrejetora, porém não é injetora.
Descreva como obter um subconjunto de L por meio de duas operações
envolvendo L e subconjuntos de L, sobre o qual a mesma função será
também injetora (e portanto, bijetora). (Obs: as operações com
linguagens formais estão descritas na lâmina 2 das transparências
a4)
1.6.2- O fecho transtitivo de uma relação
R sobre A é a menor relação transtiva sobre A que contém R
(tomando a definição de relação como subconjunto de um produto
direto, "menor" significa minimal, isto é, qualquer
subconjunto próprio dele deixa de satisfazer a propriedade que o
define).
Se A = {a, b, c, d, e} e R = {(a,b),
(a,c), (a,d) , (d,c), (c,e)}, descreva o fecho transitivo reflexivo
R* (Se voce não se lembra como "completar" uma relação
para obter o fecho, consulte um livro; se quiser, represente R* por
um grafo dirigido, onde a aresta dirigida a->b representa (a,b)
)
1.6.5- Dê um exemplo de uma relação sobre
um conjunto que não é reflexiva, mas seu fecho transitivo é
reflexivo.
2. *- Explique, usando argumentos lógicos
e o lema do bombeamento, por que a linguagem L = {0n1n
| n é número natural } não é regular, ou seja, não pode ser
aceita por um automaton finito.
Responda por
completo os ítens da questão 2.4.8 do livro texto H.U.
2.4.8-
As seguintes declarações são verdadeiras ou falsas? Explique sua
resposta em cada caso (Para todas elas, é assumido um alfabeto S
fixo).
a) Cada subconjunto de uma linguagem
regular é regular;
b) Cada linguagem regular tem um subconjunto
próprio (com pelo menos um elemento a menos) regular;
c) Se L é
regular, então assim também é {xy tal que x pertence a L e y não
pertence a L};
d) A linguagem {w tal que w = wR } é
regular;
e) Se L é uma linguagem regular, assim também é a
linguagem {w pertencente a L tal que wR também pertence a
L}
f) Se C é um conjunto qualquer de linguagens regulares,
então também é o conjunto formado pela união dessas linguagens
g)
{wxwR onde x e w pertencem a S*} é regular.
Responda os seguintes itens dos
seguintes problemas do livro texto
3.5.1- Mostrar que as
seguintes linguagens são livres de contexto.
a) {ambn
onde m e n são números naturais distintos}.
b) {a,b}*
- {anbn onde n é um número natural};
e) {w
pertencente a {a,b}* tal que w=wR}
3.5.2-
Mostrar que as seguintes linguagens não são livres de
contexto.
c) {www tal que w pertence ao conjunto
{a,b}* }.
d) {w pertencente a {a,b,c}*
onde w tem números iguais de ocorrências de a, b e c};
Quais modelos computacionais voce
conheceu através desta matéria?
Desses modelos, quais admitem
variantes?
Desses modelos, quais admitem mais de uma semântica
(interpretação do funcionamento), quais não?
Dos que admitem
mais de uma semântica, como você as descreveria?
Dos que
admitem mais de uma variante, quais variantes alteram o poder
expressivo do modelo, quais não?
A menos de variantes
equivalentes, quais modelos/semânticas guardam relação de menor,
maior, ou igual poder expressivo, citando exemplos se possível?
Como
voce hierarquizaria essas relações, e como voce descreveria a
hipótese que "fecharia" esta hierarquia no seu topo?
O
que é o "problema da parada", e como vc descreveria sua
importância para a teoria da computação?
O que são classes
de complexidade computacional?
Quais dessas classes voce
considera mais importantes, e por que?
Material e Ferramentas de Referência:
Michael Sipser: "Introdução à Teoria da Computação", Editora Thompson, Tradução 2a. ed., 2007
Roteiros de aula (de autoria do prof. Guilherme Pinto), apresentados ao longo do semestre: a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a15, a16, a17, a21, a22, a23, a24.
Notas Complementares: Anotações de aula em alguns tópicos (p. ex. Semânticas de máquinas de Turing)
Uma máquina de Turing universal,(Hopcropft & Ullman, em ingles)
Software para simulação de modelos computacionais relevantes:
JFLAP: http://www.jflap.org [jflap.jar] 6.0 (requer Java Runtime Environment)
Textos complementares:
John Hopcroft, Jeffrey Ullman & Rajeev Motwani: "Introdução à Teoria dos Autômatos, Linguagens e Computação", Editora Campus, 2003. Site do livro: http://www-db.stanford.edu/~ullman/ialc.html
Roteiros de aula do prof. Pedro Rezende (para Autômatos e Computabilidade): ac1, ac2, etc.
Outros textos sobre o tema:
Harry Lewys & Christos Papadimitriou: "Elementos de Teoria da Computação", Ed. Bookman, Porto Alegre, 2a. ed., 2000.
John Hopcroft, Rajeev Motwani & Jeffrey Ullman: "Introduction to Automata Theory, Languages and Computation", Addison Wesley Longman Inc., Reading, Massachussetts, USA, 2nd edition, 2001.
Michael Sispser: "Introduction to the Theory of Computation". PWS Publishing Company, Boston, 1997.