LLMs estão tornando a verificação formal de software viável em uma escala muito maior

Modelos de linguagem grandes estão começando a tornar a verificação formal de software prática em escala, por exemplo ao gerar provas enormes em Rocq/Coq que mostram que binários compilados não travam para todas as entradas dentro de certos limites. Os comentaristas veem isso como um avanço real para segurança e confiabilidade, mas enfatizam que isso só verifica o código em relação a uma especificação formal, não se essa especificação corresponde aos requisitos confusos do mundo real ou à intenção humana. O fio explora questões mais amplas sobre os LLMs atingirem uma “convex hull” do conhecimento humano, sua dificuldade com abstração e criatividade, e até onde as provas automatizadas podem realmente ir diante de limites fundamentais como o problema da parada e a complexidade dos sistemas reais.

LLMs, Verificação Formal e Limites de Capacidade

  • Vários comentários conectam os resultados da Anthropic à ideia de “convex hull”: os LLMs interpolam dentro da prática matemática humana, mas podem ter dificuldade para inventar abstrações fundamentalmente novas.
  • Alguns argumentam que os LLMs são fortes em avançar por grandes provas de estilo conhecido, mas vão bater em paredes de complexidade sem melhores estratégias de abstração e raciocínio.
  • Outros contrapõem que o reinforcement learning em tarefas mais difíceis pode gerar estratégias de prova emergentemente melhores, então o limite não é claramente fixo.

Estilo de Prova, Abstração e Complexidade

  • Provas geradas por agentes são descritas como extremamente verbosas, expandindo cada detalhe de execução de baixo nível.
  • Isso espelha como os LLMs escrevem código e testes: frágeis, concretos, repetitivos, com fraca modularização.
  • Várias pessoas observam que escalar a verificação exigirá engenharia de provas ao estilo humano: abstrações modulares, lemas reutilizáveis e melhores princípios de raciocínio.
  • Há otimismo de que treinar em boa estrutura de prova possa melhorar a qualidade geral do código, especialmente em ecossistemas fortemente tipados, funcionais e semelhantes ao Rust.

O Que Está Realmente Verificado? Especificações, Modelos e Limites

  • Ênfase forte em que “formalmente verificado” sempre significa “em relação a uma especificação/modelo formal”, que pode não corresponder à intenção real ou ao hardware real.
  • Preocupação de que os LLMs possam gerar teoremas vazios ou mal especificados que ainda passam no verificador, dando falsa confiança.
  • Alguns destacam limites clássicos (problema da parada, teorema de Rice), enquanto outros enfatizam que isso não impede provar propriedades úteis para programas específicos e não arbitrários.
  • É feita a distinção entre verificação (o código corresponde à especificação), validação (a especificação corresponde às necessidades do mundo real) e a dificuldade desta última.

Fluxos de Trabalho, Ferramentas e Níveis de Abstração

  • Vários praticantes relatam sucesso usando LLMs com Lean/Rocq, ESBMC, Alloy, Verus etc., especialmente para provas de equivalência (por exemplo, reescritas de C→Rust, otimizações versus implementações de referência).
  • Verificar binários compilados ou LLVM IR é visto como poderoso, mas “brutal”, exigindo grandes termos de prova gerados por máquina; é exatamente aí que a escala dos LLMs brilha.
  • Outros argumentam que equivalência a uma referência dourada é mais tratável do que especificações completas e é bem adequada a sistemas legados (por exemplo, COBOL, Postgres C).

Futuros Declarativos vs Realidade Imperativa

  • Um grupo prevê uma mudança para linguagens declarativas determinísticas com ricos sistemas de tipos/efeitos e verificabilidade embutida, tornando as provas formais o padrão.
  • Céticos duvidam que uma linguagem declarativa suficientemente flexível e performática possa evitar se tornar efetivamente imperativa ou recriar o problema do “compilador suficientemente inteligente”.
  • A discussão toca em DSLs, fragmentos declarativos embutidos (SQL, LINQ, Inform7) e semântica de sistemas distribuídos.

Teste, Fuzzing, Segurança e Adoção

  • Muitos veem o principal ganho prático hoje como: provar que propriedades de fuzz-test valem para todas as entradas (sem crashes, round-trips, leis algébricas), produzindo garantias mais fortes do que fuzzing sozinho.
  • Há debate sobre se isso é “verificação formal” de verdade ou apenas teste turbinado, mas a maioria concorda que ainda é um salto substancial em segurança e robustez.
  • Alguns estão animados com a redução da barreira para ferramentas como Alloy, TLA+ e métodos formais em domínios críticos para segurança ou de alta garantia; outros preveem adoção limitada fora de nichos “paranoicos”.

Preocupações Socioeconômicas e de Fluxo de Trabalho

  • Vários desenvolvedores descrevem os LLMs como simultaneamente empoderadores (experimentação mais rápida, mais verificação) e desmoralizantes (perda de ofício, medo pela estabilidade da carreira).
  • Há preocupação de que a indústria gaste os “dividendos de verificação” dos LLMs em mais velocidade e sistemas mais descuidados, em vez de maior garantia genuína.
  • Um tema recorrente: os LLMs amplificam tendências existentes — equipes descuidadas geram mais descuido; equipes cuidadosas podem avançar para uma verificação que antes era cara demais.