Conception Formelle en PVS Master 2 ISC Chef de Projet: M. Pierre Castéran Présenté par: Roland Atoui Xavier Dumas Sébastien Jardel Laurent Vendredi
PVS: Prototype Verification System 3- PVS: Prototype Verification System PBS: Support pour la méthode B en PVS 4- PBS: Support pour la méthode B en PVS LeProuveur PVS 5- Le Prouveur PVS Présentation du Projet 1- Présentation du Projet Plan Conclusion 6- Conclusion La Méthode B 2- La Méthode B
Présentation du Projet Vérification de code Présentation du Projet Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion Similitude avec B S’initier à PVS Tester PBS
La Méthode B Formaliser des spécifications et des programmes La Méthode B Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion Machine abstraite Raffinement Implentation
La Méthode B MACHINE nom SETS ENS1,...,ENS2 VARIABLES x1,...,x2 INVARIANT I INITIALIZATION S0 OPERATIONS... END Structure d'une Machine Abstraite La Méthode B Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion /* nom de la machine */ /* nom des ensembles */ /* nom des variables */ /* propriété */ /* substitution */ /* substitutions */
PVS: Prototype Verification System Un système de vérification Un assistant de preuve développé par le laboratoire d’informatique de SRI International Fourni une automatisation pour limiter le travail de l’utilisateur humain. Un langage de spécification Langage expressive : Ordre logique supérieur Un système fortement typé (non décidable) Fonctions récursives totales L’outil PVS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion
Notions préliminaires Sets, relations, fonctions, séquences, lists, numéros, induction. Assistant de preuve Calcul basé sur les Séquents, commandes de preuve primitives, procédure de précision, arithmétique linéaire, congruence… [Stratégies, emacs+interface graphique, model checker] Types Types de base : real, int, nat, bool… Type de construction : records, abstract data types, functions, predicates, sets… Type dépendant, type paramétré. L’outil PVS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion PVS: Prototype Verification System
Exemples : person : TYPE = [# age : nat, married ?: bool #] List[person] [person nat] [person bool] = pred[person] = setof[person] Proposions.pvs Propositions : THEORY BEGIN A, B, C: bool prop: THEOREM (A IMPLIES (B IMPLIES C)) AND (A IMPLIES B) AND (A IMPLIES B) AND (A IMPLIES C) END propositions L’outil PVS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion PVS: Prototype Verification System
PBS: Support pour la méthode B en PVS Développé par César Muñoz en 1999 Traduit une machine abstraite B en Théorie PVS Développé en utilisant l’approche du Shallow Embedding PBSPVS m.pbs *.pvs m.pvs L’outil PBS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion
PBS: Support pour la méthode B en PVS Une Machine PBS semblable à une machine abstraite B L’outil PBS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion OPERATIONS reset = BEGIN value := 0 END; next = PRE value < maxi THEN ANY val WHERE val : NAT & val value THEN value := val END MACHINE Counter(maxi) CONSTRAINTS maxi : NAT1 VARIABLES value INVARIANT value : NAT & value <= maxi INITIALISATION value := 0
PBS: Support pour la méthode B en PVS Une Machine PBS semblable à une machine abstraite B L’outil PBS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion OPERATIONS reset = value := 0 next = PRE `value < maxi' THEN ANY val : nat WHERE `val value' THEN value := val ENDANY END END counter counter [maxi:posnat]: MACHINE BEGIN PVS `IMPORTING VARIABLES value : `nat' INVARIANT `value <= maxi' INITIALIZATION value := 0
PBS: Support pour la méthode B en PVS Quelques différences: Substitution: WHILE structure récursive de PVS SELECT peut être similés an PVS Mots Clefs: SETS TYPES Certains mots clefs n’existent pas (CONSTRAINTS, PROPERTIES…) Le Raffinement La notion de raffinement existe en PVS Introduite grâce à 2 invariants dans une machine PBS INVARIANT et REFINE_INVARIANT L’outil PBS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion
PBS: Support pour la méthode B en PVS Théorie PVS de counter généré par PBS L’outil PBS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion % Theory: Counter Machine counter [ maxi:posnat ]: THEORY BEGIN % PVS Commands IMPORTING % General Type counter_Type : TYPE = [# value:nat #] % Invariant Type counter : TYPE = { self: counter_Type | value(self) <= maxi } % Initialization init : counter = LET self = (# value := 0 #) IN self % Operations reset(self:counter) : counter = LET self = self WITH [ value := 0 ] IN self next(self:counter | value(self) < maxi) : counter = LET self = LET val = choose! (val:nat) : ( val value(self) ) IN LET self = self WITH [ value := val ] IN self IN self END counter
PBS: Support pour la méthode B en PVS L’outil PBS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion Raffinement Introduite grâce à deux invariants : 1.INVARIANT 2.REFINE_INVARIANT counterRef [maxi:posnat]: REFINEMENT OF counter BEGIN VARIABLES value_ref : `nat' REFINE_INVARIANT `value_ref <= value' INITIALIZATION value_ref := 0 OPERATIONS next = value_ref := `value_ref + 1' END counterRef counterRef.pbs
PBS: Support pour la méthode B en PVS L’outil PBS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion counterRef [ maxi:posnat ]: THEORY BEGIN % Refinement Importing IMPORTING counter[maxi] … % Initialization init : counterRef = LET self = (# value_ref := 0 #) IN self init_ref : counterRef_Ref = (# counterRef := counterRef.init, counter := counter.init #)% Operations next(self:counterRef) : counterRef = LET self = self WITH [ value_ref := value_ref(self) + 1 ] IN self next_ref(self_ref:counterRef_Ref | value(counter(self_ref)) < maxi) : counterRef_Ref = (# counterRef := counterRef.next(counterRef(self_ref)), counter := counter.next(counter(self_ref)) #) END counterRef counterRef.pvs
Basé sur les séquents: Hypothèses |– Conséquents Le prouveur PVS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion Prouveur PVS 3 étapes: Vérifier la syntaxe (parser) Vérifier la sémantique (typechecker) Prouver les TCCs (prover)
Générations de TCCs: En utilisant les théorèmes En utilisant la puissance du typage Le prouveur PVS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion Prouveur PVS Preuves automatiques: Commande (GRIND) Commande (INDUCT-AND-SIMPLIFY) 2 types de preuves: Preuves itératives Preuves par induction
Commandes de bas niveau: (CASE), (INDUCT) Simplifie les preuves Facilite les preuves Le prouveur PVS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion Prouveur PVS Les stratégies Utilité Généraliser les preuves
Point technique: raffinement Invariant de collage Le prouveur PVS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion Prouveur PVS
Problème rencontré: Bug dans la sémantique de PBS N+2 N N+1N+2 N+…N+P N Machine abstraiteRaffinement N Le prouveur PVS Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion
Conclusion Résultats de la comparaison Difficultés Rencontrés Les Ouvertures Conclusion Présentation du Projet La Méthode B L’outil PVS L’outil PBS Le prouveur PVS Conclusion
Questions ?