Cours Méthodes Formelles 3
Cours Méthodes Formelles 3
Méthodes Formelles
pour la Conception des Logiciels
Francesco Belardinelli
Laboratoire IBISC
Remerciements à Alessio Lomuscio et Joost-Pieter Katoen
16 novembre 2012
Pourquoi adopter des méthodes formelles ?
Peer reviewing :
• technique statique : inspection manuelle du code, pas d’exécution du
logiciel.
• détecte entre 31% et 93% de défauts avec une médiane de 60% environ.
• les erreurs subtiles (défauts de concurrence et dans l’algorithme) sont
difficiles à découvrir.
Testing :
• technique dynamique dans lequel le logiciel est exécuté.
• de 30% à 50% du coût des projets des logiciels est dédié au testing.
• plus de temps et d’efforts sont consacrés à la validation que au codage.
• densité de défauts acceptée : environ 1 défaut pour 1.000 lignes de code.
Méthodes Formelles
Description intuitive :
• les méthodes formelles sont les ”mathématiques appliquées à la
modélisation et l’analyse des systèmes TIC”.
Les méthodes formelles ont un grand potentiel pour :
• obtenir une intégration précoce de la vérification dans le processus de
conception du logiciel.
• fournir des techniques de vérification plus efficaces (couverture plus élevée)
• réduir le temps de vérification
Utilisation des méthodes formelles.
• Fortement recommandé par CEI, FAA et NASA pour les logiciels critiques.
• Exemple : ligne 14 du métro de Paris (Méthode B).
Techniques de Vérification Formelle pour la Propriété P
Méthodes déductives
• méthode : fournir une preuve formelle que P est vrai.
• outil : démonstrateur des théorèmes / assistant de preuve ou proof-checker
(Coq, Isabelle, Pandora)
• applicable si : le système se présente sous forme d’une théorie
mathématique (par exemple, tableaux)
Model-checking
• méthode : contrôle systématique de P dans tous les états
• outil : model checker (Spin, NuSMV, UppAal, . . . )
• applicable si : le système génère un modèle fini de comportements
Procédure de base :
• prendre un modèle (simulation) ou une réalisation (testing)
• introduir certains inputs (à savoir, des tests)
• observer la réaction et vérifier si cela est “désiré”
Inconvénients importants :
• le nombre de comportements possibles est très grand (voire infini)
• les comportements inexplorées peuvent contenir le bug fatal
À propos du testing . . .
• Le test / simulation peut montrer la présence d’erreurs, pas leur absence
Étapes de la Vérification Formelle
1. Spécification et Vérification.
2. Langages modaux : syntaxe, sémantique, exemples.
3. Vérification par model checking : théorie, pratique et limites.
Répartition du Cours
• Semaine 1
I Introduction au cours.
I Spécification par langages modaux - concepts de base, syntaxe, sémantique.
I Logiques temporelles - LTL, CTL. Expressivité.
I Exercices.
• Semaine 2
I Automates de Büchi finis et infinis.
I Formules comme automates.
I Systèmes comme automates.
I Exercices.
• Semaine 3
I Le problème du model checking.
I Produits de automates.
I Systèmes de transitions.
I Le model checker SPIN.
Matériaux d’étude
Justification du jury
• ”Pour leurs rôles dans le développement du model-checking dans une
technologie de vérification très efficace, largement adoptée dans les
industries des matériels informatiques et des logiciels”.
Une affaire d’université ? !
Consultez :
Systèmes de transitions :
• états marqués avec des propositions simple.
• relation de transition entre les états.
• transitions marqués par des actions pour faciliter la composition.
Expressivité
• les programmes sont des systèmes de transitions
• les programmes multi-thread sont des systèmes de transitions
• les processus communicants sont des systèmes de transitions
• les circuits sont des systèmes de transitions
• Quoi d’autre ?
Quelles sont les propriétés ?
• Phase de modélisation
I modéliser le système à l’étude
I comme test de cohérence, on peut d’abord effectuer quelques simulations
I formaliser la propriété à vérifier
• Phase d’exécution
I exécuter le model checker pour vérifier la validité de la propriété dans le
modèle
• Phase d’analyse
I propriété satisfaite ? ⇒ vérifier la propriété suivante (le cas échéant)
I propriété violée ? ⇒
• accent sur les applications basées sur les instruction de contrôle (moins sur
les données)
• le model checking est aussi “bon” que le modèle du système
• très puissant, en principe, mais difficile à maı̂triser et coûteux à utiliser à
l’échelle industrielle (étant donné la formation nécessaire).
• pour ces raisons utilisé maintenant principalement pour les systèmes
critiques.
• difficile à appliquer à des espaces d’états larges.
• aucune garantie quant à l’exhaustivité des résultats
• impossible de vérifier des généralisations
Néanmoins :
• de plus en plus les systèmes informatiques sont essentiels à nos vies :
tendance croissante dans l’analyse et vérification des systèmes.
• le model-checking est une technique efficace pour révéler les erreurs
potentiels de conception.
Exemples Saissants de Model Checking
• Systèmes de transport
I modèle de train contenant 10476 états
Tous ces sujets sont importants et intéressants - si quelqu’un parmi vous est
intéressé à des lectures ulterieures et/ou à des projets, contactez-moi pour des
renseignements.
Textes pour en savoir plus sur cette partie
Outre que ces notes, si vous êtes intéressés au sujet, vous pouvez consulter :
• Goldblatt ; Logics of Time and Computation. CSLI Publications, 1992.
Concis et réconnu. Très bonne introduction à la logique temporelle.
• Fagin, Halpern, Moses, Vardi ; Reasoning about Knowledge, MIT Press
1995.
Une des références principales pour tous ceux qui font de la recherche sur la
logique épistémique. Recommandé.
• Hughes & Cresswell ; A New Introduction to Modal Logic. Routledge 1996.
De nature plutôt philosophique. Aucun élément d’Informatique.
• Meyer & van der Hoek ; Epistemic Logic in Computer Science, CUP 1995.
Etude approfondie de la logique épistémique et ses applications.
• Blackburn, de Rijke, Venema ; Modal Logic. CUP 2001.
Une très bonne introduction à ce sujet. De nature mathématique. Exigeant.
Si vous êtes intéressés à faire de la recherche dans ce domaine ou simplement à
en connaı̂tre davantage, Blackburne, de Rijke & Venema est recommandé pour
les mathématiques de la logique modale, Fagin et al. est la référence pour ses
aspects informatiques.
Logique Temporelle LTL : Syntaxe et Sémantique
Lorsqu’on fait référence aux langages formels, il est toujours utile de séparer
deux concepts : la syntaxe et la sémantique.
• Syntaxe : façon dont nous écrivons les formules.
Elle définit le langage logique que nous utilisons dans l’écriture des formules.
• Sémantique : interprétation des formules construites selon la syntaxe.
Logique modale de base : Syntaxe et Sémantique
Definition (Syntaxe)
Soit P un ensemble de variables propositionnelles p, q, . . ., l’ensemble L des
formules de la logique modale propositionnelle est défini inductivement par :
• tous p ∈ L
• true ∈ L
• Si φ ∈ L, alors ¬φ ∈ L
• Si φ, ψ ∈ L, alors φ ∧ ψ ∈ L
• Si φ ∈ L, alors φ ∈ L
• Si φ ∈ L, alors
φ ∈ L
• Si φ, ψ ∈ L, alors φUψ ∈ L
• Rien d’autre est en L
Notez que P peut être aussi grand qu’infini dénombrable (mais nous ne sommes
pas concernés avec ces questions dans ce cours).
Nous écrivons φ, ψ, . . . pour des formules arbitraires dans L, et p, q, . . . pour
des propositions atomiques dans P.
true est le symbole pour la vérité logique, le connecteur unaire ¬ signifie la
négation logique, alors que le connecteur binaire ∧ représente la conjunction
logique.
Logique Temporelle LTL : Syntaxe et Sémantique
D’après la Définition 1, l’ensemble L des formules que nous utilisons est une
extension du calcul des propositions par l’opérateur , que nous appelons box,
l’opérateur
(next), et l’opérateur U (until).
Exercice
Soit P = {p, q} un ensemble de variables propositionnelles, quelles parmi les
suivantes sont des formules modales ?
• pφ ∧ q
• p ∧ q
• ¬¬q
• ¬∧p
• ¬q ∧ ¬φ
Abréviations
Il est parfois pratique d’utiliser d’autres connecteurs qu’on peut définir à partir
de la Définition 1.
• false pour la formule ¬true
• φ ∨ ψ signifie ¬(¬φ ∧ ¬ψ)
• φ → ψ signifie ¬φ ∨ ψ, c’est à dire, ¬(φ ∧ ¬ψ)
• φ signifie ¬¬φ
Notez que nous utilisons les parenthèse ( et ) pour desambiguer les formules à
chaque fois qu’il est nécessaire.
La plupart de ces abréviations vient de la logique propositionnelle : ∨ est la
disjunction logique, alors que → représente l’implication logique. L’opérateur
modal est le dual de et il est lu comme “diamant”.
Modalités - lectures
Autres exemples :
Epistémique φ on sait qu’on sait φ
Epistémique φ on sait qu’il est possible que φ
Mais la plupart des propriétés que nous allons étudier concerne l’évolution
temporelle.
Considerez la lecture des formules suivantes d’une façon temporelle :
φ → φ si φ est vraie maintenant, alors elle sera toujours vraie
φ → φ si φ est toujours vraie, alors elle sera vraie parfois dans le futur
D’autres opérateurs temporels sont possibles. On les verra dans la suite.
Notez l’expressivité des combinaisons d’opérateurs avec des interprétations
différentes !
Par exemple, on lit T K φ comme “l’agent saura toujours que φ” si on donne
une lecture temporelle à la première modalité et une lecture épistémique à la
deuxième.
On va explorer certains de ces aspects vers la fin du cours.
Sémantique des Mondes Possibles
Une bonne sémantique doit être simple et intuitive, mais en même temps, elle
doit être capable d’accueillir toutes les différentes lectures des modalités.
Il n’existe pas une seule sémantique pour la logique modale, et même la question
a reçu beaucoup d’attention dans le passé.
Ici on présente la sémantique des mondes possibles telle qu’elle a été définie par
S. Kripke à la fin des années 50 (basée sur les idées de Tarski et Johnson, début
des années 50, mais aussi de Leibniz, XVIII siècle).
Definition (Structure)
Une structure de Kripke F est un couple F = (W , R) tel que
• W 6= ∅ est un ensemble de mondes possibles,
• R ⊆ W × W est une rélation définie sur W .
Exercice
Définez les structures de Kripke de certains structures mathématique (et non)
que vous connaissez. Dessinez-les aussi !
Par exemple :
• (N, suc), l’ensemble des nombres naturels avec la rélation de successeur est
une structure de Kripke.
• ({w }, ∅) est une structure de Kripke.
• (Z, suc), l’ensemble des nombres entiers avec la rélation de successeur est
une structure de Kripke.
• (N, <), l’ensemble des nombres naturels avec la rélation de “mineur que”
est une structure de Kripke.
• Chaque arbre fini et infini est une structure de Kripke.
Modèles de Kripke
1
Soit A un ensemble, 2A est l’ensemble des parties de A, à savoir, l’ensemble contenant tous les
sous-ensembles de A. Par exemple, si A = {1, 2}, alors 2A = {∅, {1}, {2}, {1, 2}}.
Modèles de Kripke
La notion de satisfaction sur les modèles de Kripke est définie comme il suit :
Definition (Satisfaction)
La satisfaction d’une formule φ ∈ L dans un chemin ρ = w0 , w1 , . . . d’un modèle
M, formellement (M, ρ) |= φ, est définie inductivement comme il suit :
(M, ρ) |= true
(M, ρ) |= p ssi w0 ∈ π(p)
(M, ρ) |= ¬φ ssi (M, ρ) 6|= φ
(M, ρ) |= φ ∧ ψ ssi (M, ρ) |= φ et (M, ρ) |= ψ
(M, ρ) |= φ ssi pour tous i ≥ 0, (M, ρ(i)) |= φ
(M, ρ) |=
φ ssi (M, ρ(1)) |= φ
(M, ρ) |= φUψ ssi il exists i ≥ 0 tel que (M, ρ(j)) |= ψ
et pour tous 0 ≤ i < j, (M, ρ(i)) |= φ
Exercice
Vérifier que les abréviations introduites ci-dessus donnent les résultats entendus.
Par exemple,
Solution
(M, ρ) |= φ ∨ ψ ssi (M, ρ) |= ¬(¬φ ∧ ¬ψ)
ssi (M, ρ) 6|= ¬φ ∧ ¬ψ
ssi (M, ρ) 6|= ¬φ ou (M, ρ) 6|= ¬ψ
ssi (M, ρ) |= φ ou (M, ρ) |= ψ
Modèles de Kripke
Exercice
Soit M un modèle de Kripke, construit sur un ensemble de variables
propositionnelles P = {p, q} comme il suit :
• M = {w1 , w2 , w3 , w4 }
• R = {(w2 , w1 ), (w3 , w2 ), (w4 , w2 ), (w4 , w3 ), (w3 , w3 )}
• π(p) = {w2 , w4 } ; π(q) = {w2 , w3 , w4 }
payer
τ
sprite selectionner bière
τ
Dans le cours on a vu :
• la logique temporelle LTL
• les automates de Buchi
Maintenant, considèrez le problème suivant :
Definition
Si TS = (S, Act, →, I , AP, L) est un système de transitions où Act = ∅, alors
l’automate de Büchi ATS = (QTS , ITS , δTS , ΣTS , FTS ) correspondant à TS est tel
que
• QTS = S = FTS
• ITS = I
• ΣTS = 2AP
• s ∈ δTS (s, a) ssi s → s 0 et L(s) = a
Le model checking de LTL est alors reduit à contrôler que Lω (ATS × A¬φ ) est
vide.
Automates de Büchi Finis
Definition
Un automate de Buchi fini est une tuple A = (Q, I , δ, Σ, F ) où :
• Q est ensemble fini d’états
• I ⊆ Q est un ensemble des états initiaux
• δ : Q × Σ → 2Q est une fonction de transition
• Σ est un alphabet fini
• F ⊆ Q est un ensemble d’états d’acceptation.
α
α e1 e2 β
Fig. : A1
Automates de Büchi Finis
Theorem
Si A1 et A2 sont des FBA, alors il existe un FBA A tel que
L(A) = L(A1 ) ∩ L(A2 ).
Démonstration.
Soit Ai = (Qi , Ii , δi , Σ, Fi ) pour i = 1, 2. Définez A = (Q, I , δ, Σ, F ) tel que
• Q = Q1 × Q2
• I = I1 × I2
• δ((s1 , s2 ), a) = δ1 (s1 , a) × δ2 (s2 , a)
• F = F1 × F2
α α
α e1 e2 β β s1 s2 α
β β
(a) A1 (b) A2
• L(A1 ) = (αβ ∗ )∗
• L(A2 ) = (β ∗ (αα∗ β)∗ β ∗ )∗
Produit de FBA
α α
α e1 e2 β β s1 s2 α
β β
(a) A1 (b) A2
• L(A1 ) = (αβ ∗ )∗
• L(A2 ) = (β ∗ (αα∗ β)∗ β ∗ )∗
α
e1 , s 1 e1 , s2 α
α
β α
β
β e2 , s 1 e2 , s2
β
Fig. : A1 × A2
Automates de Büchi Finis
Theorem
Si A est un FBA déterministe, alors il existe un FBA A tel que
L(A) = Σω \ L(A) = L(A).
Démonstration.
Si A = (Q, I , δ, Σ, F ), alors A = (Q, I , δ, Σ, Q \ F ). On peut contrôler que
L(A) = Σω \ L(A).
Theorem
Si A est un FBA non-déterministe, alors il existe un FBA déterministe Ad tel
que L(Ad ) = L(A).
Démonstration.
Si A = (Q, I , δ, Σ, F ), alors Ad = (Qd , Id , δd , Σd , Fd ) est tel que
• Qd = 2Q
• Id = {I }
• δd (S, a) = {s 0 ∈ Q | s 0 ∈ δ(s, a) pour quelque s ∈ S}
On peut contrôler que Ad est déterministe et L(Ad ) = L(A).
La dimension |Qd | = 2|Q| de Ad est exponentielle dans la dimensions |Q| de
A
Automates de Büchi
Definition
Un automate de Buchi est une tuple A = (Q, I , δ, Σ, F ) où Q, I , δ, Σ, et F sont
definis comme pour les FBA.
Automate de Buchi déterministe : même definition que pour les FBA.
• Un mot infini m est une séquence infini a0 , . . . , an , . . . de symboles de Σ.
• Σω est l’ensemble de tous mots infinis.
• Une exécution ρ sur un mot infini m = a0 , . . . , an , . . . est une séquence
infini s0 , . . . , sn , . . . d’états dans Q tel que (i) s0 ∈ I et (ii) pour tous i < n,
si+1 ∈ δ(si , ai ).
• Les BA non-déterministe peuvent avoir plusieurs exécution pour chaque mot
donné.
• lim(ρ) ⊆ Q est l’ensemble d’états qui apparaissent infiniment souvent dans
ρ.
• Une exécution ρ sur un mot fini m accepte m ssi lim(ρ) ∩ F 6= ∅.
• Un mot m est accepté par un BA A ssi il y a une exécution ρ dans A qui
accepte m.
• Lω (A) est l’ensemble des mots infinis accepté par le BA A.
FBA et BA
α α
s t α s t
(a) A (b) A0
α α
s t s t
α α
(c) A (d) A0
Theorem
Si A1 et A2 sont des BA, alors il existe un BA A tel que
L(A) = L(A1 ) ∩ L(A2 ).
Démonstration.
Soit Ai = (Qi , Ii , δi , Σ, Fi ) pour i = 1, 2. Définez A = (Q, I , δ, Σ, F) tel que :
• Q = Q1 × Q2 × {1, 2}
• I = I1 × I2 × {1}
• (t1 , t2 , i) ∈ δ((s1 , s2 , j), a) si t1 ∈ δ1 (s1 , a) et t2 ∈ δ2 (s2 , a) et
I j = i ; ou
I j = 1, s ∈ F et i = 2 ; ou
1 1
I j = 2, s ∈ F et i = 1
2 2
• F = F1 × Q2 × {1}
On peut verifier que L(A) = L(A1 ) ∩ L(A2 ).
Produit de BA
α α
e3 e4 s3 s4
α α
(e) A3 (f) A4
• Lω (A3 ) = Lω (A4 ) = αω
Produit de BA
α α
e3 e4 s3 s4
α α
(i) A3 (j) A4
• Lω (A3 ) = Lω (A4 ) = αω
e3 , s 3 e4 , s3 e3 , s3 , 1 e4 , s 3 , 1 e3 , s3 , 2 e4 , s 3 , 2
α α α α
e4 , s 4 e3 , s4 e4 , s4 , 1 e3 , s 4 , 1 e4 , s4 , 2 e3 , s 4 , 2
0 1
Automates de Büchi
Theorem
Le problème du langage vide pour les BA est décidable en temps linéaire.
Démonstration.
Soit A = (Q, I , δ, Σ, F ) un BA. Pour s, t ∈ S on dit que
• t est lié directement à s si il y a a ∈ Σ tel que t ∈ δ(s, a) ;
• t est lié à s s’il y a une séquence s1 , . . . , sm telle que (i) s1 = s, (ii) sm = t,
et (iii) pour tous 1 ≤ i < m, si+1 est lié directement à si .
Le langage L(A) n’est pas vide ssi il y a des états s ∈ I et t ∈ F tels que (i) s
est lié a t, et (ii) t est lié a so-même.
Un algorithme peut trouver une décomposition du graphe en composants
fortement connexes (algorithm de Tarjan).
L(A) est non vide ssi à partir d’un composant qui intersecte I non-trivialment, il
est possible de parvenir à un composant non-trivial qui intersecte F
non-trivialment.
Automates de Büchi
Theorem
Pour chaque formule φ ∈ LTL, Lω (Aφ ) = Lω (A¬φ ).
Démonstration.
m ∈ Lω (Aφ ) ssi m ∈ Lω (Aφ )
ssi m ∈ (2AP )ω et m ∈
/ Lω (Aφ )
ssi m ∈ (2AP )ω et ρm |6 = φ
ssi m ∈ (2AP )ω et ρm |= ¬φ
ssi m ∈ Lω (A¬φ )
Infiniment Souvent Vert ?
¬ green
green
{red} {red}
q0 q1
s0 s1 s0 s1 ¬ green
¬ green
green
{red} {red}
q0 q1
s0 s1 s0 s1 ¬ green
s0 , q0 ,1 s0 , q1 , 1 s0 , q0 ,2 s0 , q1 , 2
s1 , q0 , 1 s1 , q1 , 1 s1 , q0 , 2 s1 , q1 , 2
∅ {red} ∅ {red}
s2 s0 s1 s2 s0 s1
{green} {red} {green}
∅ {red} ∅ {red}
s2 s0 s1 s2 s0 s1
{green} {red} {green}
s2 , q0 ,1 s2 , q1 , 1 s2 , q0 ,2 s2 , q1 , 2
s0 , q0 ,1 s0 , q1 , 1 s0 , q0 ,2 s0 , q1 , 2
s1 , q0 , 1 s1 , q1 , 1 s1 , q0 , 2 s1 , q1 , 2
Theorem
Vérifier si un automate de Büchi A satisfait une formule φ de LTL est fait en
temps O(|A| · 2O(|φ|) ) ou en espace O(log |A| + |φ|).
Systèmes de transitions
payer
τ
sprite selectionner bière
τ
a
• Un état s est final s’il n’y a pas de a ∈ Act, s 0 ∈ S tels que s −
→ s 0.
• Un fragment fini ρ d’une éxécution de TS est une séquence alternante
d’états et actions qui termine par un état :
αi+1
ρ = s0 α1 s1 α2 s2 . . . αn sn tel que si −−−→ si+1 pour tous 0 ≤ i < n
x = 0, r = 0 x = 1, r = 0
x = 0, r = 1 x = 1, r = 1
• Katoen 1.1
Synchronisation Parallèle
où L est défini comme auparavant et → est défini par la regle suivante
α β
→ s10
s1 − → s20
s2 −
α∗β
(s1 , s2 ) −−→ (s10 , s20 )
Synchronisation Parallèle
0 00 01
1 10 11
Definition
Donnés un système de transitions TS = (S, Act, →, I , AP, L) sans états finaux
et un BA non-bloquant A = (Q, Σ, δ, I , F ) tel que Σ = 2AP , définez
TS1 ⊗ A = (S 0 , Act, →0 , I 0 , AP 0 , L0 )
où
• S0 = S × Q
• AP 0 = Q
• L0 (hs, qi) = {q}
• →0 est la relation la plus petite definie par
α L(t)
s−
→t q −−→ p
α 0
(s, q) −
→ (t, p)
L(s0 )
• I 0 = {hs0 , qi | s0 ∈ I et il y a q0 ∈ I tel que q0 −
−−→ q}
Vérification des propriétés en LTL
Soient
• TS un système de transitions sans états finaux sur AP
• φ une propriéte en LTL
Les propositions suivantes sont équivalentes :
1. TS |= φ
2. Exéc(TS) ∩ Lω (A) = ∅
3. TS ⊗ A |= ¬F
où F sont les états finaux de A.
⇒ vérifier des propriétés en LTL est reduit à un contrôle de persistance !
Infiniment Souvent Vert ?
¬ green
green
{red} {green} q0 q1
¬ green
s0 s1
green ¬ green
¬ green
green
{red} {green} q0 q1
¬ green
s0 s1
green ¬ green
s0 , q0 s0 , q1
s1 , q0 s1 , q1
Fig. : TS ⊗ A¬green
Infiniment Souvent Vert ?
¬ green
green
∅ {red} {green} q0 q1
¬ green
s2 s0 s1
green ¬ green
¬ green
green
∅ {red} {green} q0 q1
¬ green
s2 s0 s1
green ¬ green
s2 , q0 s0 , q0 s1 , q0
s2 , q1 s0 , q1 s1 , q1
Fig. : TS ⊗ A¬green
Contrôle de Persistance
Soient
• TS un système de transitions sans états finaux sur AP
• φ une formule propositionelle sur AP
Les propositions suivantes sont équivalentes :
1. TS 6|= φ
2. il existe s ∈ Attain(S) tel que s 6|= φ et s est dans un cycle du graphe
G (TS) de TS
Découverte des Cycles
Comment trouver des cycles attainables qui contienent des états pour ¬F ?
• Alternative 1 :
I calculez les components fortement connexes (SCC) dans G (TS)
I contrôlez qu’un des ces SCC est attainable d’un état initial
I ... qui contient un état pour ¬F
I ”finalement toujours F” est réfuté ssi un tel SCC est trouvé
• Alternative 2 :
I utilisez une recherche en profondeur
I plus adéquat pour l’algorithm de vérification ”on-the-fly”
I plus facile pour produire des contrexemples
Un Algorithme en Profondeur en Deux Phases
1. Déterminez tous les états pour ¬F qui sont attainable de quelque état
initial
I ça est fait par une recherche en profondeur standard
2. Pour chaque état pour ¬F , on contrôle s’il appartient à un cycle
I on commence une recherche en profondeur de s
I on contrôle pour tous les états attainables de s s’il y a un parcours jusqu’à s.