29.12.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!