← Últimos artigos
🤖 AI

Diversifying to Verify: When Task-Equivalent Programs Differ in Verifiability

Este artigo apresenta o Diversify2Verify, um pipeline baseado em LLM que demonstra como a geração de implementações de programas diversas e equivalentes em termos de tarefa melhora significamente as taxas de sucesso de verificação automatizada ao identificar variantes que são mais propensas à prova formal.

Autores originais: Shirley Yu, Ruben Martins

Publicado 2026-07-13
📖 7 min de leitura🧠 Leitura aprofundada

Autores originais: Shirley Yu, Ruben Martins

Artigo original sob licença CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Esta é uma explicação gerada por IA do artigo abaixo. Não foi escrita nem endossada pelos autores. Para precisão técnica, consulte o artigo original. Ler aviso legal completo

Imagine que você está tentando construir um robô que possa resolver um enigma matemático. Você tem um assistente de IA superinteligente (um Modelo de Linguagem Grande) que é ótimo em escrever código. Normalmente, pedimos à IA: "Escreva um código que resolva este enigma" e verificamos se o robô passa em algumas execuções de teste. Se ele passar, dizemos: "Bom trabalho!"

Mas no mundo da verificação formal, passar em alguns testes não é suficiente. É como construir uma ponte e apenas passar um carrinho de brinquedo sobre ela. Para ser verdadeiramente seguro, você precisa de uma prova matemática de que a ponte suportará qualquer carro, a qualquer momento, sob qualquer condição. É isso que o artigo chama de "verificação dedutiva".

O problema? Fazer a IA escrever um código que não seja apenas correto, mas também fácil de provar, é incrivelmente difícil. Às vezes, a IA escreve uma solução que funciona perfeitamente, mas que é tão bagunçada ou estranhamente estruturada que o "verificador de provas" (uma ferramenta chamada Why3) fica confuso e não consegue verificar o código.

A Grande Ideia: Não Tente Apenas Um Caminho

Os autores, Shirley Yu e Ruben Martins, fizeram uma pergunta simples: E se não pedirmos apenas uma solução, mas sim muitas versões diferentes da mesma solução?

Pense nisso como tentar abrir um pote teimoso.

  • Versão A: Você tenta girar a tampa com a mão direita.
  • Versão B: Você tenta girar a tampa com a mão esquerda.
  • Versão C: Você tenta bater na tampa com uma colher.
  • Versão D: Você tenta colocá-la sob água quente.

Talvez o "giro com a mão direita" (o primeiro código que a IA escreve) seja muito escorregadio para o verificador de provas agarrar. Mas o "giro com a mão esquerda" pode ter um formato que se ajusta perfeitamente à lógica do verificador. O artigo chama isso de Diversify2Verify. Em vez de esperar por um código perfeito, eles geram quatro "sabores" diferentes da mesma tarefa:

  1. Array + Imperativo: Como caminhar por uma fila de pessoas uma por uma, verificando seus nomes.
  2. Array + Recursivo: Como um jogo de "telefone sem fio", onde você passa a tarefa para uma linha de ajudantes.
  3. Lista + Imperativo: Como folhear uma pilha de fichas de índice.
  4. Lista + Recursivo: Como uma boneca russa (matrioska), onde cada boneca contém o próximo passo.

O Experimento: 73 Enigmas, 292 Tentativas

A equipe construiu um playground especial com 73 diferentes enigmas de programação (principalmente envolvendo números, listas e arrays). Para cada enigma, eles pediram à IA para gerar todos os quatro "sabores". Isso resultou em 292 diferentes tentativas de código para testar.

Eles não deixaram a IA apenas escrever o código; eles estabeleceram um processo rigoroso de três estágios:

  1. Estágio 1 (O Contrato): Primeiro, eles fizeram a IA escrever um "contrato" (um livro de regras formal) descrevendo o que o código deve fazer, sem se preocupar com o como fazê-lo. Eles verificaram este livro de regras contra exemplos para garantir que fizesse sentido. Uma vez que um livro de regras era aceito, ele era congelado. Nada de mudar as regras depois!
  2. Estágio 2 (O Código): Em seguida, pediram à IA para escrever o código real para cada um dos quatro sabores, garantindo que passassem em algumas execuções de teste básicas.
  3. Estágio 3 (A Prova): Finalmente, tentaram provar que cada versão do código satisfazia o livro de regras congelado. Se a prova falhasse, eles davam uma dica ("reparo") à IA para corrigir a prova, mas apenas a prova, não o código ou as regras.

Os Resultados: A Diversidade Vence

Aqui está o que aconteceu quando rodaram os números:

  • A Falha do "Tentativa Única": Se você apenas pegasse o primeiro código que a IA escreveu e tentasse prová-lo, apenas 96 de 292 (cerca de 32,9%) funcionaram. Isso é menos de um em cada três!
  • O Poder do Reparo: Quando permitiram que a IA tentasse consertar as provas duas vezes, o número saltou para 154 de 292 (cerca de 52,7%).
  • O Poder da Diversidade (O Verdadeiro Vencedor): Quando olharam para os 73 enigmas como um todo, descobriram que para 49 deles (uma taxa de sucesso de 67,1%), pelo menos uma das quatro versões diferentes pôde ser provada correta.

Esta é a principal descoberta: Implementações equivalentes de tarefas podem diferir substancialmente em verificabilidade. Em outras palavras, duas partes de código que fazem exatamente a mesma coisa podem estar a mundos de distância em termos de facilidade de prova.

O Que Eles Descartaram (O Que NÃO É)

O artigo é muito cuidadoso com o que não afirma:

  • Não é sobre código melhor: Eles não descobriram que "Arrays são melhores que Listas" ou que "Recursão é melhor que Loops". Na verdade, os resultados foram mistos. O código recursivo foi geralmente mais fácil de provar do que o código imperativo (baseado em loops), mas arrays e listas tiveram desempenhos semelhantes no geral. A chave não foi escolher o "melhor" estilo; foi ter opções.
  • Não é sobre mudar as regras: Eles proibiram estritamente a IA de alterar o "contrato" (o objetivo) durante a fase de reparo. Se a IA tentasse mudar o objetivo para tornar a prova mais fácil, isso era considerado uma falha. Eles queriam provar o objetivo original, não um mais fraco.
  • Não é uma solução mágica para tudo: O estudo analisou apenas enigmas envolvendo inteiros, arrays e listas. Eles não afirmam que isso funciona para números de ponto flutuante, gráficos 3D complexos ou programas que se comunicam com a internet.

O Quão Certos Eles Estão?

Os autores estão confiantes em suas medições, mas cautelosos quanto ao panorama geral.

  • Medido: Eles têm números concretos. Rodaram as ferramentas, contaram os sucessos e viram que a diversidade aumentou a taxa de sucesso de 32,9% para 52,7% para artefatos individuais, e para 67,1% para tarefas.
  • Sugestão: Eles sugerem que a razão pela qual o código imperativo (loops) foi mais difícil de provar é que ele exige "invariantes de loop" (regras sobre o que está acontecendo dentro de um loop), que são difíceis de serem inventadas automaticamente pela IA. Eles suspeitam que, se derem à IA melhores ferramentas para adivinhar essas regras, a lacuna poderá diminuir.
  • Não Provado (Ainda): Eles admitem que não provaram que o "Contrato de Array" e o "Contrato de Lista" são matematicamente idênticos. Eles apenas assumiram que significavam a mesma coisa com base na descrição da tarefa. Eles também observam que seu "juiz" (uma IA verificando se as regras correspondiam ao enigma) não é um especialista humano perfeito, então alguns erros sutis podem ter passado.

A Conclusão

O artigo sugere que, quando pedimos à IA para escrever software "verificado", não devemos apenas pedir uma resposta e torcer pelo melhor. Em vez disso, devemos pedir um cardápio de opções. Ao gerar diferentes maneiras de resolver o mesmo problema, aumentamos nossas chances de encontrar a versão que o verificador de provas consegue realmente entender.

É como tentar encontrar uma chave que se ajuste a uma fechadura. Se você tiver apenas uma chave, pode ficar travado. Mas se você tiver um chaveiro inteiro, mesmo que todas abram a mesma porta, uma delas quase certamente se ajustará perfeitamente à fechadura.

Afogado em artigos na sua área?

Receba digests diários dos artigos mais recentes que correspondam às suas palavras-chave de pesquisa — com resumos técnicos, no seu idioma.

Experimentar Digest →