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

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