Feuille de TD 5 de Spécifications Formelles M1 2014-2015

Transcription

Feuille de TD 5 de Spécifications Formelles M1 2014-2015
Feuille de TD 5 de Spécifications Formelles
M1 2014-2015
Les fichiers en format pdf des projections du cours sont disponibles,
au fur et à mésure, sur la page :
http ://www.ibisc.univ-evry.fr/˜serena
1
Inclusions
Exercice 1.1
Considérez les machines Doors et Locks :
MACHINE Doors
SETS DOOR; P OSIT ION S = {open, closed}
VARIABLES position
INVARIANT position ∈ DOOR → P OSIT ION
INTIALISATION position := DOOR × {closed}
OPERATIONS
opening(dd) =
b
PRE dd ∈ DOOR THEN position(dd) := open END ;
closedoor(dd) =
b
PRE dd ∈ DOOR THEN position(dd) := closde END ;
END
1
MACHINE Locks
INCLUDES Doors
PROMOTES closedoor
SETS ST AT U S = {locked, unlocked}
VARIABLES status
INVARIANT status ∈ DOOR → ST AT U S ∧ position−1 ({open}) ⊆ status−1 ({unlocked})
INTIALISATION status := DOOR × {locked}
OPERATIONS
opendoor(dd) =
b
PRE dd ∈ DOOR ∧ status(dd) = unlocked THEN opening(dd) END ;
unlockdoor(dd) =
b
PRE dd ∈ DOOR THEN status(dd) = unlocked END ;
lockdoor(dd) =
b
PRE dd ∈ DOOR ∧ position(dd) = closed THEN status(dd) = locked END ;
END
Pourquoi la machine Locks extends Doors n’est pas cohérente ?
Exercice 1.2
Récrivez les assertions suivantes en supprimant l’opérateur parallèle :
1. ANY x WHERE x ∈ N THEN x := x2 END||y := y − 3
2. IF x > y THEN y, z := y+z, 0 END|| CHOICE x := x+y OR x :=
x + z END
3. ANY x WHERE x ∈ 4 . . . y THEN z := x2 END|| PRE y >
3 THEN y := y − 3
Exercice 1.3
Considérez la machine Saf es qui inclut les machines Locks et Keys :
2
MACHINE Keys
SETS KEY
VARIABLES keys
INVARIANT keys ⊆ KEY
INTIALISATION keys := ∅
OPERATIONS
insertkey(kk) =
b
PRE kk ∈ KEY THEN keys := keys ∪ {kk} END ;
removekey(kk) =
b
PRE kk ∈ KEY THEN keys := keys \ {kk} END ;
END
3
MACHINE Saf es
INCLUDES Locks, Keys
PROMOTES opendoor, closedoor, lockdoor
CONSTANTS unlocks
PROPERTIES unlocks ∈ KEY DOOR
INVARIANT status−1 ({unlocked}) ⊆ unlocks(keys)
OPERATIONS
insert(kk, dd) =
b
PRE kk ∈ KEY ∧ dd ∈ DOOR ∧ unlocks(kk) = dd
THEN insertkey(kk)
END ;
extract(kk, dd) =
b
PRE kk ∈ KEY ∧ dd ∈ DOOR ∧ unlocks(kk) = dd ∧ status(dd) = locked
THEN removekey(kk)
END ;
unlock(dd) =
b
PRE dd ∈ DOOR ∧ unlocks−1 (dd) ∈ keys
THEN unlockdoor(dd)
END ;
quicklock(dd) =
b
PRE dd ∈ DOOR ∧ position(dd) = closed
THEN lockdoor(dd)||removekey(unlocks−1 (dd))
END
END
Pourquoi il n’est pas possible pour Saf es, qui inclut les machines Locks et
Keys, de fournir une opération quickcloseandlock(dd), qui ferme la porte dd,
la verrouille, et enleve la clé.
Ajoutez une opération quickclose(dd) à Locks, qui ferme et verrouille la
porte dd. Maintenant fournissez une opération quickcloseandlock(dd).
Exercice 1.4
La sécurité des coffres est augmentée par l’introduction d’une clé-mère qui
s’insère dans une deuxième serrure sur chaque porte. Une porte peut être déverrouillée
alors qu’elle a sa propre clé et la clé-mère insérées. La clé-mère peut être enlevée
seulement d’une porte verrouillée ; et elle peut être dans une porte à la fois.
Introduisez une variable masterkey dans la machine Saf es, ajoutez deux
opérations insertmasterkey(dd) et removemasterkey(dd), et adaptez les
4
autres opérations de sorte que une porte peut être déverrouillée seulement si
sa propre clé et la clé-mère sont insérées.
Exercice 1.5
La machine Locks n’est pas robuste, dans le sens que certaines opérations
ont des préconditions qui dépendent de son état. Ca veut dire que certaines
opérations peuvent être appelées au dehors de ses préconditions, même si leurs
arguments ont le bon type.
Décrivez une machine robuste RobustLocks, qui inclut Locks. Elle n’a pas
de variable propre, mais elle introduit un ensemble REP ORT = {ok, err} et
toutes opérations retournent une de ces valeurs.
RobustLocks has 4 opérations, qui correspondent au 4 opérations de Locks :
— robustopen
— robustclose
— robustunlock
— robustlock
Chaque opération prend une porte dd comme entrée, mais elle a seulement
la requise dd ∈ DOOR comme précondition. Elle appelle l’opération correspondante de Locks si la précondition est satisfaite, dans le case elle rapporte aussi
ok. Si elle ne peut pas appeler l’opérations correspondante de Locks, alors elle
rapporte err et laisse l’état immodifié.
2
Instructions SEES et USES
Considérez les machines Lif e, M arriage et Registrar :
5
MACHINE Lif e
SETS P ERSON ; SEX = {boy, girl}
VARIABLES male, f emale
INVARIANT male ⊆ P ERSON ∧ f emale ⊆ P ERSON ∧ male ∩ f emale = ∅
INTIALISATION male := ∅||f emale := ∅
OPERATIONS
born(nn, ss) =
b
PRE nn ∈ P ERSON ∧ nn ∈
/ (f emale ∪ male) ∧ ss ∈ SEX
THEN IF ss = boy THEN male := male ∪ {nn} ELSE f emale := f emale ∪ {nn}
END ;
die(nn) =
b
PRE nn ∈ P ERSON ∧ nn ∈ (f emale ∪ male)
THEN IF nn ∈ male THEN male := male \ {nn} ELSE f emale := f emale \ {nn}
END
END
MACHINE M arriage
USES Lif e
VARIABLES marriage
INVARIANT marriage ∈ male f emale
INTIALISATION marriage := ∅
OPERATIONS
wed(mm, f f ) =
b
PRE mm ∈ male ∧ f f ∈ f emale ∧ mm ∈
/ dom(marriage) ∧ f f ∈
/ ran(marriage)
THEN marriage(mm) := f f
END ;
part(mm, f f ) =
b
PRE mm ∈ male ∧ f f ∈ f emale ∧ (mm, f f ) ∈ marriage
THEN marriage := marriage \ {(mm, f f )}
END ;
pp ← partner(nn) =
b
PRE nn ∈ dom(marriage) ∪ ran(marriage)
THEN IF nn ∈ dom(marriage) THEN pp := marriage(nn) ELSE pp := marriage−1 (nn)
END
END
6
MACHINE Registrar
EXTENDS M arriage
INCLUDES Lif e
PROMOTES born
OPERATIONS
dies(nn) =
b
PRE nn ∈ (f emale ∪ male)
THEN die(nn)||
IF nn ∈ dom(marriage) THEN part(nn, marriage(nn))
ELSEIF nn ∈ ran(marriage) THEN part(marriage−1 (nn), nn)
END
END
Exercice 2.1
Ajoutez une opération change à la machine Lif e qui change le sex d’une
personne. Ajoutez une opération sexchange à la machine Registrar qui utilise
cette opération.
Exercice 2.2
Ajoutez une machine V oters qui est inclue dans la machine Registrar. Elle
garde un ensemble de personnes voters qui sont autorisés à voter. Ca doit être un
sous-ensemble de male∪f emale, et cette requise doit apparaı̂tre dans l’invariant
de V oters. Les personnes peuvent être ajoutés ou éliminés de l’ensemble, et la
machine doit aussi permettre des requêtes si les personnes sont dans l’ensemble
ou pas.
Exercice 2.3
Décrivez une machine F ullRegistrar qui suit l’état marital d’une personne.
Elle doit inclure Registrar et doit introduire un ensemble
ST AT U S = {bachelor, spinster, married, divorced, widow, widower}
qui énumère les differentes possibilités pour l’état marital qu’une personne peut
avoir. Introduisez une nouvelle variable status qui est une function totale status ∈
male ∪ f emale → ST AT U S. Vous devez donner les opérations :
— birth
— death
— marry
— divorce
7
— partnerquery
— maritalstatusquery
8
3
Exemples de Solutions
Exercice 1.1
La machine Locks extends Doors n’est pas cohérente parce que toutes les
opérations de Doors deviendraient des opérations de Locks. Mais l’opération
opening ne préserve pas l’invariant de Locks, alors que on la peut effectuer
sur une porte fermée (car il n’y a pas de preconditions sur l’état de la porte).
Donc non pas toutes opérations préserve l’invariant dans ce cas, et comme ça la
machine n’est pas cohérente.
Exercice 1.2
1. ANY x WHERE x ∈ N THEN x, y := x2 , y − 3 END
2. IF x > y THEN
CHOICE x, y, z := x + y, y + z, 0
OR x, y, z := x + z, y + z, 0
ELSE
CHOICE x := x + y OR x := x + z END
END
3. PRE y > 3
THEN ANY x WHERE x ∈ 4 . . . y THEN y, z := y−3, x2 END
END
9