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

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