Contato: | thanos@imd.ufrn.br |
Playlist: | CFR |
Monitoria/TA: | fmc.imd.ufrn.br |
Turmas self: | ../ |
Turmas FMC2: | /teaching/fmc2 |
Info
Pré-requisitos
Além disso, é necessário que tu tens tempo e vontade para estudar, fazer os trabalhos atribuídos, etc.
(Obs.: estudar ≠ ler.)
Conteúdo
(Baseado no módulo correspondentes desta proposta.)
Especificações e implementações matemáticas de coleções (conjuntos, ênuplas, multiconjuntos, sequências), e de suas principais operações e predicados; extensão vs intensão. A notação construtor-de-conjunto (set-builder) e sua interpretação. Implementação da noção de cardinalidade, no caso finito. Operações sobre coleções, finitas ou não, de conjuntos: união, interseção, produto e coproduto de conjuntos (produto cartesiano e união disjunta). Para o caso de coleções finitas, definições recursivas e demonstrações indutivas das suas propriedades. Complemento relativo, diferença simétrica. Conjunto potência. Especificações de famílias indexadas. Operações sobre famílias indexadas de conjuntos. Coberturas e partições. Especificações e implementações matemáticas de associações (funções parciais, totais, e não-determinísticas); extensão vs intensão. Funções vs procedimentos em programação; funções puras e efeitos colaterais. Funções anônimas (notação lambda). Funções de ordem superior, e funções como cidadãos de primeira classe. Curryficação e aplicação parcial de funções. Função identidade, composição de funções, iterações de uma função. Função inclusão, função vazia, função 0-ária, função constante. Projeções e demais funções associadas ao produto e ao coproduto de conjuntos (pairing, copairing, …). Funções indicadoras (ou características). Restrições de funções. Imagem direta e pré-imagem de conjuntos. A inversão de uma função, e a função inversa.
Objetivos de aprendizagem
Prática com o uso das técnicas de demonstração e refutação matemática. Familiarização com a linguagem e com as principais classes, operações e propriedades de conjuntos e funções, definidas extensionalmente ou intensionalmente. Familiarização com as noções do cálculo lambda usadas em programação e lógica: variáveis ligadas e livres, captura de variáveis, renomeamento de variáveis, sombreamento de variáveis, aplicações de funções aos seus argumentos. Reconhecer os objetos matemáticos relevantes às linguagens de programação e suas propriedades. Familiarização com a formulação de especificações, e suas implementações matemáticas. Familiarização com o uso de diagramas comutativos em definições e demonstrações, e com especificações via propriedades universais. Familiarização com o raciocínio “sem pontos” (a saber, sem mencionar elementos dos conjuntos), através do composições de funções, e suas aplicações em programação.
Bibliografia e referências
Conhece o libgen?
Principal
- [fmcbook]: Cap: «Conjuntos»; «Funções»
- Moschovakis (2005): Notes on Set Theory, 2nd ed. (cap: 1)
Auxiliar
- Lawvere & Schanuel (2009): Conceptual Mathematics, 2nd ed.
- Bird & de Moore (1997): The Algebra of Programming
- Wells (1993): Communicating Mathematics: Useful ideas from computer science (in American Mathematical Monthly, Vol 120, No. 5, pp.397–408)
Para cada um dos assuntos que tratamos, procure também a secção «Leitura complementar» no capítulo correspondente do fmcbook para mais referências.
Dicas
Veja minhas dicas para estudantes.
Links
- Lean & Lean web editor
- Minicurso TeX 2018.2
- Detexify
- Overleaf online (La)TeX editor/compilador
Tecnologias & ferramentas
(Instalem e/ou criem uma conta para usar onde necessário.)
- PAPEL (um caderno para dedicar à disciplina) e LAPIS/CANETA.
- Zulip (leia o FAQ).
- Pouco de (La)TeX (veja o minicurso TeX 2018.2). Online editor/compilador: Overleaf.
FAQs
Dynamic content
Provas
CFR1
- Prova CFR1.1 / 18pts (2023-04-14) { censored , uncensored , answers , correções }
- Prova CFR1.2 / 82pts (2023-05-26) { censored , uncensored , answers , correções }
Sessões
CFR1 (0) & IEA (0): Pré e Introdução [video]
- Introdução meta
- Revisão: type errors, linguagem de demonstrações matemáticas
- Exemplos: teoremas sobre a transitividade da (|)
hw
- Trabalhe nos pré-requisitos.
- Dê uma lida nos Capítulos 1 e 2.
- A gente viu no
#intro-lang-proofs › aplicando a mesma função nos dois lados
como justificar (demonstrar) isso, descubrindo que é uma propriedade fundamental das funções. Desafio: usando uma linguagem de programação que já usou no IMD, mostre que ela não merece usar o termo «função» mostrando como quebrar essa regra. Proibido usar qualquer coisa de random. Postem tentativas/brigas/dúvidas no#programming
. - Uma tentativa para resolver o hw anterior foi a seguinte: considerar, em JavaScript, que temos
1 == '1'
masf(1) != f('1')
ondef
é “a função”x => x + 1
. O desafio deste hw é achar um motivo bom para desconsiderar essa como resposta válida para o hw anterior.
CFR1 (1): Introdução [video]
- Set: tipos de conjuntos
- Funções: Inferência
- Set como um type constructor
- Como introduzir um novo tipo: interface (como usar), como formar, igualdade
- Interface de conjunto
- buracos e funções de ordem superior
- Sobre conjuntos heterogêneo
- Prop vs Bool
- Set(Set(Int)), etc.
- uma mentira: subconjuntos vs embutimentos
- o que significa «saber o A»
- Igualdade, extensão, black boxes e suas conseqüências
- duas maneiras de errar, dando uma definição
hw.1
- Cap. 8: §«Expressões com buracos»
- Cap. 7: até §«Oito proposições simples»
CFR1 (2): Conjuntos [video]
- Operações entre conjuntos e como defini-las
- Complemento relativo (∖)
- Comutatividade de operações
- Diferença simétrica (∆)
- Parseamento e precedência sintáctica
- Diferença simétrica (2)
- Os habitantes duma diferença simétrica
- Complemento de conjunto
- Powerset (℘)
- Empty, Singleton, Universal, Inhabited
- LEM e dupla negação
- conjuntos finitos e o powerset-finito
- união grande
- interseção grande
- sem medo
- versões de set builder
hw.2
- Capítulo «Conjuntos»: até o primeiro intervalo de problemas
CFR1 (3): Conjuntos; Tuplas [video]
- Sobre o LEM
- Habitado vs Não-vazio
- Brouwer vs Hilbert
- Θ. 𝒜∩ℬ hab ⇒ ⋂𝒜 ⊆ ⋃ℬ
- Um primeiro papo sobre especificação
- Interface das tuplas
- Equações fundamentais das tuplas
- Igualdade entre tuplas
- Criando tipos mais complexos usando Set e Pair
- Q: Podemos definir um novo «pertence» para tuplas?
- Podemos inferir Ø∈A? Ø⊆A?
hw.3
- Capítulo «Conjuntos»: até §«Tuplas».
CFR1 (4) [video]
- 3-tuplas como tipo primitivo
- especificação vs implementação
- como implementar 3-tuplas usando 2-tuplas
- a importância de ser implementação-agnóstico
- n-tuplas para outros n
- desafio: implementar 2-tuplas (a implementação de Kuratowski)
- o que seria uma 1-tupla?
- sobre 0-tuplas
- existência e unicidade da 0-tupla
- o muito mal-nomeado void
- teaser: tuplas de tamanho infinito e seqüências
- teaser: sacolas
- o que podemos concluir sobre a cardinalidade do conjunto
{f(x,y) ∣ x,y∈{u,v}}
?
hw.4
- Capítulo «Conjuntos»: até §«n-tuplas».
- Como implementarias 2-tuplas usando (apenas) conjuntos “sujos”?
CFR1 (5) [video]
- Conjunto indexado por I
- Família indexada por I (I-tupla)
- família indexada vs conjunto indexado
- Como solicitar um membro arbitrário dum conjunto indexado
- Usando um produto I×J como conjunto de índices
- Seqüências
- Famílias indexadas para implementar outros tipos
- 2-tuplas como conjuntos e um roubo “definindo” funções
- produto generalizado (de famílias indexadas)
- nível-coração: escolhedores
hw.5
- Capítulo «Conjuntos»: até o fim
Prova CFR1.1
CFR1 (6) [video]
- De operacões binárias para operações generalizadas
- definições recursivas de operações que operam em seqüências
- Somatórios sem órdem/agrupamento especificados
- Funções: black box, descrição, especificação, igualdade, notação
- Q: sobre funções parciais
- Espaço de funçoẽs (A→B) ou Bᴬ
- Vazio como domínio ou codomínio
- Tipo vazio e tipo unit: discussão sobre o mentiroso void
- Definindo funções com buracos
hw.6
- Revise sobre conjuntos:
- Exercícios: x7.57; x7.58; x7.59; x7.63; x7.66; x7.67;
- Problemas: Π7.9; Π7.10; Π7.11; Π7.12; Π7.13; Π7.14; Π7.15; Π7.16
- Capítulo «Funções»: até §«Expressões com buracos»
- Justifique a notação Bᴬ para o espaço de funções (A→B)
CFR1 (7) [video]
- graph : (A→B) → Set(A×B)
- o espaço de funções (A→B)
- diagramas internos vs externos
- setas: → vs ↦
- igualdade extensional vs intensional
- «aquele x tal que»
- definição por casos
- abstração com buracos
- funções de ordem superior
- currificação e descurrificação
- aplicação parcial
- $∣B^A∣=∣B∣^{∣A∣}$
CFR1 (8) [video]
- recap: currificação e associatividades sintácticas
- de buracos para lambdas
- como funciona um cálculo
- funções anônimas e compração com set builder
- semântica vs sintaxe, nomes de símbolos vs nomes de noções
- a notação lambda
- metáforas com almas e corpos
- Q: funções anônimas de aridades maiores?
- Q: buracos vs lambdas e ordem dos parametros
- parenteses implícitas e convenções
- sobre binding e ocorrências de variáveis livres
- dois exemplos de abstrações e inferência de tipos polimórfica
- o açúcar sintáctico λ(x,y).coisa
- como cálcular: β-redex, β-redução
- chegando à idéia do α-renomeamento
- introdução de lambdas em linguagens de programação “populares”
- plicker: calcule a expressão-λ
- sobre a η-conversão
hw.7
- Capítulo «Funções»: até §«Currificação»
- Ache as noções de conjuntos que correspondem às: 0, 1, (+), dos números.
- Demonstre as “igualdades-entre-aspas” correspondentes às leis conhecidas desde ensino fundamental.
CFR1 (9) [video]
- recap: curry & uncurry
- operações de números vs operações de conjuntos
- igualdade-entre-aspas de conjuntos
- mais leis e mais conceitos para investigar
- sobre a idéia de «usar conjuntos para fundamentar a matemática»?
- Funções de graça
- função identidade
- função inclusão
- Podemos considerar, sendo conjuntistas, que ℕ⊆ℤ?
- não é ousadia usar o nome identidade?
- plicker: calcule uma expressão-λ
CFR1 (10) [video]
- recap: λ, β, η, α
- η-conversão
- Como interpretar uma função aplicada nela mesmo
- Manifestações dos β,η para outros tipos: conjuntos e 2-tuplas
- função-imagem
- função-pré-imagem
- sobre composição
- Plicker: a função-imagem respeita uniões e interseções?
hw.8
- Capítulo «Funções»: até §«Funções de graça»
CFR1 (11) [video]
- inversão de função
- injetividade, sobrejetividade, bijetividade
- funções de graça: f×g
- um desafio parecido: duas funções com o mesmo domínio
- tentando definir uma f∪g, em forma parecida
- o que podemos inferir sobre duas funções, sabendo que sua composição é bijetiva?
hw.9
- §«Jecções: injecções, sobrejecções, bijecções»
- Problemas: Π8.5, Π8.6, Π8.14, Π8.17
CFR1 (12) [video]
- função constante vs função invariável
- iterações de endomapas
- associatividade de composição
- composição respeita as -jetividades
- definições e demonstrações com pontos
- botando na mesa as definições recursivas
CFR1 (13) [video]
- Partições e coberturas de conjuntos
- Diagramas comutativos
- Leis da composição (assoc. e ident.)
- [tacit-programming][Estilo tácito] (aka: point-free, pointless)
- a função const : β → α → β e um desafio
- Uma das leis de identidade descrita como diagrama comutativo
- id é uma identidade para a composição
- recap: funções e diagramas relacionados ao produto (×)
- única função que faz um diagrama comutar
- união disjunta: no caminho de achar a soma de conjuntos
- Plicker: a ℘f respeita as uniões e as interseções?
hw.10
- Seja (~) uma relação de equivalência num conjunto $A$. Para qualquer $a ∈ A$, denote por $[a]_{\sim}$ o conjunto $\{x \mid x \sim a \}$. O $\{ [a]_{\sim} \mid a \in A \}$ é uma partição do $A$?
- Alguém definiu: «Uma partição num conjunto A é uma função …». Adivinhe o
…
e justifique tal frase! - Defina uma ordem interessante no Partition(A).
- Demonstre que se os dois quadradinhos do diagrama da aula comutam, o diagrama todo comuta.
- Qual deve ser a próxima pergunta para perguntar depois de descubrir que
const = curry outl
? - Demonstre as leis de composição estilo point-full.
- Qual seria a especificação do produto?
- Qual seria a especificação de soma?
- Tente achar outras implementações de união-disjuntora (soma)
- Quais seriam os diagramas e funções relacionados à união-disjuntora?
- Melhore nossa definição de iterações de funções, e demonstre umas propriedades interessantes sobre elas.
- Até §«Definições estilo point-free»
- Reveja a §«Funções de graça» e seus exercícios.
- Problemas: Π8.12; Π8.13; Π8.14; Π8.16; Π8.19; Π8.20; Π8.22
CFR1 (14) [video]
- Fixpoints
- Definindo iterações melhor (sem pontos)
- Mais funções de graça: pointwise, diagonal, pareamento, produto
- Uma vantagem de usar funções descurrificadas
- conjuntista-vs-tipista sobre funções (e pouco em geral)
- implementações usando funções
- funções parciais e não-deterministas
- união-disjunta: especificação-vs-implementação, copareamento, coproduto
CFR1 (15) [video]
- equações recursivas como sistemas de incógnitos
- mais funções de graça: função caraterística
hw.11
- §«Funções parciais»
- §«Funções inversas»
- §«Definições recursivas»
- Problemas: Π8.7; Π8.8; Π8.9; Π8.10; Π8.11; Π8.30