| Isabelle | |
|---|---|
| Autores | Lawrence Paulson, Tobias Nipkow e Makarius Wenzel |
| Desenvolvedores | Universidade de Cambridge, Universidade Técnica de Munique (TUM) e colaboradores |
| Lançamento inicial | 1986 |
| Lançamento estável | Isabelle2024
/ maio de 2024 |
| Escrito em | Standard ML (Poly/ML) e Scala |
| Sistema operacional | Linux, Windows e macOS |
| Tipo | Assistente de prova, lógica matemática, verificação formal |
| Licença | Licença BSD (duas cláusulas) |
| Website | isabelle |
Isabelle é um assistente de prova interativo e genérico (provador de teoremas) de código aberto, projetado para a formalização rigorosa de teorias matemáticas e a verificação formal de software e hardware. Concebido inicialmente por Lawrence Paulson na Universidade de Cambridge em 1986 e desenvolvido em contínua cooperação com Tobias Nipkow na Universidade Técnica de Munique (TUM) e Makarius Wenzel, o sistema destaca-se por sua arquitetura lógica parametrizável e por seu elevado grau de automação computacional.
Diferentemente de assistentes focados em um único formalismo dedutivo estrito, o Isabelle foi arquitetado como uma ferramenta genérica estruturada sobre uma metalógica intuicionista de ordem superior chamada Pure. Sobre essa base são instanciadas diversas lógicas-objeto, com destaque absoluto para o Isabelle/HOL, implementação da lógica de ordem superior (baseada na teoria dos tipos de Church) que se tornou o ambiente padrão da comunidade acadêmica.
O Isabelle alcançou notoriedade mundial em 2009 ao ser empregado na verificação formal integral do microkernel de sistema operacional seL4, constituindo o primeiro kernel de uso geral do mundo matematicamente provado livre de falhas de segurança de memória e em conformidade estrita com a sua especificação formal.
O Isabelle adota a arquitetura de projeto clássica de provadores descendentes do paradigma LCF (Logic for Computable Functions), concebido por Robin Milner na década de 1970. Sob esse modelo, a confiabilidade de todo o ecossistema assenta-se em um núcleo lógico diminuto e auditável (o trusted kernel).
No núcleo, os teoremas são modelados como um tipo de dado abstrato na linguagem funcional Standard ML (executada primordialmente no compilador otimizado Poly/ML). Novos valores desse tipo só podem ser gerados exclusivamente pela aplicação das regras primitivas de inferência da lógica. Funções auxiliares, táticas automatizadas e provadores externos podem sugerir etapas de dedução complexas, mas caso cometam qualquer erro algorítmico, o núcleo rejeita a operação. Dessa forma, falhas de programação em ferramentas acessórias de automação são incapazes de corromper a consistência lógica do sistema.
O núcleo formal do Isabelle é a metalógica Pure, uma formulação minimalista da lógica intuicionista de ordem superior baseada no cálculo lambda simplesmente tipado (). A sintaxe de qualquer linguagem-objeto é modelada por meio de termos tipados de Pure, e suas regras de inferência são formalizadas utilizando três conectivos primitivos da metalógica:
A composição encadeada de passos de demonstração é executada através de um algoritmo uniforme denominado resolução de ordem superior (higher-order resolution), combinando a unificação de termos lambda de ordem superior com o princípio de resolução lógica de Robinson.
Por ser um demonstrador genérico, o Isabelle pode hospedar múltiplos sistemas formais autônomos construídos sobre a base Pure:
Nas primeiras versões do Isabelle, as demonstrações eram conduzidas exclusivamente por meio de scripts procedurais imperativos na linguagem Standard ML, consistindo em sequências opacas de comandos de táticas (como `apply (rule ...)`, `apply (erule ...)`) que manipulavam a pilha de submetas em memória. Tais scripts mostravam-se frágeis a alterações e virtualmente ilegíveis por seres humanos sem a execução interativa concomitante da ferramenta.
Para superar essa limitação, Makarius Wenzel concebeu o Isar (Intelligible Semi-Automated Reasoning). Inspirado na clareza do formato de provas do sistema Mizar, o Isar introduziu uma sintaxe declarativa onde o raciocínio matemático se estrutura em passos textuais explícitos, documentando hipóteses locais, lemas intermediários e resultados visados.
Uma prova típica em Isar apresenta a seguinte estrutura inteligível:
lemma "A & B --> B & A"
proof
assume "A & B"
then have "A" and "B" by (rule conjunct1, rule conjunct2)
then show "B & A" by (rule conjI)
qed
As palavras-chave `assume` (introdução de hipóteses), `have` (afirmação intermediária), `show` (demonstração da meta final da seção) e `qed` (fechamento formal do bloco) tornam a leitura das formalizações acessível e similar a artigos matemáticos tradicionais rigorosos.
Uma das maiores inovações desenvolvidas no âmbito do Isabelle/HOL é o subsistema Sledgehammer. Trata-se de uma ponte de automação inteligente que conecta a submeta corrente a múltiplos demonstradores automáticos de teoremas (ATPs) externos de alta performance (tais como E, Vampire, SPASS) e resolvedores de teorias satisfatíveis módulo teorias (SMT solvers, como Z3 e CVC5).
O fluxo de operação do Sledgehammer preserva rigorosamente a segurança lógica:1. O sistema seleciona centenas de lemas e fatos relevantes da biblioteca do Isabelle por meio de algoritmos de relevância semântica (filtros me-sh);2. Traduz a meta e os fatos para formatos compatíveis com os provadores externos (como TPTP ou SMT-LIB);3. Executa os provadores externos de forma massivamente concorrente em segundo plano;4. Quando um ATP encontra uma prova, o Isabelle não aceita o resultado cegamente. Em vez disso, o Sledgehammer analisa quais fatos foram indispensáveis e reconstrói uma prova formal estrita dentro do próprio Isabelle por meio de métodos internos do núcleo (como o algoritmo `metis`), assegurando que apenas deduções verificadas pelo núcleo confiável sejam homologadas.
Para evitar que o usuário despenda tempo tentando provar conjecturas que são matematicamente falsas ou incompletas, o Isabelle oferece ferramentas de refutação prévia:
O Isabelle/HOL possui um gerador de código funcional nativo comprovado correto. Especificações de algoritmos matemáticos e estruturas de dados expressas construtivamente na lógica podem ser convertidas de forma direta e automática em programas executáveis eficientes nas linguagens Haskell, OCaml, Standard ML e Scala.
Historicamente, o Isabelle utilizava o ambiente genérico Proof General, executado sobre o GNU Emacs, no qual as provas eram processadas sequencialmente passo a passo, bloqueando o editor.
A partir de 2010, Makarius Wenzel liderou o desenvolvimento de uma arquitetura inovadora de interação denominada PIDE (Prover IDE Framework). Implementado sobre a plataforma JVM em linguagem Scala, o PIDE transforma o provador em um motor reativo e assíncrono em tempo real. O ambiente padrão, Isabelle/jEdit (baseado no editor de código aberto jEdit), verifica dinamicamente o texto formal de modo multithreaded e paralelo: enquanto o usuário redige, edita ou reorganiza o documento, os teoremas são reavaliados em plano de fundo com destaque sintático e semântico instantâneo de erros e avisos. Suporte análogo baseado no protocolo PIDE foi posteriormente desenvolvido sob a forma de extensões para o Visual Studio Code (Isabelle/VSCode).
O Archive of Formal Proofs (AFP) é a biblioteca digital e repositório central comunitário de formalizações do Isabelle. Operando de maneira similar a um periódico acadêmico com revisão por pares aberta, o arquivo reúne formalizações extensas em matemática avançada pura, algoritmos, criptografia, modelos de concorrência e teorias físicas.
Todas as submissões no AFP são testadas e recompiladas continuamente em servidores de integração contínua a cada nova versão de lançamento do Isabelle, garantindo a reprodutibilidade científica e a imunidade a quebras de compatibilidade reversa.
O Isabelle consolidou-se como instrumento central em projetos científicos de alta complexidade: