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.
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)
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) =
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̸={}))
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)
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 ;
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
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∈table−1[v]END;
PRE VAL
Combiner des machines
INCLUDESM1, . . . , Mk (dynamique) USESM1, . . . , Mk (statique)
. . .
32