Techniques de spécification formelle
Techniques de spécification formelle
3.1
Beaucoup de langages formels de spécification sont basés sur
extensions / variantes de la logique des prédicats 1er ordre
3.2
SEMANTIQUE
Règles sémantiques pour définir les valeurs de vérité VALI (ass)
d'une assertion ass dans une interprétation d’intérêt I
I: interprétation pour {P, Q} P, Q: assertions
−> fonction de représentation valI sur domaine d'interprétation DI
THEORIE DE LA PREUVE
Règles d'inférence pour dériver de nouvelles assertions, [Link].
P ⇒ Q, P
-------------------- modus ponens
Q
P ⇒ Q, Q ⇒ R
------------------------- chaînage
P⇒R
(∀x) (P(x))
-------------------- instanciation
P(x/a)
L+ ∨ C1 , L- ∨ C2
-------------------------------- résolution
(C1 ∨ C2 ).µ
avec P, Q: assertions; x: variable; a: constante;
C1, C2 : formes clausales;
L+, L- : litéraux positifs/negatifs
à même symbole de prédicat & unificateur le plus général µ
3.4
Z: une technique de spécification formelle
basée sur les états
cf. Book, Section 4.4.3
[Abrial], [Sufrin], [Oxford & IBM/UK]
3.5
Autre technique "classique" basée sur les états: VDM
C. Jones, Systematic Software Development Using VDM, Prentice Hall, 1990
3.6
Z: survol des caractéristiques principales
(i) Base formelle:
- ensembles & n-uples
=> relations, fonctions, ... au-dessus de cette "couche"
langage relationnel
- logique des prédicats 1er ordre typée
pour écrire assertions sur ensembles, fonctions, etc
(ii) Pouvoir d'expression:
- limité aux specs fonctionnelles
- pas de référence possible au passé, futur
=> "codage" nécessaire d'événements passés/futurs
par variables auxiliaires, artificielles
[Link]. variable Booléenne
pour "mémoriser" si un livre a été demandé par un emprunteur
variable Booléenne
pour "mémoriser" si 2 téléphones sont connectés
A METTRE A JOUR PAR TOUTES LES OPERATIONS CONCERNEES!!!
(devient une activité de programmation)
(iii) Communicabilité:
- relativement bonne, à cause de la simplicité du langage:
bases mathématiques classiques, bien connues
(ensembles, relations & fonctions)
=> Z et VDM de plus en plus utilisés en pratique
3.7
1. LES SCHÉMAS Z
• Spécification = collection de schémas + définitions textuelles
3.8
Les déclarations de fonctions spécifient donc plus que du typage:
• contrainte qu'un élément a une seule image par la relation
=> expression de certaines contraintes de cardinalité
• fonction partielle -|->
ou totale -->
• fonction injective > >-|-> , >-->
surjective -|-» , --»
ou bijective >--»
dom: domaine de
ran: codomaine de ("range")
|→ : couplage fonctionnel
• : séparation quantification-prédicat (pour éviter sur-parenthésage)
3.9
(ii) Pour une définition d'opération:
NomOpération_____________________
déclaration d'information d'entrée/sortie
pré- & post-conditions de l' opération
Exemples
• Opération de consultation
Quand____________________________________________
Ξ Agenda
n? : NOM
d! : PPLAGE-HORAIRE
--------------------------------------------------------------------------------------------
n? ∈ AvecQui
d! = {t: PLAGE-HORAIRE | RendezVous (t) = n?}
ou, de manière alternative,
d! = RendezVous -1 (| {n?} |) */ image relationnelle d'un ensemble /*
3.10
• Opération de création
PrendreRendezVous______________________________
∆ Agenda
n? : NOM
t? : PLAGE-HORAIRE
-------------------------------------------------------------------------------------------------------------------------------
¬∃ d: PLAGE-HORAIRE, m: AvecQui •
d |→ m ∈ RendezVous ∧ | d - t?| < 2h
RendezVous' = RendezVous ∪ {t? |→ n?}
AvecQui' = AvecQui ∪ {n?}
3.11
• Etat initial du système (nécessaire pour raisonnements par induction):
doit être specifié par spécialisation des schémas de type
avec assertion supplémentaire particularisant l'état initial
Exemple:
AgendaInit_____________________
Agenda */inclusion de schéma/*
AvecQui = ∅
Définitions génériques
But: rendre les définitions paramétrées
(occurrences de paramètres formels)
=> réutilisation dans contextes multiples par instanciation
(= substitution des paramètres formels par des paramètres effectifs)
3.12
Exemples:
[X, Y] ___________________________________
first: X × Y → X
second: X × Y → Y
------------------------------------------------------------------------------------------------------------------
(∀x: X, y:Y) (first (x, y) = x)
(∀x: X, y:Y) (second (x, y) = y)
[X, Y] _____________________________________
dom: (X ↔ Y) → PX
ran: (X ↔ Y) → PY
-------------------------------------------------------------------------------------------------------------------------
(∀ R: X ↔ Y) (dom (R) = {x: X | ∃ y: Y ∧ x |→ y ∈ R})
(∀ R: X ↔ Y) (ran (R) = {y: Y | ∃ x: X ∧ x |→ y ∈ R})
Exemple:
Dépôt [RESSOURCE] ___________________________
UtiliséPar: RESSOURCE -|-> UTILISATEUR
Libre: PRESOURCE
------------------------------------------------------------------------------------------------------------------
(dom UtiliséPar) ∪ Libre = RESSOURCE
(dom UtiliséPar) ∩ Libre = ∅
3.13
2. COMBINAISON DE SCHÉMAS
• Inclusion de schémas
SchémaSpecifique_______________
SchémaInclus1
...
SchémaInclusn
Déclarations spécifiques
---------------------------------------------------------------------------
Assertions spécifiques
Exemple
AgendaProfessionnel_________________
Agenda
∀ d ∈ dom RendezVous • 9 ≤ [Link] ≤ 18
3.14
Exemple
PrendreRendezVous-Robuste = (PrendreRendezVous ∧ Succès) ∨ PasLibre
avec
PrendreRendezVous ______________________________
∆ Agenda
n? : NOM, t? : PLAGE-HORAIRE
--------------------------------------------------------------------------------------------------------------------------------------------
¬∃ d: PLAGE-HORAIRE, m: AvecQui •
d |→ m ∈ RendezVous ∧ | d - t?| < 2h
RendezVous' = RendezVous ∪ {t? |→ n?}
AvecQui' = AvecQui ∪ {n?}
Succès ______________________________________________
résultat! : MESSAGE
résultat! = 'ok'
PasLibre______________________________________________
Ξ Agenda
n? : NOM ; t? : PLAGE-HORAIRE
résultat! : MESSAGE
----------------------------------------------------------------------------------------------------------------------------------------------
∃ d: PLAGE-HORAIRE, m: AvecQui •
d |→ m ∈ RendezVous ∧ | d - t?| < 2h
resultat! = 'pas libre'
MESSAGE ::= {'ok', 'pas libre', 'libre', ...} définition de type libre
Cette spécification par morceaux est équivalente à:
PrendreRendezVous-Robuste ______________________________
∆ Agenda
n? : NOM; t? : PLAGE-HORAIRE
resultat! : MESSAGE
¬∃ d: PLAGE-HORAIRE, m: AvecQui •
d |→ m ∈ RendezVous ∧ | d - t?| < 2h
∧ RendezVous' = RendezVous ∪ {t? |→ n?}
∧ AvecQui' = AvecQui ∪ {n?} ∧ resultat! = 'ok'
∨ ∃ d: PLAGE-HORAIRE, m: AvecQui •
d |→ m ∈ RendezVous ∧ | d - t?| < 2h
∧ RendezVous' = RendezVous
∧ AvecQui' = AvecQui ∧ resultat! = 'pas libre'
3.15
=> Spécification "modulaire":
- élaboration incrémentale de schémas (morceaux assemblables)
- schémas peuvent être réutilisés dans d'autres contextes
(cfr. Succès, PasLibre)
−> procédé général pour l'introduction incrémentale d'exceptions
3.16
3. LA BOITE A OUTILS Z
Les types composés en Z forment une hiérarchie de spécialisation:
ensemble n-uple
relation
fonction
bijection
=> héritage / polyporphisme des opérateurs
de super-type vers sous-types
e∈ S appartenance à un ensemble 69
3.17
Principaux opérateurs de la boîte à outils:
type notation sémantique [Spivey 89] p.
ensemble e∉ S non-appartenance 89
3.18
4. ETUDE DE CAS: système de gestion de bibliothèque
Enoncé informel du problème
3.19
Formalization en Z
(i) Types donnés
[ LIVRE, EXEMPLAIRE-LIVRE, AUTEUR, SUJET, PERSONNE]
avec LIVRE: ensemble de tous les livres possibles
EXEMPLAIRE-LIVRE: ensemble de tous les exemplaires possibles
AUTEUR: ensemble de tous les auteurs possibles
SUJET: ensemble de tous les sujets possibles
PERSONNE: ensemble de toutes les personnes possibles
NB1 "tous les ... possibles": pour permettre l'incorporation dans le futur
de n'importe quel livre, exemplaire, etc.
NB2 Les "types donnés" pourraient être spécifiés par la suite...
• -|-> : car bib ne couvre pas l'ensemble de tous les livres/exemplaires possibles
• QuelLivre : toute instance est une fonction (relation) , ≠ association!!
(ensemble de couples, ≠ couple)
• ran QuelLivre: ensemble de tous les livres en bibliothèque
• Déclaration de EcritPar =>
l'ensemble des auteurs d'un livre peut être vide ([Link]. actes congrès, ...)
• P1S: ensemble des parties non-vides de S
3.20
Autres schémas de type: ("modules" de spécification)
AgentsBibliothèque_________________________________
EmprunteursOrdinaires: PPERSONNE
Staff: PPERSONNE
-------------------------------------------------------------------------------------------------
EmprunteursOrdinaires ∩ Staff = { }
BD-Bibliothèque__________________________________
AgentsBibliothèque
Disponibles, Empruntés: PEXEMPLAIRE-LIVRE
EmpruntéPar: EXEMPLAIRE-LIVRE -|-> PERSONNE
EmpruntPrécédent: EXEMPLAIRE-LIVRE -|-> PERSONNE
--------------------------------------------------------------------------------------------------
Disponibles ∩ Empruntés = { }
Empruntés = dom EmpruntéPar
ran EmpruntéPar ⊆ EmprunteursOrdinaires ∪ Staff
dom EmpruntPrécédent ⊆ Disponibles ∪ Empruntés
ran EmpruntPrécédent ⊆ EmprunteursOrdinaires ∪ Staff
∀ p: PERSONNE • p ∈ EmprunteursOrdinaires ∪ Staff ⇒
# EmpruntéPar- 1 (| {p} |) ≤ NbreMaxExemplaires
SystèmeBibliothèque________________________________
Répertoire
BD-Bibliothèque
---------------------------------------------------------------------------------------------
dom QuelLivre = Disponibles ∪ Empruntés
NbreMaxExemplaires: Νat
1 ≤ NbreMaxExemplaires ≤ ...
3.21
Etat initial:
un schéma initial par schéma de type,
puis combiner le tout en un schéma global
RépertoireInit_______________________________________
Répertoire
AgentsBibliothèqueInit________________________________
AgentsBibliothèque
EmprunteursOrdinaires = { } ∧ Staff = { }
BD-BibliothèqueInit__________________________________
BD-Bibliothèque
-----------------------------------------------------------------------------------------------------
Disponibles = { } ∧ Empruntés = { }
EmpruntéPar = { } ∧ EmpruntPrécédent = { }
SystèmeBibliothèqueInit =
RépertoireInit ∧ AgentsBibliothèqueInit ∧ BD-BibliothèqueInit
3.22
(iii) Schémas d'opération
• Emprunter un exemplaire
CAS NORMAL:
EmpruntNormal__________________________________
∆ SystèmeBibliothèque
Ξ Répertoire
Ξ AgentsBibliothèque
p? : PERSONNE
bc? : EXEMPLAIRE-LIVRE
--------------------------------------------------------------------------------------------
p? ∈ EmprunteursOrdinaires ∪ Staff ∧ bc? ∈ Disponibles
# EmpruntéPar -1 (| {p?} |) < NbreMaxExemplaires
Disponibles' = Disponibles \ {bc?}
Empruntés' = Empruntés ∪ {bc?}
EmpruntéPar' = EmpruntéPar ∪ {bc? |→ p?}
EmpruntPrécédent' = EmpruntPrécédent
AgentAutorisé______________________________________
Ξ AgentsBibliothèque
AgentDemandant? : PERSONNE
-----------------------------------------------------------------------------------------
AgentDemandant? ∈ Staff
EXCEPTIONS:
identifier cas où préconditions d'opérations normales sont non satisfaites
(+ autres éventuelles)
AgentNonAutorisé____________________________________
Ξ AgentsBibliothèque
AgentDemandant? : PERSONNE
mess! : RAPPORT
--------------------------------------------------------------------------------------------
AgentDemandant? ∉ Staff
mess! = 'opérateur non autorisé'
3.23
NonInscrit_________________________________________
Ξ AgentsBibliothèque
p? : PERSONNE
mess! : RAPPORT
------------------------------------------------------------------------------------
p? ∉ EmprunteursOrdinaires ∪ Staff
mess! = 'personne non inscrite'
ExemplaireInexistant______________________________
Ξ SystèmeBibliothèque
bc? : EXEMPLAIRE-LIVRE
mess! : RAPPORT
--------------------------------------------------------------------------------------------
bc? ∉ Disponibles ∪ Empruntés
mess! = 'cet exemplaire n'est pas repris en bibliothèque'
ActuellementEmprunté_____________________________
Ξ SystèmeBibliothèque
bc? : EXEMPLAIRE-LIVRE
mess! : RAPPORT
------------------------------------------------------------------------------------------------
bc? ∈ Empruntés
mess! = 'cet exemplaire est actuellement emprunté'
QuotaAtteint________________________________________
Ξ SystèmeBibliothèque
p? : PERSONNE
mess! : RAPPORT
------------------------------------------------------------------------------------------------
p? ∈ EmprunteursOrdinaires ∪ Staff
# EmpruntéPar-1 (| {p?} |) = NbreMaxExemplaires
mess! = 'ne peut emprunter davantage d'exemplaires'
EmpruntComplet =
AgentAutorisé ∧ EmpruntNormal ∧ Succès
∨ AgentNonAutorisé ∨ NonInscrit ∨ ExemplaireInexistant
∨ ActuellementEmprunté ∨ QuotaAtteint
3.24
Succès____________________________________________
mess! : RAPPORT
mess! = 'OK'
• Restituer un exemplaire
RestitutionNormale________________________________
∆ SystèmeBibliothèque
Ξ Répertoire
Ξ AgentsBibliothèque
bc? : EXEMPLAIRE-LIVRE
--------------------------------------------------------------------------------------------
bc? ∈ Empruntés
Disponibles' = Disponibles ∪ {bc?}
Empruntés' = Empruntés \ {bc?}
EmpruntéPar' = {bc?} EmpruntéPar */ anti-restriction /*
EmpruntPrécédent' =
EmpruntPrécédent ⊕ { bc? |→ EmpruntéPar (bc?) }
ExemplaireDisponible________________________________
Ξ SystèmeBibliothèque
bc? : EXEMPLAIRE-LIVRE
mess! : RAPPORT
-------------------------------------------------------------------------------------------------
bc? ∈ Disponibles
mess! = 'cet exemplaire n'est pas emprunté'
RestitutionComplète =
AgentAutorisé ∧ RestitutionNormale ∧ Succès
∨ AgentNonAutorisé ∨ ExemplaireInexistant ∨ ExemplaireDisponible
3.25
• Interroger la base de données
- Livres sur un sujet donné?
SurCeSujet_______________________________________
Ξ SystèmeBibliothèque
s? : SUJET
réponse! : PLIVRE
--------------------------------------------------------------------------------------------
réponse! = {x: LIVRE | s? ∈ TraiteDe (x)}
SelfRequête________________________________________
Ξ AgentsBibliothèque
p? , demandeur? : PERSONNE
------------------------------------------------------------------------------------------------
p? = demandeur?
DemandeurNonAutorisé______________________________
Ξ AgentsBibliothèque
p?, demandeur? : PERSONNE
mess! : RAPPORT
-------------------------------------------------------------------------------------------
p? ≠ demandeur? ∧ demandeur? ∉ Staff
mess! = 'requête indiscrète'
3.26
EmprunteurInconnu_______________________________
Ξ AgentsBibliothèque
p? : PERSONNE
mess! : RAPPORT
-----------------------------------------------------------------------------------------------
p? ∉ EmprunteursOrdinaires ∪ Staff
mess! = 'emprunteur inconnu'
ExemplairesEmpruntésPar-Robuste =
AgentAutorisé ∧ ExemplairesEmpruntésPar ∧ Succès
∨ SelfRequête ∧ ExemplairesEmpruntésPar ∧ Succès
∨ DemandeurNonAutorisé ∨ EmprunteurInconnu
PasPrécédemmentEmrunté____________________________
Ξ SystèmeBibliothèque
bc? : EXEMPLAIRE-LIVRE
mess! : RAPPORT
------------------------------------------------------------------------------------------------
bc? ∉ dom EmpruntPrécédent
mess! = 'cet exemplaire n'a pas été précédemment emprunté'
DernierEmprunteur-Robuste =
AgentAutorisé ∧ DernierEmprunteur ∧ Succès
∨ AgentNonAutorisé ∨ ExemplaireInexistant
∨ PasPrécédemmentEmrunté
3.27
NB1 A cause de l'impossibilité de spécifier en Z des références au passé, il a fallu
- introduire un "indicateur" EmpruntPrécédent
dans le schéma de type SystèmeBibliothèque
pour "mémoriser" le passé
- spécifier les mises à jour de cette variable
dans chaque schéma d'opération-∆ ∆ correspondant
−−> très lourd, ressemble à de la programmation!!!
Il existe des langages de spécification permettant d'éviter ces inconvénients:
supportent les références au présent / futur
(basés sur logiques temporelles)
3.28
5. RAISONNEMENT FORMEL SUR LES ASSERTIONS
La spécification du système forme une théorie
(ensemble d'axiomes sur vocabulaire restreint, en Z)
−> application de règles d'inférence pour deriver
- théorèmes / conséquences logiques à soumettre pour approbation
- inconsistances
- preuves d'invariance
- ...
• Règles classiques d'inférence de la logique des prédicats
(modus ponens, chaînage, instanciation universelle, résolution, ....)
3.29
Exemples de raisonnement formel sur le système bibliothécaire
1. Preuve d'invariance:
L'invariant
Disponibles ∩ Empruntés = ∅
du schéma BD-Bibliothèque est dérivable de la spécification des
opérations EmpruntComplet et RestitutionComplète.
Preuve. Soit Prop: Disponibles ∩ Empruntés = ∅
• Prop [s0] découle de la spec de l'état initial:
Disponibles = { }, Empruntés = { }
• {Prop} EmpruntComplet {Prop}:
- les exceptions AgentNonAutorisé, NonInscrit, ActuellementEmprunté, ...
ne modifient pas la valeur de Disponibles, Empruntés
- Soit l'opération-∆∆ EmpruntNormal appliquée dans un état satisfaisant Prop:
dans l'état final correspondant on aura:
Disponibles' ∩ Empruntés' = Disponibles \ {bc?} ∩ Empruntés ∪ {bc?}
[par modus ponens & substituabilité fonctionnelle]
avec bc? ∈ Disponibles (cfr. précond)
= ∅
[par théorème de la théorie des ensembles:
a ∈ A, A ∩ B = ∅ ⇒ A \ {a} ∩ B ∪ {a} = ∅ ]
3.30
2. Preuve de redondance:
La postcondition
Empruntés' = Empruntés ∪ {bc?}
dans le schéma EmpruntNormal est dérivable de la spécification
du type BD-Bibliothèque.
Preuve. De la spec de BD-Bibliothèque on dérive (par modus ponens):
Empruntés = dom EmpruntéPar dans tout état
Dès lors, dans les états finals résultant d'applications de EmpruntNormal, on a:
Empruntés' = dom EmpruntéPar'
= dom (EmpruntéPar ∪ {bc? |→ p?}) [substituabilité fonctionnelle]
= dom EmpruntéPar ∪ dom {bc? |→ p?} [theorème sur domaines]
= Empruntés ∪ {bc?} [substituabilité fonctionnelle & déf de dom]
Q.E.D.
3. Preuve d'inconsistance:
Une postcondition telle que
Empruntés' = Empruntés \ {bc?}
dans le schéma EmpruntNormal mènerait à une inconsistance
avec la spécification du type BD-Bibliothèque.
Preuve. Une dérivation similaire à 2 ci-dessus produit
Empruntés' = Empruntés ∪{bc?}
ce qui, conjointement à la postcondition supposée, produit
Empruntés \ {bc?} = Empruntés ∪ {bc?}
ce qui est inconsistant en théorie des ensembles. Q.E.D
3.31
Preuve d'inconsistance pour le système de gestion d'agenda:
3.32