La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

JFLA06 28 janvier 2006 Pauillac Tutoriel Focal (première partie) David Delahaye.

Présentations similaires


Présentation au sujet: "JFLA06 28 janvier 2006 Pauillac Tutoriel Focal (première partie) David Delahaye."— Transcription de la présentation:

1 JFLA06 28 janvier Pauillac Tutoriel Focal (première partie) David Delahaye Focal Équipe Focal

2 28 janvier 2006 JFLA06Pauillac 2 Introduction Méthodes formelles pour la certification de programmes: 1.Vérification (automates, RdPs, …) 2.Preuve (logique, Mathématiques, …) FocalFocAtelier Focal (anciennement Foc): –Outil de spécification et daide à la preuve –Orienté objets (héritage, paramétrisation, …) –Orienté spécifications algébriques (support, implantation, …) ZenonCoq –Preuve automatisée (Zenon) et vérifiée (Coq)

3 28 janvier 2006 JFLA06Pauillac 3 Focal Léquipe Focal Focal LIP6 T. Hardin R. Rioboo M. JaumeLIP6 T. Hardin R. Rioboo M. Jaume INRIA D. Doligez P. WeisINRIA D. Doligez P. Weis Cédric, CPR C. Dubois V. Donzeau-Gouge O. Pons D. Delahaye X. Urbain P. Courtieu Cédric, CPR C. Dubois V. Donzeau-Gouge O. Pons D. Delahaye X. Urbain P. Courtieu J. Blond R. Bonichon C. Morisset I. Noyer S. Boulmé S. Fechter V. Prevosto J. Blond R. Bonichon C. Morisset I. Noyer S. Boulmé S. Fechter V. Prevosto J.-F. Étienne M. Carlier J.-F. Étienne M. Carlier

4 28 janvier 2006 JFLA06Pauillac 4 Un peu dhistoire BiPGroupe BiP (T. Hardin, V. Donzeau-Gouge, J. R. Abrial) : CoqB Interactions entre les communautés Coq et B FocProjet Foc (T. Hardin, R. Rioboo, S. Boulmé) : Axiom –Bibliothèque certifiée de calcul formel (failles dAxiom) –Structures avec héritage, représentation et paramétrisation Conception dun compilateur (D. Doligez, V. Prevosto) : OcamlCoq –Codes Ocaml (exécution), Coq (certification) FocDoc –Code FocDoc (documentation)

5 28 janvier 2006 JFLA06Pauillac 5 Un peu dhistoire (suite) Développement dune bibliothèque de calcul formel (R. Rioboo) : Polynômes distribués, clôture réelle, … Sémantique opérationnelle (T. Hardin, C. Dubois, S. Fechter) : Meilleure compréhension du compilateur ZenonProuveur automatique Zenon (D. Doligez, D. Delahaye) : –Premier ordre avec égalité (classique), méthode des tableaux Coq –Traduction en Coq des preuves générées

6 28 janvier 2006 JFLA06Pauillac 6 Focal Spécifications Focal: espèces Espèce species nom ( pars ) inherits esps ( pars ) = corps end Paramétrisation Héritage Représentation: rep; ou rep = type ; Signatures: sig nom in type ; Définitions: let nom ( args ) = corps ; Propriétés: property nom : prop ; Théorèmes: theorem nom : prop proof : preuve ; Référencée par self

7 28 janvier 2006 JFLA06Pauillac 7 Focal Spécifications Focal: collections Collection collection nom implements esps ( pars ) = corps end Encapsulation Implantation Tout doit être défini et démontré: rep; rep = type ; sig nom in type ; let nom ( args ) = corps ; property nom : prop ; theorem nom : prop proof : preuve ;

8 28 janvier 2006 JFLA06Pauillac 8 Focal Le compilateur de Focal Compilateur Focal Spécification Focal FocDocOcamlCoq XMLLaTeX Zenon

9 28 janvier 2006 JFLA06Pauillac 9 Un exemple: les ensembles finis (** fo_set.foc *) A library for finite D. Delahaye *) species set (typ is setoid) inherits setoid = (* Declarations *) sig empty in self; sig add in typ self self; sig rem in typ self self; sig union in self self self; sig inter in self self self; … species setoid inherits basic_object = sig equal in self self bool; sig element in self; let different (x, y) = #not_b (!equal (x, y)); property equal_reflexive : …; property equal_symmetric : …; property equal_transitive : …; end Racine de la hiérarchie: species basic_object = rep; let print (x in self) =...; let parse (x in string) in self =...; end

10 28 janvier 2006 JFLA06Pauillac 10 Ensembles (suite) (* Definitions *) let is_empty (e) = !equal (e, !empty); let mem (e, a) = !different (a, !rem (e, a)); (* Set axioms *) property ext : all a b in self, (!mem (e, a) !mem (e, b)) !equal (a, b); letprop mem_union (e, a, b) = !mem (e, a) or !mem (e, b); property pair : all a b in self, all e in typ, !mem (e, !union (a, b)) !mem_union (e, a, b); (* We do not need axioms of reunion and powerset due to... *)...

11 28 janvier 2006 JFLA06Pauillac 11 Ensembles (fin) et compilation property rem_empty : all e in typ, !equal (!rem (e, !empty), !empty); theorem mem_empty : all e in typ, not (!mem (e, !empty)) proof : by !rem_empty, !equal_symmetric def !different, !mem; end Compilation: $:> focc -I … fset.foc $:> ls fset.* fset.fo fset.foc fset.ml fset.mli fset.zv $:> zvtov -zenon … fset.zv Pourquoi? not (!mem (e, !empty)) different, mem (défs.) not (#not_b (!equal (!empty, !rem (e, !empty)))) rem_empty, equal_symmetric (props.)

12 28 janvier 2006 JFLA06Pauillac 12 Finitude (modularité) species finite = rep; sig card in self int; sig is_finite in self bool; property finite : all a in self, !is_finite (a); end Cette espèce représente une propriété possibilité de modulariser le développement! Comment utiliser cette propriété? … Solution alternative: species finite inherits basic_object = sig card in self int; sig is_finite in self bool; property finite : all a in self, !is_finite (a); end

13 28 janvier 2006 JFLA06Pauillac 13 Ensembles finis species finite_set (typ is setoid) inherits set (typ), finite = (** Choice operator *) sig choose in self typ; property choose_ne : all a in self, not (!is_empty (a)) !mem (!choose (a), a); theorem choice : all a in self, not (!is_empty (a)) ex e in typ, !mem (e, a) proof : by !choose_ne; (* Definitions *) let rec is_finite (a) = if !is_empty (a) then #True else let e = !choose (a) in !is_finite (!rem (e, a)); …

14 28 janvier 2006 JFLA06Pauillac 14 Ensembles finis (suite) let rec union (a, b) = if !is_empty (a) then b else let e = !choose (a) in !union (!rem (e, a), !add (e, b)); let inter (a, b) = let ab = !restrict (a, b) in let ba = !restrict (b, a) in !restrict (!restrict (!union (a, b), ab), ba); (* Theorems *) theorem union_empty : all a in self, !equal (!union (!empty, a), a) proof : by !equal_reflexive def !is_empty, !union; … end

15 28 janvier 2006 JFLA06Pauillac 15 Ensembles finis (espèce complète) Implantation avec des listes: species fset_list (typ is setoid) inherits finite_set (typ) = rep = list (typ); let empty = #Nil; let card (e) = #length (e); let add (e, a) = if !mem (e, a) then a else #Cons (e, a); proof of rem_empty = …; … end La propriété rem_empty provient de set : property rem_empty : all e in typ, !equal (!rem (e, !empty), !empty);

16 28 janvier 2006 JFLA06Pauillac 16 Ensembles finis dentiers (collection) collection int_fset implements fset_list (foc_small_integers) = end La collection int_fset représente du code exécutable. foc_small_integers est une collection (prédéfinie): elle doit au moins implanter lespèce setoid (paramètre de fset_list ) On peut donner à fset_list toute collection implantant setoid. Attention, cependant: le paramètre ne peut pas être une espèce; cest uniquement une collection!

17 28 janvier 2006 JFLA06Pauillac 17 Utiliser les collections let a = foc_small_integers!parse ("1");; … let l1 = int_fset!add (#a, int_fset!add (#b, int_fset!empty));; let l2 = int_fset!add (#b, int_fset!add (#c, int_fset!add (#d, int_fset!empty)));; #print_string (int_fset!print (int_fset!union (#l1, #l2)));; #print_string (int_fset!print (int_fset!inter (#l1, #l2)));; #print_string (foc_small_integers!print (#hd (#l1)));; Exécution: $:> fset la représentation est abstraite!

18 28 janvier 2006 JFLA06Pauillac 18 Une autre implantation species efset_list (typ is setoid) inherits finite_set (typ) = rep = int × list (typ); let empty = #crp (0, #Nil); let card (e) = #first (e); let mem (e, a) = #mem (e, #scnd (a)); proof of mem_empty = …; … end collection int_efset implements efset_list (foc_small_integers) = end La méthode mem est redéfinie. La preuve de mem_empty faite dans set : theorem mem_empty : all e in typ, not (!mem (e, !empty)) proof : by !rem_empty, !equal_symmetric def !different, !mem; doit être refaite!

19 28 janvier 2006 JFLA06Pauillac 19 Hiérarchie de la spécification Espèce Collection Héritage Paramétrisation Implantation Espèce Collection Héritage Paramétrisation Implantation setoid set finite_set finite fset_listefset_list int_fset fsi int_efset

20 28 janvier 2006 JFLA06Pauillac 20 Extension de la spécification On souhaite étendre notre spécification: Ensembles finis (totalement) ordonnés En ne changeant rien à la spécification existante En ne dupliquant pas de code Est-ce possible? Oui: héritage avec raffinement du paramètre Technique issue de la programmation objets

21 28 janvier 2006 JFLA06Pauillac 21 Ordre total Espèce de la bibliothèque standard: species ordered_set inherits partial_order = let equal (x, y) = #and_b (!leq (x, y), !leq (y, x)); let lt (x, y) = #not_b (!leq (y, x)); property total_order : all x y in self, !leq (x, y) or !leq (y, x); proof of lt_is_not_leq = by !total_order def !lt, !different, !equal;... end species partial_order inherits pre_order = property leq_antisymmetric : all x y in self, !leq (x, y) !leq (y, x) !equal (x, y); end species pre_order inherits setoid = sig leq in self self bool; let lt (x, y) = #and_b (!leq (x, y), #not_b (!equal (x, y))); let geq (x, y) = !leq (y, x); let gt (x, y) = !lt (y, x); theorem lt_is_not_leq : all x y in self, (!lt (x, y) !leq (x, y) and !different (x, y)) and (!leq (x, y) !lt (x, y) or !equal (x, y)) proof : def !lt, !different; end

22 28 janvier 2006 JFLA06Pauillac 22 Ensembles finis ordonnés species finite_ordered_set (typ is ordered_set) inherits finite_set (typ) = (* Definitions *) let is_single (a) = !is_empty (!rem (!choose (a), a)); let min_e (e, f) = if typ!leq (e, f) then e else f; let max_e (e, f) = if typ!leq (e, f) then f else e; let rec min (a) = if !is_empty (a) then #foc_error ("min: set is empty") else let e = !choose (a) in if !is_single (a) then e else !min_e (e, !min (!rem (e, a))); …

23 28 janvier 2006 JFLA06Pauillac 23 Ensembles finis ordonnés (suite) let rec max (a) = if !is_empty (a) then #foc_error ("max: set is empty") else let e = !choose (a) in if !is_single (a) then e else !max_e (e, !max (!rem (e, a))); (* Properties: must be careful to partiality *) property minp : all a in self, all e in typ, !mem (e, a) typ!leq (!min (a), e); property maxp : all a in self, all e in typ, !mem (e, a) typ!leq (e, !max (a)); … end

24 28 janvier 2006 JFLA06Pauillac 24 Implantation: 2 possibilités species foset_list (typ is ordered_set) inherits finite_ordered_set (typ) = rep = list (typ); … end ou mieux: species foset_list (typ is ordered_set) inherits finite_ordered_set (typ), fset_list (typ) = … end

25 28 janvier 2006 JFLA06Pauillac 25 Ensembles finis ordonnés dentiers species oints inherits ordered_set, integers_int = let leq = #int_leq; proof of leq_reflexive =...; proof of leq_antisymmetric =...; proof of leq_transitive =...; proof of lt_is_not_leq =...; proof of total_order =...; end collection ints implements oints = end collection int_foset implements foset_list (ints) = end

26 28 janvier 2006 JFLA06Pauillac 26 Nouvelle hiérarchie setoid set finite_set finite fset_list int_fset fsi finite_ordered_set ints ordered_set foset_list int_foset

27 28 janvier 2006 JFLA06Pauillac 27 FocDoc Documentation: FocDoc FocDocLe compilateur peut produire un fichier FocDoc XML Fichier XML décrivant linterface des espèces DTDXSDValidité: DTD ou XSD fournies HTMLMathMLLaTeXProduction de documents HTML (MathML) ou LaTeX XSLXSL XSL stylesheets (pré-processeur XSL requis) Gestion de base de données Focal XquerySQLXML Requêtes Xquery (SQL adapté à XML) Documentation de notre exemple: $:> focc -I … -focdoc -dtd focdoc.dtd fo_set.foc $:> xsltproc -o fo_set.xhtml focdoc2html.xsl fo_set.focdoc $:> xsltproc -o fo_set.xml mmlctop2_0.xsl fo_set.xhtml fo_set.focdoc fo_set.xml

28 28 janvier 2006 JFLA06Pauillac 28 Focal Applications Focal LIP6Bibliothèque de calcul formel (R. Rioboo, LIP6) : Focal Actuelle bibliothèque standard de Focal EDEMOIProjet EDEMOI de lACI Sécurité Informatique CNAM (V. Donzeau-Gouge, C. Dubois, D. Delahaye, J. F. Étienne, CNAM) : Réglementation de la sûreté dans les aéroports LIP6BertinPolitiques de sécurité (M. Jaume, C. Morisset, LIP6; J. Blond, Bertin) : Bell et Lapadula, Muraille de Chine,... Voir lexposé lundi!

29 28 janvier 2006 JFLA06Pauillac 29 EDEMOI Application: le projet EDEMOI V. Donzeau-Gouge, C. Dubois, D. Delahaye, J.-F. Étienne: Réglementation de la sûreté dans les aéroports formalisée en Focal Modélisation: –Héritage, paramétrisation UML –Sortie vers UML Certification: –Cohérence de la spécification –Zenon –Zenon se révèle très approprié! Annexe 17 (ICAO) Doc 30 (ECAC) Posez-lui des questions!

30 28 janvier 2006 JFLA06Pauillac 30 Pour finir… FocalDistribution disponible sur le site du projet Focal: Quelques travaux en cours ou futurs: –Tests (C. Dubois, M. Carlier) –Invariants de représentation, réécriture, déduction modulo,... Demain, C. Morisset pour la deuxième partie du tutoriel DVDFocal ou comment il est difficile de louer des DVDs sans Focal...


Télécharger ppt "JFLA06 28 janvier 2006 Pauillac Tutoriel Focal (première partie) David Delahaye."

Présentations similaires


Annonces Google