Certifying an Automated Code Generator Using Formal Tools Preliminary experiments in the GeneAuto Project N. Izerrouken, X. Thirioux, M. Pantel, M. Strecker IRIT-ACADIE Continental Automotive Toulouse, France, 2 Avril 2008 IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 1 / 29
Plan 1 Introduction Objectifs Vérification formelle : État de l art 2 Approche choisie pour le développement du générateur de code certifié Principes de l approche Introduction à Coq Spécification du langage d entrée du générateur de code en Coq Exemple de circuit en Coq 3 Vérification formelle d un module du générateur de code : Ordonnanceur Démonstration de l ordonnanceur Algorithme de l ordonnanceur Preuves de correction de l ordonnanceur 4 Conclusion & Perspectives IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 2 / 29
Plan Introduction 1 Introduction Objectifs Vérification formelle : État de l art 2 Approche choisie pour le développement du générateur de code certifié Principes de l approche Introduction à Coq Spécification du langage d entrée du générateur de code en Coq Exemple de circuit en Coq 3 Vérification formelle d un module du générateur de code : Ordonnanceur Démonstration de l ordonnanceur Algorithme de l ordonnanceur Preuves de correction de l ordonnanceur 4 Conclusion & Perspectives IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 3 / 29
Introduction Objectifs Objectifs Générateur de code Simulink vers C certifié Définir la sémantique du langage d entrée Vérifier et valider les modèles d entrée Garantir la correction du code généré Limiter le coût des tests industriels IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 4 / 29
Introduction Exemple de circuit en Simulink Objectifs IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 5 / 29
Vérification formelle : Introduction État de l art Vérification formelle : État de l art Technologies formelles 1 Model Checking 2 Analyse statique par interprétation abstraite 3 Assistants de preuves IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 6 / 29
Introduction Vérification formelle : État de l art Vérification formelle : État de l art Technologies formelles 1 Model Checking 2 Analyse statique par interprétation abstraite 3 Assistants de preuves Approches existantes Translation Validation CVT IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 6 / 29
Introduction Vérification formelle : État de l art Vérification formelle : État de l art Technologies formelles 1 Model Checking 2 Analyse statique par interprétation abstraite 3 Assistants de preuves Approches existantes Translation Validation CVT Proof Carrying Code PCC IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 6 / 29
Introduction Vérification formelle : État de l art Vérification formelle : État de l art Technologies formelles 1 Model Checking 2 Analyse statique par interprétation abstraite 3 Assistants de preuves Approches existantes Translation Validation CVT Proof Carrying Code PCC Certification de compilateur par assistant de preuves IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 6 / 29
Approche choisie pour le développement du générateur de code certifié Plan 1 Introduction Objectifs Vérification formelle : État de l art 2 Approche choisie pour le développement du générateur de code certifié Principes de l approche Introduction à Coq Spécification du langage d entrée du générateur de code en Coq Exemple de circuit en Coq 3 Vérification formelle d un module du générateur de code : Ordonnanceur Démonstration de l ordonnanceur Algorithme de l ordonnanceur Preuves de correction de l ordonnanceur 4 Conclusion & Perspectives IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 7 / 29
Approche choisie pour le développement du générateur de code certifié Principes de l approche 1 Principes de l approche Le générateur de code est divisé en plusieurs modules 1 Ordonnanceur de blocs 2 Typeur de signaux 3 Calcul d horloge des blocs/circuits 4 Générateur de code 5 Optimiseur de circuits 6 Optimiseur de code IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 8 / 29
Approche choisie pour le développement du générateur de code certifié Principes de l approche 2 Principes de l approche Existence de plusieurs assistants de preuves : Coq, Isabelle, Hol, PVS, ACL2... Intérêt de Coq : Génération de code fonctionnel efficace : objective Caml, Haskell, Scheme IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 9 / 29
Approche choisie pour le développement du générateur de code certifié Principes de l approche Principes de l approche 2 Existence de plusieurs assistants de preuves : Coq, Isabelle, Hol, PVS, ACL2... Intérêt de Coq : Génération de code fonctionnel efficace : objective Caml, Haskell, Scheme Garanties L approche garantit la génération d un code Caml correct : préservation de toutes les propriétés de correction vérifiées par le programme source IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 9 / 29
Approche choisie pour le développement du générateur de code certifié Principes de l approche Principes de l approche 2 Existence de plusieurs assistants de preuves : Coq, Isabelle, Hol, PVS, ACL2... Intérêt de Coq : Génération de code fonctionnel efficace : objective Caml, Haskell, Scheme Garanties L approche garantit la génération d un code Caml correct : préservation de toutes les propriétés de correction vérifiées par le programme source GC en Coq GC en Caml GC compilé Exécutable Code C Modèle Simulink Modèle Coq Modèle Caml IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 9 / 29
Approche choisie pour le développement du générateur de code certifié Introduction à Coq Introduction à l assistant de preuves Coq Basé sur le calcul des constructions Complété par des définitions inductives et coinductives 1 Types inductifs Inductive list (A:Set) : Set := nil : list A cons : A -> list A -> list A. 2 Types Coinductifs CoInductive Stream : Set := Cons : A -> Stream -> Stream. Coq Caml Term Type Type Proof Program Program IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 10 / 29
Approche choisie pour le développement du générateur de code certifié Spécification du langage d entrée du générateur de code en Coq Spécification de Bloc Atomique Record blockbase : Set := {op : blockop; inportb : list evaltype; outportb : list evaltype; indexb : nat}. Spécification de Diagramme Record diagram (circuit : Set) : Set := {block_list : list circuit ; connexion_list : list connexion ; inportd : list eval_type ; outportd : list eval_type ; indexd : nat}. Spécification de Circuit Inductive circuit : Set := Block : blockbase -> circuit Diagram : diagram circuit -> circuit. IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 11 / 29
Approche choisie pour le développement du générateur de code certifié Exemple de circuit en Simulink Exemple de circuit en Coq Exemple de diagramme de blocs en Simulink IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 12 / 29
Approche choisie pour le développement du générateur de code certifié Exemple de circuit en Coq Exemple de circuit en Coq (*Block List Specification*) Definition blocinput:=block(build_blockbase(inputext 3)(nil)(Int::Int::Int::nil)0). Definition blocsum1:=block(build_blockbase(sum 2)(Int::Int::nil)(Int::nil)1). : Definition blocdelay1:=block(build_blockbase(delay)(int::nil)(int::nil)3). Definition blocoutput:=block(build_blockbase(outputext 2)(Int::nil)(Int::nil)7). (*Connexion List Specification*) Definition CNX_Input_Sum1:=CNX (ExternalPort 0 0)(InternalPort 0 1). : Definition CNX_Delay1_Sum1:=CNX (ExternalPort 0 3)(InternalPort 1 1). : Definition CNX_Sum2_Output:=CNX (ExternalPort 0 6)(InternalPort 1 7). (*Diagram Specification*) Definition demo := (Build_diagram circuit (blocinput...blocoutput::nil) (CNX1_Input_Sum1...CNX_Sum2_Output::nil) (Int::Int::Int::nil) (Int::Int::nil) 0). IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 13 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Plan 1 Introduction Objectifs Vérification formelle : État de l art 2 Approche choisie pour le développement du générateur de code certifié Principes de l approche Introduction à Coq Spécification du langage d entrée du générateur de code en Coq Exemple de circuit en Coq 3 Vérification formelle d un module du générateur de code : Ordonnanceur Démonstration de l ordonnanceur Algorithme de l ordonnanceur Preuves de correction de l ordonnanceur 4 Conclusion & Perspectives IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 14 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Démonstration de l ordonnanceur Circuit d entrée à l ordonnanceur Ordonnancer les blocs du circuit IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 15 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Circuit correspondant en Coq Démonstration de l ordonnanceur SUM Gain 1/Z 1/Z INPUT OUTPUT MULT SUM IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 16 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Circuit sans boucles (blocs Delay) Démonstration de l ordonnanceur D1 R SUM Gain D2 W INPUT D2 R MULT D1 W SUM OUTPUT IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 17 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Environnement 0 Démonstration de l ordonnanceur SUM Gain D2 W INPUT MULT D1 W SUM OUTPUT IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 18 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Environnement 1 Démonstration de l ordonnanceur SUM Gain D2 W 1 INPUT MULT D1 W SUM OUTPUT IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 19 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Environnement 2 Démonstration de l ordonnanceur SUM Gain 2 1 D2 W INPUT MULT D1 W SUM OUTPUT 2 IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 20 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Environnement 3 Démonstration de l ordonnanceur SUM Gain 2 3 1 D2 W 3 INPUT MULT 3 D1 W SUM OUTPUT 2 3 IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 21 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Démonstration de l ordonnanceur Blocs Delay : Transformation de circuit SUM Gain 2 3 1 D2 W 3 4 INPUT MULT 3 D1 W SUM OUTPUT 2 3 IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 22 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Ordre effectif Démonstration de l ordonnanceur SUM Gain 2 4 6 1 D2 W 8 INPUT MULT 5 D1 W SUM OUTPUT 3 7 IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 23 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Algorithme de l ordonnanceur Algorithme de l ordonnanceur Construire l ordre correct d exécution des blocs du circuit Les valeurs du rang d exécution sont données par : Environment : block -> rank Forward précise le calcul du rang selon la propagation du flot de données Definition Forward (d : diagram circuit) : Environment -> Environment := fun E k => if (valid_index k d) then succ_rank (max_out_rank E d (Fanins d k)) else. L ordonnanceur est spécifié par : Function Scheduler_rec (d : diagram circuit) (E : Environment) {wf (gt_env d) E} : Environment := if (le_dec_env d (Forward E d ) E) then E else Scheduler_rec d (Forward E d ). IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 24 / 29
Vérification formelle d un module du générateur de code : Ordonnanceur Preuves de correction de l ordonnanceur Preuves de correction de l ordonnanceur Terminaison de l ordonnanceur (Récursion bien fondée) L ordonnanceur ne tourne pas indéfiniment Theorem gt_env_wf : forall (d: diagram circuit), well_founded (gt_env (size d)) Monotonie de la fonction Forward S assurer que tout appel récursif génère un nouveau rang Theorem Forward_mono : forall (E E : Environment) (d: diagram circuit), le_env d E E -> le_env d (Forward E d ) (Forward E d ). Propriété de correction : B1 B2 rank B 2 = n, n rank B 1 = n, n, n < n IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 25 / 29
Plan Conclusion & Perspectives 1 Introduction Objectifs Vérification formelle : État de l art 2 Approche choisie pour le développement du générateur de code certifié Principes de l approche Introduction à Coq Spécification du langage d entrée du générateur de code en Coq Exemple de circuit en Coq 3 Vérification formelle d un module du générateur de code : Ordonnanceur Démonstration de l ordonnanceur Algorithme de l ordonnanceur Preuves de correction de l ordonnanceur 4 Conclusion & Perspectives IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 26 / 29
Conclusion & Perspectives Conclusion Un ordonnanceur prouvé a été mis en oeuvre en utilisant l algorithme treesort de la bibliothèque Heap dans Coq La preuve globale de l ordonnanceur requiert des théorèmes intermédiaires : 40 lemmes auxiliaires prouvés en Coq Un code Caml correct a été extrait du programme source L ordonnanceur a été appliqué à des modèles industriels réels IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 27 / 29
Conclusion & Perspectives Perspectives En cours : Obtenir un ordre effectif correct par composition d ordres (position graphique, priorité...) Reste à faire... Extension de l ordonnanceur : Blocs FunctionCall Circuit avec StateCharts Développement et vérification des autres modules du générateur de code IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 28 / 29
Conclusion & Perspectives Questions? IRIT-University of Toulouse-Continental (ACADIE) Vérification Formelle de Générateur de Code FAC 2008 29 / 29