Table of Contents
Fetching ...

Le chameau et le serpent rentrent dans un bar : vérification quasi-automatique de code OCaml en logique de séparation

Charlène Gros, Mário Pereira

TL;DR

Le document décrit une extension de Cameleer, gospel2viper, qui traduit des programmes OCaml annotés avec Gospel vers l’intermédiaire $Viper$ fondé sur la logique de séparation afin de vérifier automatiquement des programmes manipulant le tas. En dépassant les limitations du backend Why3 pour les structures mutables récursives, l’approche encode les types algébriques via des ADTs et introduit des notions de possession de champs ($acc$ et $\leadsto$) ainsi que les opérations $fold$/$unfold$ pour gérer les prédicats de représentation. L’article détaille l’encodage des listes et d’un module OCaml Queue, illustrant une preuve quasi-automatique des opérations d’une file (création, ajout et concatenation) via des lemmas et des prédicats comme $cellSeg$ et $Queue$. Cette approche accroît la portée de la vérification déductive des programmes OCaml en autorisant des structures allouées dynamiquement et ouvre des perspectives d’étendre le back-end à d’autres structures et d’automatiser davantage les étapes de folding et unfolding, ce qui peut impacter positivement l’assurance de correctness des programmes heap-allocated en OCaml.

Abstract

This paper presents a translation from Gospel-annotated OCaml programs into Viper, an intermediate verification language featuring Separation Logic. The practical goal is to extend Cameleer with a new back-end to prove heap-dependent OCaml programs. The logical specification of such OCaml programs is described using an extension of Gospel to support Separation Logic features, which we describe in the paper.

Le chameau et le serpent rentrent dans un bar : vérification quasi-automatique de code OCaml en logique de séparation

TL;DR

Le document décrit une extension de Cameleer, gospel2viper, qui traduit des programmes OCaml annotés avec Gospel vers l’intermédiaire fondé sur la logique de séparation afin de vérifier automatiquement des programmes manipulant le tas. En dépassant les limitations du backend Why3 pour les structures mutables récursives, l’approche encode les types algébriques via des ADTs et introduit des notions de possession de champs ( et ) ainsi que les opérations / pour gérer les prédicats de représentation. L’article détaille l’encodage des listes et d’un module OCaml Queue, illustrant une preuve quasi-automatique des opérations d’une file (création, ajout et concatenation) via des lemmas et des prédicats comme et . Cette approche accroît la portée de la vérification déductive des programmes OCaml en autorisant des structures allouées dynamiquement et ouvre des perspectives d’étendre le back-end à d’autres structures et d’automatiser davantage les étapes de folding et unfolding, ce qui peut impacter positivement l’assurance de correctness des programmes heap-allocated en OCaml.

Abstract

This paper presents a translation from Gospel-annotated OCaml programs into Viper, an intermediate verification language featuring Separation Logic. The practical goal is to extend Cameleer with a new back-end to prove heap-dependent OCaml programs. The logical specification of such OCaml programs is described using an extension of Gospel to support Separation Logic features, which we describe in the paper.

Paper Structure

This paper contains 15 sections, 1 figure.

Figures (1)

  • Figure 1: Encodage du type de listes chaînées à l'aide des ADTs en Viper.