la recherche d'un élément par dichotomie dans un ... - Verimag
la recherche d'un élément par dichotomie dans un ... - Verimag
la recherche d'un élément par dichotomie dans un ... - Verimag
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
On prétend que ce programme satisfait <strong>la</strong> propriété de correction<br />
∧<br />
result = true ⇒ x ∈ T [0..N] result = false ⇒ x /∈ T [0..N]<br />
où x ∈ T [0..N] est l'abbréviation de ∃i ∈ [0..N], x = T [i]<br />
1.1.1 Exemple de rédaction de preuve de correction <strong>par</strong>tielle<br />
Montrons, <strong>par</strong> <strong>la</strong> méthode de Floyd-Hoare, que lorsqu'on atteint l'état de sortie q s <strong>la</strong> propriété de<br />
correction est satisfaite.<br />
def<br />
∧<br />
En q s : ψ s = result = true ⇒ x ∈ T [0..N] result = false ⇒ x /∈ T [0..N]<br />
result←present<br />
En q 11 : on détermine ψ 11 d'après ψ s en utilisant <strong>la</strong> transition q 11 −−−−−−−−−−→ q s<br />
ψ 11<br />
def<br />
= ψ s [result ← present]<br />
def<br />
= <strong>la</strong> propriété ψ s <strong>dans</strong> <strong>la</strong>quelle on remp<strong>la</strong>ce <strong>la</strong> variable result <strong>par</strong> present<br />
def<br />
∧<br />
= present = true ⇒ x ∈ T [0..N] present = false ⇒ x /∈ T [0..N]<br />
present←false<br />
En q 2 : on détermine ψ 2 d'après ψ 11 en utilisant <strong>la</strong> transition q 2 −−−−−−−−−→ q 11<br />
ψ 2<br />
def<br />
= ψ 11 [present ← false]<br />
def<br />
= false = true ⇒ x ∈ T [0..N]<br />
} {{ }<br />
false<br />
≡ false ⇒ . . .<br />
} {{ }<br />
≡<br />
true<br />
x /∈ T [0..N]<br />
∧<br />
∧<br />
false = false ⇒ x /∈ T [0..N]<br />
true ⇒ x /∈ T [0..N] ≡ true<br />
∧ x /∈ T [0..N]<br />
En q 1 : on détermine ψ 1 d'après ψ 2 en utilisant <strong>la</strong> transition q 1 −−−→ q 2<br />
Principe Rappelons qu'on doit montrer <strong>la</strong> propriété x /∈ T [0..N] en q 2 . On cherche donc<br />
<strong>un</strong>e propriété en q 1 qui, avec le test d > f, implique <strong>la</strong> propriété ψ 2 en q 2 .<br />
.} .{{ . . .}.<br />
∧ d > f =⇒ x /∈ T [0..N]<br />
} {{ }<br />
ψ 1 ψ 2<br />
Pour déduire x /∈ T [0..N] de d > f qui n'ont a priori rien en comm<strong>un</strong>, on fait <strong>un</strong> raisonnement <strong>par</strong><br />
contradiction ; c'est-à-dire qu'on chercher <strong>un</strong>e propriété ψ 1 de <strong>la</strong> forme x ∈ T [0..N] ⇒ . . . où <strong>la</strong> <strong>par</strong>tie<br />
. . . devra faire ap<strong>par</strong>aître d et f et donnera <strong>un</strong>e contradiction avec d > f.<br />
def<br />
On choisit de prendre ψ 1 = x ∈ T [0..N] ⇒ x ∈ T [d..f] qui donne <strong>la</strong> contradiction souhaitée. En<br />
eet, x ∈ T [d..f] ∧ d > f ≡ false car x ne peut ap<strong>par</strong>aître <strong>dans</strong> le sous-tableau T [d..f] qui ne contient<br />
pas d'<strong>élément</strong> puisque d est après f. Ce raisonnement permet de montrer l'implication<br />
(x ∈ T [0..N] ⇒ x ∈ T [d..f])<br />
} {{ }<br />
ψ 1<br />
∧ d > f =⇒ x /∈ T [0..N]<br />
} {{ }<br />
En q 8 : on détermine ψ 8 d'après ψ 1 en utilisant <strong>la</strong> transition q 8 −−−−−→ q 1 .<br />
def<br />
ψ 8 = ψ 1 [d ← m + 1] def<br />
= x ∈ T [0..N] ⇒ x ∈ T [m + 1..f]<br />
ψ 2<br />
d>f<br />
d←m+1<br />
x>T [m]<br />
En q 5 : on détermine ψ 5 d'après ψ 8 en utilisant <strong>la</strong> transition q 5 −−−−−→ q 8 . On cherche ψ 5 telle que<br />
.} .{{ . . .}.<br />
∧ x > T [m] =⇒ x ∈ T [0..N] ⇒ x ∈ T [m + 1..f]<br />
} {{ }<br />
ψ 5<br />
On choisit<br />
ψ 8<br />
2