101. Un jeu mathématique
On vous po
se le problè
me suivant:
Si le train a
rrive en ret
ard et qu'il
pas de taxis
n'y a
à la gare, a
lors Jean ar
en retard à
rive
son rendezvous.
Jean n'est p
as en retard
à son rende
vous.
zLe train est
arrivé en re
tard.
?
Y avait-il d
es taxis
à la gare?
Sylvain Hallé - 8INF958 Spécification, test et vérification
102. Le 'calculus ratiocinator'
Dès 1665, Leibniz imagine un langage universel, la
lingua characteristica universalis, qui vise à...
Représenter toutes les
choses sujettes au
raisonnement
Établir des liens entre elles
au moyen d'un calcul de la
raison
Gottfried Wilhelm
Leibniz
(1646-1716)
Sylvain Hallé - 8INF958 Spécification, test et vérification
103. Le 'calculus ratiocinator'
« Alors, il ne sera plus
besoin entre deux
philosophes de discussions
plus longues qu'entre deux
mathématiciens, puisqu'il
suffira qu'ils saisissent leur
plume, qu'ils s'asseyent à
leur table de calcul (en
faisant appel, s'ils le
souhaitent, à un ami) et
qu'ils se disent l'un à
l'autre : « Calculons ! »
Gottfried Wilhelm
Leibniz
(1646-1716)
Sylvain Hallé - 8INF958 Spécification, test et vérification
104. Quelques définitions
Donnons à chaque affirmation élémentaire un symbole:
p
q
r
Le train est en retard
Il y a des taxis à la gare
Jean arrive en retard à son rendez-vous
Variables propositionnelles
Chacune de ces variables peut prendre l'une ou l'autre
de deux valeurs possibles:
Vrai (aussi noté V, 1, ⊤)
Faux (aussi noté F, 0, ⊥)
Sylvain Hallé - 8INF958 Spécification, test et vérification
105. Quelques définitions
Chacune des données du problème est un énoncé liant
certaines affirmations élémentaires au moyen de
connecteurs logiques
∧
∨
→
↔
¬
Conjonction (et)
Disjonction (ou)
Implication (si ... alors ...)
Équivalence (... si et seulement si ...)
Négation (non)
Sylvain Hallé - 8INF958 Spécification, test et vérification
106. Quelques définitions
On peut donc écrire symboliquement chacun des
énoncés de l'énigme:
Si l'avion arrive en retard et qu'il n'y a pas de taxis à
la gare, alors Jean arrive en retard à son rendez-vous
(p ∧ ¬q) → r
Jean n'est pas arrivé en retard à son rendez-vous
¬r
L'avion est arrivé en retard
p
Sylvain Hallé - 8INF958 Spécification, test et vérification
107. Comment résoudre le problème?
L'énigme a été réduite au problème symbolique suivant:
Étant donné que...
(p ∧ ¬q) → r
¬r
p
...sont vraies, peut-on conclure que q est vraie?
Comment peut-on le trouver?
Sylvain Hallé - 8INF958 Spécification, test et vérification
108. Valuation
Une valuation est une fonction ν qui affecte exactement
une valeur à chaque variable propositionnelle
Exemple: ν(p) = ⊤, ν(q) = ⊤, ν(r) = ⊥
On peut calculer la valuation d'une expression composée
à partir de la valuation de ses opérandes. Si φ et ψ sont
des expressions dont la valuation est connue, alors...
ν(φ ∧ ψ) = ⊤ lorsque ν(φ) = ν(ψ) = ⊤, sinon ⊥
ν(φ ∨ ψ) = ⊥ lorsque ν(φ) = ν(ψ) = ⊥, sinon ⊤
ν(φ → ψ) = ⊥ lorsque ν(φ) = ⊤ et ν(ψ) = ⊥, sinon ⊤
ν(φ ↔ ψ) = ⊤ lorsque ν(φ) = ν(ψ), sinon ⊥
ν(¬φ) = ⊤ lorsque ν(φ) = ⊥, et vice versa
Sylvain Hallé - 8INF958 Spécification, test et vérification
109. Modèle
Si φ est une expression et ν une valuation telle que
ν(φ) = ⊤, on dit que ν satisfait φ, ce que l'on peut écrire
ν⊨φ
Dans ce cas, on dit aussi que ν est un modèle de φ.
Exercice
1. Si l'on utilise n variables propositionnelles,
combien de valuations différentes peut-on créer?
2. Combien y a-t-il de modèles des expressions...
a) p ∨ q
b) (p ∧ q) → ¬p
Sylvain Hallé - 8INF958 Spécification, test et vérification
110. Table de vérité
On peut calculer la valeur d'une expression pour toutes
les valuations possibles au moyen d'une table de vérité
p q (p ∧ q) → ¬p
⊥
⊥
⊤
⊤
⊥
⊤
⊥
⊤
Sylvain Hallé - 8INF958 Spécification, test et vérification
111. Table de vérité
On peut calculer la valeur d'une expression pour toutes
les valuations possibles au moyen d'une table de vérité
p q (p ∧ q) → ¬p
⊥
⊥
⊤
⊤
⊥
⊤
⊥
⊤
⊥
⊥
⊥
⊤
Sylvain Hallé - 8INF958 Spécification, test et vérification
112. Table de vérité
On peut calculer la valeur d'une expression pour toutes
les valuations possibles au moyen d'une table de vérité
p q (p ∧ q) → ¬p
⊥
⊥
⊤
⊤
⊥
⊤
⊥
⊤
⊥
⊥
⊥
⊤
⊤
⊤
⊥
⊥
Sylvain Hallé - 8INF958 Spécification, test et vérification
113. Table de vérité
On peut calculer la valeur d'une expression pour toutes
les valuations possibles au moyen d'une table de vérité
p q (p ∧ q) → ¬p
⊥
⊥
⊤
⊤
⊥
⊤
⊥
⊤
⊥
⊥
⊥
⊤
⊥
⊥
⊥
⊥
⊤
⊤
⊥
⊥
Sylvain Hallé - 8INF958 Spécification, test et vérification
114. Conséquence logique
Pour résumer:
1. Les énoncés du problème
original ont été
formalisés en un ensemble
d'énoncés logiques
On vous po
se le problè
me suivant:
Si le train ar
rive en reta
rd et qu'il n'
pas de taxis
ya
à la gare, al
ors Jean arri
en retard à
ve
son rendez-v
ous.
Jean n'est pa
s en retard
à son rendez
vous.
Le train est
arrivé en re
tard.
Y avait-il de
s taxis
?
à la gare?
A = {(p ∧ ¬q) → r, ¬r, p}
2. On cherche maintenant à déterminer si la question
posée (q) est une conséquence logique de A, ou
autrement dit, à savoir si...
A⊨q
Sylvain Hallé - 8INF958 Spécification, test et vérification
115. Satisfaisabilité
Une expression φ est dite satisfaisable lorsque qu'il
existe au moins une valuation ν telle que ν ⊨ φ
...autrement dit, il existe un "monde" dans lequel
φ est vraie
On peut se convaincre que φ est satisfaisable si et
seulement si ¬φ n'est pas une tautologie
Problème de la satisfaisabilité (SAT)
Étant donné une expression φ, trouver une valuation
ν telle que ν ⊨ φ
Sylvain Hallé - 8INF958 Spécification, test et vérification
116. Qui a tué tante Agatha?
Quelqu'un vivant au Manoir a tué tante Agatha.
Agatha, le maître d'hôtel et Charles sont les seuls à
vivre au Manoir.
Un tueur déteste toujours sa victime, et n'est jamais
plus riche que celle-ci.
Charles ne déteste personne que tante Agatha déteste.
Agatha déteste tout le monde sauf le maître d'hôtel.
Le maître d'hôtel déteste tous ceux qui ne sont pas
plus riches que tante Agatha.
Le maître d'hôtel déteste tous ceux que tante Agatha
déteste.
Personne ne déteste tout le monde.
Sylvain Hallé - 8INF958 Spécification, test et vérification
117. Modélisation propositionnelle
Une modélisation du problème en logique
propositionnelle est peu commode
Beaucoup de variables
Beaucoup de formules répétées pour chaque variable
Et si on ajoute un individu au Manoir?
Peut-on faire mieux?
Sylvain Hallé - 8INF958 Spécification, test et vérification
118. Éléments
Le problème précédent concerne un certain nombre
d'éléments...
E = {Agatha, Maître d'hôtel, Charles}
...et donne une liste de faits à propos de ces éléments.
Par exemple:
"Tante Agatha est la victime"
"Tante Agatha déteste tout le monde, sauf le maître
d'hôtel"
Sylvain Hallé - 8INF958 Spécification, test et vérification
119. Prédicat
Un prédicat p est une fonction prenant des éléments en
entrée et retournant ⊤ ou ⊥. Formellement, on écrit:
n
arité du prédicat
p : E → {⊤,⊥}
Exemples:
prédicat d'arité 1 (unaire)
victime(__)
assassin(__)
prédicats d'arité 2 (binaires)
déteste(__, __)
plusRicheQue(__, __)
Intuitivement, un prédicat est une affirmation à propos
d'un ou plusieurs éléments
Sylvain Hallé - 8INF958 Spécification, test et vérification
120. Prédicat
Puisqu'un prédicat retourne toujours ⊤ ou ⊥, on peut
combiner les prédicats en utilisant les connecteurs de la
logique propositionnelle:
victime(Agatha)
assassin(Charles) → plusRicheQue(Agatha, Charles)
déteste(Agatha, Maître d'hôtel) ∨ assassin(Agatha)
Problème: que fait-on d'une affirmation comme
"Un assassin déteste toujours sa victime" ?
Sylvain Hallé - 8INF958 Spécification, test et vérification
121. Prédicat
Méthode #1 (façon propositionnelle): énumérer les cas
possibles
((assassin(Agatha) ∧ victime(Charles))
→ déteste(Agatha, Charles))
∧
((assassin(Charles) ∧ victime(Agatha))
→ déteste(Charles, Agatha))
∧
...
Peu commode...
Sylvain Hallé - 8INF958 Spécification, test et vérification
122. Quantificateurs
Méthode #2: utiliser des quantificateurs
∀x : ∀y : (assassin(x) ∧ victime(y)) → déteste(x,y)
"pour tout x (pris dans l'ensemble E)"
Intuitivement, si E = {a, b, c, ..., k}, alors
∀x : φ ≡ φ[x/a] ∧ φ[x/b] ∧ ... ∧ φ[x/k]
où φ[x/a] est l'expression φ dans laquelle on a remplacé
tous les x par a
Ex.: ∀x : assassin(x) ≡ assassin(Agatha) ∧
assassin(Charles) ∧ assassin(Maître d'hôtel)
Sylvain Hallé - 8INF958 Spécification, test et vérification
174. Complexité
Étant donné une expression à n variables, toutes les
méthodes vues jusqu'ici ont une complexité en pire cas
de l'ordre de 2n
Théorème (Cook, 1971)
Le problème SAT est un problème
NP-complet.
Conséquence: on ne sait pas
à l'heure actuelle s'il existe un
algorithme SAT dont le pire
cas serait inférieur à O(2n )
Si oui, alors P=NP !
Stephen A. Cook
(1939-)
Sylvain Hallé - 8INF958 Spécification, test et vérification
183. Ajax web application
Cloud computing
artist
=beatles
document.innerHTML =
Sylvain Hallé
findBand(’Beatles’)
184. Ajax web application
Cloud computing
artist
=beatles
document.innerHTML =
C
Page is updated,
not reloaded
Sylvain Hallé
findBand(’Beatles’)
185. Ajax web application
Cloud computing
artist
=beatles
document.innerHTML =
C
Server response only provides
updated contents
Sylvain Hallé
findBand(’Beatles’)
186. Ajax web application
Cloud computing
<Search>
<Artist>
beatles
</Artist>
</Search>
Does not need
to be a URL
Does not need
to be HTML
<SearchResults>
<Item>
<Artist>
The Beatles
</Artist>
<Title>
Rubber Soul
</Title>
</Item>
...
</SearchResults>
Sylvain Hallé
194. Main issue
Not like traditional programming: all
input-output is exchanged unverified!
Possible mismatch
between messages sent
and messages expected
Sylvain Hallé
200. Three types of constraints (I)
Constraints on individual messages
<Message>
<Action>ItemSearch</Action>
<Results>5</Results>
<Keyword>beatles</Keyword>
<Page>1</Page>
</Message>
Examples:
Sylvain Hallé
201. Three types of constraints (I)
Constraints on individual messages
<Message>
<Action>ItemSearch</Action>
<Results>5</Results>
<Keyword>beatles</Keyword>
<Page>1</Page>
</Message>
Examples:
1. The element Page must be an integer between 1 and 20."
/M
Sylvain Hallé
202. Three types of constraints (I)
Constraints on individual messages
<Message>
<Action>ItemSearch</Action>
<Results>5</Results>
<Keyword>beatles</Keyword>
<Page>1</Page>
</Message>
Examples:
1. The element Page must be an integer between 1 and 20."
/M
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.
Sylvain Hallé
203. Expressing data constraints
Simple XPath
Fetches portions of an XML document according to a
query path = sequence of tags
V
pM ®
: Q ´2
Examples:
p ’’, m) = {1,2,4}
(‘‘/a/b/c
p ’’, m) = Æ
(‘‘/a/b/d
Sylvain Hallé
{
M: set of messages
Q: set of XML query paths
V: set of atomic values
<a>
<b>
<c>1</c>
<c>2</c>
</b>
<d>
<c>9</c>
</d>
<b>
<c>3</c>
</b>
</a>
m
204. Expressing data constraints
XPath term
Expresses properties over values fetched by XPath expressions
p
"Û v Î
(x)
j
(q,m)
q x : j (v) for every
p
$ Û vÎ
(x)
j
(q,m)
q x : j (v) for some
Examples:
"x < 5
/a/b/c x :
$
/a/b x :
$ : "y £
x
/a/b/c x
/a/b/c y :
Sylvain Hallé
<a>
<b>
<c>1</c>
<c>2</c>
</b>
<d>
<c>9</c>
</d>
<b>
<c>3</c>
</b>
</a>
{
Q,
M, path
For some message m Î q Î
m
2
212. Linear Temporal Logic
LTL formula
Ga
Xa
Fa
aWb
= assertion on the sequence of states in a trace
"always a"
"a in the next"
"eventually a"
"a until b"
A B A C D C B E
G (a ®
X b) FALSE
Sylvain Hallé
...
ØW c
(d Ú
e)
TRUE
213. Linear Temporal Logic
Well-known results:
1. For every LTL formula jexists a Büchi automaton A j
, there
such that for every (infinite) trace s
:
s sj
| j L(A )
= Û
Î
-regular
i.e. LTL describes w languages
2. The alphabet symbols can be generalized to finite sets of
Boolean propositions
Þ
Let’s use XPath terms as our Boolean propositions
Sylvain Hallé
214. Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>
X
<Message>
<Action>
Login
</Action>
...
</Message>
<Message>
<Action>
CartCreate
</Action>
...
</Message>
Examples:
3. The Login request cannot be resent if its response is"
/
successful."
/
.
4. CartCreate must follow a successful LoginResponse."
/
Sylvain Hallé
2
215. Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>
X
<Message>
<Action>
Login
</Action>
...
</Message>
<Message>
<Action>
CartCreate
</Action>
...
</Message>
Examples:
3. G ("
/Message/Action a : a = LoginResponse ®
(X G "
Login))
/Message/Action a’ : a’ ¹
.
4. CartCreate must follow a successful LoginResponse."
/
Sylvain Hallé
2
216. Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>
Examples:
X
<Message>
<Action>
Login
</Action>
...
</Message>
<Message>
<Action>
CartCreate
</Action>
...
</Message>
Xpath terms
3. G ("
/Message/Action a : a = LoginResponse ®
(X G "
Login))
/Message/Action a’ : a’ ¹
.
4. CartCreate must follow a successful LoginResponse."
/
Sylvain Hallé
2
217. Three types of constraints (II)
Constraints on message sequences
<Message>
<Action>
LoginResponse
</Action>
...
</Message>
Examples:
X
<Message>
<Action>
Login
</Action>
...
</Message>
<Message>
<Action>
CartCreate
</Action>
...
</Message>
Xpath terms
3. G ("
/Message/Action a : a = LoginResponse ®
(X G "
Login))
/Message/Action a’ : a’ ¹
.
4. ("
CartCreate)
/Message/Action a : a ¹
W ("
LoginResponse)
/Message/Action a’ : a’ =
Sylvain Hallé
2
218. Three types of constraints (III)
Data-aware sequential constraints
<Message>
<SessionKey>123</SessionKey>
<CartId>789</CartId>
...
</Message>
<Message>
<SessionKey>123</SessionKey>
<CartId>789</CartId>
...
</Message>
Examples:
5. There can be at most one active cart ID per session key."
/
Sylvain Hallé
2
219. Three types of constraints (III)
Data-aware sequential constraints
<Message>
<SessionKey>123</SessionKey>
<CartId>789</CartId>
...
</Message>
<Message>
<SessionKey>123</SessionKey>
<CartId>789</CartId>
...
</Message>
Examples:
5. G ("
/Message/SessionKey k : "
/Message/CartId c :
G ("
/Message/SessionKey k’ : "
/Message/CartId c’ :
k = k’ ®
c = c’))
Sylvain Hallé
2
220. Three types of constraints (III)
Data-aware sequential constraints
<Message>
<Action>CartAdd</Action>
<Items>
<Item>
<ItemId>567</ItemId>
...
Examples:
<Message>
<Action>CartAdd</Action>
<Items>
<Item>
<ItemId>567</ItemId>
...
X
6. You cannot add the same item twice to the shopping cart."
/
Sylvain Hallé
2
221. Three types of constraints (III)
Data-aware sequential constraints
<Message>
<Action>CartAdd</Action>
<Items>
<Item>
<ItemId>567</ItemId>
...
Examples:
<Message>
<Action>CartAdd</Action>
<Items>
<Item>
<ItemId>567</ItemId>
...
X
6. G ("
/Message/Action a : a = CartAdd ®
"
/Message/ItemId i : X G ("
/Message/Action a’ :
a’ = CartAdd ® i’ : i ¹
"
i’ ))
/Message/ItemId
Sylvain Hallé
2
222. Six constraints for the Beep Store
Constraints on individual messages
Constraints on message sequences
Data-aware constraints
Sylvain Hallé
223. Six constraints for the Beep Store
1. The element Page must be an integer between 1 and 20.
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.
Constraints on message sequences
Data-aware constraints
Sylvain Hallé
224. Six constraints for the Beep Store
1. The element Page must be an integer between 1 and 20.
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.
3. The Login request cannot be resent if its response is
successful.
4. CartCreate must follow a successful LoginResponse.
Data-aware constraints
Sylvain Hallé
225. Six constraints for the Beep Store
1. The element Page must be an integer between 1 and 20.
2. The element Page is mandatory only if Results is present,
otherwise it is forbidden.
3. The Login request cannot be resent if its response is
successful.
4. CartCreate must follow a successful LoginResponse.
5. There can be at most one active cart ID per session key.
6. You cannot add the same item twice to the shopping cart.
Sylvain Hallé
239. Définition
Runtime monitoring
Étude du design d'outils pour observer et analyser un
système pendant son exécution.
Usages possibles:
Testing/débogage
Sécurité et détection d'intrusions
Protection contre les fautes/pannes
Compréhension de programmes
Plusieurs noms: runtime verification, runtime checking,
dynamic analysis, trace analysis, fault protection, ...
Sylvain Hallé - 8INF958 Spécification, test et vérification
240. Composantes
Structure de base d'un système de runtime monitoring:
Spécification
Système cible
Événement
État
interne
Moniteur
Senseur
Verdict
Réaction
(facultatif)
Sylvain Hallé - 8INF958 Spécification, test et vérification
241. Enforcing interface contracts at runtime
XMLHttpRequest
·
JavaScript object
·
Provided by the browser
·
All communications to monitor
already centralized: ‘‘no’’
instrumentation
Sylvain Hallé
243. Enforcing interface contracts at runtime
XMLHttpRequestBB
XMLHttpRequest
· around original
Wrapper
· same methods
Provides
· messages before
Checks
relaying them
Sylvain Hallé
LTL-FO+
algorithm
244. Add BeepBeep to an application
Copy BeepBeep
? in the application's directory
http://beepbeep.sourceforge.net
Include BeepBeep
myapplication.html
<html>
<head>
<title>My Application
</title>
<script type="text/javascript"
href="myapplication.js"/>
</head>
<body>
...
</body>
</html>
Sylvain Hallé
245. Add BeepBeep to an application
Copy BeepBeep
? in the application's directory
http://beepbeep.sourceforge.net
Include BeepBeep
myapplication.html
<html>
<head>
<title>My Application
</title>
<script type="text/javascript"
href="myapplication.js"/>
<script type="text/javascript"
href="beepbeep.js"/>
</head>
<body>
...
</body>
</html>
Sylvain Hallé
246. Add BeepBeep to an application
Copy BeepBeep
? in the application's directory
http://beepbeep.sourceforge.net
Include BeepBeep
myapplication.html
<html>
<head>
<title>My Application
</title>
<script type="text/javascript"
href="myapplication.js"/>
<script type="text/javascript"
href="beepbeep.js"/>
</head>
<body>
...
</body>
</html>
Sylvain Hallé
myapplication.js
// Initializations
...
req = new XMLHttpRequest();
...
function abc()
{
...
req.send(some_message);
}
247. Add BeepBeep to an application
Copy BeepBeep
? in the application's directory
http://beepbeep.sourceforge.net
Include BeepBeep
beepstore.html
<html>
<head>
<title>My Application
</title>
<script type="text/javascript"
href="myapplication.js"/>
<script type="text/javascript"
href="beepbeep.js"/>
</head>
<body>
...
</body>
</html>
Sylvain Hallé
beepstore.js
// Initializations
...
req = new XMLHttpRequestBB();
...
function abc()
{
...
req.send(some_message);
}
248. Add BeepBeep to an application
Create a contract
? file with LTL-FO+ formulas
# ------------------------------------------------------# BeepBeep contract file for the Beep Store
# ------------------------------------------------------% The element Page must be an integer between 1 and 20.
; G ([p /Message/Page] (((p) > ({0})) & ((p) < ({21}))))
% The element Page is mandatory only if Results is
present, otherwise it is forbidden.
; G ([a /Message/Action] (((a) = ({ItemSearch})) -> (
((<r /Message/Results> ({TRUE})) ->
(<p /Message/Page> ({TRUE}))) &
((<p /Message/Page> ({TRUE})) -> (
<r /Message/Results> ({TRUE}))))))
% The Login request cannot be resent if its response
is successful.
; G ([a /Message/Action] (((a) = ({LoginResponse})) ->
(X (G ([b /Message/Action] (!((b) = ({Login}))))))))
Sylvain Hallé
}
Caption: used
when violations
are discovered
Plain-text
LTL-FO+
(automatically
parsed)
249. Add BeepBeep to an application
When loading
the application, BeepBeep starts as a small
Java applet inside the page
The
Beep
Store
Sign in or register
Search:
Search results for ‘Beatles’
What is this?
Login
Rubber Soul
The Beatles
Ask for account
Contact us
Fault parameters
Yellow Submarine
The Beatles
?/?/?/?/?/?:0:0
Sylvain Hallé
GO
Your Cart
250. Add BeepBeep to an application
When loading
the application, BeepBeep starts as a small
Java applet inside the page
The
Beep
Store
Sign in or register
Search:
Search results for ‘Beatles’
What is this?
Login
Rubber Soul
The Beatles
Ask for account
Contact us
Fault parameters
?/?/?/?/?/?:0:0
Sylvain Hallé
Yellow Submarine
The Beatles
GO
Your Cart
251. BeepBeep’s visible interface
?/?/?/?/?/?:0:0
Current state of monitor
for each property
T:
t:
F:
f:
?:
last message made it true
is true
last message made it false
is false
not yet true/false
Sylvain Hallé
Number of
messages
processed
Cumulative
processing
time (in ms)
252.
253. On ne peut réussir un niveau sans sauter au moins
une fois
F action = jump
254. 20
Mario ne peut jamais sauter d'une hauteur
supérieure à 20
G (action = jump → height < 20)
255. X
Si Mario se penche, il ne peut pas sauter tout de
suite après
G (action = crouch → X action ≠ jump)
256. X
Mario ne peut jamais entrer en collision avec un
ennemi lorsqu'il tient une carapace
G (action = haveShell → X action ≠ collision)
ou mieux
G (action = haveShell →
(action ≠ collision U action = dropShell))
262. COVERSTORY
Verified software
My computer won’t fail me
Web-browser crashes are annoying, but as far as software malfunctions go, the
consequences are mild. With a plane’s autopilot or the control room of a nuclear power
station, it’s another matter. As our lives become ever more saturated with computers,
how can we know they won’t fail? Currently, we systematically test all conceivable
scenarios under which they might. A better insurance might be logic. [...]
32 | New Scientist | 16 October 2010