Teoria de Categorias e Programação Funcional (25-1)

  • Professor: Hugo Nobrega
  • Turmas: 11829 (currículo novo), 15169 (currículo antigo)
  • Códigos no SIGA:
    • ICP035 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: Discord
  • Local: Lab 1 (dentro do IC)

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 no Lab 1 do IC.

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 113/5 às 20:00

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/Links
ter 18/mar00Introdução e burocraciasVídeo; Quadros
qui 20/mar01Definição e primeiros exemplos de categoriasVídeo; Quadros
ter 25/mar02Mais exemplos de categoriasVídeo; Quadros
qui 27/mar03Ainda mais exemplos de categorias; categoria livremente gerada a partir de um grafo; a noção de “preservação de estrutura”Vídeo; Quadros
ter 1/abrsem aulaSemana da Computação-
qui 3/abrsem aulaSemana da Computação-
ter 8/abr04Estrutura e preservação; funtoresVídeo; Quadros
qui 10/abr05Mais sobre estrutura e preservaçãoVídeo; Quadros
ter 15/abr06“Homomorfismos” como dívidas/pagamentos; “Geração livre” e homomorfismos; exemplos de funtorVídeo; Quadros
qui 17/abr07Inversas e isomorfismos; Prova de que “imagem direta” é um funtor Set -> SetVídeo; Quadros
ter 22/abrsem aulaFeriado enforcado (Tiradentes/São Jorge)-
qui 24/abr08Introdução a Haskell: sintaxe, tipos, classes de tipos e instânciasVídeo; Quadros; Código
ter 29/abr09Mais introdução a haskell: condicionais (pattern matching, if-then-else, case, guardas); list comprehension; definições recursivas vistas como homomorfismos saindo do “livre”Vídeo; Quadros; Código; Output do REPL
qui 1/maisem aulaFeriado (Trabalhador)-
ter 6/mai10Exemplo de tipo de dados: ArvBin; classes de tipos Semigroup, MonoidVídeo; Quadros; Código; Output do REPL
qui 8/mai11Mais sobre foldr: “para listas, com fun :: a -> b, temos que foldr fun valor é homomorfismo de (a, [a], (:), []) para (a, b, fun, valor)”; foldr para ArvBin ; folds de outras aridades; funções da biblioteca padrão para Foldable (sum, product, elem, toList, etc)Vídeo; Quadros; Código
ter 13/maisem aulaAula cancelada por falta de segurança
qui 15/mai12Corrigindo erro da aula 11 (“composta binária”); construtor de tipo Either; “fold” para tipo (e não construtor de tipo); soma, produto, potência, etc de naturais como “fold” de NaturalVídeo; Código
ter 20/mai13Classe de tipos Applicative (<*>, pure, liftA2): definição e exemplosVídeo; Quadros; Código; Output do REPL
qui 22/mai14Mais sobre Applicative; AlternativeVídeo; Quadros; Código; Output do REPL
ter 27/mai15Produtos em haskell e em categorias; exemplosSem vídeo; Quadros
qui 29/mai16Produtos de estruturas de uma assinatura; coprodutos em haskell e em categoriasVídeo; Quadros
ter 3/jun17Exemplos de coprodutosVídeo; Quadros
qui 5/jun18Mais exemplos de coprodutosVídeo; Quadros
ter 10/jun
qui 12/jun
ter 17/jun
qui 19/junsem aulaFeriado (Corpus Christi)-
ter 24/jun
qui 26/jun
ter 1/jul
qui 3/jul
ter 8/jul
qui 10/jul
ter 15/jul
qui 17/jul

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.