• Aucun résultat trouvé

6 .1 Algorithmes Probabilistes

6.1 Algorithmes Probabilistes

6.1.1 Exemples d’Algorithmes Probabilistes Simples

Afin de se familiariser avec la bibliothèque Alea, la première étape a été de concevoir de petits exemples et d’obtenir des résultats simples. Ce qui ressort de cette mise en pratique est la difficulté de simplifier les calculs dans Alea.

Lancer d’un Dé.

L’exemple que nous traitons ici est le lancer d’un dé numéroté de 0 à 5. La distribution des nombres tirés au hasard entre 0 et 5 est définie comme suit : µ(random 5) f = 5

i=0 1 6(f i).

La fonction caractéristique de la propriété « est égal à 2 ou à 4 » est la suivante : I.=2∨.=4                    07→0 17→0 27→1 37→0 47→1 57→0.

La probabilité de tirer au hasard un chiffre, compris entre 0 et 5, égal à 2 ou à 4 est alors : µrandom 5 I.=2∨.=4 = ∑5 i=016(Ii=2∨i=4 ) = 160+160+161+160+161+ 160 = 13. Lancer de deux Dés.

Un autre exemple est l’étude de la somme du lancer de deux dés, en voici l’algorithme :

Définition 6.1 Definition throw_dice := let k = random 5 in

let k’ = random 5 in return (k + k’ + 2).

Un lemme de simplification nous donne le résultat suivant :

Lemme 6.1 (example.dice.throw_dice_simpl).

(f: nat [0,1]), µ (throw_dice) f == ∑5

i=0∑5

j=0361 f (2 + i + j).

Démonstration. L’idée de la preuve repose sur l’étape : ∀n f , (µrandom n) f =∑n

k=01+1n(f k).

Pour connaître la probabilité que la somme soit égale à 11, il s’agit d’écrire la fonction caractéristique qui à une variable associe le booléen

86 Chapitre 6. Modélisation Formelle des Algorithmes Distribués Probabilistes

qui vaut vrai si elle est égale à 11 et faux sinon. On doit vérifier que cette probabilité est 2/36 (il y a deux façons d’obtenir 11 sur 36) :

Lemme 6.2 (example.dice.dice_11).

(n:nat), µ throw_dice I.=11= 362.

6.1.2 Extension à la Bibliothèque Alea

Des lemmes applicables à tout algorithme probabiliste ont été néces-saires dans nos preuves plus particulières sur les algorithmes distribués probabilistes. Nous présentons ici l’extension que nous avons réalisée d’Alea.

Probabilité Non Nulle.

La probabilité qu’un évènement se produise lors d’un algorithme pro-babiliste, i.e., que la sortie de l’algorithme satisfasse la propriété sous-jacente de l’évènement, est non nulle s’il existe une exécution possible de l’algorithme, i.e., un résultat que l’algorithme pourrait retourner, dans laquelle l’évènement est vérifié. Cette exécution est appelée témoin. Ainsi, pour montrer qu’une probabilité est non nulle, il suffit d’exhiber un té-moin. La réciproque est vraie si on considère que l’algorithme retourne des éléments se trouvant dans un ensemble fini.

Lemme 6.3 (prelude.my_alea.proba_not_null).

Considérons un algorithme probabiliste A de type distr T. Soit t:T un témoin et E:T→[0,1] un évènement,

si µ A I.=t>0 et (E t) >0 alors µ A I(E .)>0.

Lemme 6.4 (prelude.my_ssralea.proba_not_null2).

Considérons un algorithme probabiliste A dont le type de sortie T est fini et E:T→[0,1] un évènement,

si µ A I(E .)>0

alors il existe un témoin t:T tel que µ A I.=t>0 et (E t) >0.

Loi Géométrique.

La loi géométrique se définit à partir de la loi de Bernoulli. Cette dernière a été développée dans la bibliothèque Alea. Notre définition de la loi géométrique est donc basée sur la définition bernoulli d’Alea.

Définition. Nous définissons l’algorithme (geom p x), qui prend en entrée la probabilité de succès p et un entier naturel x et qui retourne x si l’épreuve de Bernoulli a réussi, sinon se rappelle avec pour entrée x+1. Ainsi pour raisonner sur le nombre d’échecs avant un succès de probabilité p il suffit de traiter (geom p 0).

Définition 6.2 Fix geom (p:U) (x:nat)

if (bernoulli p) then (return n) else (geom p (x+1)).

Terminaison. Nous avons, dans un premier temps, prouvé que l’algo-rithme geom termine avec probabilité 1.

6.1. Algorithmes Probabilistes 87

Lemme 6.5 (prelude.geometric.geom_term).

x p, µ (geom p x) I=1.

Probabilité d’avoir k Échecs. Nous avons ensuite montré que la proba-bilité de réussir au premier coup est p :

Lemme 6.6 (prelude.geometric.geom_eq_x).

x p, µ (geom p x) I.=x=p.

Ce qui entraîne que la probabilité d’avoir k échecs puis un succès :

Lemme 6.7 (prelude.geometric.geom_eq_k).

k, p, µ (geom p 0) I.=k=p(1−p)k.

Espérance. Afin de définir l’espérance d’une variable aléatoire, nous commençons par la définition de la somme sumgk.

Définition 6.3 Definition sumgk (x:U) (n:nat) := ∑n

k=0(k+1) xk.

Les calculs de simplification et de limites étant fastidieux à obtenir, nous avons remis à plus tard la preuve formelle du lemme suivant (mineur dans le cadre de notre développement) et nous en donnons ici une démon-stration.

Lemme 6.8 (prelude.geometric.sumgk_lim). Admitted

p, limn→∞ p×(sumgk (1-p) n) = 1p.

Démonstration. Soient 0 < p < 1 et q = 1−p, par récurrence sur n, on obtient :

p× (sumgk q n) = p× 1− (n+2)qn

+1+ (n+1)qn+2

(1−q)2 .

La limite quand n tend vers l’infini est alors 1/p.

De cette somme en découle la définition de la loi géométrique, et des lemmes précédents, nous prouvons que la limite de la somme géométrique est 1/p.

Définition 6.4 Definition geom_exp (p:U) (n:nat) := sumgk (µ (geom p 0) I.=k) n. Lemme 6.9 (prelude.geometric.geom_exp_lim). p, 0<p→limn→∞ (geom_exp p n) = 1p. Lemme 6.10 (prelude.geometric.geom_exp_lim2). p p’, 0<p0→p0≤p→ ∀ n, (geom_exp p n) 1 p0.

6.1.3 Syntaxe des Algorithmes Probabilistes

Nous exprimons les algorithmes probabilistes en Coq sous forme monadique à l’aide de trois opérateurs : return, bind et la primitive aléatoire random (cf. Définition 6.5).

Définition 6.5 Inductive FR (B:Type): Type := | Freturn (b:B)

| Fbind {A :Type}(a:FR A)(f : A FR B) | Frandom (n:nat)(f : nat FR B).

88 Chapitre 6. Modélisation Formelle des Algorithmes Distribués Probabilistes

Afin de simplifier l’expression de ces algorithmes nous utiliserons les notations suivantes :

Flet x = f1 in f2 : abréviation pour Fbind ;

Flet x = (random n) in f: abréviation pour Frandom.

Nous pouvons nous lancer dans l’étude de leur analyse. La sémantique ensembliste nous permet de prouver la correction des algorithmes. La sé-mantique distributionnelle nous permet de raisonner sur les propriétés des distributions des algorithmes.

La monade d’ensemble décrit l’ensemble des résultats intermédiaires et finaux de notre algorithme. Il est donc possible de prouver des pro-priétés de correction de l’algorithme en raisonnant sur cet ensemble.

En voici la sémantique :

Définition 6.6 Fixpoint Setsem B: Type(m :FR B) : Ensemble B := match m with

|Freturn b => fun x => x = b

|Fbind A a f => fun x => exists y, Setsem a y Setsem (f y) x |Frandom n f => fun x => exists i, (i n) Setsem (f i) x end.

Nous définissons la sémantique de la monade de distribution à l’aide des opérateurs Munit, Mlet et Random définis dans le code de la biblio-thèque Alea.

Définition 6.7 Fixpoint Distsem B: Type(m :FR B) : distr B := match m with

|Freturn b => Munit b

|Fbind _ a f => Mlet (Distsem a) (fun x => (Distsem (f x))) |Frandom n f => Mlet (Random n) (fun k => (Distsem (f k ))) end.