conception d'un langage de specification …conception d'un langage de specification...

26
LIFO DEA INFORMATIQUE OASIS STAGE 05 Septembre 2001 1 C C O O N N C C E E P P T T I I O O N N D D ' ' U U N N L L A A N N G G A A G G E E D D E E S S P P E E C C I I F F I I C C A A T T I I O O N N S S E E M M A A N N T T I I Q Q U U E E E E X X E E C C U U T T A A B B L L E E E E T T P P R R O O U U V V A A B B L L E E Présenté par : Dirigé par : Hamoudi KALLA Mme. Isabelle ATTALI

Upload: others

Post on 10-Oct-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

LIFO DEA INFORMATIQUE OASIS STAGE

05 Septembre 2001 1

CCOONNCCEEPPTTIIOONN DD''UUNN LLAANNGGAAGGEE DDEE SSPPEECCIIFFIICCAATTIIOONN SSEEMMAANNTTIIQQUUEE

EEXXEECCUUTTAABBLLEE EETT PPRROOUUVVAABBLLEE

Présenté par : Dirigé par : Hamoudi KALLA Mme. Isabelle ATTALI

Page 2: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 2

PLAN de la présentation

• Introduction. • Présentation de l'outil SmartTools. • Présentation du système de preuves Coq. • Présentation du langage FSem (Functional Semantic). • Implémentation. • Conclusion.

Page 3: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

05 Septembre 2001 3

INTRODUCTION Pour la conception des langages de programmation qui fournit des programmes :

• Corrects, • Fiables, • Qui respectent des propriétés du langage.

⇒ Spécifier, prouver et vérifier des propriétés de ce langage dans un système de preuves.

Il est intéressant de :

⇒ Disposer des outils sémantiques (compilateur, interpréteur,…) pour ces langage qui permettent : • D'aider le programmeur à écrire ces programmes. • D'exécuter les programmes avec animation graphique afin de contrôler

l'exécution.

Page 4: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 4

Spécifier, exécuter et prouver des langages de programmation

Outils

Preuves des propriétés

La spécification syntaxique et sémantique

Exécution des programmes

Perm

etta

nt

Permettant

Permettant

Preuves seulement : Isabelle/HOL, PVS. Exécution seulement : AsmGofer, Centaur. Preuves & Exécution : Coq, KIV, Elan.

Page 5: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 5

Exemple : le langage Exp

• Langage de programmation impératif. • Déclarations : type entier & type booléen.

• Instructions : affectation & contrôle ( IF-THEN-ELSE ).

Une affectation de Exp change la valeur d'une variable par la valeur d'une expression.

Une expression de Exp est un entier ou un booléen ou l'addition de deux expressions.

Page 6: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 6

Présentation de l'outil SmartTools

SmartTools

Preuves des propriétés des programmes

Exécution des programmes Animation graphique

Permet

Permet

Permet

La spécification syntaxique «Le langage AST»

Permet

Les actions sémantiques «visiteurs Java»

Page 7: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 7

Le langage AST & l'environnement SmartTools

Page 8: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 8

Visiteurs SmartTools « Actions Sémantiques »

Automatique SmartTools

Programmeur

public abstract class AbstractExpVisitor extends Visitor {… abstract public java.lang.Object visit (exp.ast.AddTree node, java.lang.Object params) throws VisitorException ; …}

Public class DefaultExpVisitor extends AbstractExpVisitor { … public java.lang.Object visit(exp.ast.AddTree node, java.lang.Object params) throws VisitorException { visit(node.getGaucheNode(), params); visit(node.getDroiteNode(), params); return null; } … }

Public class EvalExpVisitor extends DefaultExpVisitor { … public java.lang.Object visit(exp.ast.AddTree node, java.lang.Object params) throws VisitorException { Integer x = (Integer) visit(node.getGaucheNode(), params) ; Integer y = (Integer) visit(node.getDroiteNode(), params) ; return IntegerPlus ( x , y ) ; } … }

Page 9: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 9

Présentation du système de preuves Coq

• Développé par le Projet LogiCal à l'INRIA.

• Système interactif pour le développement des preuves.

a. Spécification syntaxique en Coq « les définitions Inductives »

Inductive Expression : Set := int : Z → Expression | add : Expression → Expression → Expression | coer_Expression_Bool : bool → Expression

Page 10: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 10

b. Spécification sémantique en Coq

Approche Relationnelle

Approche Fonctionnelle

Inductive Eval_Expression : Environnement → Expression → VALEUR → Prop := addExpression : (x,y:Z) (env1:Environnement)(exp1,exp2:Expression) (Eval_Expression env1 exp1 (coer_VALEUR_Z x) ) → (Eval_Expression env1 exp2 (coer_VALEUR_Z y) ) → (Eval_Expression env1 (add exp1 exp2) (coer_VALEUR_Z (Zplus x y)) ) | … .

Fixpoint Eval_Expression [env1:Environnement; exp':Expression] : (Exc VALEUR) := Cases exp' of (add exp1 exp2) ⇒ Cases (Eval_Expression env1 exp1) (Eval_Expression env1 exp2) of (value (coer_VALEUR_Z x)) (value (coer_VALEUR_Z y)) ⇒ (value VALEUR (coer_VALEUR_Z (Zplus x y))) | _ _ ⇒ (error VALEUR) end | ……end.

Page 11: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 11

Connexion : SmartTools <-> Coq

• Preuves des propriétés des programmes SmartTools ⇒ Connecter SmartTools au système de preuves Coq.

• Deux solutions sont proposées pour connecter SmartTools au système de preuves Coq.

Système de preuves CoqConnexion SmartTools

Page 12: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 12

Solution 1.

Problèmes. «A» Spécifier en Coq ? & «B» programmes Java ⇒ fonctions Coq ! Solution 2. Développer un nouveau langage de spécification sémantique FSem.

Visiteurs SmartTools

Spécifications sémantiquesécrites en Coq

Traducteur «A»

Système de preuves Coq

Langage de spécifications sémantiques FSem

SmartTools C

onnecter

implém

enter

Traducteur «B»

Page 13: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 13

Présentation du langage FSem (Functional Semantic) (1)

Spécifications fonctionnelles

Traduction

Langage de spécification sémantique FSem

Visiteurs Java

Traduction

La même exécution ?

Coq SmartTools

exécution exécution

Page 14: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 14

Présentation du langage FSem (Functional Semantic) (2)

La syntaxe d'un programme FSem est de la forme suivante : Import imports ; Type types ; Use déclarations ; Judgement Judgements ; { chaque jugement définit un ensemble de Règles }

Page 15: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 15

Spécification sémantique du langage Exp en FSem Import PlusInteger ( Integer, Integer ) = Integer ; Type VALEUR = Integer, Bool ; Type Environnement = env ( PairEnvironnement [] ) ; Type PairEnvironnement = pairEnv ( VAR, VALEUR ) ; Use x, y, som : Integer & exp1, exp2 : Expression & b : Bool & env1 : Environnement ; Judgement Eval_Expression ( Environnement , Expression ) =? VALEUR ; Eval_Expression ( env1, add ( exp1 , exp2 ) ) = Cases Eval_Expression ( env1, exp1 ) & Eval_Expression ( env1, exp2 ) of x & y ⇒ som Where som := PlusInteger ( x, y) OR Otherwise & Otherwise ⇒ ERROR EndCases EndRule Eval_Expression ( env1, int ( x ) ) = x EndRule Eval_Expression ( env1, b ) = b EndRule .

Page 16: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 16

Comparaison entre FSem et Coq

Le langage de spécification FSem :

• permet la spécification de sous-typage. • permet la manipulation de sous-typage. • facilite l'écriture des fonctions partielles. • Est déclaratif • L'ordre de spécification des fonctions n'est pas important.

• L'ordre de spécification des type de données n'est pas important.

Page 17: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 17

Preuves et exécution des spécifications FSem

Génération automatique

Spécification syntaxique Coq +

Spécification sémantique fonctionnelle Coq

= «Exp.v»

Génération

Exp.fsem + Exp.ast

Classe et interface Java par opérateur & Interface Java par type «*.java»

+ «AbstractExpVisitor.Java» «DefaultExpVisitor.Java»

«EvalExpVisitor.Java»

Génération

Preuves : Interface Pcoq Exécution : SmartTools

Page 18: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 18

Implémentation

Traducteur

AST SmartTools

Définitions inductives Coq

Traducteur

Spécifications FSem

Spécifications fonctionnelles Coq

Traducteur

Spécifications FSem

Visiteurs Java SmartTools

Page 19: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 19

Traduction de l'AST SmartTools vers définitions inductives Coq

1. Chaque type de l'AST est représenté en Coq par un type inductif Set (ensemble).

AST : Expression = … ; Coq : Inductive Expression : Set := … .

2. Chaque opérateur SmartTools est représenté par un opérateur en Coq.

AST : Expression = add ( Expression gauche, Expression droite ), …… ; Coq : Inductive Expression : Set := add : Expression → Expression → Expression | … .

Page 20: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 20

3. Sous-typage : Opérateurs de coercion. AST : Expression = %Bool , …… ; Coq : Inductive Expression : Set := coer_Expression_Bool : bool → Expression | … .

Traduction automatique

Formalism of Exp is Root is %TOP ; ….. Expression = add ( Expression gauche, Expression droite), %Bool, int as Integer ; ………... End.

(* File Generated by fr.smarttools.vtp.visitorpattern.GenCoqFile *) Mutual Inductive Expression : Set := int : Z → Expression | add : Expression → Expression → Expression | coer_Expression_Bool : bool → Expression …………..

Exp.ast

Exp.v

Page 21: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 21

Conclusion

FSem est : • un langage de spécification sémantique statique et dynamique. • un langage de spécification sémantique exécutable en SmartTools et

prouvable en Coq. • un langage de spécification sémantique fonctionnel permet la spécification

des fonctions partielles.

• un langage déclaratif.

• basé sur les jugements et les règles.

• permet la définition des types de données.

Page 22: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 22

Perspectives

1. Confirmer le langage FSem sur des exemples plus réalistes.

2. Ecrire les deux traducteurs :

• Spécifications FSem vers spécifications fonctionnelles Coq.

• Spécifications FSem vers visiteurs Java SmartTools.

3. Ecrire un traducteur spécifications FSem vers spécifications Coq en utilisant l'approche relationnelle.

Page 23: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 23

4. Evolution du langage : Réduire la taille des spécifications de FSem !!!

Exp. Ajouter l'instruction IF-THEN-ELSE

Ecrire : Eval_Expression ( env1, ifZeroExpression ( exp1 ) ) =

IF Eval_Expression ( env1, exp1 ) = x THEN isZero ( x ) ELSE ERROR EndRule

Au lieu d'écrire :

Eval_Expression ( env1, ifZeroExpression ( exp1 ) ) = Cases Eval_Expression ( env1, exp1 ) of x ⇒ isZero ( x ) OR Otherwise ⇒ ERROR EndCases EndRule

Page 24: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 24

Spécification sémantique du langage Exp en Coq

Require Import ZArith. Inductive VALEUR : Set := coer_VALEUR_Z : Z -> VALEUR | coer_VALEUR_bool : bool -> VALEUR. Inductive Pair_Environnement : Set := pair_Environnement : VAR -> VALEUR -> Pair_Environnement. Inductive Environnement : Set := env : (list Pair_Environnement) -> Environnement. Fixpoint Eval_Expression [env1:Environnement; exp':Expression] : (Exc VALEUR) := Cases exp' of (add exp1 exp2) => Cases (Eval_Expression env1 exp1) (Eval_Expression env1 exp2) of (value (coer_VALEUR_Z x)) (value (coer_VALEUR_Z y)) => [som:=(Zplus x y)] (value VALEUR (coer_VALEUR_Z som)) | _ _ => (error VALEUR) end | (int x) => (value VALEUR (coer_VALEUR_Z x)) | (coer_Expression_bool b1) => (value VALEUR (coer_VALEUR_bool b1)) end.

Page 25: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 25

Actions sémantiques du langage Exp en SmartTools

public java.lang.Object visit(exp.ast.AddTree node, Environnement env1) throws VisitorException { Exp.ast.Expression exp1 = (Exp.ast.Expression) node.getGaucheNode ( ) ; Exp.ast.Expression exp2 = (Exp.ast.Expression) node.getDroiteNode ( ) ; Java.lang.Object Obj1 = visit (exp1, env1) ; Java.lang.Object Obj2 = visit (exp2, env1) ; if ((Obj1 instanceof Java.lang.Integer) && (Obj2 instanceof Java.lang.Integer)) { Java.lang.Integer x = (Java.lang.Integer) Obj1; Java.lang.Integer y = (Java.lang.Integer) Obj2; Java.lang.Integer som = new Java.lang.Integer( x.intValue() + y.intValue() ) ; return som; } else return null; return null;

}

public java.lang.Object visit(exp.ast.IntTree node, Environnement env1) throws VisitorException {

java.lang.Integer x = node.getValue() ; return x ; }

Page 26: CONCEPTION D'UN LANGAGE DE SPECIFICATION …CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE 05 Septembre 2001 3 INTRODUCTION Pour la conception des langages

CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE

Hamoudi Kalla 26

INTRODUCTION Pour la conception d'un langage de programmation qui fournit des programmes :

• Corrects, • Fiables, • Qui respectent des propriétés du langage.

⇒ Spécifier, prouver et vérifier des propriétés de ce langage dans un système de preuves.

Il est intéressant de :

⇒ Disposer d'un environnement de programmation (compilateur, interpréteur,…) pour ce langage qui permet : • D'aider le programmeur à écrire ces programmes. • D'exécuter les programmes avec animation graphique afin de contrôler

l'exécution.