LIFO DEA INFORMATIQUE OASIS STAGE

Documents pareils
Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Génie Logiciel avec Ada. 4 février 2013

Vérification formelle de la plate-forme Java Card

F. Barthélemy. 17 mai 2005

Java 1.5 : principales nouveautés

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Cours de Programmation 2

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Programmer en JAVA. par Tama

Package Java.util Classe générique

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Arbres binaires de recherche

Cours 1 : La compilation

Analyse de sécurité de logiciels système par typage statique

Traduction des Langages : Le Compilateur Micro Java

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Chapitre 10. Les interfaces Comparable et Comparator 1

Paginer les données côté serveur, mettre en cache côté client

Problèmes liés à la concurrence

ACTIVITÉ DE PROGRAMMATION

Chapitre VI- La validation de la composition.

Langage SQL : créer et interroger une base

Auto-évaluation Programmation en Java

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Machines virtuelles fonctionnelles (suite) Compilation ML Java

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Vérification de programmes et de preuves Première partie. décrire des algorithmes

Olivier Mondet

Java Licence Professionnelle CISII,

OCL - Object Constraint Language

Présentation du langage et premières fonctions

Héritage presque multiple en Java (1/2)

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Étude de l interopérabilité de deux langages de programmation basée sur la machine virtuelle de Java

Objets et Programmation. origine des langages orientés-objet

Gestion mémoire et Représentation intermédiaire

Algorithmique & programmation

Bases de programmation. Cours 5. Structurer les données

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Classes et Objets en Ocaml.

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Générer du code à partir d une description de haut niveau

Cours Informatique Master STEP

Configurer la supervision pour une base MS SQL Server Viadéis Services

Utilisation d objets : String et ArrayList

Gestion de base de données

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

Corrigé des exercices sur les références

Introduction à la programmation concurrente

OpenPaaS Le réseau social d'entreprise

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

as Architecture des Systèmes d Information

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Recherche dans un tableau

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Création et Gestion des tables

TP1 : Initiation à Java et Eclipse

Présentation Windows Azure Hadoop Big Data - BI

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Utilitaires méconnus de StrataFrame

A QUOI SERVENT LES BASES DE DONNÉES?

Compilation (INF 564)

Alfstore workflow framework Spécification technique

Bases de Données relationnelles et leurs systèmes de Gestion

CREATION WEB DYNAMIQUE

Premiers Pas en Programmation Objet : les Classes et les Objets

Examen Médian - 1 heure 30

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Les BASES de DONNEES dans WampServer

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

Création d objet imbriqué sous PowerShell.

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Cours d initiation à la programmation en C++ Johann Cuenin


COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Programmation Par Objets

Le prototype de la fonction main()

Algorithmique et Programmation, IMA

Cours Bases de données 2ème année IUT

Une introduction à Java

Cycle de vie du logiciel. Unified Modeling Language UML. UML: définition. Développement Logiciel. Salima Hassas. Unified Modeling Language

STAGE IREM 0- Premiers pas en Python

KL5121. Pour activer des sorties en fonction de la position d'un codeur

Programmation C++ (débutant)/instructions for, while et do...while

Proposition de sujet de thèse CIFRE EUROCOPTER / LGI2P

Architecture des ordinateurs

Vue d ensemble de Windows PowerShell

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Bases de données avancées

Théorie de la Programmation

Transcription:

LIFO DEA INFORMATIQUE OASIS STAGE CONCEPTION D'UN LANGAGE DE SPECIFICATION SEMANTIQUE EXECUTABLE ET PROUVABLE Présenté par : Dirigé par : Hamoudi KALLA Mme. Isabelle ATTALI 05 Septembre 2001 1

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. Hamoudi Kalla 2

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. 05 Septembre 2001 3

Spécifier, exécuter et prouver des langages de programmation La spécification syntaxique et sémantique Permettant Permettant Outils Permettant Preuves seulement : Isabelle/HOL, PVS. Exécution seulement : AsmGofer, Centaur. Preuves & Exécution : Coq, KIV, Elan. Preuves des propriétés Exécution des programmes Hamoudi Kalla 4

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. Hamoudi Kalla 5

Présentation de l'outil SmartTools La spécification syntaxique «Le langage AST» Les actions sémantiques «visiteurs Java» Permet Permet SmartTools Permet Permet Preuves des propriétés des programmes Exécution des programmes Animation graphique Hamoudi Kalla 6

Le langage AST & l'environnement SmartTools Hamoudi Kalla 7

Visiteurs SmartTools «Actions Sémantiques» public abstract class AbstractExpVisitor extends Visitor { abstract public java.lang.object visit (exp.ast.addtree node, java.lang.object params) throws VisitorException ; } Automatique SmartTools 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; } } Programmeur 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 ) ; } } Hamoudi Kalla 8

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 Hamoudi Kalla 9

b. Spécification sémantique en Coq Approche Relationnelle 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)) ). Approche Fonctionnelle 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. Hamoudi Kalla 10

Connexion : SmartTools <-> Coq Preuves des propriétés des programmes SmartTools Connecter SmartTools au système de preuves Coq. SmartTools Connexion Système de preuves Coq Deux solutions sont proposées pour connecter SmartTools au système de preuves Coq. Hamoudi Kalla 11

Solution 1. Spécifications sémantiques écrites en Coq Traducteur «A» Traducteur «B» Visiteurs SmartTools 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. Langage de spécifications sémantiques FSem implémenter Connecter Système de preuves Coq SmartTools Hamoudi Kalla 12

Présentation du langage FSem (Functional Semantic) (1) Langage de spécification sémantique FSem Traduction Traduction Coq Spécifications fonctionnelles SmartTools Visiteurs Java exécution La même exécution? exécution Hamoudi Kalla 13

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 } Hamoudi Kalla 14

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. Hamoudi Kalla 15

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. Hamoudi Kalla 16

Preuves et exécution des spécifications FSem Exp.fsem + Exp.ast Génération Génération automatique Génération Spécification syntaxique Coq + Spécification sémantique fonctionnelle Coq = «Exp.v» Preuves : Interface Pcoq Classe et interface Java par opérateur & Interface Java par type «*.java» + «AbstractExpVisitor.Java» «DefaultExpVisitor.Java» «EvalExpVisitor.Java» Exécution : SmartTools Hamoudi Kalla 17

Implémentation AST SmartTools Spécifications FSem Spécifications FSem Traducteur Traducteur Traducteur Définitions inductives Coq Spécifications fonctionnelles Coq Visiteurs Java SmartTools Hamoudi Kalla 18

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. Hamoudi Kalla 19

3. Sous-typage : Opérateurs de coercion. AST : Expression = %Bool, ; Coq : Inductive Expression : Set := coer_expression_bool : bool Expression. Formalism of Exp is Root is %TOP ;.. Expression = add ( Expression gauche, Expression droite), %Bool, int as Integer ;... End. Exp.ast Traduction automatique (* 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.v Hamoudi Kalla 20

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. Hamoudi Kalla 21

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. Hamoudi Kalla 22

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 Hamoudi Kalla 23

Require Import ZArith. Spécification sémantique du langage Exp en Coq 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. Hamoudi Kalla 24

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 ; } Hamoudi Kalla 25

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. Hamoudi Kalla 26