Teoria de Categorias e Programação Funcional (2023.2)

  • Professor: Hugo Nobrega
  • Turma 11974
  • Códigos no SIGA:
    • ICP35 Tóp. Esp. em Teoria da Computação I (currículo novo BCC)
    • ICP531 Tóp. Especiais em Teoria dos Grafos (currículo antigo BCC)
  • Grupo de discussões: Telegram
  • Fotos dos quadros: (a definir)
  • Local: Sala DCC (dentro do Instituto de Computação, segundo andar)

Funcionamento da disciplina

O meio primário de comunicação entre os alunos, monitores e professores será o grupo no Telegram listado acima.

As aulas serão realizadas em modalidade presencial, com aulas às 3as e 5as de 15:00 às 17:00 na sala DCC.

Bibliografia

Não seguiremos nenhum livro texto específico; nossas principais referências são o livros:

  • Milewski - Category Theory for Programmers: livro voltado para introduzir categorias para pessoas com perfil de programação. Livro gratuito!
  • Menezes, Haeusler - Teoria das Categorias para Ciência da Computação: idem acima, mas com uma pegada um pouco mais teórica (e em português!). Um pouco difícil de achar.
  • Leinster - Basic Category Theory: outro livro gratuito sobre teoria de categorias (recomendado por um ex-aluno da disciplina).
  • Awodey - Category Theory: livro mais no estilo “preciso”, e voltado principalmente para um público da matemática, mas que serve bem como referência.

Playlists de Youtube:

Outros livros (em ordem alfabética):

Outros links interessantes:

Listas de Exercícios

ListaData Limite de Entrega
Lista 14 de outubro às 23:59

Regras de colaboração

As listas de exercícios podem ser entregues em duplas. Não poderá haver repetição de duplas em diferentes listas! Isso é feito para aumentar a confiança do professor ao dar uma nota individual para cada aluno no final da disciplina.

As diferentes duplas podem sempre discutir os problemas e as ideias de como resolvê-los (e isso é recomendado, pois é uma ótima forma de estudar e aprender!), porém: soluções de exercícios não devem ser compartilhadas entre diferentes duplas (nem de outros períodos). O recomendável é que você não mostre suas soluções completas para alunos de outras duplas, nem veja as soluções completas de outros.

Soluções iguais ou parecidas demais entre duplas diferentes serão desconsideradas.

Cronograma planejado/registro de atividades

DataAulaConteúdoQuadros
qui 10/81Introdução à disciplina; discussão sobre abstração0 a ?
ter 15/8-sem aula
qui 17/8-sem aula
ter 22/82Mais discussão sobre abstração e programação funcional
qui 24/83Definição informal de categorias e exemplos? a 24
ter 29/8-sem aula
qui 31/84Definição formal de categorias e exemplos25 a 31
ter 5/95Mais exemplos de categorias; a ideia de estruturas e preservação32 a 40
qui 7/9-sem aula
ter 12/96Preservação de estrutura (homomorfismos)41 a 51
qui 14/97Preservação de estrutura em categorias: Funtores52 a 64
ter 19/98Exemplos de funtor Set -> Set: “imagem direta”; discussão de funtores Prog -> Prog65 a 74
qui 21/99Introdução a Haskell; funtores em Haskell; código; output do REPL75 a 77
ter 26/910Mais introdução a Haskell: “condicionais” via pattern matching, if-then-else, case, guards; classes de tipos Show, Eq, Ord; construtor de tipos ArvBin + declaração de funtor; código; output do REPL78
qui 28/9
ter 3/10
qui 5/10
ter 10/10
qui 12/10-sem aula
ter 17/10
qui 19/10
ter 24/10
qui 26/10
ter 31/10
qui 2/11-sem aula
ter 7/11
qui 9/11
ter 14/11
qui 16/11
ter 21/11
qui 23/11
ter 28/11
qui 30/11
ter 5/12
qui 7/12
ter 12/12
qui 14/12
ter 19/12
qui 21/12

Método de avaliação

~5 listas de exercícios, com descarte de ~1 pior(es) nota(s). Não há prova final; a nota para aprovação ao final do período é 5,0.