26 research outputs found

    VerifyThis 2019:A Program Verification Competition (Extended Report)

    Get PDF
    VerifyThis is a series of program verification competitions that emphasize the human aspect: participants tackle the verification of detailed behavioral properties -- something that lies beyond the capabilities of fully automatic verification, and requires instead human expertise to suitably encode programs, specifications, and invariants. This paper describes the 8th edition of VerifyThis, which took place at ETAPS 2019 in Prague. Thirteen teams entered the competition, which consisted of three verification challenges and spanned two days of work. The report analyzes how the participating teams fared on these challenges, reflects on what makes a verification challenge more or less suitable for the typical VerifyThis participants, and outlines the difficulties of comparing the work of teams using wildly different verification approaches in a competition focused on the human aspect

    Verification of Programs with Pointers in SPARK

    Get PDF
    In the field of deductive software verification, programs with pointers present a major challenge due to pointer aliasing. In this paper, we introduce pointers to SPARK, a well-defined subset of the Ada language , intended for formal verification of mission-critical software. Our solution uses a permission-based static alias analysis method inspired by Rust's borrow-checker and affine types. To validate our approach, we have implemented it in the GNAT Ada compiler and the SPARK toolset. In the paper, we give a formal presentation of the analysis rules for a core version of SPARK and discuss their implementation and scope

    Logic against Ghosts: Comparison of Two Proof Approaches for a List Module

    Get PDF
    International audienceModern verification projects continue to offer new challenges for formal verification. One of them is the linked list module of Contiki, a popular open-source operating system for the Internet of Things. It has a rich API and uses a particular list representation that make it different from the classical linked list implementations. Being widely used in the OS, the list module is critical for reliability and security. A recent work verified the list module using ghost arrays. This article reports on a new verification effort for this module. Realized in the Frama-C/Wp tool, the new approach relies on logic lists. A logic list provides a convenient high-level view of the linked list. The specifications of all functions are now proved faster and almost all automatically, only a small number of auxiliary lemmas and a couple of assertions being proved interactively in Coq. The proposed specifications are validated by proving a few client functions manipulating lists. During the verification, a more efficient implementation for one function was found and verified. We compare the new approach with the previous effort based on ghost arrays, and discuss the benefits and drawbacks of both techniques

    Procédures de décision génériques pour des théories axiomatiques du premier ordre

    No full text
    SMT solvers are efficient tools to decide the satisfiability of ground formulas, including a number of built-in theories such as congruence, linear arithmetic, arrays, and bit-vectors. Adding a theory to that list requires delving into the implementation details of a given SMT solver, and is done mainly by the developers of the solver itself. For many useful theories, one can alternatively provide a first-order axiomatization. However, in the presence of quantifiers, SMT solvers are incomplete and exhibit unpredictable behavior. Consequently, this approach can not provide us with a complete and terminating treatment of the theory of interest. In this thesis, we propose a framework to solve this problem, based on the notion of instantiation patterns, also known as triggers. Triggers are annotations that suggest instances which are more likely to be useful in proof search. They are implemented in all SMT solvers that handle first-order logic and are included in the SMT-LIB format. In our framework, the user provides a theory axiomatization with triggers, along with a proof of completeness and termination properties of this axiomatization, and obtains a sound, complete, and terminating solver for her theory in return. We describe and prove a corresponding extension of the traditional Abstract DPLL Modulo Theory framework. Implementing this mechanism in a given SMT solver requires a one-time development effort. We believe that this effort is not greater than that of adding a single decision procedure to the same SMT solver. We have implemented the proposed extension in the Alt-Ergo prover and we discuss some implementation details in the thesis. To show that our framework can handle complex theories, we prove completeness and termination of three axiomatization, one for doubly-linked lists, one for applicative sets, and one for Ada's vectors. Our tests show that, when the theory is heavily used, our approach results in a better performance of the solver on goals that stem from the verification of programs manipulating these data-structures.Les solveurs SMT sont des outils dĂ©diĂ©s Ă  la vĂ©rification d'un ensemble de formules mathĂ©matiques, en gĂ©nĂ©ral sans quantificateurs, utilisant un certain nombre de thĂ©ories prĂ©dĂ©finies, telles que la congruence, l'arithmĂ©tique linĂ©aire sur les entiers, les rationnels ou les rĂ©els, les tableaux de bits ou les tableaux. Ajouter une nouvelle thĂ©orie Ă  un solveur SMT nĂ©cessite en gĂ©nĂ©ral une connaissance assez profonde du fonctionnement interne du solveur, et, de ce fait, ne peut en gĂ©nĂ©ral ĂȘtre exĂ©cutĂ©e que par ses dĂ©veloppeurs. Pour de nombreuses thĂ©ories, il est Ă©galement possible de fournir une axiomatisation finie en logique du premier ordre. Toutefois, si les solveurs SMT sont gĂ©nĂ©ralement complets et efficaces sur des problĂšmes sans quantificateurs, ils deviennent imprĂ©visibles en logique du premier ordre. Par consĂ©quent, cette approche ne peut pas ĂȘtre utilisĂ©e pour fournir une procĂ©dure de dĂ©cision pour ces thĂ©ories. Dans cette thĂšse, nous proposons un cadre d'application permettant de rĂ©soudre ce problĂšme en utilisant des dĂ©clencheurs. Les dĂ©clencheurs sont des annotations permettant de spĂ©cifier la forme des termes avec lesquels un quantificateur doit ĂȘtre instanciĂ© pour obtenir des instances utiles pour la preuve. Ces annotations sont utilisĂ©es par la majoritĂ© des solveurs SMT supportant les quantificateurs et font partie du format SMT-LIB v2. Dans notre cadre d'application, l'utilisateur fournit une axiomatisation en logique du premier ordre de sa thĂ©orie, ainsi qu'une dĂ©monstration de sa correction, de sa complĂ©tude et de sa terminaison, et obtient en retour un solveur correct, complet et qui termine pour sa thĂ©orie. Dans cette thĂšse, nous dĂ©crivons comment un solveur SMT peut ĂȘtre Ă©tendu Ă  notre cadre nous basant sur l'algorithme DPLL modulo thĂ©ories, utilisĂ© traditionnellement pour modĂ©liser ls solveurs SMT. Nous prouvons Ă©galement que notre extension a bien les propriĂ©tĂ©s attendues. L'effort Ă  fournir pour implĂ©menter cette extension dans un solveur SMT existant ne doit ĂȘtre effectuĂ© qu'une fois et le mĂ©canisme peut ensuite ĂȘtre utilisĂ© sur de multiples thĂ©ories axiomatisĂ©es. De plus, nous pensons que, en gĂ©nĂ©ral, cette implĂ©mentation n'est pas plus compliquĂ©e que l'ajout d'une unique thĂ©orie au solveur. Nous avons fait ce travail pour le solveur SMT Alt-Ergo, nous en prĂ©sentons certains dĂ©tails dans la thĂšse. Pour valider l'utilisabilitĂ© de notre cadre d'application, nous avons prouvĂ© la complĂ©tude et la terminaison de plusieurs axiomatizations, dont une pour les listes impĂ©ratives doublement chaĂźnĂ©e, une pour les ensembles applicatifs et une pour les vecteurs de Ada. Nous avons ensuite utilisĂ© notre implĂ©mentation dans Alt-Ergo pour discuter de l’efficacitĂ© de notre systĂšme dans diffĂ©rents cas

    Generic decision procedures for axiomatic first-order theories

    No full text
    Les solveurs SMT sont des outils dĂ©diĂ©s Ă  la vĂ©rification d'un ensemble de formules mathĂ©matiques, en gĂ©nĂ©ral sans quantificateurs, utilisant un certain nombre de thĂ©ories prĂ©dĂ©finies, telles que la congruence, l'arithmĂ©tique linĂ©aire sur les entiers, les rationnels ou les rĂ©els, les tableaux de bits ou les tableaux. Ajouter une nouvelle thĂ©orie Ă  un solveur SMT nĂ©cessite en gĂ©nĂ©ral une connaissance assez profonde du fonctionnement interne du solveur, et, de ce fait, ne peut en gĂ©nĂ©ral ĂȘtre exĂ©cutĂ©e que par ses dĂ©veloppeurs. Pour de nombreuses thĂ©ories, il est Ă©galement possible de fournir une axiomatisation finie en logique du premier ordre. Toutefois, si les solveurs SMT sont gĂ©nĂ©ralement complets et efficaces sur des problĂšmes sans quantificateurs, ils deviennent imprĂ©visibles en logique du premier ordre. Par consĂ©quent, cette approche ne peut pas ĂȘtre utilisĂ©e pour fournir une procĂ©dure de dĂ©cision pour ces thĂ©ories. Dans cette thĂšse, nous proposons un cadre d'application permettant de rĂ©soudre ce problĂšme en utilisant des dĂ©clencheurs. Les dĂ©clencheurs sont des annotations permettant de spĂ©cifier la forme des termes avec lesquels un quantificateur doit ĂȘtre instanciĂ© pour obtenir des instances utiles pour la preuve. Ces annotations sont utilisĂ©es par la majoritĂ© des solveurs SMT supportant les quantificateurs et font partie du format SMT-LIB v2. Dans notre cadre d'application, l'utilisateur fournit une axiomatisation en logique du premier ordre de sa thĂ©orie, ainsi qu'une dĂ©monstration de sa correction, de sa complĂ©tude et de sa terminaison, et obtient en retour un solveur correct, complet et qui termine pour sa thĂ©orie. Dans cette thĂšse, nous dĂ©crivons comment un solveur SMT peut ĂȘtre Ă©tendu Ă  notre cadre nous basant sur l'algorithme DPLL modulo thĂ©ories, utilisĂ© traditionnellement pour modĂ©liser ls solveurs SMT. Nous prouvons Ă©galement que notre extension a bien les propriĂ©tĂ©s attendues. L'effort Ă  fournir pour implĂ©menter cette extension dans un solveur SMT existant ne doit ĂȘtre effectuĂ© qu'une fois et le mĂ©canisme peut ensuite ĂȘtre utilisĂ© sur de multiples thĂ©ories axiomatisĂ©es. De plus, nous pensons que, en gĂ©nĂ©ral, cette implĂ©mentation n'est pas plus compliquĂ©e que l'ajout d'une unique thĂ©orie au solveur. Nous avons fait ce travail pour le solveur SMT Alt-Ergo, nous en prĂ©sentons certains dĂ©tails dans la thĂšse. Pour valider l'utilisabilitĂ© de notre cadre d'application, nous avons prouvĂ© la complĂ©tude et la terminaison de plusieurs axiomatizations, dont une pour les listes impĂ©ratives doublement chaĂźnĂ©e, une pour les ensembles applicatifs et une pour les vecteurs de Ada. Nous avons ensuite utilisĂ© notre implĂ©mentation dans Alt-Ergo pour discuter de l’efficacitĂ© de notre systĂšme dans diffĂ©rents cas.SMT solvers are efficient tools to decide the satisfiability of ground formulas, including a number of built-in theories such as congruence, linear arithmetic, arrays, and bit-vectors. Adding a theory to that list requires delving into the implementation details of a given SMT solver, and is done mainly by the developers of the solver itself. For many useful theories, one can alternatively provide a first-order axiomatization. However, in the presence of quantifiers, SMT solvers are incomplete and exhibit unpredictable behavior. Consequently, this approach can not provide us with a complete and terminating treatment of the theory of interest. In this thesis, we propose a framework to solve this problem, based on the notion of instantiation patterns, also known as triggers. Triggers are annotations that suggest instances which are more likely to be useful in proof search. They are implemented in all SMT solvers that handle first-order logic and are included in the SMT-LIB format. In our framework, the user provides a theory axiomatization with triggers, along with a proof of completeness and termination properties of this axiomatization, and obtains a sound, complete, and terminating solver for her theory in return. We describe and prove a corresponding extension of the traditional Abstract DPLL Modulo Theory framework. Implementing this mechanism in a given SMT solver requires a one-time development effort. We believe that this effort is not greater than that of adding a single decision procedure to the same SMT solver. We have implemented the proposed extension in the Alt-Ergo prover and we discuss some implementation details in the thesis. To show that our framework can handle complex theories, we prove completeness and termination of three axiomatization, one for doubly-linked lists, one for applicative sets, and one for Ada's vectors. Our tests show that, when the theory is heavily used, our approach results in a better performance of the solver on goals that stem from the verification of programs manipulating these data-structures

    Generic decision procedures for axiomatic first-order theories

    No full text
    Les solveurs SMT sont des outils dĂ©diĂ©s Ă  la vĂ©rification d'un ensemble de formules mathĂ©matiques, en gĂ©nĂ©ral sans quantificateurs, utilisant un certain nombre de thĂ©ories prĂ©dĂ©finies, telles que la congruence, l'arithmĂ©tique linĂ©aire sur les entiers, les rationnels ou les rĂ©els, les tableaux de bits ou les tableaux. Ajouter une nouvelle thĂ©orie Ă  un solveur SMT nĂ©cessite en gĂ©nĂ©ral une connaissance assez profonde du fonctionnement interne du solveur, et, de ce fait, ne peut en gĂ©nĂ©ral ĂȘtre exĂ©cutĂ©e que par ses dĂ©veloppeurs. Pour de nombreuses thĂ©ories, il est Ă©galement possible de fournir une axiomatisation finie en logique du premier ordre. Toutefois, si les solveurs SMT sont gĂ©nĂ©ralement complets et efficaces sur des problĂšmes sans quantificateurs, ils deviennent imprĂ©visibles en logique du premier ordre. Par consĂ©quent, cette approche ne peut pas ĂȘtre utilisĂ©e pour fournir une procĂ©dure de dĂ©cision pour ces thĂ©ories. Dans cette thĂšse, nous proposons un cadre d'application permettant de rĂ©soudre ce problĂšme en utilisant des dĂ©clencheurs. Les dĂ©clencheurs sont des annotations permettant de spĂ©cifier la forme des termes avec lesquels un quantificateur doit ĂȘtre instanciĂ© pour obtenir des instances utiles pour la preuve. Ces annotations sont utilisĂ©es par la majoritĂ© des solveurs SMT supportant les quantificateurs et font partie du format SMT-LIB v2. Dans notre cadre d'application, l'utilisateur fournit une axiomatisation en logique du premier ordre de sa thĂ©orie, ainsi qu'une dĂ©monstration de sa correction, de sa complĂ©tude et de sa terminaison, et obtient en retour un solveur correct, complet et qui termine pour sa thĂ©orie. Dans cette thĂšse, nous dĂ©crivons comment un solveur SMT peut ĂȘtre Ă©tendu Ă  notre cadre nous basant sur l'algorithme DPLL modulo thĂ©ories, utilisĂ© traditionnellement pour modĂ©liser ls solveurs SMT. Nous prouvons Ă©galement que notre extension a bien les propriĂ©tĂ©s attendues. L'effort Ă  fournir pour implĂ©menter cette extension dans un solveur SMT existant ne doit ĂȘtre effectuĂ© qu'une fois et le mĂ©canisme peut ensuite ĂȘtre utilisĂ© sur de multiples thĂ©ories axiomatisĂ©es. De plus, nous pensons que, en gĂ©nĂ©ral, cette implĂ©mentation n'est pas plus compliquĂ©e que l'ajout d'une unique thĂ©orie au solveur. Nous avons fait ce travail pour le solveur SMT Alt-Ergo, nous en prĂ©sentons certains dĂ©tails dans la thĂšse. Pour valider l'utilisabilitĂ© de notre cadre d'application, nous avons prouvĂ© la complĂ©tude et la terminaison de plusieurs axiomatizations, dont une pour les listes impĂ©ratives doublement chaĂźnĂ©e, une pour les ensembles applicatifs et une pour les vecteurs de Ada. Nous avons ensuite utilisĂ© notre implĂ©mentation dans Alt-Ergo pour discuter de l efficacitĂ© de notre systĂšme dans diffĂ©rents cas.SMT solvers are efficient tools to decide the satisfiability of ground formulas, including a number of built-in theories such as congruence, linear arithmetic, arrays, and bit-vectors. Adding a theory to that list requires delving into the implementation details of a given SMT solver, and is done mainly by the developers of the solver itself. For many useful theories, one can alternatively provide a first-order axiomatization. However, in the presence of quantifiers, SMT solvers are incomplete and exhibit unpredictable behavior. Consequently, this approach can not provide us with a complete and terminating treatment of the theory of interest. In this thesis, we propose a framework to solve this problem, based on the notion of instantiation patterns, also known as triggers. Triggers are annotations that suggest instances which are more likely to be useful in proof search. They are implemented in all SMT solvers that handle first-order logic and are included in the SMT-LIB format. In our framework, the user provides a theory axiomatization with triggers, along with a proof of completeness and termination properties of this axiomatization, and obtains a sound, complete, and terminating solver for her theory in return. We describe and prove a corresponding extension of the traditional Abstract DPLL Modulo Theory framework. Implementing this mechanism in a given SMT solver requires a one-time development effort. We believe that this effort is not greater than that of adding a single decision procedure to the same SMT solver. We have implemented the proposed extension in the Alt-Ergo prover and we discuss some implementation details in the thesis. To show that our framework can handle complex theories, we prove completeness and termination of three axiomatization, one for doubly-linked lists, one for applicative sets, and one for Ada's vectors. Our tests show that, when the theory is heavily used, our approach results in a better performance of the solver on goals that stem from the verification of programs manipulating these data-structures.PARIS11-SCD-Bib. Ă©lectronique (914719901) / SudocSudocFranceF

    Reasoning with Triggers

    Get PDF
    SMT solvers can decide the satisfiability of ground formulas modulo a combination of built-in theories. Adding a built-in theory to a given SMT solver is a complex and time consuming task that requires internal knowledge of the solver. However, many theories can be easily expressed using first-order formulas. Unfortunately, since universal quantifiers are not handled in a complete way by SMT solvers, these axiomatics cannot be used as decision procedures. In this paper, we show how to extend a generic SMT solver to accept a custom theory description and behave as a decision procedure for that theory, provided that the described theory is complete and terminating in a precise sense. The description language consists of first-order axioms with triggers, an instantiation mechanism that is found in many SMT solvers. This mechanism, which usually lacks a clear semantics in existing languages and tools, is rigorously defined here; this definition can be used to prove completeness and termination of the theory. We demonstrate on two examples, how such proofs can be achieved in our formalism
    corecore