Une galante introduction à la notion de machine abstraite en B «Le baron Warseberg, malgré quil entretenait la demoiselle Laforest voyait encore les filles.

Slides:



Advertisements
Présentations similaires
Le langage Z Pr ZEGOUR DJAMEL EDDINE
Advertisements

Utiliser les calculatrices en classe. 1. Introduction et choix de loutil Deux stratégies dutilisation sont possibles ; elles peuvent même être utilisées.
Spécification et qualité du logiciel
Algorithmique Résume.
Plan : Définition L’affectation Les entrées Les sorties exercices
Régine Laleau Centre d'Étude et de Recherche en Informatique du CNAM
Logique booléenne.
Système formel Nous avons introduit : signes de variables (x, y, z, …), de constantes (0, 1), d’opérations (+, ), de relations (=, ) Axiomes : ce sont.
Nicolas Bourbaki.
INTRODUCTION.
Les contraintes d’integrité
Les bases de l’Algorithmique
Structures de données linéaires
OCaml - Les listes L3 MI.
Eléments d ’algèbre relationnelle
Algorithmique et structure de données
Initiation à la conception de systèmes d'information
Programmation logique Logique des prédicats du premier ordre
CHAPITRE 1 LES SYSTÈMES D' INÉQUATIONS
Chap 4 Les bases de données et le modèle relationnel
Calcul Relationnel Chapitre 4, Section 4.3.
Algorithmique et Programmation
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Ensembles Définition d’un ensemble. Opérations sur les ensembles. Accès, suppression et ajout d’éléments d’un ensemble. Fonctions permettant de manipuler.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Semaine #1 INF130 par Frédérick Henri.
IFT Complexité et NP-complétude
Programmation linéaire en nombres entiers Algorithme de la subdivision successive («Branch and Bound Algorithm»)
1 CSI3525: Concepts des Languages de Programmation Notes # 4: Description Semantique des Languages.
CSI3525: Concepts des Languages de Programmation
Chapitre 3: Les équations et les inéquations
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Calcul Relationnel Chapitre 4, Section 4.3.
Géométrie analytique Distance entre deux points.
Les fonctions leurs propriétés et.
Programmation logique Le Langage PROLOG
Modélisation des opérations Spécifier les transformations détat que lon attend des services de la machine Létat dune machine entièrement déterminée par.
CHAPITRE 2 LES SITUATIONS FONCTIONNELLES
Programmation linéaire en nombres entiers : les méthodes de troncature
Modélisation des données Un langage pour décrire  INVARIANT, PRE-CONDITION, EXPRESSION Concepts et notations utilisés  Logique  Ensembles  Relations.
Jacques Nicolas INRIA /IRISA Rennes
Spécification de programmes et de systèmes
Programmation fonctionnelle Lambda-calcul
La Logique du premier ordre LPO
INTRODUCTION.
MATHÉMATIQUES DISCRÈTES Chapitre 1 (Section 4)
Les fonctions Les propriétés.
LOGIQUE MATHEMATIQUE et ENSEMBLES
Un survol du language C.
REPRESENTATION DE L’INFORMATION
Structures de contrôle
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Réaliser par: Sadok Amel Cheboui hassiba
Les Fonctions et leurs propriétés.
CHAPITRE 1: LES FONCTIONS.
Introduction et Généralités sur l’Algorithmique
Leçon 4 NOTION DE FONCTION Fabienne BUSSAC.
Conception Formelle en PVS Master 2 ISC Chef de Projet: M. Pierre Castéran Présenté par: Roland Atoui Xavier Dumas Sébastien Jardel Laurent Vendredi.
Relations et fonctions
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Résoudre des équations algébriques
Systèmes formels 1. Définition d'un SF Morphologie Théorie propre
Scripts et fonctions Instructions de contrôle
Chapitre 4 La représentation des nombres.
LOGIQUE ET PROGRAMMATION LOGIQUE
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Objets et Actions Élémentaires.
Les fonctions Les propriétés. Chaque fonction possède ses propres caractéristiques: Ainsi l’analyse de ces propriétés permet de mieux cerner chaque type.
Introduction au langage C
Transcription de la présentation:

Une galante introduction à la notion de machine abstraite en B «Le baron Warseberg, malgré quil entretenait la demoiselle Laforest voyait encore les filles de la Varenne. Il puisa dans le flanc de Mlle Dorville ce poison destructeur, quil procura à Mlle Laforest, qui de son côté en fit présent à M. Saimson, mousquetaire, avec qui elle greluchonait, lequelle par la même voie en fit cadeau à Mlle Ricourt, de la Comédie Italienne, qui, sans façon la voitura à M. de la Ferté, intendant des Menus Plaisirs, qui en gratifia Mlle Rozetti, qui, de même, me la souffla… » Mémoires du chevalier de Fontainieu qui raconte les origines dune galanterie (entendez une blennorragie) quil attrapa, in Le Journal Secret, Revue déducation sexuelle, 1et Mai 1938

MACHINE Galanterie SETS PERSONNE ; SEXE = {masc, fem}; NOM ;METIER /* Les SETS sont des ensembles qui nont aucun élément en commun. On les appelle aussi « ensembles de base ». ensembles finis et non vides. On ne peut écrire des énoncés comme PERSONNE \/ SEXE ou encore PERSONNE := PERSONNE – {pp}. Les SETS sont en quelque sorte des constantes. On construit des ensembles à laide du produit cartésien et de lopérateur ensemble des parties (ou encore ensemble des sous- ensembles dun ensemble). Ici, le set SEXE est défini en extension. */ Une galante introduction à la notion de machine abstraite en B

VARIABLES APourSexe, AdonnéGalanterieA, ApourMétier, Personnes DEFINITIONS Homme == APourSexe~ [{masc}] ; Femme == APourSexe~ [{fem}] ; /* APourSexe~ [{masc}] dénote limage relationnelle de lensemble singleton {masc} par linverse de la fonction APourSexe. Le symbole ~ dénote la relation inverse (on dit aussi réciproque). Ces définitions utilisent la spécification de la fonction APourSexe qui est donnée dans l'invariant (voir ci-dessous). Une galante introduction à la notion de machine abstraite en B

Le symbole == dénote en ASCI une définition. A ne pas confondre avec le symbole = dénotant le prédicat dégalité. */ /* Les définitions sont ce que les informaticiens appellent des « macro » (macro-instructions). Ce ne sont pas des variables. Une variable peut se trouver en partie gauche dune substitution ( :=). Ce nest pas le cas dune définition. Une définition est un nom de morceau de texte de spécifications. */ Une galante introduction à la notion de machine abstraite en B

INVARIANT Personnes < : PERSONNE & APourSexe : Personnes --> SEXE & ADonnéGalanterieA : Homme Femme & ADonnéGalanterieA /\ ADonnéGalanterieA~ = {} & APourMétier : Personnes +-> METIER /* Linvariant est un prédicat. Tout état du système doit respecter linvariant. */ /* : est la notation ASCII pour lappartenance. & est la notation ASCII pour le « et » logique. A < : B est le prédicat dinclusion de lensemble A dans lensemble B Une galante introduction à la notion de machine abstraite en B

A --> B est lensemble des fonctions totales (on dit en français, applications) de lensemble A vers lensemble B) A B est lensemble des relations quelconques de A vers B. A +-> B est lensemble des fonctions partielles de lensemble A vers lensemble B. */ /* Linvariant est un prédicat. Ici il sagit dune conjonction de prédicats élémentaires. Une galante introduction à la notion de machine abstraite en B

Personnes < : PERSONNE se paraphrase ainsi : « Personnes est une variable qui prend comme valeurs un sous-ensemble de lensemble PERSONNE. » APourSexe : Personnes --> SEXE se paraphrase ainsi : « APourSexe est une variable qui prend comme valeur un élément de lensemble de toutes les fonctions totales (application) de lensemble Personnes vers lensemble SEXE. En dautres termes, ApourSexe est une variable qui est une fonction totale (le verbe être est ici utilisé dans le sens de lappartenance ensembliste) » ADonnéGalanterieA : Homme Femme se paraphrase ainsi « AdonnéGalanterieA est une variable qui prend comme valeur un élément de lensemble de toutes les relations quelconques de lensemble Homme vers Femme » Une galante introduction à la notion de machine abstraite en B

ADonnéGalanterieA /\ ADonnéGalanterieA~ = {} se paraphrase ainsi « si une personne p1 donne galanterie à une personne p2 alors p2 ne donne pas galanterie à p1. Ceci permet aussi d'exprimer que l'on ne se donne pas galanterie à soi-même.» APourMétier : Personnes +-> METIER se paraphrase ainsi « ApourMétier est une variable qui prend comme valeur un élément de lensemble de toutes les fonctions partielles de Personne vers METIER » */ Une galante introduction à la notion de machine abstraite en B

INITIALISATION ApourSexe, AdonnéGalanterieA, ApourMétier, Personnes := {},{},{}, {} /* := est le symbole de la substitution simple. Ici on fait quatre substitutions en parallèle. On pouvait aussi écrire en B, ainsi : ApourSexe := {} || AdonnéGalanterieA := {} || ApourMétier := {} || Personnes := {} Une galante introduction à la notion de machine abstraite en B

Notons que dans une machine abstraite B, on na pas le droit dutiliser le séquencement (noté par ;), lequel est réservé aux étapes suivantes du raffinage. */ /* On doit sassurer quil y a au moins un état qui satisfait linvariant. */ /* Voici un état du système décrit par le texte fourni */ Personnes = {Warseberg, Dorville, Lafores, Saimson, Ricourt, de la Ferté, Rozetti, Fontainieu} ApourSexe = {(Warseberg, masc), (Dorville, fem), (Laforest, fem), (Saimson, masc), (Ricourt, fem), (de la Ferté, masc), (Rozetti, fem), (Fontainieu, masc)} Une galante introduction à la notion de machine abstraite en B

AdonnéGalanterieA = { Dorville, Warseberg), (Warseberg, Laforest), (Laforest, Saimson), (Saimson, Ricourt), (Ricourt, de la Ferté), (de la Ferté, Rozetti), (Rozetti, Fontainieu)} ApourMétier = { (Saimson, mousquetaire), (Ricourt, comédienne), (de la Ferté, intendant des Menus Plaisirs), (Fontainieu, chevalier)} */ Une galante introduction à la notion de machine abstraite en B

OPERATIONS NouvellePersonne (Sexe) = PRE Sexe : SEXE & PERSONNE – Personnes /= {} /* Le signe = ici ne dénote pas le prédicat dégalité mais une définition. */ /* La précondition est la plus faible précondition pour que lopération respecte linvariant. Une galante introduction à la notion de machine abstraite en B

Par exemple, si linvariant est x < 10, la plus faible précondition pour que lopération x := x + 1 respecte cet invariant (ce qui sécrit [x := x + 1] (x < 10) ) est : x + 1 < 10 soit x < 9. Cest bien la plus faible (x = 0 par exemple sera bien plus forte (serait plus exigeante que ce qui est suffisant)).*/ Une galante introduction à la notion de machine abstraite en B

/* Si lon respecte la précondition, lopération conduira à un état respectant linvariant. On a « typé » le paramètre dentrée de lopération et on sassure quil reste des personnes qui ne sont pas encore « nées » */ Une galante introduction à la notion de machine abstraite en B

THEN ANY pp WHERE pp : PERSONNE – Personnes THEN Personnes := Personnes \/ {pp} || ApourSexe := ApourSexe \/ {pp |-> Sexe} /* Le symbole ASCII \/ dénote lunion ensembliste. pp |-> Sexe est un couple. Le symbole ASCII |-> sert à exprimer un couple (maplet). */ /* On fait un choix indéterministe (ANY pp WHERE) dans lensemble des personnes non encore « nées ». On spécifie deux substitutions en parallèle. Si on ne faisait pas la substitution ApourSexe := ApourSexe \/ {pp |-> Sexe}, on ne respecterait pas linvariant (pour toute personne, on doit avoir enregistré de quel sexe est cette personne). */ END ; Une galante introduction à la notion de machine abstraite en B

NouvelleGalanterie (Pers1, Pers2) = PRE Pers1 : Personnes & Pers2 : Personnes & Pers2 |-> Pers1 /: AdonnéGalanterieA THEN AdonnéGalanterieA : = AdonnéGalanterieA \/ {Pers1 |-> Pers2} END ; Une galante introduction à la notion de machine abstraite en B

SupressionPersonne (Pers) = PRE Pers : Personnes & Pers / : dom (APourMétier) & Pers /: (dom (AdonnéGalanterieA) \/ ran (AdonnéGalanterieA)) /* / : est le symbole ASCII pour la négation de lappartenance ensembliste dom (APourMétier) désigne le domaine de la relation APourMétier */ Une galante introduction à la notion de machine abstraite en B

/* Si on navait pas la contrainte Pers / : dom (ApourMétier), il faudrait « enlever » le couple (Pers |-> ApourSexe (Pers)) de lensemble ApourSexe. Attention ! Nous venons de faire un abus de langage. On nenlève pas un élément dun ensemble. Lensemble {1, 2, 3} est lensemble {1, 2, 3} ad vitam aeternam. Ce nest pas une variable. Il aurait fallu dire « substituer à la variable ApourSexe, lensemble égal à la valeur actuelle de cette variable moins lensemble singleton {(Pers |-> ApourSexe (Pers))}. */ Une galante introduction à la notion de machine abstraite en B

THEN Personnes := Personnes – {Pers} || APourSexe := {Pers} <|| ApourSexe /* Le symbole ASCII <|| est celui de lantirestriction de domaine. */ END ; Une galante introduction à la notion de machine abstraite en B

Galants <- QuiAAttrapé = BEGIN Galants := dom (AdonnéGalanterieA) \/ ran (AdonnéGalanterieA) END /* dom (R) représente le domaine de la relation RA. ran (R) représente le codomaine de la relation R. Le symble ASCII \/ est celui de l'union ensembliste. */ Une galante introduction à la notion de machine abstraite en B

Nouvelle spécification Si nous modifions la liste des variables et linvariant en supprimant la variable Personnes, et en ajoutant Personnes dans les définitions : Personnes == dom (ApourSexe), nous devons modifier les opérations OPERATIONS NouvellePersonne (Sexe) = PRE Sexe : SEXE & PERSONNE – Personnes /= {} THEN ANY pp WHERE pp : PERSONNE – Personnes THEN ApourSexe := ApourSexe \/ {pp |-> Sexe} END ; Une galante introduction à la notion de machine abstraite en B

NouvelleGalanterie (Pers1, Pers2) = PRE Pers1 : Personnes & Pers2 : Personnes & Pers2 |-> Pers1 :/ AdonnéGalanterieA THEN AdonnéGalanterieA : = AdonnéGalanterieA \/ {Pers1 |-> Pers2} END ; Une galante introduction à la notion de machine abstraite en B

SupressionPersonne (Pers) = PRE Pers : Personnes & Pers / : dom ((AdonnéGalanterieA) \/ ran (AdonnéGalanterieA)) THEN ApourMétier := {Pers} <|| ApourMétier END Une galante introduction à la notion de machine abstraite en B

Quelques opérations supplémentaires : Opération donnant l'ensemble des personnes à l'origine de la "galanterie" d'une personne donnée /* Voici une opération ayant paramètre d'entrée et paramètre de sortie.*/ /* ADonnéGalanterieA+ est la fermeture transitive et non réflexive d'une relation. Exemple : soit la relation R = {(1,2), (2, 3), (3, 4)} R2= R ; R = {(1, 3), (3, 4)} Le symbole ; est celui de la composition "en avant". R3 = R2; R = {(1, 4)} R4= R3 ; R = {(1, 4)}. On a obtenu la fermeture transitive. Ici elle n'est pas réflexive : on n'a pas de couple dont la partie gauche est égale à la partie droite. */ Une galante introduction à la notion de machine abstraite en B

/* Remarquons que les paramètres d'entrée sont typés dans la précondition. Mais que ce n'est pas le cas des paramètres de sortie. On ne peut vérifier leur type lors de l'appel de l'opération. Leur typage est fourni après le THEN. */ ALOrigine <-- QuiALOrgine(pers) = PRE pers : ran (ADonnéGalanterie) THEN ALOrigine := (ADonnéGalanterieA+)~ [{pers}] END Une galante introduction à la notion de machine abstraite en B

Opération donnant l'ensemble des femmes ayant transmis la "galanterie" /* Le symbole ASCII <| est celui de la restriction du domaine d'une relation. */ Fem <-- ATransmis = BEGIN Fem := dom (Femme <| ADonnéGalanterieA) END Une galante introduction à la notion de machine abstraite en B

Et la suite ? Avant d'aller plus loin, remarquons que : Dans une spécification abstraite : - on peut avoir de l'indéterminisme. Nous en avons eu un exemple ici avec le choix indéterministe dans un ensemble. Normal ! on ne veut pas tout dire dès le début. On laisse des décisions pour la suite de la conception. Une galante introduction à la notion de machine abstraite en B

- on a des préconditions Normal ! quand on spécifie par exemple une opération de division, on veut que ce soit une fonction. Et la fonction division ne donne pas comme résultat : "je ne peux pas diviser" ! Propos étonnant ?! Non, voyez vos livres de mathématiques. Mais vous savez qu'une fonction a un "domaine de définition". La précondition s'assure que l'on est bien dans le domaine de définition. Une galante introduction à la notion de machine abstraite en B

- on n'a pas de séquencement Normal ! on veut être abstrait et ne pas être contraint par le séquencement (qui va nous être imposé par la suite par l'ordinateur). Si on veut rester proche de l'expression du besoin par le client, il ne faut pas être obligé de choisir, dès la spécification, un séquencement là où c'est hors de propos. Une galante introduction à la notion de machine abstraite en B

Par la suite : On raffine une machine abstraite. Le raffinage consiste à se rapprocher d'une implantation. Le raffinage se fait "à signature" identique. C'est-à- dire que l'on ne change pas les paramètres des opérations. Quand on écrit une machine qui raffine une autre machine, dans l'invariant de la nouvelle machine, on relie les variables de la machine abstraite aux variables de la machine concrète (on appelle cet invariant, invariant de collage (gluing invariant)). Une galante introduction à la notion de machine abstraite en B

On introduit : - le séquencement - on diminue l'indéterminisme - on affaiblit les préconditions On a des machines dites REFINEMENT Une galante introduction à la notion de machine abstraite en B

jusqu'à arriver à des machines dites IMPLEMENTATION dans lesquelles : - il n'y aura plus de parallèlisme (on ne trouvera plus le symbole ||) - on trouvera la séquence (;) et la boucle - il n'y aura plus de préconditions dans le code des opérations A chaque étape, il faudra prouver que le raffinage est correct. Une galante introduction à la notion de machine abstraite en B

Donc, en B, on distingue deux ensembles de preuves : - les preuves d'opération (qui sont faites à un niveau d'abstraction) - les preuves de raffinage (qui portent sur la relation de raffinage entre une opération abstraite et une opération plus concrète). Une galante introduction à la notion de machine abstraite en B

Bibliographie J.R. Abrial, The B-Book, Assigning programs to meanings, Cambridge University Press, 1996, ISBN : H. Habrias (J.Y. Lafaye, M.L. Potet, D. Bert) Spécification formelle avec B, Hermes, 2000 Une galante introduction à la notion de machine abstraite en B

L'amour des escargots "Chez les escargots, un même individu possède les deux appareils reproducteurs mâle et femelle. Ce qui ne signifie pas que l'individu se féconde lui-même : tantôt femelle, tantôt mâle, il aura toujours recours à l'autre pour accomplir la fécondation. Cet hermaphrodisme vrai peut se rencontrer exceptionnellement chez l'homme qui présente plus fréquemment des cas de pseudo-hermaphrodisme dans lesquels l'apparence somatique d'un sexe recouvre la présence inexprimée de l'autre. » (Luc Ferry, Jean-Didier Vincent, Qu'est-ce que l'homme, sur les fondamentaux de la biologie et de la philosophie, Odile Jacob, 2000, ISBN : )

L'amour des escargots MACHINE LesEscargots SETS ESCARGOT; SEXE = {masc, fem}; ETAT = {vivant, dcd} VARIABLES escargots, étatEscargot, sexeDe, accouplements DEFINITIONS mâles == sexeDe~ [{masc}]; femelles == sexeDe~ [{fem}]; couples == (mâles * femelles)

L'amour des escargots INVARIANT escargots <: ESCARGOT & étatEscargot : escargots --> ETAT & sexeDe : escargots --> SEXE & accouplements : seq (couples) INITIALISATION escargots, étatEscargot, sexeDe, accouplements := {}, {}, {}

L'amour des escargots OPERATIONS naissance (sex) = PRE sex : SEXE & ESCARGOT - escargots /= {} THEN ANY esc WHERE esc : (ESCARGOT - escargots) THEN escargots := escargots \/ {esc} || sexeDe (esc) := sex END END;

L'amour des escargots changementDeSexe (esc) = PRE esc : escargots & étatEscargot (esc) = vivant THEN IF sexeDe (esc) = masc THEN sexeDe(esc) := fem ELSE sexeDe (esc) := masc END END;

L'amour des escargots coït (mal, fem) = PRE étatEscargot (mal) = vivant & étatEscargot (fem) = vivant & mal : mâles & fem : femelles THEN accouplements := accouplements fem)} END

Quelles préconditions ? MACHINE Facile SETS ETUDIANT; DATE VARIABLES PromoEnCours <: ETUDIANT & EstNéLe : PromoEnCours +-> DATE /* remarquez qu'on peut avoir un étudiant dans PromoEbnCours pour lequel on n'a pas enregistré la date de naissance. Dit autrement, il n'est pas obligatoire d'enregistrer, pour chaque étudiant, sa date de naissance. */

Quelles préconditions ? INITIALISATION PromoEnCours := {} || EstNéLe := {} OPERATIONS AjoutEtudiant (et) = PRE et : ETUDIANT /* nous avons mis la plus faible précondition. Mais si vous voulez indiquer que l'on ne doit exécuter cette opération que lorsqu'elle modifie l'état du système, alors il faut ajouter & et /: PromoEnCours, mais ceci n'est pas imposé par le respect de l'invariant ! */ THEN PromoEnCours := PromoEnCours \/ {et} END;

Quelles préconditions ? AjoutDateNaissance (et, dat) = PRE et : ETUDIANT & et /: dom (EstNéLe) & dat : DATE /* on a fait une remarque plus haut ! */ THEN EstNéLe := EstNéLe \/ { et |-> dat} END;

Quelles préconditions ? SuppressionEtudiant (et) = PRE et : PromoEnCours & et /: dom (EstNéLe) /* on a fait une remarque plus haut ! */ THEN PromoEnCours := PromoEnCours - {et} END