]> AND Private Git Repository - hdrcouchot.git/blob - 15RairoGen.tex
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
version vendredi soir après quelques refs
[hdrcouchot.git] / 15RairoGen.tex
1 Au bout d'un nombre $b$ d'itérations,
2 si la fonction, notée $G_{f_u}$ (ou bien $G_{f_g}$) 
3 présentée au chapitre~\ref{chap:carachaos}, 
4 a de \og bonnes\fg{} propriétés chaotiques, 
5 le mot $x^b$ devrait  \og sembler ne plus dépendre\fg{} de $x^0$.
6 On peut penser à exploiter une de ces fonctions $G_f$ 
7 comme un générateur aléatoire. 
8 Enfin, un bon générateur aléatoire se doit de 
9 fournir  des nombres selon une distribution uniforme 
10 La suite de ce document donnera
11 une condition nécessaire est suffisante pour que
12 cette propriété soit satisfaite.
13
14
15 Cette section présente une application directe de la théorie développée ci-avant
16 à la génération de nombres pseudo aléatoires. 
17 On présente tout d'abord le générateur
18 basé sur des fonctions chaotiques (section~\ref{sub:prng:algo}), 
19 puis comment intégrer la contrainte de distribution uniforme
20 de la sortie 
21 dans le choix de la fonction à itérer (section~\ref{sub:prng:unif}). 
22 L'approche est évaluée dans la dernière section.
23 \JFC{plan à revoir}
24  
25
26 \section{ Nombres pseudo aléatoires construits par itérations unaires}\label{sub:prng:algo}
27
28
29
30
31
32
33 \begin{algorithm}[h]
34 %\begin{scriptsize}
35 \KwIn{une fonction $f$, un nombre d'itérations $b$, 
36 une configuration initiale $x^0$ ($n$ bits)}
37 \KwOut{une configuration $x$ ($n$ bits)}
38 $x\leftarrow x^0$\;
39 $k\leftarrow b $\;
40 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
41 \For{$i=1,\dots,k$}
42 {
43 $s\leftarrow{\textit{Random}(n)}$\;
44 %$s\leftarrow{\textit{XORshift}(n)}$\;
45 $x\leftarrow{F_{f_u}(s,x)}$\;
46 }
47 return $x$\;
48 %\end{scriptsize}
49 \caption{PRNG basé sur les itérations unaires.}
50 \label{CI Algorithm}
51 \end{algorithm}
52
53 \subsection{Algorithme d'un générateur}
54 On peut penser à construire un générateur de nombres pseudo 
55 aléatoires comme dans l'algorithme~\ref{CI Algorithm} donné ci-dessous.
56
57
58 Celui-ci prend en entrée: une fonction $f$;
59 un entier $b$, qui assure que le nombre d'itérations
60 est compris entre $b+1 $ et  $2b+1$ (et donc supérieur à $b$) 
61 et une configuration initiale $x^0$.
62 Il retourne une nouvelle configuration $x$ en appliquant 
63 la fonction $F_{f_u}$ vue au chapitre~\ref{chap:carachaos} et correspondant 
64 à des itérations unaires.
65 En interne, il exploite un algorithme de génération
66 de nombres pseudo aléatoires
67 \textit{Random}$(l)$. 
68 Cet algorithme est utilisée dans notre générateur pour construire la longueur 
69 de la stratégie ainsi que les éléments qui la composent.
70 Pratiquement, il retourne des entiers dans $\llbracket 1 ; l \rrbracket$ 
71 selon une distribution uniforme et utilise 
72 \textit{XORshift} qui est une classe de générateurs de
73 nombres pseudo aléatoires conçus par George Marsaglia. 
74
75
76 L'algorithme \textit{XORshift} 
77 exploite itérativement l'opérateur $\oplus$  
78 sur des nombres obtenus grâce à des décalages de bits.
79 Cet opérateur, défini dans $\Bool^{n}$, 
80 applique la fonction \og  xor \fg{} 
81 aux bits de même rang de ses deux opérandes (\og opération bit à bit \fg{}).
82 Une instance de cette classe est donnée dans l'algorithme~\ref{XORshift} donné 
83 ci-dessous.
84
85 \begin{algorithm}[h]
86 %\SetLine
87 \KwIn{la configuration interne $z$ (un mot de 32-bit)}
88 \KwOut{$y$ (un mot de 32-bits)}
89 $z\leftarrow{z\oplus{(z\ll13)}}$\;
90 $z\leftarrow{z\oplus{(z\gg17)}}$\;
91 $z\leftarrow{z\oplus{(z\ll5)}}$\;
92 $y\leftarrow{z}$\;
93 return $y$\;
94 \medskip
95 \caption{Une boucle de l'algorithme de \textit{XORshift}}
96 \label{XORshift}
97 \end{algorithm}
98
99
100 Nous avons vu au chapitre~\ref{chap:carachaos} que 
101 $G_{f_u}$ est chaotique dans l'espace $\mathcal{X}_u$ 
102 si et seulement le graphe d'itérations $\textsc{giu}(f)$ 
103 doit être fortement connexe.
104 Pour $b=1$, l'algorithme itère la fonction $F_{f_u}$.
105 Regardons comment l'uniformité de la distribution a
106 contraint la fonction.
107
108 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
109
110 Une matrice stochastique est une matrice carrée
111 dont tous les éléments sont positifs ou nuls et dont
112 la somme de chaque ligne
113 vaut 1. 
114 Une matrice stochastique l'est doublement si la somme de chaque colonne est 1.
115 Enfin, une matrice stochastique de taille $n \times n$ est régulière 
116 si  la propriété suivante est établie:
117 $$\exists k \in \mathds{N}^\ast, \forall i,j \in \llbracket 1; n \rrbracket, M_{ij}^k>0.$$
118
119 On énonce enfin le théorème suivant liant les 
120 vecteur de probabilités 
121 et les chaînes de Markov.
122
123
124  
125
126 \begin{theorem}\label{th}
127   Si $M$ est une matrice stochastique régulière, alors $M$ 
128   possède un unique vecteur stationnaire de probabilités  $\pi$
129   ($\pi.M = \pi$).
130   De plus, si $\pi^0$ est un {vecteur de probabilités} 
131  et si on définit 
132   la suite $(\pi^{k})^{k \in  \Nats}$ par 
133   $\pi^{k+1} = \pi^k.M $ pour $k = 0, 1,\dots$ 
134   alors la {chaîne de Markov} $\pi^k$
135   converge vers $\pi$ lorsque $k$ tend vers l'infini.
136 \end{theorem}
137
138
139 Montrons sur un exemple jouet à deux éléments 
140 que ce théorème permet de vérifier si la sortie d'un générateur de 
141 nombres pseudo aléatoires est uniformément distribuée ou non.
142 Soit alors $g$ et $h$ deux fonctions  de $\Bool^2$
143 définies par $g(x_1,x_2)=(\overline{x_1},x_1.\overline{x_2}) $
144 et $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$.
145 Leurs graphes d'interactions donnés en figure \ref{fig:g:inter} et \ref{fig:h:inter}
146 vérifient les hypothèses du théorème~\ref{th:Adrien}. 
147 Leurs graphes d'itérations
148 sont donc fortement connexes, ce que l'on peut vérifier aux figures~\ref{fig:g:iter} 
149 et~\ref{fig:h:iter}.
150 \textit{A priori}, ces deux fonctions pourraient être intégrées
151 dans un générateur de nombres pseudo aléatoires. Montrons que ce n'est pas le cas pour $g$ et 
152 que cela l'est pour $h$.
153
154
155
156
157
158
159
160
161
162 \begin{figure}%[t]
163   \begin{center}
164     \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
165       \begin{minipage}{0.40\textwidth}
166         \begin{center}
167           \includegraphics[height=4cm]{images/g.pdf}
168         \end{center}
169       \end{minipage}
170       \label{fig:g:iter}
171     }
172     \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
173       \begin{minipage}{0.40\textwidth}
174         \begin{center}
175           \includegraphics[height=4cm]{images/h.pdf}
176         \end{center}
177       \end{minipage}
178       \label{fig:h:iter}
179     }    \end{center}
180     \caption{Graphes d'itérations de fonctions booléennes dans $\Bool^2$}
181     \label{fig:xplgraphIter}
182   \end{figure}
183
184
185
186
187
188
189
190
191
192 \begin{figure}%[t]
193   \begin{center}
194     \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
195       \begin{minipage}{0.40\textwidth}
196         \begin{center}
197           \includegraphics[height=3cm]{images/gp.pdf}
198         \end{center}
199       \end{minipage}
200       \label{fig:g:inter}
201     }
202     \subfigure[$h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$]{
203       \begin{minipage}{0.40\textwidth}
204         \begin{center}
205           \includegraphics[height=3cm]{images/hp.pdf}
206         \end{center}
207       \end{minipage}
208       \label{fig:h:inter}
209     }    \end{center}
210     \caption{Graphes d'interactions de fonctions booléennes dans $\Bool^2$}
211     \label{fig:xplgraphInter}
212   \end{figure}
213
214
215
216
217
218
219 Comme le générateur \textit{Random} possède une sortie uniformément 
220 distribuée,  la  stratégie est uniforme sur $\llbracket 1, 2 \rrbracket$,
221 et donc, 
222 pour tout sommet de $\textsc{giu}(g)$ et de  $\textsc{giu}(h)$,
223 chaque arc sortant de ce sommet a, parmi l'ensemble des arcs sortant 
224 de ce sommet, une probabilité $1/2$ d’être celui qui sera traversé.
225 En d'autres mots, $\textsc{giu}(g)$ est le graphe orienté d'une chaîne de Markov.
226 Il est facile de vérifier que la matrice de transitions
227 d'un tel processus 
228 est $M_g   = \frac{1}{2} \check{M}_g$, 
229 où $\check{M}_g$ est la matrice d' adjacence  donnée en 
230 figure~\ref{fig:g:incidence} (voir ci-après), et  de manière similaire pour $M_h$. 
231
232 \begin{figure}[h]
233   \begin{center}
234     \subfigure[$\check{M}_g $.]{
235       \begin{minipage}{0.25\textwidth}
236         \begin{center}
237           % \vspace{-3cm}
238           $\left( 
239             \begin{array}{cccc} 
240               1 & 0 & 1 & 0 \\ 
241               1 & 0 & 0 & 1 \\ 
242               1 & 0 & 0 & 1 \\ 
243               0 & 1 & 1 & 0 
244             \end{array}
245           \right)
246           $
247         \end{center}
248       \end{minipage}
249       \label{fig:g:incidence}
250     }
251     \subfigure[$\check{M}_h $.]{
252         \begin{minipage}{0.25\textwidth}
253           \begin{center}
254             $\left( 
255               \begin{array}{cccc} 
256                 1 & 0 & 1 & 0 \\ 
257                 0 & 1 & 0 & 1 \\ 
258                 1 & 0 & 0 & 1 \\ 
259                 0 & 1 & 1 & 0 
260               \end{array}
261             \right)
262             $
263           \end{center}
264         \end{minipage}
265         \label{fig:h:incidence}
266       }
267     \end{center}
268     \caption{Graphe des fonctions candidates avec $n=2$}
269     \label{fig:xplgraph}
270   \end{figure}
271
272 Les deux matrices $M_g$ et $M_h$ sont  stochastiques. Pour
273 montrer qu'elles sont régulières il suffit de constater qu'aucun élément de 
274 $M^5_g$ ni de  $M^3_h$ n'est nul.
275 De plus, les vecteurs de probabilités 
276 $\pi_g=(\frac{4}{10}, \frac{1}{10},\frac{3}{10},\frac{2}{10})$ et
277 $\pi_h=(\frac{1}{4},\frac{1}{4},\frac{1}{4},\frac{1}{4})$ 
278 vérifient $\pi_g M_g = \pi_g$ et 
279 $\pi_h M_h = \pi_h$. 
280 Alors d'après le théorème~\ref{th}, 
281 pour n'importe quel vecteur initial de probabilités $\pi^0$, on a 
282 $\lim_{k \to \infty} \pi^0 M^k_g = \pi_g$ et 
283 $\lim_{k \to \infty} \pi^0 M^k_h = \pi_h$. 
284 Ainsi la chaîne de Markov associé à $h$ tend vers une 
285 distribution uniforme, contrairement à celle associée à $g$.
286 On en déduit que $g$ ne devrait pas être itérée dans 
287 un générateur de nombres pseudo aléatoires.
288 Au contraire, 
289 $h$ devrait pouvoir être embarquée dans l'algorithme~\ref{CI Algorithm}, 
290 pour peu que le nombre $b$ d'itérations entre deux mesures successives 
291 de valeurs  soit suffisamment grand de sorte que
292 le vecteur d’état de la chaîne de Markov
293 ait une distribution suffisamment proche de la distribution uniforme.
294
295 On énonce directement le théorème suivant dont la preuve est donnée en annexes~\ref{anx:generateur}.
296
297 \begin{theorem}
298   Soit $f: \Bool^{n} \rightarrow \Bool^{n}$, $\textsc{giu}(f)$ son 
299   graphe d'itérations , $\check{M}$ sa matrice d'adjacence
300   et $M$ une matrice  $2^n\times 2^n$  définie comme dans le lemme précédent.
301   Si $\textsc{giu}(f)$ est fortement connexe, alors 
302   la sortie du générateur de nombres pseudo aléatoires détaillé par 
303   l'algorithme~\ref{CI Algorithm} suit une loi qui 
304   tend vers la distribution uniforme si 
305   et seulement si  $M$ est une matrice doublement stochastique.
306 \end{theorem}
307
308
309 \subsection{Quelques exemples}
310
311 On reprend le graphe d'interactions $\Gamma(f)$ donné en figure~\ref{fig:G} à la section~\ref{sec:11FCT}.
312 On a vu qu'il y avait  520 fonctions $f$ non isomorphes de graphe d'interactions  $\Gamma(f)$, 
313 dont seulement 16 d'entre elles possèdent une matrice doublement stochastique.
314
315 La figure~\ref{fig:listfonction} explicite ces 16 fonctions en 
316 définissant les images des éléments de la liste
317 0, 1, 2,\ldots, 14, 15 en respectant  l'ordre.
318 Expliquons enfin comment a été calculé le nombre de la troisième 
319 colonne utilisé comme le paramètre $b$ 
320 dans l'algorithme~\ref{CI Algorithm}.
321
322 Soit $e_i$ le $i^{\textrm{ème}}$ vecteur la base canonique de $\R^{2^{n}}$. 
323 Chacun des éléments $v_j$, $1 \le j \le 2^n$, 
324 du vecteur $e_i M_f^t$ représente la probabilité 
325 d'être dans la configuration $j$ après $t$ étapes du processus de Markov 
326 associé à $\textsc{giu}(f)$ en partant de la configuration $i$.   
327 Le nombre $\min \{
328  t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
329 \}$ représente le plus petit nombre d'itérations où la distance de 
330 ce vecteur au vecteur $\pi=(\frac{1}{2^n},\ldots,\frac{1}{2^n})$
331 -- autrement dit, où la déviation par rapport à la distribution uniforme --
332  est inférieure 
333 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
334  $b$. 
335 Ainsi, on a 
336 \begin{equation}
337 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket} 
338 \{
339 \min \{
340  t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
341 \}
342 \}. 
343 \label{eq:mt:ex}
344 \end{equation}
345
346 \noindent Par la suite, ce nombre sera appelé \emph{temps de mélange}.
347
348
349
350 \begin{figure}%[h]
351   \begin{center}
352   \subfigure[Graphe d'interactions]{
353     \begin{minipage}{0.20\textwidth}
354       \begin{center}
355         \includegraphics[width=3.5cm]{images/Gi.pdf}
356       \end{center}
357     \end{minipage}
358     \label{fig:G}
359   }\hfill
360   \subfigure[Fonctions doublement stochastiques]{
361     \begin{minipage}{0.75\textwidth}
362       \begin{scriptsize}
363         \begin{center}
364           \begin{tabular}{|c|c|c|}
365 \hline
366 {Nom}& {Définition}&{$b$} \\
367 \hline 
368 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0  & 206\\
369 \hline
370 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1  
371  & 94 \\
372 \hline
373 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
374  & 69 \\
375 \hline
376 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
377  & 56 \\
378 \hline
379 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
380  & 48 \\
381 \hline
382 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
383  & 86 \\
384 \hline
385 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
386  & 58 \\
387 \hline
388 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
389  & 46 \\
390 \hline
391 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
392  & 42 \\
393 \hline
394 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
395  & 69 \\
396 \hline
397 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
398  & 58 \\
399 \hline
400 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
401  & 35 \\
402 \hline
403 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
404  & 56 \\
405 \hline
406 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
407  & 94 \\
408 \hline
409 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
410  & 86 \\ 
411 \hline
412 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
413   & 206 \\
414  \hline
415 \end{tabular}
416 \end{center}
417 \end{scriptsize}
418 \end{minipage}
419 \label{fig:listfonction}
420 }
421 \end{center}
422 \caption{Candidates pour le générateur  avec $n=4$}
423  \end{figure}
424
425
426 La qualité des séquences aléatoires a été évaluée à travers la suite 
427 de tests statistiques développée pour les générateurs de nombres 
428 pseudo aléatoires par le 
429 \emph{National Institute of Standards and Technology} (NIST).
430 L'expérience a montré notamment que toutes ces fonctions
431 passent avec succès cette batterie de tests.
432
433 Pour conclure cette section, on remarque que le générateur de nombres pseudo-aléatoires 
434 a été prouvé chaotique pour $b=1$, \textit{i.e.}, lorsqu'il y a une sortie pour chaque itération.
435 Ceci est difficilement compatible avec la volonté d'avoir une sortie uniformément distribuée: 
436 se rapprocher de cette distribution nécessite en effet un nombre plus élevé
437 d'itérations $b$ entre chaque sortie. Par exemple, dans l'exemple précédent, il est nécessaire 
438 d'itérer au moins 42 fois entre chaque sortie pour suivre une loi uniforme à $10^{-4}$ près.
439 Montrer les sous-séquences de suites chaotiques ainsi générées  demeurent chaotiques
440 est l'objectif de la section suivante.
441
442
443 \section{Un PRNG basé sur des itérations unaires qui est chaotique }
444
445 Cette section présente un espace métrique adapté au générateur de nombres pseudo-aléatoires 
446 présenté à l'algorithme~\ref{CI Algorithm} et prouve ensuite que la fonction qu'il représente 
447 est chaotique sur cet espace.
448
449 \subsection{Un espace  $\mathcal{X}_{\mathsf{N},\mathcal{P}}$    pour le PRNG de l'algorithme~\ref{CI Algorithm}}
450
451
452
453 Introduisons tout d'abord $\mathcal{P} \subset \mathds{N}$ un ensemble fini non vide de cardinalité 
454 $\mathsf{p} \in \mathds{N}^\ast$.
455 Intuitivement, c'est le nombre d'itérations qu'il est autorisé de faire.
456 On ordonne les $\mathsf{p}$ éléments de $\mathcal{P}$ comme suit: 
457 $\mathcal{P} = \{ p_1, p_2, \hdots, p_\mathsf{p}\}$
458 et $p_1< p_2< \hdots < p_\mathsf{p}$.
459 Dans l'algorithme~\ref{CI Algorithm}, 
460 $\mathsf{p}$ vaut 1 et  $p_1=b$. 
461
462
463 Cet  algorithme peut être vu comme $b$ compostions de la fonction $F_{f_u}$.
464 Ceci peut cependant se généraliser à $p_i$, $p_i \in \mathcal{P}$,
465 compositions fonctionnelles de $F_{f_u}$.
466 Ainsi, pour chaque $p_i \in \mathcal{P}$, on construit la fonction
467 $F_{{f_u},p_i} :  \mathds{B}^\mathsf{N} \times \llbracket 1, \mathsf{N} \rrbracket^{p_i}
468 \rightarrow \mathds{B}^\mathsf{N}$ définie par
469
470 $$
471 F_{f_u,p_i} (x,(u^0, u^1, \hdots, u^{p_i-1}))  \mapsto 
472 F_{f_u}(\hdots (F_{f_u}(F_{f_u}(x,u^0), u^1), \hdots), u^{p_i-1}).
473 $$
474
475
476 on construit l'espace 
477  $\mathcal{X}_{\mathsf{N},\mathcal{P}}=  \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}}$, où
478 $\mathds{S}_{\mathsf{N},\mathcal{P}}=
479 \llbracket 1, \mathsf{N} \rrbracket^{\Nats}\times 
480 \mathcal{P}^{\Nats}$. 
481 Chaque élément de l'espace est une paire où le premier élément est 
482 un $\mathsf{N}$-uplet de  $\Bool^{\mathsf{N}}$ (comme dans $\mathcal{X}_u$).
483 Le second élément est aussi une paire $((u^k)_{k \in \Nats},(v^k)_{k \in \Nats})$ de suites infinies.
484 La suite $(v^k)_{k \in \Nats}$ définit combien d'itérations sont exécutées au temps $k$ entre deux sorties.
485 La séquence $(u^k)_{k \in \Nats}$ définit quel élément est modifié (toujours au temps $k$).
486
487 Définissons la fonction de décalage  $\Sigma$ pour chaque  élément de $\mathds{S}_{\mathsf{N},\mathcal{P}}$.
488 $$\begin{array}{cccc}
489 \Sigma:&\mathds{S}_{\mathsf{N},\mathcal{P}} &\longrightarrow
490 &\mathds{S}_{\mathsf{N},\mathcal{P}} \\
491 & \left((u^k)_{k \in \mathds{N}},(v^k)_{k \in \mathds{N}}\right) & \longmapsto & \left(\sigma^{v^0}\left((u^k)_{k \in \mathds{N}}\right),\sigma\left((v^k)_{k \in \mathds{N}}\right)\right). 
492 \end{array}
493 $$
494 En d'autres termes, $\Sigma$ reçoit deux suites $u$ et $v$ et 
495 effectue $v^0$ décalage vers la droite sur la première et un décalage vers la droite 
496 sur la seconde.
497
498
499 Ainsi, les  sorties  $(y^0, y^1, \hdots )$ produites par le générateur détaillé dans 
500 l'algorithme~\ref{CI Algorithm}
501 sont les premiers  composants des itérations $X^0 = (x^0, (u,v))$ et $\forall n \in \mathds{N}, 
502 X^{n+1} = G_{f_u,\mathcal{P}}(X^n)$ dans $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ où
503 $G_{f_u,\mathcal{P}}$  est définie par:
504
505
506
507
508 \begin{equation}
509 \begin{array}{cccc}
510 G_{f_u,\mathcal{P}} :&  \mathcal{X}_{\mathsf{N},\mathcal{P}} & \longrightarrow & \mathcal{X}_{\mathsf{N},\mathcal{P}}\\
511    & (e,(u,v)) & \longmapsto & \left( F_{f,v^0}\left( e, (u^0, \hdots, u^{v^0-1}\right), \Sigma (u,v) \right) .
512 \end{array}
513 \end{equation}
514
515
516
517 \subsection{Une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
518
519 On définit la fonction  $d$ sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ comme suit:
520 Soit  $x=(e,s)$ et $\check{x}=(\check{e},\check{s})$ dans 
521 $\mathcal{X}_{\mathsf{N},\mathcal{P}} = \mathds{B}^\mathsf{N} \times \mathds{S}_{\mathsf{N},\mathcal{P}} $,
522 où $s=(u,v)$ et $\check{s}=(\check{u},\check{v})$ sont dans $ \mathds{S}_{\mathsf{N},\mathcal{P}} = 
523 \mathcal{S}_{\llbracket 1, \mathsf{N} \rrbracket} \times \mathcal{S}_\mathcal{P}$. 
524 \begin{itemize}
525 \item $e$ et $\check{e}$ sont des entiers appartenant à $\llbracket 0, 2^{\mathsf{N}-1} \rrbracket$. 
526 La distance de Hamming $d_{\mathds{B}^\mathsf{N}}$ sur entre les 
527 décompositions binaires de $e$ et de $\check{e}$ (\textit{i.e.}, le 
528 le nombre de bits qu'elles ont de différent) constitue 
529 la partie entière de $d(X,\check{X})$.
530 \item la partie décimale est construite à partir des différences entre 
531 $v^0$ et $\check{v}^0$, suivie des différences entre les séquences finies
532 $u^0, u^1, \hdots, u^{v^0-1}$ et  $\check{u}^0, \check{u}^1, \hdots, \check{u}^{\check{v}^0-1}$, suivie par les différences entre  $v^1$ et $\check{v}^1$, 
533 suivie par les différences entre $u^{v^0}, u^{v^0+1}, \hdots, u^{v^1-1}$ et
534 $\check{u}^{\check{v}^0}, \check{u}^{\check{v}^0+1}, \hdots, \check{u}^{\check{v}^1-1}$, etc.
535
536 Plus précisément, soit 
537 $p = \lfloor \log_{10}{(\max{\mathcal{P}})}\rfloor +1$ et 
538 $n = \lfloor \log_{10}{(\mathsf{N})}\rfloor +1$.
539 \begin{itemize}
540 \item Les $p$ premiers éléments de $d(x,\check{x})$ sont $|v^0-\check{v}^0|$ 
541   écrits en base 10 et sur $p$ indices;
542 \item les $n\times \max{(\mathcal{P})}$ éléments suivants servent 
543   à évaluer de combien $u^0, u^1, \hdots, u^{v^0-1}$ diffère de 
544   $\check{u}^0, \check{u}^1, \hdots, \check{u}^{\check{v}^0-1}$. 
545   Les $n$ premiers éléments sont $|u^0-\check{u}^0|$. Il sont suivis de 
546 $|u^1-\check{u}^1|$ écrits à l'aide de $n$ éléments, etc.
547 \begin{itemize}
548 \item Si
549 $v^0=\check{v}^0$,
550 alors le processus se continue jusqu'à $|u^{v^0-1}-\check{u}^{\check{v}^0-1}|$ et la 
551 partie décimale de $d(X,\check{X})$ est complétée par des 0
552 jusqu'à atteindre 
553 $p+n\times \max{(\mathcal{P})}$ éléments.
554 \item Si $v^0<\check{v}^0$, alors les $ \max{(\mathcal{P})}$  blocs de $n$
555 éléments sont $|u^0-\check{u}^0|$, ..., $|u^{v^0-1}-\check{u}^{v^0-1}|$,
556 $\check{u}^{v^0}$ (sur $n$ éléments), ..., $\check{u}^{\check{v}^0-1}$ (sur $n$ éléments), suivi par des 0, si besoin.
557 \item Le cas $v^0>\check{v}^0$ est similaire, et donc omis
558 \end{itemize}
559 \item Les $p$ suivants sont $|v^1-\check{v}^1|$, etc.
560 \end{itemize}
561 \end{itemize}
562
563
564 La fonction $d$ peut se formaliser comme suit:
565 $$d(x,\check{x})=d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s})+d_{\mathds{B}^\mathsf{N}}(e,\check{e}),$$
566 où: % $p=\max \mathcal{P}$ and:
567 \begin{itemize}
568 \item $d_{\mathds{B}^\mathsf{N}}$ est la distance de Hamming,
569 \item $\forall s=(u,v), \check{s}=(\check{u},\check{v}) \in \mathcal{S}_{\mathsf{N},\mathcal{P}}$,\newline 
570 $$\begin{array}{rcl}
571  d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) &= &
572    \sum_{k=0}^\infty \dfrac{1}{10^{(k+1)p+kn\max{(\mathcal{P})}}} 
573    \bigg(|v^k - \check{v}^k|  \\
574    & & + \left| \sum_{l=0}^{v^k-1} 
575        \dfrac{u^{\sum_{m=0}^{k-1} v^m +l}}{ 10^{(l+1)n}} -
576        \sum_{l=0}^{\check{v}^k-1} 
577        \dfrac{\check{u}^{\sum_{m=0}^{k-1} \check{v}^m +l}}{ 10^{(l+1)n}} \right| \bigg)
578 \end{array}
579 $$ %\left| \sum_{l=0}^{v^k-1} \dfrac{u^{\sum_{m=0}^{k-1} v^m +l}}{ 10^{l}} - \sum_{l=0}^{\check{v}^k-1} \dfrac{\check{u}^{\sum_{m=0}^{k-1} \check{v}^m +l}}{ 10^{l}}\right|\right)}.$$
580 \end{itemize}
581
582
583
584 \begin{xpl}
585 On considère par exemple 
586 $\mathsf{N}=13$, $\mathcal{P}=\{1,2,11\}$ ($\mathsf{p}$ vaut ainsi $3$), 
587 et 
588 $s=\left\{
589 \begin{array}{l}
590 u=\underline{6,} ~ \underline{11,5}, ...\\
591 v=1,2,...
592 \end{array}
593 \right.$
594 avec 
595 $\check{s}=\left\{
596 \begin{array}{l}
597 \check{u}=\underline{6,4} ~ \underline{1}, ...\\
598 \check{v}=2,1,...
599 \end{array}
600 \right.$.
601
602 Ainsi $d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) = 0.010004000000000000000000011005 ...$
603 En effet, les $p=2$ premiers éléments sont  01, c'est-à-dire 
604 $|v^0-\check{v}^0|=1$, 
605 et on utilise $p$ éléments pour représenter cette différence
606 (Comme $\mathcal{P}=\{1,2,11\}$, cette différence peut valoir 10).
607 On prend alors le $v^0=1$ premier terme de $u$, 
608 chaque terme étant codé sur $n=2$ éléments, soit 06.
609 Comme on itère au plus $\max{(\mathcal{P})}$ fois, 
610 on complète cette valeur par des 0 de sorte que 
611 la chaîne obtenue a $n\times \max{(\mathcal{P})}=22$ éléments, soit:
612 0600000000000000000000. 
613 De manière similaire, les $\check{v}^0=2$ premiers
614 termes de $\check{u}$ sont représentés par 
615 0604000000000000000000.
616 LA valeur absolue de leur différence est égale à 
617 0004000000000000000000.
618 Ces éléments sont concaténés avec 01. On peut construire alors le reste de 
619 la séquence.
620 \end{xpl}
621
622
623 \begin{xpl}
624 On considère à présent que  $\mathsf{N}=9$, que $\mathcal{P}=\{2,7\}$ et que
625 $$s=\left\{
626 \begin{array}{l}
627 u=\underline{6,7,} ~ \underline{4,2,} ...\\
628 v=2,2,...
629 \end{array}
630 \right.$$
631 avec
632 $$\check{s}=\left\{
633 \begin{array}{l}
634 \check{u}=\underline{4, 9, 6, 3, 6, 6, 7,} ~ \underline{9, 8}, ...\\
635 \check{v}=7,2,...
636 \end{array}
637 \right.
638 $$
639
640 Ainsi $d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) = 0.5173633305600000...$, 
641 puisque 
642 $|v^0-\check{v}^0|=5$, $|4963667-6700000| = 1736333$, $|v^1-\check{v}^1|=0$,
643 et $|9800000-4200000| = 5600000$.
644 \end{xpl}
645
646
647
648 On a la proposition suivante, qui est démontrée en annexes~\ref{anx:generateur}.
649 \begin{lemma}
650 $d$ est une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$.
651 \end{lemma}
652
653
654 \subsection{Le graphe $\textsc{giu}_{\mathcal{P}}(f)$ étendant  $\textsc{giu}(f)$}
655
656 A partir de  $\mathcal{P}=\{p_1, p_2, \hdots, p_\mathsf{p}\}$, on 
657 définit le graphe orienté $\textsc{giu}_{\mathcal{P}}(f)$ de la manière suivante:
658 \begin{itemize}
659 \item les n{\oe}uds sont les  $2^\mathsf{N}$ configurations de $\mathds{B}^\mathsf{N}$,
660 %\item Each vertex has $\displaystyle{\sum_{i=1}^\mathsf{p} \mathsf{N}^{p_i}}$ arrows, namely all the $p_1, p_2, \hdots, p_\mathsf{p}$ tuples 
661 %  having their elements in $\llbracket 1, \mathsf{N} \rrbracket $.
662 \item il y a un arc libellé $u_0, \hdots, u_{p_i-1}$, $i \in \llbracket 1, \mathsf{p} \rrbracket$ entre les n{\oe}uds $x$ et $y$ si et seulement si $p_i$ est un élément de 
663 $\mathcal{P}$ (\textit{i.e.}, on peut itérer $p_i$ fois), 
664 chaque $u_k$ de la suite appartient à $[\mathsf{N}]$ et 
665 $y=F_{f_u,p_i} (x, (u_0, \hdots, u_{p_i-1})) $.
666 \end{itemize}
667 Il n'est pas difficile de constater que $\textsc{giu}_{\{1\}}(f)$ est $\textsc{giu}(f)$.
668
669
670
671
672
673 \begin{figure}%[t]
674   \begin{center}
675     \subfigure[$\textsc{giu}_{\{2\}}(h)$]{
676       \begin{minipage}{0.30\textwidth}
677         \begin{center}
678           \includegraphics[height=4cm]{images/h2prng}
679         \end{center}
680       \end{minipage}
681       \label{fig:h2prng}
682     }
683     \subfigure[$\textsc{giu}_{\{3\}}(h)$]{
684       \begin{minipage}{0.40\textwidth}
685         \begin{center}
686           \includegraphics[height=4cm]{images/h3prng}
687         \end{center}
688       \end{minipage}
689       \label{fig:h3prng}
690     }
691     \subfigure[$\textsc{giu}_{\{2,3\}}(h)$]{
692       \begin{minipage}{0.40\textwidth}
693         \begin{center}
694           \includegraphics[height=4cm]{images/h23prng}
695         \end{center}
696       \end{minipage}
697       \label{fig:h23prng}
698     }
699
700     \end{center}
701     \caption{Graphes d'itérations $\textsc{giu}_{\mathcal{P}}(h)$ pour $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$}
702     %\label{fig:xplgraphIter}
703   \end{figure}
704
705
706
707
708 \begin{xpl}
709 On reprend l'exemple où $\mathsf{N}=2$ et 
710 $h(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}+\overline{x_1}x_2)$ déjà détaillé 
711 à la section~\ref{sub:prng:unif}.
712
713 Le graphe $\textsc{giu}_{\{1\}}(h)$ a déjà été donné à la figure~\ref{fig:h:iter}.
714 Les graphes $\textsc{giu}_{\{2\}}(h)$, $\textsc{giu}_{\{3\}}(h)$  et
715 $\textsc{giu}_{\{2,3\}}(h)$ sont respectivement donnés aux figure~\ref{fig:h2prng}, ~\ref{fig:h3prng} et ~\ref{fig:h23prng}. 
716 Le premier (respectivement le second) 
717 illustre le comportement du générateur lorsque qu'on itère exactement 
718 2 fois (resp. 3 fois) puis qu'on affiche le résultat.
719 Le dernier donnerait le comportement d'un générateur qui s'autoriserait 
720 à itérer en interne systématiquement 2 ou trois fois avant de retourner un résultat.
721
722 \end{xpl}
723
724
725 \subsection{le PRNG de l'algorithme~\ref{CI Algorithm} est chaotique sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
726
727 Le théorème suivant, similaire à celui dans $\mathcal{X}_u$ et dans $\mathcal{X}_g$
728 est prouvé en annexes~\ref{anx:generateur}.
729
730 \begin{theorem}
731 La fonction $G_{f_u,\mathcal{P}}$ est chaotique sur 
732  $(\mathcal{X}_{\mathsf{N},\mathcal{P}},d)$ si et seulement si 
733 graphe d'itération $\textsc{giu}_{\mathcal{P}}(f)$ 
734 est fortement connexe.
735 \end{theorem}
736 On alors corollaire suivant 
737
738 \begin{corollary}
739   Le générateur de nombre pseudo aléatoire détaillé 
740   à l'algorithme~\ref{CI Algorithm}
741   n'est pas chaotique 
742   sur $(\mathcal{X}_{\mathsf{N},\{b\}},d)$ pour la fonction négation.
743 \end{corollary}
744 \begin{proof}
745   Dans cet algorithme, $\mathcal{P}$ est le singleton $\{b\}$.
746   Que $b$ soit pair ou impair,  $\textsc{giu}_{\mathcal{b}}(f)$
747   n'est pas fortement connexe.
748 \end{proof}
749
750