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