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

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

Présentations similaires


Présentation au sujet: "Une galante introduction à la notion de machine abstraite en B «Le baron Warseberg, malgré quil entretenait la demoiselle Laforest voyait encore les filles."— Transcription de la présentation:

1 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

2 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

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

12 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

13 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

14 /* 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

15 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

16 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

17 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

18 /* 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

19 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

20 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

21 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

22 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

23 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

24 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

25 /* 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

26 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

27 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

28 - 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

29 - 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

30 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

31 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

32 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

33 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

34 Bibliographie J.R. Abrial, The B-Book, Assigning programs to meanings, Cambridge University Press, 1996, ISBN : 0 521 49619 5 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

35 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 : 2-7381-0785-0)

36 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)

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

38 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;

39 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;

40 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

41 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. */

42 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;

43 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;

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


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

Présentations similaires


Annonces Google