$cat ~/posts/bend2-manifesto

o manifesto do bend2

2026-09-17 · pt · 8 min read · [bend] [linguagens] [ia] [provas] [pt]

← /blog

O Bend2 saiu hoje, e eu quero defender a ideia dele antes que a discussão vire briga de benchmark.

Aviso de escopo: eu não rodei o Bend2. Não instalei, não escrevi uma linha, não tenho opinião sobre a ergonomia dele. O que eu tenho é opinião sobre a aposta, e a aposta eu acho certa.

o que quebrou

Nos últimos dois anos a quantidade de código que eu leio ficou maior que a quantidade de código que eu escrevo. Isso não é reclamação, é só a descrição do trabalho agora.

E aí aparece o problema que ninguém resolveu ainda: revisão humana mede se o código parece certo. É literalmente isso que a gente faz. Lê, entende a intenção, procura o caso que o autor esqueceu, e aprova quando não acha nada.

Só que "parecer certo" é exatamente o que uma máquina treinada em código humano faz melhor do que qualquer um. Ela produz o código mais plausível possível. Plausível é a métrica que ela otimiza, e plausível é a métrica que a minha revisão aplica. As duas apontam pro mesmo lugar, e o bug mora no ponto cego comum.

Eu já escrevi aqui sobre quatro coisas que eu quebrei em produção. Nenhuma delas falhou por matemática errada. Falharam por costura: uma constante que não chegava na função, uma palavra de escopo, uma ordem de checagem. Todas passaram por revisão. Todas pareciam certas.

Teste também não resolve, e por um motivo mais duro: teste mostra que o bug existe, nunca que ele não existe. Você amostra o espaço de entradas e torce pra ter amostrado o caso que importa.

Escala de IA com garantia de amostragem é uma conta que não fecha.

a inversão

O que o Bend2 propõe é parar de tentar consertar a revisão e mudar o artefato que o humano mantém.

Em vez de você escrever o código e a máquina te ajudar, você escreve a lei, e a máquina escreve o código e a prova de que o código obedece a lei. A lei fica no repositório, num arquivo chamado LAWS.bend, e ela é a coisa que você lê, versiona e discute em pull request.

law you_cant_win:
  for moves: List<Game.Move>
  board = Game.replay(Game.start(), moves)
  {Game.is_won(board) == False{} : Bool}

Isso lê como: para qualquer sequência de jogadas, replicar essas jogadas a partir do estado inicial nunca resulta num tabuleiro vencido. Não é um caso de teste. É uma afirmação sobre todas as sequências possíveis, incluindo as que você nunca imaginou.

A implementação vira saída. A prova vira saída. O que você mantém é a afirmação.

o humano escreve a única parte que a máquina não pode escrever por ele: o que conta como estar certo.

O slogan do projeto é que integrar um bug passa a ser matematicamente impossível, porque virou teorema. É forte e é literal, com um asterisco que eu acho que precisa estar em negrito: dentro do escopo da lei que você declarou. Nada ali te protege de declarar a lei errada. A responsabilidade não sumiu, ela mudou de lugar, e mudou pra um lugar muito menor e muito mais legível.

Trocar dez mil linhas de implementação por vinte linhas de lei é o melhor negócio que essa profissão viu em bastante tempo.

por que prova e não mais teste

A diferença entre as duas coisas é a diferença entre amostrar e quantificar.

Um teste diz: para essas trinta entradas, deu certo. Uma prova diz: para toda entrada possível, dá certo, e aqui está o argumento que você pode conferir linha por linha.

Isso não é ideia nova. Coq, Agda, Lean e Idris fazem isso há décadas, e a razão de não ter pegado é bem conhecida: escrever prova é caro, chato e exige treinamento que a maioria dos programadores não tem nem quer ter. O custo da prova sempre foi maior que o custo do bug.

O que mudou é que agora tem uma máquina disposta a fazer a parte chata. A prova era o gargalo porque era trabalho humano. Deixou de ser.

É por isso que eu acho que essa é a primeira vez que verificação formal tem chance fora da academia e de sistema crítico. Não porque a matemática ficou melhor, e sim porque o preço dela caiu pro chão.

a objeção que eu levo a sério

Tem uma, e ela está no próprio README do projeto, escrita com uma honestidade que eu respeito muito: o compilador do Bend2 é 99% escrito por IA e ainda não foi auditado por completo.

Leia isso de novo e sinta o tamanho da ironia. A ferramenta que existe pra impedir erro de IA foi, ela mesma, escrita por IA e não conferida.

Isso parece derrubar a tese inteira. Eu acho que não derruba, e o motivo é a coisa mais importante desse post.

Num sistema de prova, gerar e conferir são trabalhos completamente diferentes. Gerar a prova é dificílimo, criativo, e pode ser feito por qualquer coisa: você, uma IA, um macaco com sorte infinita. Conferir a prova é mecânico, decidível, e o programa que faz isso é pequeno. Não importa de onde veio a prova, porque ela chega acompanhada do argumento completo, e o checador percorre esse argumento passo a passo.

Então a pergunta não é "o compilador é confiável?". É "o checador é confiável?". E o checador é a parte pequena, que cabe numa auditoria de verdade, feita por gente, uma vez, valendo pra sempre.

Isso é velho. Assistente de prova sério sempre foi construído assim, com um núcleo mínimo que todo o resto precisa convencer. Que o gerador ao redor seja gigante, opaco e suspeito é o esperado. É o desenho, não a falha.

Eu ainda quero ver esse checador auditado. Quero ver gente de fora do projeto tentando quebrar. Mas a estrutura do argumento está certa, e ela é o oposto de "confia na IA": ela é "não confia em ninguém, exige o argumento".

o que ainda não dá

Entusiasmo com a ideia não é fingir que o release está pronto, e ele não está.

Não tem type class, não tem trait, não tem macro além de template. Não tem LSP, não tem debugger, não tem tactic. Anotação de tipo é obrigatória em tudo. Os números são Nat, U32 e F32, e só. String é lista ligada de caractere, o que qualquer um que já escreveu Haskell sabe o que significa na prática. Não tem TLS, HTTP, JSON nem regex. Não roda em Windows nativo, só via WSL. Uma GPU por programa.

Isso é uma versão 2.0.5 de um projeto de um dia atrás, e a lista acima é longa o bastante pra que ninguém deveria estar colocando isso em produção essa semana.

Eu não estou dizendo pra usar. Estou dizendo pra prestar atenção.

o que eu passo a cobrar

Aquilo que eu escrevi sobre criptografia ontem vale aqui, do avesso.

Lá o argumento era que a criptografia trata algoritmo novo com desconfiança organizada: concurso público, anos de gente tentando quebrar, e só então virar padrão. E que a IA faz o contrário, publica o artigo em duas semanas e sobe em produção na terceira.

O Bend2 é a primeira coisa que eu vejo tentando trazer esse rigor pra dentro do fluxo de código gerado por máquina. Não pedindo confiança: pedindo prova, e oferecendo um jeito barato de produzir a prova.

Pode ser que o Bend2 não vingue. A maioria das linguagens não vinga, e essa carrega uma lista de limitações do tamanho de um braço. Mas a pergunta que ele faz não vai embora, e ela é a pergunta certa: se a máquina escreve o código, o que exatamente o humano continua sendo responsável por?

A resposta dele é "por dizer o que conta como estar certo". Eu não consigo pensar numa melhor.