← Últimos artigos
💻 computer science

Predicate Subtypes in VerCors

Este artigo descreve a implementação de subtipos predicativos no verificador de programas VerCors, apresentando uma abordagem que gera automaticamente especificações a partir de declarações de subtipos, permite a combinação de múltiplos subtipos e introduz um modo estrito para verificação de estouro de limites.

Autores originais: Tycho Dubbeling (University of Twente), Marieke Huisman (University of Twente), Ömer Şakar (University of Twente)

Publicado 2026-04-09
📖 5 min de leitura🧠 Leitura aprofundada

Autores originais: Tycho Dubbeling (University of Twente), Marieke Huisman (University of Twente), Ömer Şakar (University of Twente)

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ê é um chef de cozinha extremamente rigoroso. Você tem uma receita (o programa de computador) e quer garantir que, se alguém seguir as instruções, o prato final sairá perfeito, sem queimar a comida ou usar ingredientes proibidos.

O VerCors é como um "inspetor de receitas" superinteligente que lê o código do seu programa e tenta provar matematicamente que ele não vai dar errado. Mas, até agora, esse inspetor tinha uma limitação: ele aceitava ingredientes genéricos. Se a receita dizia "adicione um número", o inspetor aceitava qualquer número, desde que fosse um número. Ele não conseguia garantir, por exemplo, que você não fosse adicionar "zero" quando a receita exigia um divisor (o que faria a conta explodir) ou que o sal não passasse de uma pitada.

É aqui que entra o trabalho de Tycho Dubbeling, Marieke Huisman e Ömer Şakar. Eles criaram uma nova ferramenta para o VerCors chamada Subtipos de Predicado.

O Que São Subtipos de Predicado? (A Analogia do "Filtro Mágico")

Pense nos tipos de dados normais (como inteiro ou texto) como grandes caixas de armazenamento.

  • A caixa "Inteiro" guarda todos os números possíveis.
  • O problema é que, dentro dessa caixa gigante, podem haver números que estragam sua receita (como dividir por zero).

Os Subtipos de Predicado são como filtros mágicos que você coloca na boca da caixa.

  • Em vez de apenas dizer "coloque um número aqui", você diz: "coloque um número aqui, mas apenas se ele for diferente de zero".
  • Ou: "coloque um número aqui, mas apenas se ele estiver entre 0 e 127" (como um byte de memória).

O papel descreve como eles ensinaram o VerCors a criar esses filtros automaticamente. Quando você escreve no código:
int divisor = 5; (com um filtro de "não zero")
O VerCors não apenas aceita o 5. Ele gera automaticamente uma "nota de segurança" que diz: "Ei, antes de usar esse número, verifique se ele não é zero. E se alguém tentar mudar esse número para zero mais tarde, o sistema vai gritar 'ALERTA!'."

O Grande Truque: O "Modo Estrito" (O Guarda-Costas Rigoroso)

A parte mais legal e inovadora do artigo é a ideia do Modo Estrito (Strict Mode).

Imagine que você está dirigindo um carro em uma estrada com limite de velocidade de 100 km/h.

  • Modo Normal: O inspetor olha apenas para o velocímetro no final da viagem. Se você chegou a 90 km/h, está tudo bem. Ele não se importa se, no meio do caminho, você acelerou para 200 km/h e depois freou bruscamente.
  • Modo Estrito: O inspetor coloca um guarda-costas em cada curva, em cada aceleração e em cada freio. Ele exige que cada pequeno movimento do carro respeite o limite de 100 km/h.

No mundo dos computadores, isso é crucial para evitar estouro de memória (overflow).
Imagine que você tem um copo que cabe até 100ml de água.

  1. Você coloca 90ml.
  2. Adiciona 20ml. (Agora são 110ml! O copo transbordou, mesmo que você tire 20ml depois e deixe com 90ml).
  3. No Modo Normal, o VerCors olharia apenas para o final (90ml) e diria "Tudo certo".
  4. No Modo Estrito, o VerCors gritaria no passo 2: "Espere! Você tentou colocar 110ml num copo de 100ml! Isso é perigoso!"

Os autores criaram uma opção no sistema (--strict-arithmetic) que ativa esse guarda-costas rigoroso para todos os cálculos matemáticos, garantindo que nenhum número intermediário "vaze" do copo.

Como Eles Fizeram Isso? (A Máquina de Tradução)

O VerCors não entende nativamente esses "filtros mágicos" na linguagem de programação original. Então, os autores construíram uma máquina de tradução automática.

  1. Leitura: O sistema lê o código com os filtros (ex: "inteiro não nulo").
  2. Tradução: Ele transforma esses filtros em regras de segurança comuns que o VerCors já sabe ler (chamadas de "pré-condições" e "pós-condições"). É como se o sistema dissesse: "Ok, você pediu um 'inteiro não nulo'. Vou transformar isso em uma regra que diz: 'Antes de usar, verifique se não é zero'."
  3. Verificação: O VerCors então prova matematicamente que essas regras nunca serão quebradas.

Por Que Isso é Importante?

  • Segurança: Evita que programas travem ou se comportem de forma estranha quando números ficam muito grandes ou quando se divide por zero.
  • Facilidade: O programador não precisa escrever centenas de verificações manuais. Ele apenas define o "filtro" uma vez na declaração da variável, e o sistema cuida de todo o resto.
  • Flexibilidade: Você pode combinar filtros. Por exemplo: "Um número que é maior que zero E menor que 100 OU é exatamente 200". O sistema entende essa lógica complexa e a transforma em regras de segurança.

Conclusão

Em resumo, esse artigo apresenta uma maneira inteligente de ensinar o VerCors a ser um "guardião de limites" mais esperto. Em vez de apenas olhar para o tipo de dado (ex: "é um número"), ele agora olha para o que esse número pode ou não fazer (ex: "é um número que não pode ser zero").

Eles adicionaram um "modo estrito" que vigia cada passo do cálculo, garantindo que não haja vazamentos de memória ou erros de cálculo ocultos. É como passar de um inspetor que só olha o resultado final para um inspetor que vigia cada ingrediente e cada passo da receita, garantindo que o prato final seja seguro e perfeito.

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 →