A matemática está assombrada
(overreacted.io)- Lean é uma linguagem de programação projetada para formalizar a matemática, permitindo que matemáticos tratem teoremas matemáticos como código
- Usuários escrevem teoremas, provas, axiomas etc. em formato de código, e o processo da prova é conduzido por meio de um conjunto de comandos chamado tactic
- Mesmo que a prova não esteja realmente completa, é possível encerrá-la provisoriamente com
sorry; isso funciona como uma prova falsa, semelhante aoanydo TypeScript - Se forem adicionados axiomas incorretos (por exemplo,
2 = 3), surge o risco de inconsistência lógica e da possibilidade de provar qualquer afirmação - Como Lean extrai conclusões apenas a partir dos axiomas escolhidos e do sistema de prova lógico, manter a validade matemática tem grande importância
Lean: linguagem para lidar com matemática como código
- Lean é uma linguagem de programação especializada em escrever matemática formalizada
- Matemáticos podem, por meio de Lean, expressar matemática como código e estruturar seus teoremas e provas para viabilizar colaboração e compartilhamento
- O texto também sugere um futuro em que uma grande parcela do conhecimento matemático humano poderá ser representada em código, passível de verificação e composição mecânicas
O primeiro passo das provas em Lean
- Em Lean, é possível declarar um teorema simples no formato
theorem two_eq_two : 2 = 2 := by sorry - Quando a prova está incompleta, coloca-se
sorry, mas isso é apenas uma solução temporária, não uma prova realsorrypassa pela verificação de prova do Lean, mas não é confiável do ponto de vista lógico
- Para uma prova completa, usa-se uma
tacticcomorfl(reflexividade) para provar identidades óbvias como2 = 2 - O que já foi provado pode ser reutilizado em outro teoremas com
exacte similares, destacando a modularidade
Axiomas e contradições: quando a matemática está assombrada
- Se adicionarmos um axioma como
axiom math_is_haunted : 2 = 3, Lean o trata como verdadeiro - Esse axioma pode ser usado nos passos seguintes da prova, tornando possível provar conclusões matematicamente absurdas, como
2 + 2 = 6 - É possível substituir
2por3usando atacticrewritee encerrar o raciocínio da igualdade comrfl - Se uma contradição for induzida por axiomas inadequados, também no Lean ocorre um estado em que qualquer proposição pode ser provada (colapso lógico)
- Na prática, no início do século XX, inconsistências em sistemas axiomáticos, como o paradoxo de Russell, levaram a reflexões fundamentais sobre a matemática
- Assim, Lean mostra bem que a escolha de axiomas é decisiva para a manutenção da validade de um sistema lógico
Lean como verificador de provas
- Se os axiomas forem bem selecionados e Lean for logicamente correto, ele oferece conclusões com confiabilidade teórica
- Desde equações simples até teoremas muito complexos (como o Teorema de Fermat) são verificados pelo mesmo princípio
- Um grande teorema é construído como uma árvore inteira por meio da acumulação repetida de provas de subestruturas e teoremas menores
- Como exemplo, há um projeto de grande escala em andamento para formalizar o Teorema de Fermat em Lean, e espera-se que no fim seja concluída uma prova formal sem
sorryprovisórios
A diversão de aprender Lean
- Provar com Lean é uma combinação criativa de programação e matemática
- Começa-se aprendendo a provar proposições simples, e gradualmente se torna a principal diversão construir matemática cada vez mais complexa e profunda de forma rigorosa
- Manuais oficiais e materiais da comunidade (como Natural Numbers Game, Mathematics in Lean etc.) são adequados para iniciantes
- Ao usar Lean, você pode formalizar diretamente a lógica e redescobrir a beleza de ideias e argumentos engenhosos
- Sem motivo aparente, a conclusão é que Lean oferece uma diversão especial para certos tipos de pessoas
1 comentários
Comentários no Hacker News
two_eq_twoparece uma função; como ele não tem argumentos, está mais para uma constante (embora eu saiba que constantes também sejam funções sem argumentos); acho mais convincente usarx_eq_xabaixo e então aplicá-lo em2_eq_2como se fosse uma função Aquix_eq_xrealmente parece uma função, e em2_eq_2ela é usada dessa formaxe receber a prova dex = x) ainda me parece um pouco estranha, e isso merece ser tratado à parte; vou falar disso no próximo artigorfle afins) são abrangentes demais, e mesmo com tutorial é difícil entender o significado exato; por exemplo, em C eu consigo rastrear mudanças de estado até o nível de bits, mas no Lean tudo parece meio nebuloso; e a sintaxe da tacticrewrite(rw) também me soa pouco naturalrewritenão funcionava por motivos difíceis de explicar (imagino que por causa da definição da estrutura intermediária); por outro lado, o Metamath e o banco de dadosset.mmfazem você provar tudo sem tactics, só com inferência explícita (usando regras comoax-mp), mas aí o problema é ter de decorar um monte de lemas utilitários, o que também não é simplesrflourewritetoda vez; talvez exista algum tipo de prelude no Lean que automatize issorw [x]; dá para ver o estado de cada linha no editor, mas ter de ficar clicando quebra o fluxo; seria como se em Python você não tivesse indentação e, para entender a estrutura de blocos, precisasse clicar em tudo; talvez isso seja uma impressão causada pelos comandos limitados do começo do jogo, mas queria saber se no ambiente completo do Lean isso melhoraby ...; não sei se o Lean tem algo assim, mas pelo menos isso pode servir como palavra-chave de busca ou tema de pergunta nos fóruns do Leanintrosignifica entrar em um quantificador,constructorsignifica dividir o goal, e por aí vai; no fim, tactics são macros/DSLs que constroem uma árvore de prova (term tree); quando olho código de prova, sinto como se estivesse vendo manipulações de árvore (quebrar em partes, preencher a ordem etc.); ainda assim, continua sendo verdade que, para saber exatamente qual é uma afirmação no meio da prova, muitas vezes você precisa clicar; uma prova com boa ideia pode ser lida com a clareza da progressão lógica de um artigo; por isso, quem quer comunicar intenção costuma usar nomes fáceis de ler, desenvolvimento claro, extração de lemas pequenos e o padrão de colocar as hipóteses primeiro e resolver com um código de prova curto; já partes que são mecanicamente chatas, mas óbvias para um matemático, costumam virar “golfing” (codificação minimalista); o estilo golf muitas vezes encurta o código, mas só trata de partes que o humano já entende intuitivamente; em resumo, no Lean a estrutura de leitura é implícita, mas há jeitos de deixá-la mais clara, e quanto mais você domina as tactics, mais consegue captar a estrutura sem clicar; só de bater o olho nos nomes dos lemas já dá para entender o fluxo geral, e a ordem pode ser reconstruída com facilidadeclojure core.logice sofri com o problema de pouco interesse/ comunidade muito pequena, então agora tenho dificuldade de começar de novoA comunidade Lean se reúne bastante no Zulip, e no canal Machine-Learning-for-Theorem-Proving dá para encontrar várias threads de referência
sorryque faltam nos exercícios (minhas soluções estão aqui)proofcomsorry) ou a adição contínua de novos axiomas; por exemplo, dá para confirmar algo como “esta prova não usasorryde jeito nenhum” ou “ela depende apenas do poder de prova de um conjunto fixo de axiomas”?#print axioms some_theoremmencionado mais para o fim do artigo talvez seja justamente um exemplo disso; com ele dá para ver se a prova depende direta ou indiretamente desorryou de axiomas não revisadosprint axiomsdá para verificar se não há axiomas adicionais, e também observar se compila sem warnings nem erros; o utilitário SafeVerify também pega alguns truques encontrados por sistemas de RL