| 
     | 
  Oficina de Lean4, versão 0 (links e legendas)
Link pro vídeo no Youtube: aqui.
 
 As legendas dele em Lua estão aqui,
 
 e o resto desta página tem uma conversão das legendas em Lua
 
 pra um formato um pouco mais legível.
 
 A minha página sobre eev e Lean4 é esta aqui: link.
 
Update antigo: já definimos as datas da oficina!
 
 Aula 1: 6a, 26/jul/2024, 15:00-17:00
 
 Aula 2: 6a, 02/ago/2024, 15:00-17:00
 
 Aula 3: 6a, 09/ago/2024, 15:00-17:00
 
 Ela vai ser quase toda por Telegram e um pouquinho por Google Meet!
 
 Update novo: a aula 3 nunca aconteceu... veja os links acima!
 
Links pra algumas coisas que eu menciono no vídeo:
 
 "Tactics &
     Keyframes: Visualizing Lean 4 Proofs in Blender" (David Renshaw, 2024)
 
 Página do Graham Hutton,
     página do "Programming in Haskell"
 
 Historinha sobre "é óbvio", parte 1: Visaud#01:00 até 03:09
 
 Historinha sobre "é óbvio", parte 2: Visaud#51:45 até 52:24
 
 LuaTreeLean: https://github.com/edrx/LuaTreeLean
 
 PDF com meus os diagramas: .tex.html, PDF, .zip
 
 Meu mini-tutorial de Emacs Lisp: (find-elisp-intro)
 
 Fale comigo se você estiver interessado na oficina!
 
Aqui tem algumas gravações de usuários avançados usando Lean -
 
 mas eu tou tentando preparar exercícios que todo mundo consiga fazer!
 
 Instalação do Emacs e do eev no Windows: (find-windows-beginner-intro)
 
 Instalação do Lean (versão muito preliminar): (find-lean4-intro)
 
Links pros 5 "livros" principais sobre Lean: 
 
Um diagrama do vídeo: 
 
 
 
  
Legendas do vídeo:
00:00  
 
00:02 Oi, gente! O meu nome é Eduardo Ochs, e eu tou
 
00:05 pretendendo dar uma oficina de Lean4
 
00:08 daqui um tempo... e esse vídeo é para
 
00:10 explicar algumas coisas que seriam
 
00:11 difíceis de explicar só por uma página
 
00:14 na internet.
 
 
00:15 Os dados da oficina vão estar todos
 
00:17 aqui nessa URL, e essa daqui é minha
 
00:20 página sobre Lean4.
 
 
00:22 Primeiro: o que que é o Lean4?
 
00:24 O Lean4 é parecido com Haskell, mas
 
00:27 ele é bem mais fácil de instalar, e tem
 
00:30 uma interface muito bacana que eu vou
 
00:32 mostrar daqui a pouco. Ele pode ser usado
 
00:34 como proof assistant - muita gente pensa
 
00:38 nele como proof assistant, só que eu ainda
 
00:40 não sei usar ele como proof assistant...
 
00:42 eu comecei a aprender ele porque eu queria
 
00:46 usar ele como proof assistant pra umas
 
00:47 coisas super complicadas, e...
 
00:50 ainda não sei o suficiente para isso...
 
 
00:52 mas tou adorando ele como uma linguagem
 
00:54 parecida com Haskell, e mais legal, com uma
 
00:58 interface bacana, e tal...
 
 
01:00 e o mais importante é que ele é muito
 
01:02 extensível - no sentido de que é fácil
 
01:04 você definir sintaxes novas nele... definir
 
01:08 mini-linguagens, DSLs, todas essas coisas
 
01:11 assim... se vocês quiserem explicações pra
 
01:13 isso tem nesse manual daqui, já vou
 
01:15 explicar qual é...
 
 
01:17 então, um dos manuais principais do Lean4
 
01:19 é o "Metaprogramming in Lean4",
 
01:22 e aí um dos capítulos
 
01:25 explica essa história de definir as
 
01:29 sintaxes novas - nessa seção daqui.
 
 
01:36 Voltando...
 
01:42 Primeiro: quem é o público alvo dessa
 
01:45 oficina?
 
01:48 Vai ser uma oficina muito básica, e
 
01:52 a ideia é que ela vai ser direcionada
 
01:54 pra pessoas que tentaram aprender Haskell
 
01:57 mas que empacaram mais ou menos nos mesmos
 
01:59 lugares que eu.
 
 
02:00 A partir de um determinado ponto os
 
02:02 livros começam a mostrar umas coisas
 
02:04 super complicadas e meio que exigir que
 
02:06 a gente entenda todos os detalhes delas
 
02:08 de cabeça... eles não dão nenhuma
 
02:10 informação sobre como a gente poderia
 
02:12 fazer as "contas" no papel pra conseguir
 
02:16 entender os detalhes daquilo.
 
 
02:17 Então - aqui tem um exemplo. Um
 
02:21 amigo meu que tá trabalhando na Holanda...
 
02:25 uma das tarefas dele como pós-doc é
 
02:29 orientar os alunos que estão fazendo
 
02:32 curso de Haskell lá... e eles usam o livro
 
02:36 do Hutton, então eu tentei aprender a  usar
 
02:38 livro do Hutton também... a capa dele é essa,
 
02:42 aqui tá o índice do livro...
 
02:46 e o capítulo 12 do livro é o capítulo
 
02:50 onde ele começa a explicar mônadas.
 
 
02:53 E aí ele...
 
02:56 define umas coisas que eu só fui entender agora...
 
03:01 eu já tentei decifrar esse capítulo várias
 
03:02 vezes nos últimos três ou quatro anos e só
 
03:05 comecei a entender agora...
 
 
03:07 então, ele tem essas figurinhas aqui para
 
03:09 explicar o que que é uma "state monad".
 
03:12 E aí ele define
 
03:14 essa coisa daqui, ó...
 
03:20 ele diz que a gente vai definir um tipo
 
03:22 novo desse jeito daqui...
 
03:23 e depois uma função "app", que usa esse tipo...
 
03:27 depois uma função "fmap", que é uma instância
 
03:31 do funtor ST, whatever that means...
 
03:34 e aí ele põe essa figurinha daqui.
 
 
03:37 Até hoje de tarde eu não fazia a menor
 
03:39 ideia de se essa figura era uma coisa
 
03:40 precisa ou não.
 
 
03:42 Se fosse certamente estavam faltando
 
03:44 muitos detalhes aqui, e
 
03:46 eu ainda não tinha certeza de como
 
03:49 completar esses detalhes.
 
 
03:51 Então... deixa eu mostrar uma
 
03:53 figura aqui.
 
 
03:56 Essa primeira definição... essas duas
 
04:00 definições daqui, essa e essa, estão nesse
 
04:04 primeiro diagrama.
 
 
04:06 Então, no livro do Hutton
 
04:07 elas aparecem como essas três linhas
 
04:09 daqui - essa definição de um newtype,
 
04:12 depois o tipo da da função "app", depois a
 
04:14 definição da "app" em si...
 
 
04:16 e aí esse tipo de figura daqui
 
04:17 me ajudou muito a decifrar essas coisas.
 
 
04:20 Eu pego essa expressão daqui de baixo,
 
04:22 e embaixo de cada subexpressão dela
 
04:24 eu escrevo qual é o tipo dela.
 
 
04:27 O ideal seria fazer uma animação
 
04:30 dizendo quais são os tipos que eu
 
04:31 descubro primeiro e como é que a
 
04:34 inferência de tipos funciona, e como é
 
04:36 que a gente vai descobrindo tudo aos
 
04:38 poucos... mas nesse caso aqui eu ainda não
 
04:40 fiz a animação.
 
 
04:42 Então, a grande dificuldade para mim
 
04:44 foi entender o que é essa operação S daqui
 
04:46 e esse underbrace daqui...
 
 
04:51 e o legal é que quando
 
04:53 eu faço esse tipo de diagrama eu consigo
 
04:55 apontar pra um underbrace e
 
04:57 dizer: é esse o underbrace que eu
 
05:00 ainda não tenho certeza... e depois de
 
05:02 horas eu descobri que se eu
 
05:05 escrevesse esse underbrace desse jeito
 
05:07 daqui... desculpa, esse underbrace daqui...
 
05:12 usando essa definição de newtype aqui, que diz
 
05:14 que "ST a" é sempre equivalente a
 
05:16 S (State→(a,State)),
 
05:18 aí tudo ficava claro... aí as
 
05:22 regras não ficavam mais tão
 
05:25 misteriosas.
 
 
05:27 Então, voltando.
 
05:30 Até pouquíssimo tempo atrás eu não sabia
 
05:32 decifrar
 
05:34 trechos difíceis do Hutton - eu não
 
05:38 sabia que ferramentas usar para
 
05:40 completar os detalhes deles... e esse tipo
 
05:42 de diagrama tem me ajudado muito.
 
 
05:45 Agora vem o diagrama... opa, peraí...
 
05:49 ah deixa eu mostrar o diagrama da página
 
05:52 seguinte... aqui.
 
05:55 Lembra que agora há pouco eu mostrei
 
05:57 essa figurinha no livro do Hutton
 
06:00 e disse que até pouco tempo atrás eu não
 
06:01 fazia ideia de se essa figura era só uma...
 
06:06 se ela era informal ou não...
 
06:08 então, nessa página o o Hutton introduz
 
06:13 algumas linhas a mais, aqui...
 
 
06:15 ele diz que a gente vai definir o fmap desse
 
06:17 jeito daqui, e aí ele mostra essa figura como
 
06:20 se fosse óbvia... e para mim ela não é!
 
06:23 Eu preciso fazer todas essas type
 
06:25 inferences daqui para descobrir qual é o
 
06:27 tipo
 
06:28 da g da st, da s, da x, da s', etc, e
 
06:33 das outras expressões que são compostas
 
06:35 a partir delas... e aí quando eu descubro
 
06:38 todos esses tipos daqui eu consigo
 
06:39 transformar esse diagrama daqui num
 
06:41 diagrama que tem não só esses símbolos
 
06:44 que são nomes de termos, como esses tipos
 
06:48 daqui...
 
06:50 então esse s daqui é de tipo State
 
06:52 essa coisa daqui é de tipo ST a, etc...
 
06:56 e aí tudo fez sentido para mim.
 
 
07:00 Então, voltando... agora eu preciso contar uma
 
07:02 historinha, tá... eu vou contar ela de um
 
07:04 jeito bem resumido e eu vou botar o link
 
07:06 do lugar onde vocês podem ler o texto dela.
 
 
07:09 Há um tempo atrás eu fiz dois
 
07:11 vídeos sobre didática... um deles ficou
 
07:14 muito bom e outro tem só alguns trechos bons.
 
07:16 Esse vídeo é o que tem alguns trechos bons.
 
 
07:18 E ele tem essa historinha que eu
 
07:22 acho bem importante. É o seguinte... eu
 
07:25 não vou ler ela toda agora, mas é
 
07:28 uma história sobre alguém... um
 
07:30 professor que ensina uma coisa super
 
07:31 difícil, um aluno não entende e ele diz:
 
07:34 "mas isso é óbvio!" Aí o aluno diz:
 
07:38 "não é óbvio não!"... mas o aluno vai
 
07:40 pra casa pensar, ele pensa, pensa, pensa muito,
 
07:42 depois no dia seguinte ele volta e ele
 
07:46 virou uma pessoa para quem aquilo é
 
07:47 óbvio. Ele não sabe explicar pra as
 
07:49 outras pessoas quais são os detalhes
 
07:51 daquilo, ele só sabe dizer pras pessoas
 
07:54 "ah, isso é óbvio!"... mas ele virou a
 
07:57 pessoa para quem isso é óbvio.
 
 
08:00 Eu não gosto dessa ideia de aprender coisas
 
08:02 complicadas e virar uma pessoa que só
 
08:04 sabe dizer "ah, isso é óbvio!", e e eu tou há
 
08:07 vários anos trabalhando em alternativas
 
08:09 pra isso. Essa alternativas são descobrir
 
08:12 os diagramas que faltam e encontrar um
 
08:16 jeito mais ou menos mecânico e formal de
 
08:19 produzir esses diagramas que faltam.
 
 
08:21 Então, essa oficina de Lean
 
08:24 vai ser principalmente sobre um modo de
 
08:29 produzir esses diagramas que faltam e de
 
08:31 apresentar as coisas que os livros sobre Lean
 
08:33 apresentam de um jeito muito difícil
 
08:36 com esses diagramas.
 
 
08:38 Então vou mostrar os pontos em que eu
 
08:40 empacava... e que ficaram
 
08:42 muito mais simples depois que eu aprendi
 
08:43 a fazer diagramas. Então: não tenho
 
08:45 certeza se esses diagramas vão funcionar
 
08:48 pra outras pessoas - é isso que eu quero
 
08:50 testar - mas são os diagramas que
 
08:52 funcionaram para mim.
 
 
08:54 E aí eu quero
 
08:56 descobrir quais são as dificuldades dos
 
08:57 outros, se isso faz sentido, se elas têm
 
09:00 os tipos delas de diagramas e coisas
 
09:03 do gênero...
 
 
09:04 Então, tem um monte de técnicas
 
09:06 didáticas por trás disso daqui...
 
09:09 e eu também vou mostrar como eu
 
09:11 transformei os exemplos dos livro de Lean
 
09:14 em exemplos que são mais fáceis de testar
 
09:16 passo a passo.
 
 
09:18 E aí aqui tem tem um
 
09:20 caso muito mais simples de
 
09:23 de situação em que eu fiz algo parecido
 
09:26 com essa técnica...
 
09:29 eu peguei coisas que eram explicadas de
 
09:31 um jeito complicado, com exemplos grandes...
 
09:33 e desmontei os exemplos em exemplos
 
09:35 muito simples. Então, por exemplo se a
 
09:37 gente quiser aprender o que que é essa
 
09:38 expressão aqui em Lisp eu posso
 
09:41 desmontar ela em várias expressões
 
09:42 pequenininhas, e aí eu posso executar
 
09:45 cada uma dessas expressões - quando eu
 
09:47 executo ela o resultado aparece aqui
 
09:49 embaixo... e aí com isso eu tenho todas as
 
09:51 expressões visíveis de uma vez, e eu
 
09:54 consigo comparar duas expressões, ver
 
09:56 onde é que tão as dificuldades ver onde
 
09:58 aparece algum conceito novo, e coisas assim...
 
 
10:02 e eu vou mostrar como fazer isso com os
 
10:06 exemplos dos manuais de Lean
 
10:09 de um modo que todos os pedaços
 
10:14 deles ficam visíveis ao mesmo tempo e é
 
10:16 muito fácil checar detalhes.
 
 
10:18 O meu plano é fazer a oficina em
 
10:21 três aulas só. A primeira aula vai ser
 
10:24 uma aula sobre instalação do Lean
 
10:26 e de outras coisas - a gente vai
 
10:29 usar o Emacs e o eev, mas eu tenho um
 
10:34 método para instalar eles no no Windows...
 
 
10:39 Então, nessa primeira oficina... ela
 
10:43 demora um pouco, porque alguns passos são
 
10:44 demorados, mas vocês podem fazer outras
 
10:46 coisas ao mesmo tempo... vai ter alguns
 
10:48 momentos em que
 
10:50 a gente vai ver que o computador vai
 
10:52 passar 20 ou 30 minutos instalando
 
10:54 alguma coisa, aí vocês vão fazer outra
 
10:57 coisa, e quando voltarem tá tudo
 
10:58 instalado.
 
 
11:00 Depois que tiver tudo instalado a gente
 
11:02 vai poder usar esse tipo de hiperlink
 
11:04 daqui pra ir pros manuais principais.
 
 
11:06 Então: o Lean tem cinco manuais principais.
 
11:10 Por exemplo esse aqui vai pro Functional
 
11:13 Programing in Lean, pra uma seção dele que é a
 
11:16 introdução dele... e ele abre esse manual
 
11:19 no browser. Então, repara: isso aqui é o
 
11:22 título do manual, "Functional Programing...",
 
11:25 aqui tem o índice, e a gente abriu a
 
11:27 introdução...
 
 
11:29 e aqui tem um outro manual que é
 
11:32 o "Lean Manual",
 
11:35 aqui tem o "Metaprograming in Lean4",
 
11:39 aqui tem o "Type Checking in Lean 4",
 
11:43 que é super técnico mas acho que os
 
11:46 matemáticos vão ter algumas dúvidas que
 
11:48 vão ser respondidas aqui, e aqui tem
 
11:51 o "Theorem Proving in Lean4", que é um dos
 
11:56 mais básicos.
 
 
11:58 E... a coisa que eu mais gosto no Emacs
 
12:02 é que dá para criar hiperlinks para tudo
 
12:06 e os hiperlinks são esses programinhas
 
12:08 de uma linha em Emacs Lisp. E eu
 
12:11 já dei um montão de oficinas sobre isso,
 
12:13 já melhorei meu material sobre isso
 
12:15 bastante, hoje em dia as pessoas acham
 
12:17 super fácil de aprender.
 
 
12:19 Então aqui tem um exemplo mais exótico.
 
12:22 É um hiperlink que vai abrir um vídeo numa
 
12:25 determinada posição. Esse vídeo é
 
12:27 espetacular - é um vídeo que foi feito há
 
12:28 poucas semanas atrás...
 
 
12:32 sobre... bom deixa eu ver o título dele...
 
12:36 eu esqueci o título. Vou fazer isso
 
12:41 aqui... é alguma coisa como
 
12:44 "Visualizing Proofs in Lean using Blender".
 
 
12:47 Então é um cara que usa Lean para
 
12:51 gerar código que usa o Blender
 
12:54 para fazer animações... é muito
 
12:55 impressionante. E nesse trecho daqui, a
 
12:59 partir do 6:50, ele
 
13:05 mostra como é que ele estendeu a
 
13:07 linguagem do Lean pra ela reconhecer
 
13:10 essas posições do jogo de xadrez aqui em
 
13:13 caracteres Unicode...
 
 
13:20 E aí o programa
 
13:22 dele faz coisas tipo demonstrar que uma
 
13:24 determinada posição é um mate em cinco
 
13:26 jogadas, e
 
13:29 ele pega a prova que é gerada pelo Lean e
 
13:32 anima ela usando Blender.
 
 
13:35 Então dá para fazer esse tipo de
 
13:36 coisa. É difícil, né, mas já faz a gente
 
13:40 ter bastante vontade de aprender o Lean...
 
13:42 é o que eu tô tentando fazer agora.
 
 
13:44 Aqui tem um programa relativamente
 
13:47 básico, que eu fiz... opa, peraí,
 
13:53 caramba... ah tá, faltou isso.
 
 
13:57 Então, esse programa daqui chama uma
 
14:01 biblioteca que eu fiz... e deixa eu
 
14:04 primeiro mostrar uma coisa...
 
14:06 Ah, peraí, deixa eu só fazer uma
 
14:08 coisinha aqui...
 
 
14:12 Pronto. Uma coisa muito legal da
 
14:14 interface do Lean é que a gente tem duas
 
14:16 teclas, que eu vou chamar de "go to" e
 
14:19 "go back". Por exemplo, se eu tou com
 
14:22 cursor aqui, em cima desse "LuaTree" aqui,
 
14:26 e aperto a tecla de "go to" ele vai
 
14:29 pro arquivo LuaTree.lean; se eu aperto a tecla
 
14:33 de "go back" ele volta para cá.
 
 
14:37 Além disso o Lean tem esse tipo de
 
14:41 comando daqui, que gera uma
 
14:44 mensagem aqui na "echo area"...
 
14:46 deixa eu diminuir a fonte... em alguns
 
14:50 casos a mensagem é bem grande e eu
 
14:53 também posso pedir para ele mostrar
 
14:54 todas as mensagens de uma vez.
 
 
14:56 Então se eu bato f10 l l - opa, peraí,
 
14:59 não era isso...
 
15:02 se eu bato uma sequência misteriosa
 
15:06 de teclas ele mostra todas as mensagens
 
15:08 de uma vez...
 
15:10 e se eu passeio por várias linhas ele dá
 
15:13 um highlight na mensagem correspondente
 
15:14 à linha em que eu tou.
 
 
15:19 E essa última...
 
15:22 bom, aqui nesse programa eu defini
 
15:24 uma linguagenzinha que entende só as
 
15:27 operações "-" e "^" e números,
 
15:33 e a linguagem entende elas com a
 
15:36 precedência certa.
 
 
15:37 Então por exemplo, essa linha daqui
 
15:39 entende essa expressão daqui e
 
15:41 parentesisa ela de uma determinada
 
15:44 forma... essa aqui faz algo parecido mas
 
15:47 ela produz uma coisa num formato que
 
15:50 agora não quero explicar, e essa última
 
15:52 pega essa coisa no formato complicado
 
15:53 transforma ela numa árvore em 2D.
 
 
15:56 Tá, então eu tou mais ou menos nesse nível...
 
15:58 eu tou aprendendo fazer linguagens muito
 
16:01 simples, e eu tou tentando entender como é
 
16:03 que comandos do Lean são
 
16:06 definidos usando esse método...
 
16:11 o Lean começa com uma linguagem muito
 
16:14 básica e depois ele define um montão
 
16:17 de extensões escritas em Lean mesmo.
 
 
16:21 Então, vamos voltar...
 
16:24 eu tava aqui...
 
16:27 isso foi só uma demonstração.
 
 
16:31 Na primeira aula a gente vai aprender a
 
16:33 interface do Lean, que eu já mostrei
 
16:35 algumas coisas dela, e a gente vai
 
16:37 aprender uma outra coisa bacana que a
 
16:38 gente pode fazer no Emacs: a gente pode
 
16:41 acessar o meu conjunto de anotações
 
16:44 sobre Lean.
 
 
16:46 Por exemplo, esse link aqui
 
16:47 vai pro bloco sobre "coerção", que tá aqui...
 
16:51 toda essa parte aqui tem links
 
16:53 para documentação, sendo que alguns links
 
16:56 são um pouco mais estranhos... esse link
 
16:57 daqui é um link pro resultado de um grep:
 
16:59 ele vai procurar todas as
 
17:03 ocorrências disso aqui no código fonte
 
17:05 das bibliotecas básicas do Lean
 
17:11 e vai mostrar elas na tela... tá, então
 
17:14 quando eu tava aprendendo sobre coerção
 
17:16 eu usei esse tipo de coisa, e esses links
 
17:19 pro grep vão ser super úteis, e eu vou
 
17:21 mostrar porquê.
 
 
17:22 Então essas são as minhas
 
17:23 notas sobre coerção, e isso aqui é um
 
17:27 bloquinho, um snippet [de código Lean]...
 
 
17:29 se eu rodo esse comando
 
17:31 daqui ele abre o meu arquivo temporário
 
17:34 aqui à direita... deixa eu apagar o
 
17:37 conteúdo dele...
 
 
17:39 e ele bota isso aqui no clipboard do Emacs.
 
17:43 Aí eu posso ir para cá, bater a tecla de
 
17:46 "copy" e ele copia essas coisas aqui pro
 
17:50 meu arquivo de teste,
 
17:54 e aí eu posso examinar o resultado
 
17:56 de cada coisa dessas.
 
 
17:58 Esse "#check" aqui ele pega esse termo daqui
 
17:59 e faz algumas expansões nele...
 
 
18:03 então: o "+" em
 
18:06 princípio não sabe somar um número
 
18:08 natural, que é esse 2, com um inteiro...
 
 
18:11 mas na verdade esse "+" daqui é
 
18:12 transformado num "'+' heterogêneo",
 
18:15 que pode receber objetos de dois tipos
 
18:17 diferentes, e se for necessário ele
 
18:19 aplica uma coerção em algum deles.
 
 
18:22 Então quando a gente pede pro #check mostrar
 
18:24 que termo é esse daqui ele mostra o termo
 
18:25 ligeiramente transformado, e mostra que o 2
 
18:28 recebeu um operador de coerção, aqui...
 
 
18:30 a gente também pode examinar
 
18:34 versões mais detalhadas disso e
 
18:36 descobrir exatamente qual coerção é
 
18:38 usada nesse ponto.
 
 
18:40 Aí aqui tem um exemplo muito pequeno,
 
18:42 muito menor do que os do manual...
 
18:43 de eu definindo dois tipos diferentes
 
18:48 e definindo uma coerção entre eles...
 
18:51 e aqui tem vários testes, tá, que eu não vou
 
18:53 detalhar agora.
 
 
18:54 Então, isso é só um exemplo de como as minhas
 
18:57 anotações têm hiperlinks e têm snippets.
 
19:01 Deixa eu voltar...
 
 
19:03 É isso que a gente vai aprender na primeira aula.
 
19:05 Então, na primeira aula a gente vai aprender
 
19:07 a acessar os manuais principais,
 
19:09 vai aprender o básico da interface,
 
19:10 vai aprender a apontar
 
19:14 pra posições de vídeos,
 
19:19 e a testar código que já existe...
 
19:21 por exemplo, os meus snippets.
 
 
19:23 Aí... eu acho que isso é o que cabe
 
19:27 na cabeça das pessoas na primeira aula.
 
19:29 Depois vai estar todo mundo cansado, e uma
 
19:32 semana depois a gente faz a aula 2, em
 
19:35 que a gente vai aprender as coisas
 
19:37 básicas da linguagem - que estão
 
19:39 explicadas num dos manuais do Lean, o
 
19:42 "Functional Programming in Lean".
 
 
19:44 Então a gente vai começar nessa
 
19:46 seção daqui,
 
19:48 "1.1 Evaluating Expressions", e vai
 
19:52 possivelmente até a seção 1.5, e eu vou
 
19:55 traduzir... mostrar para vocês
 
19:59 as minhas traduções de várias dessas
 
20:01 demonstrações [?] daqui, por exemplo isso...
 
 
20:06 o manual mostra vários trechinhos de
 
20:08 código - deixa encontrar um interessante...
 
 
20:11 e aí por exemplo eu juntei todos os
 
20:14 trechinho sobre structures num bloco só,
 
20:17 mostrei várias comparações entre várias
 
20:20 sintaxes possíveis, fiz um exemplo muito
 
20:22 mais simples que esse, e tal... então a
 
20:25 gente vai ver como testar isso...
 
 
20:27 e a gente vai considerar que os manuais
 
20:29 do Lean são a fonte definitiva,
 
20:30 escrita por pessoas que têm muita prática
 
20:33 em didática, só que
 
20:36 elas estão em países em que o ensino é
 
20:40 muito melhor, em que eles têm
 
20:43 turmas enormes em que pessoas estão
 
20:45 aprendendo essas coisas, e tal...
 
 
20:47 é o contrário da situação em que eu tou,
 
20:49 eu tou totalmente isolado, trabalhando num
 
20:51 campus muito lixo da UFF no interior do
 
20:54 Estado do Rio de Janeiro...
 
 
21:00 Então, outra coisa que a gente vai ver é
 
21:02 uma coisa que os livros apresentam num
 
21:05 formato bem difícil - eles dão exercícios
 
21:08 bem difíceis...
 
 
21:10 Eu imagino que todo mundo queira
 
21:12 aprender um pouquinho sobre
 
21:14 como usar Lean como
 
21:16 proof assistant...
 
 
21:19 Então a gente vai começar com um exemplo muito
 
21:21 simples... eu prefiro explicar Curry-Howard
 
21:25 a partir desse exemplo simples daqui, que
 
21:26 só usa implicação e...
 
 
21:28 Peraí, vamos começar por aqui,
 
21:31 que é a versão em Dedução Natural dele.
 
 
21:33 então, isso aqui é o "e". Se eu sei que
 
21:37 P∧R é verdade eu sei que P é verdade,
 
21:40 se eu sei que P é verdade e P→Q é
 
21:42 verdade eu sei que Q é verdade...
 
 
21:45 Então, aqui tem a tradução dessa
 
21:48 demonstração simples em dedução
 
21:50 natural para uma demonstração em
 
21:53 conjuntos... então isso para mim é o
 
21:55 primeiro exemplo interessante de
 
21:57 Curry-Howard...
 
 
21:59 E aqui à esquerda a gente diz qual é o
 
22:02 elemento do conjunto se eu conheço um
 
22:04 elemento desse conjunto A'×B daqui -
 
22:06 o elemento p - então a primeira projeção,
 
22:11 πp, vai ser um elemento desse conjunto
 
22:12 daqui, A'.
 
 
22:14 Eu acho que essa notação daqui é
 
22:17 a notação mais familiar para
 
22:20 matemáticos, e a gente vai ver
 
22:24 que o Lean costuma usar uma convenção que
 
22:27 para mim é estranha - é uma convenção
 
22:29 usada pelo pessoal de linguagens
 
22:31 funcionais...
 
 
22:35 deixa eu pegar uma figura aqui...
 
22:35 aqui é um outro trecho daquele
 
22:39 vídeo que eu falei que é maravilhoso...
 
 
22:44 Em geral a gente quer aprender o Lean
 
22:48 como provador de teoremas
 
22:50 começando por "táticas".
 
 
22:52 Muita gente começa rodando o Lean
 
22:54 no browser, no tal do
 
22:56 "Natural Numbers Game" e aí aquilo é um
 
23:00 tutorial que já começa direto por táticas.
 
 
23:02 O meu primeiro contato com Lean
 
23:04 foi no meio da pandemia quando um cara
 
23:05 chamado Francesco Noseda, que é um professor
 
23:11 da UFRJ... ele deu um curso de Lean online
 
23:15 e eu participei, e no curso dele ele supunha
 
23:18 que as pessoas sabiam um bocado
 
23:21 sobre técnicas de demonstração em
 
23:24 Cálculo de Sequentes e Fitch, e apesar
 
23:28 que eu trabalho com Lógica a minha
 
23:29 formação é muito estranha - eu nunca tive
 
23:31 um curso formal disso...
 
 
23:33 então, eu sou meio ruim nessas coisas...
 
23:35 eu sou bom em Dedução Natural,
 
23:37 mas eu tenho pouca prática com
 
23:38 técnicas de demonstração, Cálculo de
 
23:40 Sequentes, coisas assim
 
23:42 formalizadas do jeito tradicional para
 
23:46 quem fez um curso de Lógica.
 
 
23:49 Então, eu ralei muito pra
 
23:51 entender aquilo, e eu fiquei com a sensação
 
23:52 de que faltavam diagramas. Nesse vídeo eu
 
23:55 consigo mostrar para vocês que tipo de
 
23:56 diagrama faltava.
 
 
23:58 No curso do Francesco e a gente não
 
24:03 conseguia... a gente via esse tipo de coisa
 
24:05 daqui - aqui tem um exemplo de que
 
24:08 hipóteses a gente tem num certo momento
 
24:12 e o que que a gente quer provar...
 
 
24:18 e nessa figura daqui ele mostra
 
24:21 que quando a gente roda essa tática daqui
 
24:23 o nosso conjunto de hipóteses e
 
24:27 a coisa que a gente quer provar mudam
 
24:29 desse bloquinho de cima para esse
 
24:31 bloquinho de baixo.
 
 
24:32 Então para mim quando a gente consegue
 
24:35 ver o "antes" e o "depois" na mesma
 
24:37 tela fica muito mais fácil de entender,
 
24:40 e na época do curso de Francesco ele não
 
24:43 mostrou isso, ele não tinha técnicas pra
 
24:45 mostrar isso... e eu passei dias tentando
 
24:48 fazer as figurinhas para conseguir
 
24:51 entender quais eram as táticas principais.
 
 
24:54 Agora, outro motivo pra gente
 
24:56 não aprender táticas nesse meu curso de
 
24:58 três aulas é que mesmo o Theorem Proving
 
25:03 Lean... deixa eu aumentar a letra de novo...
 
25:06 ele só ensina táticas no capítulo 5 dele.
 
 
25:10 Então, antes ele ensina a Teoria de
 
25:13 Tipos básica até quantificadores, outros
 
25:16 modos de demonstrar proposições simples...
 
25:18 as táticas só aparecem no capítulo 5.
 
 
25:21 Então, a gente vai aprender essas
 
25:26 coisas na aula 2, e na aula 2 eu
 
25:29 só vou supor que as pessoas sabem um
 
25:31 pouquinho de Matemática e têm uma noção de
 
25:34 tipos mesmo que seja de linguagens como C,
 
25:36 e já tentaram aprender Haskell e
 
25:40 quebraram a cara...
 
 
25:40 que elas têm uma noção de coisas
 
25:43 mais básicas, mas empacaram -
 
25:45 possivelmente nos mesmos lugares que eu.
 
 
25:47 Então, isso é aula 2, e eu
 
25:51 suponho que a aula 2 vai
 
25:53 interessar pra um bocado de gente...
 
25:56 e a aula 2 é desculpa para as
 
25:58 pessoas aprenderem a aula 1, e na aula 1
 
26:00 eu vou apresentar o Emacs e a
 
26:03 biblioteca que eu fiz pro Emacs, que é
 
26:05 essa biblioteca de hiperlinks e outras
 
26:07 coisas, que é o eev.
 
 
26:10 A aula 3 eu ainda não preparei o
 
26:14 material dela direito, e ela é bem mais
 
26:16 avançada... eu não sei quanta gente
 
26:18 vai se interessar por ela,
 
26:21 porque tem bem pouca gente no Brasil que
 
26:24 se interessa por linguagens funcionais, e
 
26:27 até onde eu sei a maioria das pessoas
 
26:28 que se interessam por linguagens funcionais
 
26:30 está super sem tempo, então eu não sei
 
26:33 quantas pessoas vão fazer
 
26:35 esse meu minicurso...
 
 
26:38 e na verdade para mim o mínimo é 1 -
 
26:41 se tiver uma pessoa interessada e for uma
 
26:42 pessoa animada, que tem coragem de dizer
 
26:45 "eu não entendi isso aqui" quando eu mostrar
 
26:47 um determinado exemplo, para mim já tá bom...
 
26:49 porque eu consigo testar esse material e
 
26:53 transformar ele num blog post grande, em
 
26:56 alguma coisa publicável, sei lá...
 
 
27:00 então, digamos que a aula 3 interesse
 
27:02 para bem menos gente, e pode ser que
 
27:05 algumas pessoas assistam a aula 3 mais por
 
27:11 curiosidade mas achem tudo muito avançado...
 
 
27:14 Basicamente na aula 3 a gente vai ver
 
27:16 as figuras que me salvaram
 
27:18 para entender várias coisas do Lean.
 
 
27:20 Aqui tem um exemplo dessas figuras...
 
27:24 ih, não, tou na página errada, deixa eu ir
 
27:28 pra outra página... tá aqui.
 
 
27:32 Por exemplo, isso aqui é um exemplo de
 
27:36 mônadas sem usar a notação "do", que vou
 
27:40 supor que vocês já ouviram falar. Então,
 
27:43 isso aqui é um exemplinho de mônadas com
 
27:45 a notação "do" traduzida pra uma notação
 
27:47 mais básica e com as anotações de tipos.
 
 
27:50 E pra mim tinha umas coisas que eram
 
27:52 super misteriosas, que é... por exemplo,
 
27:54 como é que a gente descobre que uma
 
27:56 operação dessas, que usa a mônada
 
27:59 de listas retorna uma lista?
 
 
28:03 E aí a gente tem que fazer
 
28:06 essas type inferences todas pra entender
 
28:09 como é que esse "bind" vai funcionar,
 
28:14 porque tem que ser o bind "da mônada
 
28:16 associada a isso aqui" e aí esse bind
 
28:19 determina qual vai ser o "pure", e o pure
 
28:22 vai fazer com que o resultado seja uma
 
28:24 lista de pares do tipo A×B...
 
 
28:26 então eu
 
28:28 ficava lendo os capítulos sobre
 
28:32 mônadas dos tutoriais, eles davam um
 
28:34 montão de exemplos de uso, um montão de
 
28:36 analogias... e nada fazia muito sentido pra
 
28:38 mim, e a partir do momento em que eu
 
28:40 consegui ver todos esses detalhes
 
28:42 tudo ficou muito mais claro. Então eu vou
 
28:44 apresentar isso e a gente vai discutir e
 
28:48 eu vou tentar descobrir se esse tipo de
 
28:49 coisa ajuda outras pessoas também, ou não...
 
 
28:53 Aqui tem um outro exemplo de coisa...
 
28:56 de figura que me ajudou muito.
 
28:58 Deixa eu pegar esse pedacinho dela.
 
 
29:05 Vamos olhar só pra parte de cima dela.
 
29:08 Isso aqui é uma função que recebe
 
29:13 esses argumentos implícitos aqui, então o
 
29:15 usuário não precisa dar esses argumentos,
 
29:17 o Lean vai inferir esses argumentos
 
29:19 a partir do resto...
 
 
29:23 Aí tem essa coisa muito misteriosa aqui,
 
29:25 que eu levei meses para entender, e aí
 
29:27 tem essa coisa um pouco mais clara aqui...
 
29:29 aqui a gente tem o produto dos dois
 
29:31 tipos, que a gente pode considerar que é um
 
29:32 produto cartesiano de dois conjuntos, e
 
29:35 um ponto desse produto cartesiano.
 
 
29:37 Aqui tem uma coisa invisível...
 
 
29:41 e aí essa função que recebe esses
 
29:44 argumentos vai retornar o resultado
 
29:45 dessa coisa daqui aqui.
 
 
29:47 Tem uma expressão que vai pegar esse ab,
 
29:48 que é um par, vai separar ele
 
29:52 em lado esquerdo e lado direito,
 
29:54 vai colocar o lado esquerdo
 
29:56 dentro da variável a e vai ignorar o lado
 
29:58 direito... e aí aqui à direita a gente vai
 
30:00 retornar o resultado disso.
 
 
30:03 E aí como é que a gente faz pra
 
30:05 entender uma coisa dessas?
 
 
30:08 Eu descobri que o melhor modo de entender
 
30:10 essas coisas é a gente olhar pro parser
 
30:12 do Lean.
 
 
30:15 Então a gente vai dar uma olhada em como
 
30:20 cada estrutura sintática é definida lá...
 
30:23 algumas têm comentários bem interessantes,
 
30:25 outras têm só referências e outras coisas
 
30:27 [?] que mais ou menos legível
 
 
30:29 E aí eu fui
 
30:30 descobrindo que essa coisa aqui era
 
30:34 uma "typeAscription", essa coisa
 
30:36 misteriosa daqui era um "instance binder",
 
30:39 e a partir do nome [?] que eu descobri isso
 
30:40 eu consegui descobrir quais seções do
 
30:42 manual explicavam essas coisas... e aí aos
 
30:46 pouquinhos tudo foi ficando claro.
 
 
30:49 Essa figura daqui pode ser dividida
 
30:51 em figuras que detalham...
 
30:53 bom, eu não consegui fazer um
 
30:56 parsing diagram que coubesse numa linha só,
 
31:01 ficava muito grande, então eu dividi
 
31:02 isso em vários...
 
 
31:02 por exemplo, esse {α β} entre chaves aqui
 
31:08 ele pode ser transformado
 
31:12 nessa árvore daqui, bem maior...
 
 
31:14 isso aqui é parseado pelo "implicitBinder"...
 
 
31:18 essa outra estrutura daqui
 
31:21 é parseada pelo instBinder...
 
 
31:28 e essa última daqui é parseada
 
31:32 desse jeito daqui...
 
31:33 e o "let" é parseado por essas duas
 
31:38 árvores daqui de baixo.
 
 
31:40 Tá, então a gente vai entender isso aqui,
 
31:44 que é um outro tipo de diagrama
 
31:45 que me salvou...
 
 
31:48 E... ai caramba... aqui.
 
31:58 E basicamente é isso.
 
32:01 Talvez tenha um outro tipo de
 
32:04 diagrama, que é pra gente entender o que
 
32:07 que é um "Pratt parser" e como é que o
 
32:11 Lean entende precedência, macros e outras
 
32:13 coisas... mas eu ainda não tenho exemplos
 
32:15 muito bons dele... então é basicamente isso.
 
 
32:21 Tem mais uma seção aqui... peraí.
 
32:28 Ah, não, era só isso. Eu já expliquei qual
 
32:30 era minha motivação, meu público alvo, a
 
32:33 história da didática e tudo mais, e só
 
32:36 falta falar uma coisa.
 
 
32:38 É o seguinte eu já
 
32:39 disse que eu tou trabalhando num campus
 
32:40 da UFF que é muito pequeno. Eu já tinha
 
32:43 uma noção de que esse campus era um lixo,
 
32:45 até um tempo atrás... mas
 
32:48 nos últimos do anos eu consegui
 
32:50 descobrir que ele é um lixo, assim, 10
 
32:52 vezes maior do que eu pensava...
 
 
32:55 não dá para interagir com os meus colegas de lá
 
32:57 nem mesmo pra discutir os cursos
 
32:59 que eu tou dando e técnicas de didática...
 
33:02 e eu oferecia umas oficinas de Software
 
33:03 Livre pros... basicamente pros alunos,
 
33:07 e eles não iam nunca, e eu não entendia
 
33:09 porquê...
 
 
33:10 e aí durante a greve eu ofereci
 
33:12 essas oficinas divulgando elas pro
 
33:14 pessoal de todos os cursos e eu vi que
 
33:16 as pessoas de Produção Cultural e
 
33:18 Psicologia iam nas oficinas, ficavam
 
33:21 super animadas, faziam milhões
 
33:22 de perguntas... mas os alunos da
 
33:25 Computação e da Engenharia - eles não iam
 
33:27 de jeito nenhum.
 
 
33:29 Aí eu fui entendendo aos poucos - até
 
33:31 porque eu conversei com umas pessoas que
 
33:33 estudaram em Niterói - que eles têm uma
 
33:36 mentalidade na qual é inconcebível você
 
33:39 estudar junto com os colegas, você tirar
 
33:41 dúvida dos colegas, você ir na oficina
 
33:43 dos colegas... então eles não tem uma
 
33:47 mentalidade de "estamos na universidade
 
33:50 pública, vamos fazer tudo que aparecer,
 
33:52 vamos aprender tudo que der, e vamos
 
33:54 compartilhar o conhecimento"...
 
 
33:56 É uma coisa muito estranha. Eles
 
33:58 talvez tenham pego um pouco da mentalidade
 
34:00 do pessoal da Engenharia de Produção, não
 
34:03 sei direito... mas de qualquer forma é
 
34:07 péssimo.
 
 
34:08 E aí eu tô querendo dar essa oficina
 
34:10 pra fazer contato com pessoas
 
34:12 de outras universidades, descobrir que
 
34:13 que elas estão fazendo, descobrir como é que
 
34:15 eu posso participar dos projetos delas,
 
34:17 grudar nelas de alguma forma fazendo
 
34:20 coisas interessantes junto com elas online...
 
 
34:23 Deixa eu só mostrar uma coisinha que faltou.
 
34:26 Eu mostrei como é que esses
 
34:28 links daqui vão para seções dos manuais...
 
34:31 por exemplo, esse aqui abre
 
34:35 a versão em HTML do
 
34:37 "Functional Programing in Lean"...
 
 
34:42 e todos esses manuais exceto um têm
 
34:46 fonte num formato super fácil de acessar,
 
34:52 e a gente consegue extrair os
 
34:55 bloquinhos de código dessa fonte.
 
 
34:58 Então, por exemplo, nesse manual
 
35:03 daqui, do "Metaprograming", tem uma seção...
 
35:06 repara que esse link daqui veio pra uma subseção
 
35:11 dessa página, a subseção se chama "Building
 
35:13 a DSL and a syntax for it"...
 
 
35:15 é um exemplo mais ou menos básico
 
35:16 de como criar uma linguagenzinha nova...
 
 
35:21 e eu também posso ir pro código fonte
 
35:24 disso aqui, que gerou esse HTML...
 
 
35:28 Então, se eu rodo esse hiperlink daqui
 
35:33 ele abre o código fonte disso...
 
35:35 repara, esse título aparece
 
35:38 desse jeito aqui, e esse bloquinho de
 
35:40 código aparece desse jeito... isso aqui é
 
35:43 um arquivo em Lean, o arquivo parseou
 
35:46 essas coisas daqui
 
35:48 interpretou esse bloquinho daqui como
 
35:52 Lean, coloriu tudo do jeito certo, e,
 
35:59 por exemplo... talvez se eu usar a tecla
 
36:01 de "go to" aqui talvez ele vá
 
36:03 pra definição do "inductive"... bom,
 
36:07 talvez, mas eu não tenho certeza...
 
 
36:11 Tudo funciona exatamente como
 
36:14 naquele outro demo que eu mostrei - cada
 
36:15 "#check" desses mostra um output aqui
 
36:19 embaixo, e se eu bater f10 l l...
 
 
36:24 opa, não, seu eu bater essa
 
36:26 sequência misteriosa de teclas daqui
 
36:29 ele mostra todas as mensagens de uma vez.
 
 
36:32 Então: a gente vai ver como acessar esse...
 
36:36 o código fonte, e extrair o código fonte
 
36:40 e criar arquivos menores com isso, em que
 
36:42 a gente possa fazer nossos experimentos...
 
36:45 modificar coisas, simplificar coisas
 
36:47 acrescentar coisas, etc...
 
 
36:49 Então isso é uma coisa que a gente
 
36:51 vai ver superficialmente na primeira
 
36:53 aula e depois a gente vai usar
 
36:55 bastante.
 
 
36:57 E... é isso. O vídeo era isso aí.
 
37:01 Qualquer coisa acessem essas
 
37:04 páginas pra mais informações e entrem
 
37:07 em contato comigo... e se vocês tiverem
 
37:09 algum interesse no curso por
 
37:11 favor peguem os meus contatos e mandem
 
37:13 ou e-mail ou mensagem por WhatsApp ou
 
37:16 por Telegram. É isso por enquanto!
 
 
37:20  
 
 
   |