44
Une galante introduction à la notion de machine abstraite en B «Le baron Warseberg, malgré qu’il entretenait la demoiselle Laforest voyait encore les filles de la Varenne. Il puisa dans le flanc de Mlle Dorville ce poison destructeur, qu’il 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 d’une galanterie (entendez une blennorragie) qu’il attrapa, in Le Journal Secret, Revue d’éducation sexuelle, 1et Mai 1938

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

Embed Size (px)

Citation preview

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

Une galante introduction à la notion de machine abstraite en B

«Le baron Warseberg, malgré qu’il entretenait la demoiselle Laforest voyait encore les filles de la Varenne. Il puisa dans le flanc de Mlle Dorville ce poison destructeur, qu’il 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 d’une galanterie (entendez une blennorragie) qu’il attrapa, in Le Journal Secret, Revue d’éducation sexuelle, 1et Mai 1938

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

MACHINEGalanterie

SETSPERSONNE ; SEXE = {masc, fem}; NOM ;METIER

/* Les SETS sont des ensembles qui n’ont 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 à l’aide du produit cartésien et de l’opérateur ensemble des parties (ou encore ensemble des sous-ensembles d’un ensemble).

Ici, le set SEXE est défini en extension. */

Une galante introduction à la notion de machine abstraite en B

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

VARIABLESAPourSexe, AdonnéGalanterieA, ApourMétier, Personnes

DEFINITIONSHomme == APourSexe~ [{masc}] ;

Femme == APourSexe~ [{fem}] ;

/* APourSexe~ [{masc}] dénote l’image relationnelle de l’ensemble singleton {masc} par l’inverse 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

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

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 d’une substitution ( :=).

Ce n’est pas le cas d’une 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

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

INVARIANTPersonnes < : PERSONNE &

APourSexe : Personnes --> SEXE & ADonnéGalanterieA : Homme <-> Femme & ADonnéGalanterieA /\ ADonnéGalanterieA~ = {} & APourMétier : Personnes +-> METIER

/* L’invariant est un prédicat. Tout état du système doit respecter l’invariant. */

/* : est la notation ASCII pour l’appartenance.& est la notation ASCII pour le « et » logique. A < : B est le prédicat d’inclusion de l’ensemble A dans l’ensemble B

Une galante introduction à la notion de machine abstraite en B

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

A --> B est l’ensemble des fonctions totales (on dit en français, applications) de l’ensemble A vers l’ensemble B)

A <-> B est l’ensemble des relations quelconques de A vers B.

A +-> B est l’ensemble des fonctions partielles de l’ensemble A vers l’ensemble B. */

/* L’invariant est un prédicat. Ici il s’agit d’une conjonction de prédicats élémentaires.

Une galante introduction à la notion de machine abstraite en B

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

Personnes < : PERSONNE se paraphrase ainsi : « Personnes est une variable qui prend comme valeurs un sous-ensemble de l’ensemble PERSONNE. »

APourSexe : Personnes --> SEXE se paraphrase ainsi : « APourSexe est une variable qui prend comme valeur un élément de l’ensemble de toutes les fonctions totales (application) de l’ensemble Personnes vers l’ensemble SEXE.En d’autres termes, ApourSexe est une variable qui est une fonction totale (le verbe être est ici utilisé dans le sens de l’appartenance ensembliste) »

ADonnéGalanterieA : Homme <-> Femme se paraphrase ainsi « AdonnéGalanterieA est une variable qui prend comme valeur un élément de l’ensemble de toutes les relations quelconques de l’ensemble Homme vers Femme »

Une galante introduction à la notion de machine abstraite en B

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

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 l’ensemble de toutes les fonctions partielles de Personne vers METIER»*/

Une galante introduction à la notion de machine abstraite en B

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

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

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

Notons que dans une machine abstraite B, on n’a pas le droit d’utiliser le séquencement (noté par ;), lequel est réservé aux étapes suivantes du raffinage. */

/* On doit s’assurer qu’il y a au moins un état qui satisfait l’invariant. */

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

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

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

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

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 l’opération respecte l’invariant.

Une galante introduction à la notion de machine abstraite en B

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

Par exemple, si l’invariant est x < 10, la plus faible précondition pour que l’opération x := x + 1 respecte cet invariant (ce qui s’écrit [x := x + 1] (x < 10) ) est : x + 1 < 10 soit x < 9.

C’est 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

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

/* Si l’on respecte la précondition, l’opération conduira à un état respectant l’invariant.

On a « typé » le paramètre d’entrée de l’opération et on s’assure qu’il reste des personnes qui ne sont pas encore « nées » */

Une galante introduction à la notion de machine abstraite en B

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

THENANY pp WHERE pp : PERSONNE – Personnes THEN Personnes := Personnes \/ {pp} || ApourSexe := ApourSexe \/ {pp |-> Sexe}

/* Le symbole ASCII \/ dénote l’union ensembliste. pp |-> Sexe est un couple. Le symbole ASCII |-> sert à exprimer un couple (maplet). */

/* On fait un choix indéterministe (ANY pp WHERE) dans l’ensemble 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 l’invariant (pour toute personne, on doit avoir enregistré de quel sexe est cette personne). */END ;

END ;

Une galante introduction à la notion de machine abstraite en B

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

NouvelleGalanterie (Pers1, Pers2) =PRE

Pers1 : Personnes & Pers2 : Personnes & Pers2 |-> Pers1 /: AdonnéGalanterieA

THENAdonnéGalanterieA : = AdonnéGalanterieA \/ {Pers1 |->

Pers2}END ;

Une galante introduction à la notion de machine abstraite en B

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

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 l’appartenance ensemblistedom (APourMétier) désigne le domaine de la relation APourMétier */

Une galante introduction à la notion de machine abstraite en B

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

/* Si on n’avait pas la contrainte Pers / : dom (ApourMétier), il faudrait « enlever » le couple (Pers |-> ApourSexe (Pers)) de l’ensemble ApourSexe.

Attention ! Nous venons de faire un abus de langage. On n’enlève pas un élément d’un ensemble. L’ensemble {1, 2, 3} est l’ensemble {1, 2, 3} ad vitam aeternam. Ce n’est pas une variable.

Il aurait fallu dire « substituer à la variable ApourSexe, l’ensemble égal à la valeur actuelle de cette variable moins l’ensemble singleton {(Pers |-> ApourSexe (Pers))}. */

Une galante introduction à la notion de machine abstraite en B

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

THEN

Personnes := Personnes – {Pers} || APourSexe := {Pers} <|| ApourSexe

/* Le symbole ASCII <|| est celui de l’antirestriction de domaine. */

END ;

Une galante introduction à la notion de machine abstraite en B

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

Galants <- QuiAAttrapé =BEGIN

Galants := dom (AdonnéGalanterieA) \/ ran (AdonnéGalanterieA)

ENDEND

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

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

Nouvelle spécificationSi nous modifions la liste des variables et l’invariant en supprimant la variable Personnes, et en ajoutant Personnes dans les définitions :Personnes == dom (ApourSexe), nous devons modifier les opérations

OPERATIONSNouvellePersonne (Sexe) =

PRESexe : 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

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

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

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

SupressionPersonne (Pers) =PRE

Pers : Personnes & Pers / : dom ((AdonnéGalanterieA) \/ ran (AdonnéGalanterieA))

THENApourMétier := {Pers} <||

ApourMétierEND

END

Une galante introduction à la notion de machine abstraite en B

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

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

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

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

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

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

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

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

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

- 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

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

- 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

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

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

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

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

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

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

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

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

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

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

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

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)

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

L'amour des escargots

MACHINELesEscargots

SETSESCARGOT; SEXE = {masc, fem}; ETAT = {vivant, dcd}

VARIABLESescargots, étatEscargot, sexeDe, accouplements

DEFINITIONSmâles == sexeDe~ [{masc}];

femelles == sexeDe~ [{fem}]; couples == (mâles * femelles)

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

L'amour des escargots

INVARIANT

escargots <: ESCARGOT & étatEscargot : escargots --> ETAT & sexeDe : escargots --> SEXE & accouplements : seq (couples)

INITIALISATION

escargots, étatEscargot, sexeDe, accouplements := {}, {}, {}

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

L'amour des escargots

OPERATIONSnaissance (sex) =

PRE sex : SEXE & ESCARGOT - escargots /= {}

THENANY esc WHERE esc : (ESCARGOT - escargots)

THEN escargots := escargots \/ {esc} || sexeDe (esc) := sex END

END;

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

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;

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

L'amour des escargots

coït (mal, fem) =

PREétatEscargot (mal) = vivant & étatEscargot (fem) = vivant & mal : mâles & fem : femelles

THENaccouplements := accouplements <- (mal |-> fem)}

END

END

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

Quelles préconditions ?

MACHINE FacileSETS ETUDIANT; DATEVARIABLES 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. */

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

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 fautajouter & et /: PromoEnCours, mais ceci n'est pas imposé par le respect de l'invariant ! */ THEN PromoEnCours := PromoEnCours \/ {et} END;

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

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;

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

Quelles préconditions ?

SuppressionEtudiant (et) = PRE et : PromoEnCours & et /: dom (EstNéLe) /* on a fait une

remarque plus haut ! */ THEN PromoEnCours := PromoEnCours - {et} ENDEND