Teoria de Categorias e Programação Funcional (23-2)

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:

Playlists de Youtube:

Outros livros (em ordem alfabética):

Outros links interessantes:

Listas de Exercícios

Lista Data Limite de Entrega
Lista 1 4 de outubro às 23:59
Lista 2 4 de dezembro às 23:59
Lista 3 23 de dezembro à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

Data Aula Conteúdo Quadros/Links
qui 10/8 1 Introdução à disciplina; discussão sobre abstração 0 a ?
ter 15/8 - sem aula
qui 17/8 - sem aula
ter 22/8 2 Mais discussão sobre abstração e programação funcional
qui 24/8 3 Definição informal de categorias e exemplos ? a 24
ter 29/8 - sem aula
qui 31/8 4 Definição formal de categorias e exemplos 25 a 31
ter 5/9 5 Mais exemplos de categorias; a ideia de estruturas e preservação 32 a 40
qui 7/9 - sem aula
ter 12/9 6 Preservação de estrutura (homomorfismos) 41 a 51
qui 14/9 7 Preservação de estrutura em categorias: Funtores 52 a 64
ter 19/9 8 Exemplos de funtor Set -> Set: “imagem direta”; discussão de funtores Prog -> Prog 65 a 74
qui 21/9 9 Introdução a Haskell; funtores em Haskell 75 a 77; código; output do REPL
ter 26/9 10 Mais 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 78; código; output do REPL
qui 28/9 11 Haskell: listas finitas e infinitas; fold código
ter 3/10 12 Dúvidas da Lista 1; Haskell: discussão sobre “fold” para Naturais e Árvores Binárias 79 a 81; código; output do REPL
qui 5/10 13 Haskell: Maybe; Categorias: produtos e coprodutos (discussão, intuição e definição) 82 a 88
ter 10/10 14 Exemplos de produtos e coprodutos
qui 12/10 - sem aula
ter 17/10 15 Mais sobre produtos e coprodutos (também em Haskell) slides; código em haskell; output do REPL
qui 19/10 16 Coproduto de monoides (exemplo de “construção livre”); isomorfismos (“produto é único a menos de isomorfismos”) slides
ter 24/10 17 Mais construções livres (monoides, magmas, números naturais, fórmulas da lógica proposicional); mais dicussão sobre isomorfismos slides; código em haskell; output do REPL
qui 26/10 18 Correção da frase “produtos de um mesmo par de objetos são únicos a menos de isomorfismo único”; diagramas, cones; objetos terminais; categoria de fatias slides
ter 31/10 19 Diagramas, cones, limites, cocones, colimites; transformações naturais entre funtores vídeo; slides
qui 2/11 - sem aula
ter 7/11 - sem aula
qui 9/11 20 Transformações Naturais: motivação, definição, exemplos vídeo; slides; output do REPL
ter 14/11 21 Cones e co-cones como transformações naturais de/para funtores constantes; transformações em Haskell são necessariamente naturais; isomorfismos naturais; equivalências de categorias; funtores adjuntos (pré-definição) vídeo; slides; código
qui 16/11 22 Adjunção: definição “misteriosa” usando o “método da mochila”; definição “mais intuitiva” buscando uma especificação da noção de “livre” para monoides vídeo; slides; código; output do REPL
ter 21/11 23 Adjunção: mais exemplos e definições equivalentes; relações entre “liberdade” e outras noções (indução, recursão) vídeo; slides; código; output do REPL
qui 23/11 24 Funtores “Hom set”; 3a definição de adjunção; funtor adjunto à esquerda do produto (cópia) vídeo; slides
ter 28/11 25 Recap e correção do exemplo “funtor adjunto à esquerda do produto”; Haskell: Applicative (pure, “apply” <*>, lift) vídeo; slides; código; output do REPL
qui 30/11 26 Haskell: (mais) Applicative, Alternative, Traversable e suas leis vídeo; código; resumo das leis
ter 5/12 27 Haskell: “Acumulação de erros”, logs simples com Applicative; Monad (3 definições): categoria de Kleisli vídeo; código; output do REPL; pequeno texto descrevendo Monads
qui 7/12 28 Haskell: mais sobre Monads; (>>) “e então”; notação “do”; exemplos de uso; (a,) e (r ->) são Monads vídeo; slides; código; output do REPL
ter 12/12 - sem aula
qui 14/12 - sem aula
ter 19/12 - sem aula
qui 21/12 - sem aula

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.