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.
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
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.
26 \section{ Nombres pseudo aléatoires construits par itérations unaires}\label{sub:prng:algo}
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)}
40 %$k\leftarrow b + \textit{XORshift}(b+1)$\;
43 $s\leftarrow{\textit{Random}(n)}$\;
44 %$s\leftarrow{\textit{XORshift}(n)}$\;
45 $x\leftarrow{F_{f_u}(s,x)}$\;
49 \caption{PRNG basé sur les itérations unaires.}
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.
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
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.
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é
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)}}$\;
95 \caption{Une boucle de l'algorithme de \textit{XORshift}}
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.
108 \subsection{Un générateur à sortie uniformément distribuée}\label{sub:prng:unif}
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
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.$$
119 On énonce enfin le théorème suivant liant les
120 vecteur de probabilités
121 et les chaînes de Markov.
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$
130 De plus, si $\pi^0$ est un {vecteur de probabilités}
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.
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}
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$.
164 \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
165 \begin{minipage}{0.40\textwidth}
167 \includegraphics[height=4cm]{images/g.pdf}
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}
175 \includegraphics[height=4cm]{images/h.pdf}
180 \caption{Graphes d'itérations de fonctions booléennes dans $\Bool^2$}
181 \label{fig:xplgraphIter}
194 \subfigure[$g(x_1,x_2)=(\overline{x_1},x_1\overline{x_2}) $]{
195 \begin{minipage}{0.40\textwidth}
197 \includegraphics[height=3cm]{images/gp.pdf}
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}
205 \includegraphics[height=3cm]{images/hp.pdf}
210 \caption{Graphes d'interactions de fonctions booléennes dans $\Bool^2$}
211 \label{fig:xplgraphInter}
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$,
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
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$.
234 \subfigure[$\check{M}_g $.]{
235 \begin{minipage}{0.25\textwidth}
249 \label{fig:g:incidence}
251 \subfigure[$\check{M}_h $.]{
252 \begin{minipage}{0.25\textwidth}
265 \label{fig:h:incidence}
268 \caption{Graphe des fonctions candidates avec $n=2$}
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
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.
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.
295 On énonce directement le théorème suivant dont la preuve est donnée en annexes~\ref{anx:generateur}.
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.
309 \subsection{Quelques exemples}
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.
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}.
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$.
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 --
333 à $10^{-4}$. En prenant le max pour tous les $e_i$, on obtient une valeur pour
337 b = \max\limits_{i \in \llbracket 1, 2^n \rrbracket}
340 t \mid t \in \Nats, \vectornorm{e_i M_f^t - \pi} < 10^{-4}
346 \noindent Par la suite, ce nombre sera appelé \emph{temps de mélange}.
352 \subfigure[Graphe d'interactions]{
353 \begin{minipage}{0.20\textwidth}
355 \includegraphics[width=3.5cm]{images/Gi.pdf}
360 \subfigure[Fonctions doublement stochastiques]{
361 \begin{minipage}{0.75\textwidth}
364 \begin{tabular}{|c|c|c|}
366 {Nom}& {Définition}&{$b$} \\
368 $\mathcal{F}_1$ & 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 1, 0 & 206\\
370 $\mathcal{F}_2$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 0, 1
373 $\mathcal{F}_3$ &14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0
376 $\mathcal{F}_4$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 0, 1
379 $\mathcal{F}_5$ &14, 15, 12, 13, 10, 11, 9, 8, 6, 7, 5, 4, 3, 2, 1, 0
382 $\mathcal{F}_6$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 0, 1
385 $\mathcal{F}_7$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 2, 3, 1, 0
388 $\mathcal{F}_8$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 4, 5, 3, 2, 1, 0
391 $\mathcal{F}_9$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
394 $\mathcal{F}_{10}$ &14, 15, 12, 13, 10, 11, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
397 $\mathcal{F}_{11}$ &14, 15, 12, 13, 11, 10, 9, 8, 7, 6, 5, 4, 2, 3, 1, 0
400 $\mathcal{F}_{12}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 2, 3, 1, 0
403 $\mathcal{F}_{13}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 4, 5, 3, 2, 1, 0
406 $\mathcal{F}_{14}$ &14, 15, 13, 12, 11, 10, 8, 9, 7, 6, 5, 4, 3, 2, 1, 0
409 $\mathcal{F}_{15}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 0, 1
412 $\mathcal{F}_{16}$ &14, 15, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
419 \label{fig:listfonction}
422 \caption{Candidates pour le générateur avec $n=4$}
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.
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.
443 \section{Un PRNG basé sur des itérations unaires qui est chaotique }
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.
449 \subsection{Un espace $\mathcal{X}_{\mathsf{N},\mathcal{P}}$ pour le PRNG de l'algorithme~\ref{CI Algorithm}}
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$.
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
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}).
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$).
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).
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
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:
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) .
517 \subsection{Une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
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}$.
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.
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$.
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.
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
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
559 \item Les $p$ suivants sont $|v^1-\check{v}^1|$, etc.
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:
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
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)
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)}.$$
585 On considère par exemple
586 $\mathsf{N}=13$, $\mathcal{P}=\{1,2,11\}$ ($\mathsf{p}$ vaut ainsi $3$),
590 u=\underline{6,} ~ \underline{11,5}, ...\\
597 \check{u}=\underline{6,4} ~ \underline{1}, ...\\
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
624 On considère à présent que $\mathsf{N}=9$, que $\mathcal{P}=\{2,7\}$ et que
627 u=\underline{6,7,} ~ \underline{4,2,} ...\\
634 \check{u}=\underline{4, 9, 6, 3, 6, 6, 7,} ~ \underline{9, 8}, ...\\
640 Ainsi $d_{\mathds{S}_{\mathsf{N},\mathcal{P}}}(s,\check{s}) = 0.5173633305600000...$,
642 $|v^0-\check{v}^0|=5$, $|4963667-6700000| = 1736333$, $|v^1-\check{v}^1|=0$,
643 et $|9800000-4200000| = 5600000$.
648 On a la proposition suivante, qui est démontrée en annexes~\ref{anx:generateur}.
650 $d$ est une distance sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$.
654 \subsection{Le graphe $\textsc{giu}_{\mathcal{P}}(f)$ étendant $\textsc{giu}(f)$}
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:
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})) $.
667 Il n'est pas difficile de constater que $\textsc{giu}_{\{1\}}(f)$ est $\textsc{giu}(f)$.
675 \subfigure[$\textsc{giu}_{\{2\}}(h)$]{
676 \begin{minipage}{0.30\textwidth}
678 \includegraphics[height=4cm]{images/h2prng}
683 \subfigure[$\textsc{giu}_{\{3\}}(h)$]{
684 \begin{minipage}{0.40\textwidth}
686 \includegraphics[height=4cm]{images/h3prng}
691 \subfigure[$\textsc{giu}_{\{2,3\}}(h)$]{
692 \begin{minipage}{0.40\textwidth}
694 \includegraphics[height=4cm]{images/h23prng}
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}
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}.
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.
725 \subsection{le PRNG de l'algorithme~\ref{CI Algorithm} est chaotique sur $\mathcal{X}_{\mathsf{N},\mathcal{P}}$}
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}.
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.
736 On alors corollaire suivant
739 Le générateur de nombre pseudo aléatoire détaillé
740 à l'algorithme~\ref{CI Algorithm}
742 sur $(\mathcal{X}_{\mathsf{N},\{b\}},d)$ pour la fonction négation.
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.