Programmation impérative par raffinements avec l'assistant de preuve Coq - Sorbonne Université Access content directly
Theses Year : 2020

Imperative programming by refinement in the Coq proof assistant

Programmation impérative par raffinements avec l'assistant de preuve Coq

Abstract

This thesis investigates certified programming by stepwise refinement in the framework of the Coq proof assistant. This allows the construction of programs that are correct by construction. The programming language that is considered is a simple imperative language with assignment, selection, sequence, and iteration. The semantics of this language is formalised in a relational and predicative setting, and is shown to be equivalent to an axiomatic semantics in the style of a Hoare logic. The stepwise refinement approach to programming requires that refinement steps from the specification to the program be proved correct. For so doing, we use a calculus of weakest pre-specifications which is a generalisation of the calculus of weakest pre-conditions. Finally, to capture the whole refinement history of a program development, we formalise a design language and a logic for reasoning about program designs in order to establish that all refinement steps are indeed correct. The approach developed during this thesis is entirely mechanised using the Coq proof assistant.
Cette thèse s’intéresse à la programmation certifiée correcte dans le cadre formel fourni par l’assistant de preuve Coq, et conduite par étapes de raffinements, avec l'objectif d’aboutir à un résultat correct par construction. Le langage de programmation considéré est un langage impératif simple, avec affectations, alternatives, séquences, et boucles. La sémantique associée à ce langage est une sémantique relationnelle exprimée dans un cadre prédicatif plus adapté à un plongement dans la théorie des types, plutôt que dans le calcul des relations. Nous étudions la relation entre d’une part la sémantique prédicative et relationnelle que nous avons choisie, et d’autre part une approche plus classique dans le style de la logique de Hoare. En particulier, nous montrons que les deux approches ont en théorie la même puissance. La démarche que nous étudions consiste à certifier, avec l’aide d’un assistant de preuve, les raffinements successifs permettant de passer de la spécification au programme. Nous nous intéressons donc aussi aux techniques de preuve permettant en pratique d’établir la validité des raffinements. Plus précisément, nous utilisons un calcul de la plus faible pré-spécification jouant ici le rôle du calcul de la plus faible pré-condition dans les approches classiques. Afin que l’articulation des étapes de raffinement reste aussi proche que possible de l’activité de programmation, nous formalisons un langage de développement qui permet de décrire l’arborescence des étapes de raffinement, ainsi qu’une logique permettant de raisonner sur ces développements, et de garantir leur correction.
Fichier principal
Vignette du fichier
sall-manuscrit-these.pdf (688.46 Ko) Télécharger le fichier
Origin Files produced by the author(s)

Dates and versions

tel-04172640 , version 1 (27-07-2023)

Identifiers

  • HAL Id : tel-04172640 , version 1

Cite

Boubacar Demba Sall. Programmation impérative par raffinements avec l'assistant de preuve Coq. Informatique [cs]. Sorbonne Université, 2020. Français. ⟨NNT : ⟩. ⟨tel-04172640⟩
49 View
62 Download

Share

Gmail Mastodon Facebook X LinkedIn More