46 research outputs found
Extracting Herbrand trees in classical realizability using forcing
International audienceKrivine presented in [Kri10] a methodology to combine Cohen's forcing with the theory of classical realizability and showed that the forcing condition can be seen as a reference that is not subject to backtracks. The underlying classical program transformation was then analyzed by Miquel [Miq11] in a fully typed setting in classical higher-order arithmetic (PAω⁺). As a case study of this methodology, we present a method to extract a Herbrand tree from a classical realizer of inconsistency, following the ideas underlying the compactness theorem and the proof of Herbrand's theorem. Unlike the traditional proof based on König's lemma (using a fixed enumeration of atomic formulas), our method is based on the introduction of a particular Cohen real. It is formalized as a proof in PAω⁺, making explicit the construction of generic sets in this framework in the particular case where the set of forcing conditions is arithmetical. We then analyze the algorithmic content of this proof
Extracting Herbrand trees from Coq
Software certification aims at proving the correctness of programs but in many cases, the use of external libraries allows only a conditional proof: it depends on the assumption that the libraries meet their specifications. In particular, a bug in these libraries might still impact the certified program. In this case, the difficulty that arises is to isolate the defective library function and provide a counter-example. In this paper, we show that this problem can be logically formalized as the construction of a Herbrand tree for a contradictory universal theory and address it. The solution we propose is based on a proof of Herbrand's theorem in the proof assistant Coq. Classical program extraction using Krivine's classical realizability then translates this proof into a certified program that computes Herbrand trees. Using this tree and calls to the library functions, we are able to determine which function is defective and explicitly produce a counter-example to its specification
A Certified Universal Gathering Algorithm for Oblivious Mobile Robots
We present a new algorithm for the problem of universal gathering mobile
oblivious robots (that is, starting from any initial configuration that is not
bivalent, using any number of robots, the robots reach in a finite number of
steps the same position, not known beforehand) without relying on a common
chirality. We give very strong guaranties on the correctness of our algorithm
by proving formally that it is correct, using the COQ proof assistant. To our
knowledge, this is the first certified positive (and constructive) result in
the context of oblivious mobile robots. It demonstrates both the effectiveness
of the approach to obtain new algorithms that are truly generic, and its
managability since the amount of developped code remains human readable
Certified Universal Gathering in for Oblivious Mobile Robots
We present a unified formal framework for expressing mobile robots models,
protocols, and proofs, and devise a protocol design/proof methodology dedicated
to mobile robots that takes advantage of this formal framework. As a case
study, we present the first formally certified protocol for oblivious mobile
robots evolving in a two-dimensional Euclidean space. In more details, we
provide a new algorithm for the problem of universal gathering mobile oblivious
robots (that is, starting from any initial configuration that is not bivalent,
using any number of robots, the robots reach in a finite number of steps the
same position, not known beforehand) without relying on a common orientation
nor chirality. We give very strong guaranties on the correctness of our
algorithm by proving formally that it is correct, using the COQ proof
assistant. This result demonstrates both the effectiveness of the approach to
obtain new algorithms that use as few assumptions as necessary, and its
manageability since the amount of developed code remains human readable.Comment: arXiv admin note: substantial text overlap with arXiv:1506.0160
Towards Coq-verified Esterel Semantics and Compiling
This paper focuses on semantics of the Esterel synchronous programming
language. In particular, in addition to the usual behavioral (CBS) and state
(CSS) semantics, it introduces a novel microstep semantics which does not need
the Can potential function. Formal proofs in Coq of the equivalence between the
CBS and CSS semantics and of the refinement between the CSS and microstep
semantics are also provided
Impossibility of Gathering, a Certification
Recent advances in Distributed Computing highlight models and algorithms for
autonomous swarms of mobile robots that self-organise and cooperate to solve
global objectives. The overwhelming majority of works so far considers handmade
algorithms and proofs of correctness. This paper builds upon a previously
proposed formal framework to certify the correctness of impossibility results
regarding distributed algorithms that are dedicated to autonomous mobile robots
evolving in a continuous space. As a case study, we consider the problem of
gathering all robots at a particular location, not known beforehand. A
fundamental (but not yet formally certified) result, due to Suzuki and
Yamashita, states that this simple task is impossible for two robots executing
deterministic code and initially located at distinct positions. Not only do we
obtain a certified proof of the original impossibility result, we also get the
more general impossibility of gathering with an even number of robots, when any
two robots are possibly initially at the same exact location.Comment: 10
Vérification de la génération modulaire du code impératif pour Lustre
National audienceLes langages synchrones sont utilisés pour programmer des logiciels de contrôle-commande d'applications critiques. Le langage Scade, utilisé dans l'industrie pour ces applications, est fondé sur le langage Lustre introduit par Caspi et Halbwachs. On s'intéresse ici à la formalisation et la preuve, dans l'assistant de preuve Coq, d'une étape clef de la compilation : la traduction de programmes Lustre vers des programmes d'un langage impératif. Le défi est de passer d'une sémantique synchrone flot de données, où un programme manipule des flots, à une sémantique impérative, où un programme manipule la mémoire de façon séquentielle. Nous spécifions et vérifions un générateur de code simple qui gère les traits principaux de Lustre : l'échantillonnage, les noeuds et les délais. La preuve utilise un modèle sémantique intermédiaire qui mélange des traits flot de données et impératifs et permet de définir un invariant inductif essentiel. Nous exploitons la formalisation proposée pour vérifier une optimisation classique qui fusionne des structures conditionnelles dans le code impératif généré
Comment s'assurer de garder le contact (et nos distances)
International audienceNous étudions le problème du maintien de connexion dans les réseaux de robots mobiles. On considère un robot incontrôlable (la « cible ») et une flotte de robots volumiques autonomes se déplaçant dans le plan réel et munis de capteurs et transmetteurs à portée limitée. Le problème consiste à maintenir à tout moment une connexion entre un point fixe connu au départ et la cible. Cette situation est par exemple instanciée dans le cas d'une équipe de recherche (la cible) en cours d'exploration et qui doit conserver une liaison avec la base des secours (le point fixe). Dans un tel cas où des vies sont en jeu, le problème devient critique : il est impératif d'avoir les plus fortes garanties de correction possibles sur les protocoles candidats. Nous définissons formellement ce problème et proposons une famille de protocoles que nous prouvons correcte grâce à l'assistant de preuve Coq et la bibliothèque PACTOLE. Nous illustrons en particulier l'utilité de cet outil formel ainsi que de la démarche associée, de la réflexion préliminaire sur un problème à la production d'une solution certifiée
A Formally Verified Compiler for Lustre
International audienceThe correct compilation of block diagram languages like Lustre, Scade, and a discrete subset of Simulink is important since they are used to program critical embedded control software. We describe the specification and verification in an Interactive Theorem Prover of a compilation chain that treats the key aspects of Lustre: sampling, nodes, and delays. Building on CompCert, we show that repeated execution of the generated assembly code faithfully implements the dataflow semantics of source programs.We resolve two key technical challenges. The first is the change from a synchronous dataflow semantics, where programs manipulate streams of values, to an imperative one, where computations manipulate memory sequentially. The second is the verified compilation of an imperative language with encapsulated state to C code where the state is realized by nested records. We also treat a standard control optimization that eliminates unnecessary conditional statements