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

Funcionamento da disciplina

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

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

Bibliografia

PDF com os conteúdos dos quadros ao longo do semestre (arquivo atualizado periodicamente)

Não seguiremos nenhum livro texto específico; nossas três 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 (atualizada 29/9) 11 de outubro no começo da aula
Lista 2 18 de outubro no começo da aula
Lista 3 (atualizada 26/10) 3 de novembro no começo da aula
Lista 4 (atualizada 2/12) 22 de dezembro no começo da aula
Lista 5 e Parser.hs 14 de janeiro à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
ter 30/8 Aula 1 Introdução; Discussão sobre abstração; Funções puras e “impuras”; A ideia de Categorias 1 a 8
qui 1/9 Aula 2 Exemplo de abstração em matemática (“unicidade de elemento neutro de uma operação, quando existe”); Definição semi-formal de categoria; primeiro exemplo (conjuntos e funções) 9 a 19
ter 6/9 Aula 3 Definição “oficial” de categorias; Exemplos 20 a 32
qui 8/9 Aula 4 Resolução do exercício (categoria vinda de um conjunto+relação); mais exemplos de categorias (“1”, “1+1”, “2”, “categoria oposta” ou “dual”); primeira discussão da ideia de “preservação de estrutura” 33 a 44
ter 13/9 Aula 5 Discussão mais precisa de assinaturas, estruturas e homomorfismos (“mapeamentos que preservam estrutura”); funtores (“homomorfismos entre categorias”) 45 a 59
qui 15/9 Aula 6 Prova de que P (“powerset”, conjunto das partes) é um funtor Set -> Set; exemplo de categoria (Prog), dos tipos e funções em uma linguagem de programação funcional pura (fortemente tipada) 60 a 69
ter 20/9 Aula 7 Recap do funtor “partes” (Set -> Set) e de funtores Prog -> Prog (construtor de tipos F :: t -> s + implementação de fmap :: (t -> s) -> (F(t) -> F(s))); ideia de “como seria” o fmap de listas em python (código de python); primeiro contato com Haskell, exemplo de funtores List e Maybe; definição de um novo funtor “Talvez”; definição (incompleta) de um novo funtor “ArvBin”; código de haskell 70 a 73
qui 22/9 Aula 8 haskell: definindo tipos [exemplo com Naturais], a ideia do “lazy”. Código em haskell 74 e 75
ter 27/9 Aula 9 haskell: definindo funções prefixas e infixas; definindo classes de tipos (typeclasses); definindo instâncias de classes de tipos; código em haskell 76 e 77
qui 29/9 Aula 10 haskell: condicionais em haskell; listas; lazy “just in time evaluation”); exemplo de Fibonacci e Crivo de Eratóstenes (da Aula 8; código em haskell 78 a 80
ter 4/10 Aula 11 haskell: foldr, foldl; “funções produtivas” e laziness; código em haskell ; output do REPL do haskell; código em python; output do REPL do python 81 e 82
qui 6/10 Aula 12 haskell: exemplos de uso do fold: produto, soma, length; “fold para Natural”: soma, produto, potência, etc, como folds; hierarquia de funções recursivas de crescimento muito rápido; motivação para os próximos assuntos: “como especificar que um tipo X serve como retorno de uma função se eu queria na verdade retornar um Integer e uma String?”; código em haskell; output do REPL do haskell 83 a 87
ter 11/10 Aula 13 especificação de “produto de A e B” em haskell; implementação (3 versões: “manual”, tuplas, records); discussão sobre especificação usando apenas a linguagem das categorias; código em haskell; output do REPL do haskell 88 a 95
qui 13/10 Aula 14 Diagramas e diagramas comutativos; produto (definição e exemplos: em Haskell, em Set, na categoria “Naturais com menor ou igual”, na categoria “Naturais com divisibilidade”, na categoria do Rufino da Aula 3) 96 a 109
ter 18/10 Aula 15 Mais discussão sobre produtos; prova de que o exemplo com “Dumbo” e “papagaio” (exemplo 2b) é um produto em Set; isomorfismos em categorias (motivação e definição); prova de que produtos são “únicos a menos de isomorfismo” 110 a 120
qui 20/10 Aula 16 Discussão sobre definições equivalentes para “isomorfismos”; coproduto (definição e exemplos) 121 a 130
ter 25/10 Aula 17 Discussão sobre a expressão “… a menos de isomorfismo único” usada para falar sobre produtos, coprodutos, etc (o isomorfismo é único, mas em outra categoria!); busca por coproduto de monoides (difícil!) 131 a 137
qui 27/10 Aula 18 Coprodutos (“tipos soma” ou “sum types”) em Haskell; Produtos e coprodutos no poset “conjuntos e ‘contido’”; Coprodutos para monoides gerais não é o produto (mas funciona para monoides comutativos!); Coprodutos de monoides (a ideia de “geração livre”) 138 a 147
ter 1/11 Aula 19 Mais sobre construções livres (magma livre); construções livres em haskell; “eliminadores”: setas obtidas pela UMP de um coproduto (either para Either, bool para Bool, ±foldr para listas); desvio discutindo relação entre recursão, soluções de “equações” e pontos fixos; código em haskell 148 a 153
qui 3/11 Aula 20 Mais discussão sobre recursão, soluções de “equações” e pontos fixos; recap da ideia de “a menos de isomorfismo único”: construção de uma categoria dos diagramas com “formato de produto”; definição de objetos iniciais e objetos terminais 154 a 164
ter 8/11 Aula 21 Exemplos de objetos iniciais e terminais em diversas categorias (incluindo Hask); visão geral da construção da aula 20: índices, diagramas, cones, limites; código em haskell; output do REPL 165 a 176
qui 10/11 Aula 22 Definição de cones, cocones, limites, colimites de um diagrama; recap da lista 1: como ver um grafo como um funtor da categoria •⇉• para Set; homomorfismos de grafos nesse novo contexto; transformações naturais: definição e alguns exemplos 177 a 188
ter 15/11 sem aula Feriado
qui 17/11 Aula 23
ter 22/11 Aula 24
qui 24/11 sem aula Jogo do Brasil na Copa
ter 29/11 Aula 25
qui 1/12 Aula 26
ter 6/12 Aula 27 haskell: Applicative; código em haskell; output do REPL
qui 8/12 Aula 28 haskell: mais sobre Applicative; código em haskell; output do REPL
ter 13/12 Aula 29 haskell: Alternative e Traversable; código em haskell; output do REPL
qui 15/12 Aula 30 haskell: Monad; código em haskell
ter 20/12 Aula 31 Última aula! haskell: código em Haskell
qui 22/12 sem aula Recesso de fim de ano
ter 27/12 sem aula Recesso de fim de ano
qui 29/12 sem aula Recesso de fim de ano
ter 3/1
qui 5/1
ter 10/1
qui 12/1

Método de avaliação

A definir…