• Aucun résultat trouvé

La méthode B Machines Abstraites

N/A
N/A
Protected

Academic year: 2022

Partager "La méthode B Machines Abstraites"

Copied!
9
0
0

Texte intégral

(1)

La méthode B Machines Abstraites

Motivation : modulariser et décomposer les programmes.

Forme : une structure avec plusieurs composantes.

Propriétés : bonne construction.

Composition de machines.

1

Substitutions de base

Substitution Utilisation Comportement x:=E [x:=E]P [x:=E]P

x, y:=E, F [x, y:=E, F]P [z:=F][x:=E][y:=z]P (z fraîche) S1;S2 [S1;S2]P [S1][S2]P

skip [skip]P P

Q=⇒S [Q=⇒S]P Q⇒[S]P

Q|S [Q |S]P Q∧ [S]P

S1 []S2 [S1 [] S2]P [S1]P ∧ [S2]P

@z.S [@z.S]P ∀ z.[S]P

Quelques diérences...

Attitude défensive:

Q=⇒S

La propriétéQ est vériée avant d'exécuter le programme S.

Attitude oensive:

Q |S

La propriétéQ n'est pas vériée avant d'exécuter le programme S, on fait conance au programmeur.

(2)

Construction de programmes

SELECT QTHENS END Q=⇒S PRE QTHENS END Q |S

CHOICE S1 OR S2. . . Sn END S1 []. . .[] Sn

IF QTHEN S1 ELSES2 END (Q=⇒S1) [] (not(Q) =⇒S2) IF QTHEN S END (Q=⇒S) [] (not(Q) =⇒skip)

4

L'exemple de la tondeuse

Un enrouleur de câble électrique porte une étiquettePuissance max. 2000 W avec câble déroulé, 1000 W avec câble enroulé.

La tondeuse électrique de 1200 W est utilisée avec le câble enroulé.

Le câble a fondu. Il ne disposait pas d'un composant testant si le câble était déroulé/enroulé.

Lorsque le fabricant a conçu l'enrouleur il a démontré qu'il fonctionne correctement si l'on respecte les conditions d'emploi sur l'étiquette. Cette démonstration a été faite une fois.

C'est ensuite à l'utilisateur de ne faire appel à l'enrouleur qu'en respectant les conditions d'emploi. Ces conditions d'emploi ne peuvent être vériées dans le code de l'opération.

5

Construction de programmes (suite)

VAR x INS END @x.S

ANY x WHEREQ THENS END @x.(Q=⇒S)

x:∈E ANYy WHERE y∈E THENx:=y END n'importe quel objet deE

x:P @y.([x:=y]P ⇒x:=y)

n'importe quel objet qui vérie P x:=bool(P) IF P THEN true ELSE false END

Exemples de calcul

[x:=z+ 1;y:=x+z](y∈0..5) = [z :=x+z][x:=z+ 1][y:=z](y∈0..5) = [z :=x+z][x:=z+ 1](z ∈0..5) =

[z :=x+z](z ∈0..5) = (x+z∈0..5)

(3)

Exemples de calcul

[x:=z+ 1][y:=x+z](y∈0..5) = [x:=z+ 1]([y:=x+z](y ∈0..5)) = [x:=z+ 1](x+z∈0..5) = z+ 1 +z∈0..5

8

Exemples de calcul

[IF QTHENS END]R =

[(Q=⇒S) [] (not(Q) =⇒skip)]R = [Q=⇒S]R∧[not(Q) =⇒skip]R = (Q⇒[S]R)∧(not(Q)⇒[skip]R) = (Q⇒[S]R)∧(not(Q)⇒R)

9

Exemples de calcul

[IF QTHENS1 ELSES2 END]R = [(Q=⇒S1) [] (not(Q) =⇒S2)]R = [Q=⇒S1]R∧ [not(Q) =⇒S2]R = (Q⇒[S1]R)∧ (not(Q)⇒[S2]R)

Exemples de calcul

[x:∈E]R =

[ANYy WHEREy ∈E THENx:=y END]R = [@y.(y ∈E =⇒x:=y)]R =

∀ y.[y∈E=⇒x:=y]R =

∀ y.(y∈E⇒[x:=y]R) =

(4)

Opérations

Routine :opn=def S

Procédure : opn(var) =def S

Fonction sans paramètre :var←opn=def S

Fonction avec paramètre :var1 ←opn(var2) =def S

12

Exemple d'utilisation Calculer la moyenne de4 entiers.

On se donne d'abord :

m←moyenne(a, b) =def m:= (a+b)/2

Ensuite

m←moyenne4(a, b, c, d) =def VARtmp1, tmp2IN tmp1←moyenne(a, b);

tmp2←moyenne(c, d);

m←moyenne(tmp1, tmp2);

13

Exemple de modélisation

Allouer un mot dans une mémoire et retourner l'adresse de l'emplacement alloué s'il y a de la place en mémoire.

ADRESSES ensemble abstrait d'adresses memoire ⊆ADRESSES les adresses de la mémoire libres ⊆ memoire les adresses libres de la mémoire null ∈ADRESSES une adresse particulière

null /∈ memoire null n'est pas une adresse de la mémoire

Solution 1

r←allouer= PRElibres̸={}THEN

ANY v wherev ∈libres THEN libres:=libres− {v} ||r:=v END

END

Avant d'allouer un mot il faudra donc vérier la précondition :

b←paspleine= (b:= bool(libres̸={}))

(5)

Solution 2

r←allouer= IFlibres̸={}THEN

ANY v wherev ∈libres THEN libres:=libres− {v} || r:=v END

ELSEr:=null END

Pas de vérication dans ce cas, si l'adresse de retour estnull, alors la mémoire est pleine.

16

Machine de base

MACHINEnom nom de la machine VARIABLESx1, ..., xn noms des variables

INVARIANTI propriété

INITIALISATIONS0 substitution

OPERATIONS substitutions

var1←op(var2) =def S;

...

END

17

Exemple de machine MACHINE point

VARIABLESx, y

INVARIANTx∈(0. . .1024) ∧ y∈(0. . .768) INITIALISATIONx, y:= 0,0

OPERATIONS

v1←abs=def v1 :=x;v2←ord=def v2 :=y;

move(dx, dy) =def

PREx+dx≤1024 ∧ y+dy≤768 THEN(x, y) := (x+dx, y+dy) END END

Conditions

Assurer l'appartenance des variables Variables distinctes

Invariant satisfait dans l'état initial

Invariant préservé par chaque opération (sous contraintes d'une pré-condition)

(6)

Dans notre exemple

cas initial :0∈(0. . .1024) ∧ 0∈(0. . .768) abs :x∈(0. . .1024) ∧ y∈(0. . .768)⇒

∀ v1.[v1 :=x]x∈(0. . .1024) ∧ y ∈(0. . .768).

ord :x∈(0. . .1024) ∧ y∈(0. . .768)⇒ x∈(0. . .1024) ∧ ∀ v2.[v2 :=y]y∈(0. . .768).

move :x∈(0. . .1024) ∧ y ∈(0. . .768)⇒

∀ (dx, dy).x+dx≤1024 ∧ y+dy≤768⇒

[x, y:=x+dx, y+dy] (x∈(0. . .1024) ∧ y∈(0. . .768))

20

Un autre exemple de machine

Implémenter deux feux de couleur rouge,jaune,vert tels qu'ils sont tout les deux jaune simultanément ou bien l'un d'entre eux est rouge et pas l'autre.

21

MACHINE feuxcouleur

SETS coul ={ rouge,jaune,vert} ABSTRACT_CONSTANTS suiv

PROPERTIES

suiv : coul→coul

suiv = {(rouge , vert), (vert, jaune), (jaune, rouge) } VARIABLESf euA, f euB

INVARIANT

feuA∈coul ∧feuB∈ coul ∧

(feuA=jaune ∧feuB=jaune) or (feuA=rouge ∧feuB̸=rouge) or (feuA̸=rouge∧ feuB=rouge)

INITIALISATION

OPERATIONS MiseEnService= PRE

feuA = jaune∧feuB = jaune THEN

ANY fa, fb WHERE fa∈ coul∧fb ∈ coul∧

((fa = rouge∧ fb ̸=rouge) or (fa̸=rouge ∧fb = rouge)) THEN feuA, feuB := fa, fb END

END ;

(7)

ChangerFeux=

PRE

(feuA = rouge ∧feuB̸=rouge) or (feuA ̸= rouge∧feuB = rouge) THEN

ANY fa, fb WHERE fa∈ coul∧fb ∈ coul∧

( (fa, fb) = (suiv(feuA) , feuB) or (fa, fb) = (feuA , suiv(feuB)) or (fa, fb) = (suiv(feuA), suiv(feuB)) ) ∧

((fa = rouge∧ fb ̸=rouge) or (fa̸=rouge ∧fb = rouge)) THEN feuA,feuB := fa,fb END

END ;

24

Spécication vs implantation

On peut ne pas implanter complètement une opération, les

machines servent alors à décrire des spécications. Par exemple, on spécie une opération qui renvoie l'abscisse la plus petite d'un ensemble ni de points.

px←ppabs(E) =def

PREE :P((0. . .1024)×(0. . .768)) ∧ E ̸= {}

THEN ANYx

WHERE ∃ y.(x, y)∈E ∧ ∀ (x, y).(x, y)∈E ⇒x≤x THEN px:=x END

END

25

Ensembles, constantes et propriétés

Les modélisations manipulent souvent desensembles qui restent non spéciés jusqu'à la phase d'implémentation.

Les constantessont des valeurs particulières qui restent symboliques jusqu'à la phase d'implémentation.

MACHINE Mariages SETS

PERSS ;

STATUT = {marie,celibataire};

SEXE= {homme,femme} CONSTANTS max_pers PROPERTIES

max_pers ∈NAT - {0} ∧ card(PERSS) = max_pers VARIABLESpers, sexe, statut

INVARIANT

pers⊆PERSS ∧sexe:pers →SEXE∧ statut:pers →STATUT

(8)

INITIALISATION

pers, sexe, statut:={},{},{}

OPERATIONS ajout(s, m) =def

PREs∈SEXE∧ m∈STATUT ∧PERSS −pers ̸={}

THEN

ANYx WHERE x∈PERSS −pers

THENpers:=pers∪ {x} ||sexe(x) :=s||statut(x) :=m END END

28

Initialisation possible

On peut vouloir spécier que l'ensemble de personnes est un ensemble quelconque de femmes célibataires :

INITIALISATION pers:∈P(P ERSS)||

sexe:= pers→ { femme} ||

statut:= pers→ { celibataire}

29

Machine paramétrée

MACHINEArray(INDEX,VAL) VARIABLEStable

INVARIANTtable:INDEX↛VAL INITIALISATIONtable={}

OPERATIONS

enter(i, v) =def PREi∈ INDEX∧v ∈VAL THENtable(i) :=v END;

v←access(i) =def PREi∈INDEX THENv:=table(i) END;

i←search(v) =def PRE v∈ran(table) THENi∈table1[v]END;

PRE VAL

(9)

Combiner des machines

INCLUDESM1, . . . , Mk (dynamique) USESM1, . . . , Mk (statique)

. . .

32

Références

Documents relatifs

On sait que, si les côtés d'une ligne brisée dans un plan sont les modules d'expressions imaginaires, et leurs angles de direction à l'égard d'une direction initiale les arguments

Madame Bartolotti se leva et sillonna sa salle de séjour à cloche-pied pour se débarrasser des miettes.. Puis elle suça l'un après l'autre ses doigts poisseux

dans un cadre hilbertien donne une méthode pour le traitement unitaire et élémentaire des plusieurs types d’équations aux dérivées partielles ( pour différentes

Soit β > 0 irrationnel, montrer que les valeurs de la suite des parties fractionnaires ({nβ}) n∈ N sont deux à deux distinctes.. On dira que la suite

Montrer que toute partie non vide admet un plus petit

Soit n un entier naturel et f une fonction continue de [a; b]

Comme le courriel peut être utilisé en diverses cir- constances en dehors du cadre scolaire, on pro- pose l’élaboration d’une pochette d’information destinée à la famille et

Cependant, si l’élève ne respecte pas sa part du contrat, la conséquence prévue