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

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