1 / 39

BiCoq : Plonger B en Coq

BiCoq : Plonger B en Coq. Eric Jaeger, UPMC/LIP6 & SGDN/DCSSI Journée PPF Logiciels Sûrs du 7 juin 2007. Plan. Rapide présentation du B Rapide présentation de Coq Plongements BiCoq. La Méthode B. La Méthode B. Développée par J-R. Abrial dans le B-Book

topper
Download Presentation

BiCoq : Plonger B en Coq

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BiCoq :Plonger B en Coq Eric Jaeger, UPMC/LIP6 & SGDN/DCSSI Journée PPF Logiciels Sûrs du 7 juin 2007

  2. Plan • Rapide présentation du B • Rapide présentation de Coq • Plongements • BiCoq

  3. La Méthode B

  4. La Méthode B • Développée par J-R. Abrial dans le B-Book • Permet d’aller de la spécification formelle à l’implémentation (un programme séquentiel) par raffinements successifs • Basée sur un calcul des prédicats enrichi avec des notions ensemblistes et un langage de substitutions généralisées • Les propriétés d’un programme sont des prédicats • Les opérations d’un programme sont décrites comme des substitutions (transformateurs de prédicats) • Largement utilisée par l’industrie et le monde académique

  5. Spécification en B • Puissance du non-déterminisme : le tri de liste outsort(liste)≙ PRE liste∈seq(ℕ) THEN ANY prm WHERE prm∈perm(dom(liste)) ⋀ (prm;liste||prm;liste)[geq]⊆geq THEN out:=prm;liste END END • La spécification explique le quoi, pas le comment… • A noter les nombreuses notions natives en B

  6. VARIABLES S INVARIANT S⊆ℕ INITIALISATION S:=∅ OPERATIONS ajout(n)≙PRE n∈ℕ THEN S:=S∪{n} END; outliremax≙PRE S≠∅ THEN out:=max(S) END Perte d’information Il y a bien raffinement VARIABLES m INVARIANT m∈ℕ INITIALISATION m:=0 OPERATIONS ajout(n)≙PRE n∈ℕ1 THEN IF m<n THEN m:=n END END; outliremax≙BEGIN out:=m END Mais il n’est pas possible,en faisant uniquement appel aux opérations, de distinguer les deux machines Notion de raffinement en B

  7. Coq

  8. Coq • Formalisme et outil développés par G. Huet, T. Coquand, C. Paulin, B. Werner, G. Dowek, etc. • Outil de vérification de preuves (Curry-Howard et typage) • Permet d’écrire des preuves mais aussi des fonctions, extraction sous forme de programmes fonctionnels (CAML) • Basé sur le calcul des constructions inductives • Primitif (pas d’égalité…) mais ouvert et puissant (ordre supérieur) • Nous considérons ici Coq comme un langage de description d’ensembles de termes

  9. Inductive ℕ : Set ≔ 0 : ℕ | S : ℕ→ℕ • P 0 ⇒(∀ (n:ℕ), P n ⇒P (S n)) ⇒∀ (n:ℕ), P n Les naturels en Coq • Définition inductive • Surjectivité : tout terme de ℕ est de l’une de ces deux formes • Injectivité : 0≠S n et x≠y ⇒ S x≠S y • Bonne fondation : tout terme de typeℕest bâti par un nombre fini (arbitrairement grand) d’applications de S à 0 • Justifie le principe d’induction associé

  10. Inductive ℕ : Set ≔ 0 : ℕ | S : ℕ→ℕ S S S S S S Convention de notation 0 1 2 Les naturels en Coq 0 S0 SS0

  11. Inductive ≤ : ℕ→ℕ→Prop ≔ le0 :∀ n:ℕ, 0≤n | leS : ∀ (n1,n2:ℕ), n1≤n2→S n1≤S n2 Plus petit ou égal en Coq • Encore une définition inductive • ℕ définit un type, ≤ définit une famille de types • 0≤1 est un type, ainsi que 2≤4 • 3≤1 est également un type • Les termes habitant ces types sont des preuves • (le0 1) est un terme de type 0≤1 • (leS 1 3 (leS 0 2 (le0 2))) est un terme de type 2≤4 • Il n’y a pas de terme de type 3≤1

  12. Inductive ≤ : ℕ→ℕ→Prop ≔ le0 :∀ n:ℕ, 0≤n | leS : ∀ (n1,n2:ℕ), n1≤n2→S n1≤S n2 S S S ℕ 0 1 2 le0 le0 le0 Pour les typeslogiques, ons’intéresse àl’existence d’unterme, mais pasà sa valeur leS leS leS Plus petit ou égal en Coq 0≤0 0≤1 0≤2 1≤1 1≤2 1≤3

  13. Inductive even : ℕ→Prop ≔ ev0 : even 0 | evS : ∀ (n:ℕ), even n →even S(S n) S S S S S S S ev0 5 0 1 2 3 6 4 evS evS evS Etre pair en Coq e4 e0 e2 e6 Un prédicat sur les termes peut être vu comme un règle de coloration

  14. Notion de plongement

  15. Notion de plongement • Le plongement consiste à représenter (la sémantique d’)un langage dans un autre • Plongement superficiel (shallow embedding) • On transforme un programme du langage plongé en un programme du langage de plongement (compilation) • Permet d’analyser les programmes plongés • Plongement profond (deep embedding) • On représente de manière fine le langage plongé dans le langage de plongement (développer une VM puis l’utiliser) • Permet d’analyser le langage plongé

  16. Plongement d’une logique • On considère une logique propositionnelle très simplifiée • La syntaxe décrit les termes que l’on peut écrire • Proposition : P := cst | P ∧ P • Contextes : Γ := ∅ | P ; Γ • Séquents : S := Γ ⊢ P • Les règles d’inférence décrivent la sémantique, les principes de raisonnement sur ces termes Γ⊢ P Γ⊢ P ∧ Q Γ⊢ P ∧ Q Γ⊢ P et Γ⊢ Q P ⊢ P Q ; Γ⊢ P Γ⊢ P Γ⊢ Q Γ⊢ P ∧ Q

  17. Plongement superficiel • Définition de l’import des termes de la logique dans Coq • 〚P1 ∧ P2〛→〚 P1〛∧〚P2〛 • 〚∅ ⊢ P〛→ True ⇒〚P〛 • 〚P1 ; Γ ⊢ P2〛→〚P1〛⇒〚Γ ⊢ P2〛 • On ajoute aussi quelques axiomes à Coq, si nécessaire • Règles d’import et axiomes sont justifiés par la sémantique • Il y a potentiellement une interprétation • On peut perdre en correction ou complétude • Ici, par exemple, la logique a été enrichie (contextes ordonnés)

  18. Plongement profond • La syntaxe se traduit de manière naturelle par des définitions inductives (construction des termes de la logique) • On ne suppose rien quant à la signification de ces termes • Le ∧, par exemple, est juste le constructeur de terme pand • P⊢Q∧R s’écrit spr (cins (pcst P) cnil) (pand (pcst Q) (pcst R)) • Dans la suite, on utilisera la représentation symbolique Inductive prp : Set ≔ pcst: ident → prp | pand : prp→ prp → prp Inductive ctx : Set := cnil : ctx | cins : prp→ ctx→ ctx Inductive sqt : Set := spr : ctx → prp→ sqt

  19. Plongement profond • Les règles d’inférence décrivent une relation entre les contextes et les prédicats… ou plus simplement un prédicat sur les séquents • Ce prédicat nous permet de colorier parmi l’ensemble de tous les séquents, ceux qui sont prouvables… donc « vrais » • Aucune interprétation n’est nécessaire dans la logique de Coq Inductive proof : sqt→Prop ≔ | axm: ∀ (p:prp), proofp⊢p | weak : ∀ (p,q:prp)(c:ctx), proofc⊢p → proof(q;c)⊢p | andE : ∀ (p,q:prp)(c:ctx), proofc⊢p → proofc⊢q → proofc⊢(p∧q) | andL : ∀ (p,q:prp)(c:ctx), proofc⊢(p∧q)→proofc⊢p | andR : ∀ (p,q:prp)(c:ctx), proofc⊢(p∧q)→ proofc⊢q

  20. BiCoq

  21. Confiance et vérification • B est utilisé pour des développement de sûreté ou de sécurité • Haut niveau de confiance obtenu par l’utilisation d’une méthode formelle, implémentée dans un outil (AtelierB, BToolkit, B4Free) • Mais qui vérifie le vérificateur ? La théorie du B, ou son implémentation, peuvent contenir des erreurs • Le B-Book c’est 600 pages de définitions et de preuves • Les outils sont complexes (cf. par exemple les problèmes de capture des noms de variables) • On peut utiliser Coq pour vérifier le B, et pour implémenter des outils

  22. BiCoq • BiCoq est un plongement profond de la logique de B en Coq • Pourquoi un plongement profond ? • Pas d’interprétation : on représente le B et non une adaptation de B exprimable en utilisant des constructions de Coq • Permet de vérifier le B • Comment représenter un Coq une « fonction » de B, i.e. une relation potentiellement partielle et non décidable ? • Portage possible des développements déjà réalisés • Les deux logique (B et Coq) sont clairement distinguées, la logique de Coq est préservée (donc sa cohérence), et on peut faire une méta-analyse de la logique de B • Compatible d’une extraction d’outils indépendants de Coq

  23. La logique de B en Coq • Les termes du B sont définis comme suit : • Prédicats :P := P∧P | P⇒P | ¬P | ∀v.P | E=E | E∈E | [V:=E]P • Expressions :E := V | S | E↦E | ↓S | [V:=E]E • Ensembles :S := BIG | ↑S | S*S | {V|P} • Variables :V := cst | V,V • Le codage en Coq est légèrement adapté • Prédicats :P := P∧P | P⇒P | ¬P | ∀P | E=E | E∈E | π(J) • Expressions : E := χ(I) | E↦E | ↓E | Ω| ↑S | S*S | {E,P} | ω(K) • Différences : Constructeurs explicites, fusion des expressions et des ensembles, utilisation de De Bruijn (et variables simples), typage des ensembles en compréhension, axiomatisation de BIG et enrichissement à des fins techniques

  24. La logique de B en Coq • La syntaxe est étendue avec deux nouveaux types • Les contextes, une liste de prédicats • Les séquents, associant un contexte et un prédicat • Les règles d’inférence sont ensuite traduites sous la forme d’une relation inductive Bproofentre contextes et prédicats • On peut aussi voirBproofcomme un prédicat sur les séquents (uncurryfication), coloriant les séquents prouvables • Syntaxe légèrement enrichie, mais pas les règles d’inférence, l’ensemble des séquents prouvables est (presque) identique • Visualisation du tableau…

  25. La logique de B en Coq • La logique de B est représentée par l’ensemble des séquents bien formés et le sous-ensemble des séquents prouvables • Les séquents bien formés sont définis par l a syntaxe • Les séquents prouvablesΓ⊦P sont ceux pour lesquels le prédicat inductif Bproof(Γ⊦P) n’est pas vide • Tout élément de Bproof(Γ⊦P) décrit en fait une preuve de Γ⊦Pdans la logique de B (une trajectoire de coloriage) • 1 ou plusieurs éléments : Γ⊦P est prouvable • Aucun élément : Γ⊦P n’est pas prouvable… ce qui ne signifie pas forcément que Γ⊦¬P est prouvable (alors que Γ⊦P∨¬P l’est) • Une preuve de Γ⊦P en Coq est structurée comme une preuve en B

  26. Les théorèmes B en Coq • Prouver un théorèmeΓ⊦Pde B, c’est exhiber une construction de type Bproof(Γ⊦P)(dans le plongement) en Coq • Donc exhiber une preuve dans la logique de B… preuve qui n’a rien à voir avec la logique de Coq • Par exemple, on peut exhiber une preuve du tiers exclus… • … en suivant la structure de la preuve proposée dans le B-Book • … et sans enrichir la logique de Coq (plongement profond) Theorem B_em : ∀ (Γ:Bctx)(P:Bprd), Bproof(Γ⊦ P ∨ ¬P)

  27. Quelques surprises • Le B-Book ne respecte pas la syntaxe qu’il définit • Certaines preuves du B-Book sont fausses • L’ensemble des règles d’inférence est insuffisant à prouver les résultats attendus • Ce ne sont pas des erreurs du plongement, mais des problèmes dans le B-Book (difficilement détectables) • Pourtant, ces résultats sont prouvables avec les outils B… (E1=F1↦E2=F2)⇒E1=E2mais pasBproof(⊢(E1=F1↦E2=F2)⇒E1=E2) S1⊆S2∧T1⊆T2⇒S1*T1⊆S2*T2mais pasBproof(⊢S1⊆S2∧T1⊆T2⇒S1*T1⊆S2*T2)

  28. Croiser les logiques • Quelles sont les relations entre un opérateur logique B et un opérateur logique Coq ? • Exercice de style • Met en évidence les différences entre les logiques (cf. le ∨) • Permet de prouver des théorèmes en B plus efficacement (pour le développeur) en utilisant des tactiques de Coq Bproof(Γ⊦ P1) ∧Bproof(Γ⊦ P2) ⇔ Bproof(Γ⊦ P1 ∧ P2) Bproof(Γ⊦ P1) ∨Bproof(Γ⊦ P2) ⇒ Bproof(Γ⊦ P1 ∨ P2) Bproof(Γ⊦ P1 ⇒ P2) ⇒ ( Bproof(Γ⊦ P1) ⇒ Bproof(Γ⊦ P1) )

  29. Nouveaux résultats pour le B • De facto, ce plongement consiste à utiliser Coq comme méta-logique pour le B • Question philosophique : est-ce justifiable ? • L’induction sur les termes est utilisée dans le B-Book, c’est justement ce qui est fait (le plus souvent) dans BiCoq • Quid de l’induction sur les preuves ? • On dérive bien les résultats attendus • Réciproquement, on peut dériver de nouveaux résultats • Exemple : substitution de prédicats équivalents, ⇔ est une congruence en B, comme =

  30. Un prouveur prouvé pour le B • En complément, BiCoq propose des fonctions ML représentant l’application d’une tactique de preuve • Les fonctions agissent directement sur les séquents (niveau syntaxique) en émulant l’application des règles d’inférence et des théorèmes • Développement direct de fonctions ML qui sont prouvées correctes et peuvent être extraites • On obtient un prouveur prouvé indépendant de Coq • Il possible à partir d’une trace de preuve de générer un terme de preuve B (Bproof) vérifiable dans Coq

  31. Un prouveur prouvé pour le B • Type des tactiques de preuve • Sémantique d’une liste de séquents LS • Correction d’une tactique TB • Quelques exemples simples Btac : Bseq→ list Bseq Trans(LS:list Bseq) := ∀ (S:Bseq), S ∊ LS ⇒ Bproof(S) Theorem TBCorrect : ∀ (S:Bseq), Trans(TB(S)) ⇒ Bproof(S) Definition TAXM(S:Bseq) := let (Γ⊢P:=S) in if P ∊ Γ then [ ] else [S] Definition T∧i(S:Bseq) := let (Γ⊢P:=S) in match P with P1∧P2 → [Γ⊢P1,Γ⊢P2] | _ → [S] end

  32. Résultats actuels • Toute la logique B a été plongée dans Coq • Certaines notions, telles que l’union, restent difficiles à représenter et sont améliorables • Quelques problèmes de B mis en évidence • Une grande partie des théorèmes a été vérifiée • Terminé pour calcul propositionnel et calcul des prédicats • De nouveaux résultats ont été démontrés • Code ML extractible formellement vérifié et complet • Termes, propriétés, méta-propriétés, tactiques de preuve • 550 définitions, 750 théorèmes, 10000 lignes (6 h.mois)

  33. Travaux à mener • Améliorer la représentation des variables • Produire des termes de preuve pour Coq • Plonger la théorie des points fixes • Notamment, définir des entiers naturels à la B • Croiser points fixes de B et induction de Coq • Tactiques de preuves inductives pour le B • Plonger le langage de substitution • Plongement profond ou superficiel ? • Poursuivre les analyses méta-théoriques

  34. Quelques remarques • Plongement profond coûteux mais instructif et puissant • Il n’y a que le premier pas qui coûte • Validation de la théorie de la Méthode B pas inutile • Développement d’outils formellement validés pour le B • Même non optimaux, ils peuvent vérifier ce qui est produit par d’autres outils • Indépendance vis-à-vis de Coq : choix à faire • Coq est expressif et puissant, mais très technique • Intérêt de la définition de notations • Analyse de différentes approches de l’induction

  35. Des questions ? Merci pour votre attention…

  36. x ∈ x {} y ∧ ∈ = y S y x Indices de De Bruijn ∀x.x∈{y|y∈S∧y=x} ≡α∀y.y∈{z|z∈S∧z=y}

  37. ∀x ∀ x ∈ ∈ ∈ x {} x {y} 0 {} y ∧ ∧ ∧ ∈ = ∈ = ∈ = y S y x y S y x 0 S 0 1 Indices de De Bruijn

  38. Indices de De Bruijn • La notation n’est pas naturelle • L’indice pour une variable n’est pas constant dans un terme • Mais la représentation de De Bruijn offre de nombreux avantages pour un programme sur les termes • L’égalité ≡α se ramène à l’égalité structurelle en De Bruijn • Les conditions sur les noms sont remplacées par des calculs • Permet de distinguer substitution et instanciation, etc. • Quelques problèmes avec l’induction sur les termes • Il est facile de définir des fonctions pour utiliser la notation naturelle tout en travaillant en De Bruijn

  39. Quantifications standards Bind∀(x,x∈Bind{}(y,y∈S∧y=x)) Quantifications fonctionnelles Quantifications De Bruijn Indices de De Bruijn ∀x.x∈{y|y∈S∧y=x} ∀(1∈{S|1=2})

More Related