Partie 2 remise en forme, avant relecture
Cette révision appartient à :
@@ -457,127 +457,135 @@ Cette partie comporte des questions nécessitant un code OCaml.
|
||||
|
||||
L'objectif de cette partie est d'étudier quelques définitions et propriétés de la suite de Prouhet-ThueMorse (abrégé PTM), du nom des mathématiciens français, norvégien et américain Eugène Prouhet, Axel Thue et Marston Morse.
|
||||
|
||||
\section*{Notations}
|
||||
\paragraph{Notations}
|
||||
Dans toute la suite, on note :
|
||||
|
||||
\begin{itemize}
|
||||
\item $\Sigma=\{0,1\}$ un alphabet, $\Sigma^{*}$ l'ensemble des mots sur $\Sigma, \varepsilon$ le mot vide et $|m|$ la longueur d'un mot $m$,
|
||||
\item "." l'opérateur de concaténation de mots de $\Sigma^{*}$,
|
||||
\item si $m \in \Sigma^{*}, \bar{m}$ le mot obtenu en remplaçant dans $m$ les 0 par de 1 et les 1 par des 0 ,
|
||||
\item pour $n \in \mathbb{N}, t_{n}$ le $n$-ème terme de la suite PTM,
|
||||
\item pour $n \in \mathbb{N}, T_{n}=t_{0} t_{1} \cdots t_{2^{n}-1}$ le mot construit l'aide des $2^{n}$ premiers termes de la suite PTM.
|
||||
\item $\cdot$ l'opérateur de concaténation de mots de $\Sigma^{*}$,
|
||||
\item si $m \in \Sigma^{*}, \bar{m}$ le mot obtenu en remplaçant dans $m$ les $0$ par des $1$ et les $1$ par des $0$,
|
||||
\item pour $n \in \mathbb{N}, t_{n}$ le $n$\ieme{} terme de la suite PTM,
|
||||
\item pour $n \in \mathbb{N}, T_n=t_{0} t_{1} \cdots t_{2^{n}-1}$ le mot construit l'aide des $2^{n}$ premiers termes de la suite PTM.
|
||||
\end{itemize}
|
||||
|
||||
\section*{II. 1 - Définitions}
|
||||
\subsection{Définitions}
|
||||
|
||||
Il existe plusieurs manières de définir la suite PTM. Nous proposons ici d'en illustrer quelques unes et de montrer leur équivalence.
|
||||
|
||||
\section*{Définition 1 (première définition)}
|
||||
Pour $n \in N_{\text {, }}$ on écrit $n$ en base 2 sous la forme $n=\sum_{i} d_{i} 2^{i}$ et on note $b_{n}=\sum_{i} d_{i}$. On définit alors $t_{0}=0$ et pour $n>0, t_{n}=\{\begin{array}{ll}1 & \text { si } b_{n} \text { impair } \\ 0 & \text { sinon }\end{array}.$.
|
||||
\begin{definition}[Première définition]
|
||||
Pour $n \in \mathbb{N}$, on écrit $n$ en base $2$ sous la forme $n=\sum_{i} d_{i} 2^{i}$ et on note $b_{n}=\sum_{i} d_{i}$. On définit alors $t_{0}=0$ et pour $n>0$, $t_{n}=\begin{cases}1 & \text {si $b_n$ impair} \\ 0 & \text {sinon}\end{cases}$.
|
||||
\end{definition}
|
||||
|
||||
\begin{question}
|
||||
Donner $T_{3}$.
|
||||
Donner $T_3$.
|
||||
\end{question}
|
||||
|
||||
\begin{question}
|
||||
Écrire une fonction récursive de signature compte\_bits\_a\_un : int → int telle que compte\_bits\_a\_un n renvoie le nombre de bits à 1 dans l'écriture en base 2 de l'entier $n$.
|
||||
Écrire une fonction récursive de signature \mintinline{ocaml}{compte_bits_a_un : int -> int} telle que \mintinline{ocaml}{compte_bits_a_un n} renvoie le nombre de bits à $1$ dans l'écriture en base $2$ de l'entier $n$.
|
||||
\end{question}
|
||||
|
||||
|
||||
\begin{itemize}
|
||||
\item Q25. En déduire une fonction de signature affiche\_ptm : int -> unit qui affiche le mot $T_{n}$. On écrira une fonction auxiliaire récursive de signature puissance 2 : int $->$ int qui calcule $2^{n}$. Pour afficher les $t_{i}$, on utilisera la fonction print\_int de signature print\_int : int -> unit.
|
||||
\end{itemize}
|
||||
|
||||
\section*{Définition 2 (deuxième définition)}
|
||||
On pose $t_{0}=0$. On suppose que pour $n>0$ on a construit le mot $T_{n}$. On construit alors le mot $T_{n+1}$ et donc les termes $\imath_{2^{n}}, \cdots \imath_{2^{n+1}-1}$ de la suite PTM par négation binaire : $\forall i \in \llbracket 0,2^{n}-1 \rrbracket t_{2^{n}+i}=\bar{t}_{i}$. Autrement dit, $T_{n+1}=T_{n} \bar{T}_{n}$.
|
||||
|
||||
\begin{question}
|
||||
Montrer par récurrence que cette définition calcule la même suite que la première définition. ¿ par l'abrourde
|
||||
En déduire une fonction de signature \mintinline{ocaml}{affiche_ptm : int -> unit} qui affiche le mot $T_n$. On écrira une fonction auxiliaire récursive de signature \mintinline{ocaml}{puissance2 : int -> int} qui calcule $2^n$. Pour afficher les $t_i$, on utilisera la fonction \mintinline{ocaml}{print_int} de signature \mintinline{ocaml}{print_int : int -> unit}.
|
||||
\end{question}
|
||||
|
||||
Définition 3 (troisième définition)\\
|
||||
\begin{definition}[Deuxième définition]
|
||||
On pose $t_{0}=0$. On suppose que pour $n>0$ on a construit le mot $T_n$. On construit alors le mot $T_{n+1}$ et donc les termes $t_{2^{n}}, \cdots t_{2^{n+1}-1}$ de la suite PTM par négation binaire : $\forall i \in \llbracket 0,2^{n}-1 \rrbracket, t_{2^{n}+i}=\bar{t}_{i}$. Autrement dit, $T_{n+1}=T_n \bar{T}_{n}$.
|
||||
\end{definition}
|
||||
|
||||
\begin{question}
|
||||
Montrer par récurrence que cette définition calcule la même suite que la première définition.
|
||||
\end{question}
|
||||
|
||||
\begin{definition}[Troisième définition]
|
||||
On définit la suite PTM de manière récursive : $t_{0}=0$ et pour tout $n>0 t_{2 n}=t_{n}, t_{2 n+1}=\overline{t_{n}}$.
|
||||
\end{definition}
|
||||
|
||||
\begin{question}
|
||||
Montrer que cette définition calcule la même suite que la première ou la deuxième définition.
|
||||
\end{question}
|
||||
|
||||
\begin{definition}[Quatrième définition]\label{def:quatrieme}
|
||||
Un morphisme sur $\Sigma^{*}$ est une fonction $\mu: \Sigma^{*} \rightarrow \Sigma^{*}$ vérifiant $\mu(\varepsilon)=\varepsilon$ et : $\forall u, v \in \Sigma^{*} \mu(u \cdot v)=\mu(u) \cdot \mu(v)$.
|
||||
\end{definition}
|
||||
|
||||
\section*{Définition 4 (quatrième définition)}
|
||||
Un morphisme sur $\Sigma^{*}$ est une fonction $\mu: \Sigma^{*} \rightarrow \Sigma^{*}$ vérifiant $\mu(\varepsilon)=\varepsilon$ et : $\forall u, v \in \Sigma^{*} \mu(u . v)=\mu(u) . \mu(v)$.\\
|
||||
On définit alors le morphisme suivant sur les éléments de $\Sigma: \mu(a)= \begin{cases}01 & \text { si } a=0 \\ 10 & \text { si } a=1\end{cases}$ et la suite ( $u_{i}, i \in \mathbb{N}$ ) par : $u_{0}=0$ et pour tout $i \in \mathbb{N}^{*} u_{i+1}=\mu(u_{i})$.
|
||||
On définit alors le morphisme suivant sur les éléments de $\Sigma: \mu(a)= \begin{cases}01 & \text {si $a=0$} \\ 10 & \text {si $a=1$}\end{cases}$ et la suite $(u_i, i \in \mathbb{N})$ par : $u_{0}=0$ et pour tout $i \in \mathbb{N}^{*}, u_{i+1}=\mu(u_{i})$.
|
||||
|
||||
\begin{question}
|
||||
Montrer que pour tout $i \in \mathbb{N}^{*}, u_{i}=T_{i}$.
|
||||
Montrer que pour tout $i \in \mathbb{N}^{*}$, $u_{i}=T_{i}$.
|
||||
\end{question}
|
||||
|
||||
On représente maintenant un mot de $\Sigma^{*}$ par une liste d'entiers.\\
|
||||
On représente maintenant un mot de $\Sigma^{*}$ par une liste d'entiers.
|
||||
|
||||
\begin{question}
|
||||
Écrire une fonction de signature thue\_morse\_4 : int -> int list, un appel à thue\_morse\_4 n générant $T_{n}$. Cette fonction fera appel à une fonction récursive de signature morphisme : int list -> int list renvoyant l'application du morphisme $\mu$ sur la liste d'entiers en entrée. On lèvera une exception INVALID\_ARGUMENT si le mot donné en entrée n'est pas binaire.
|
||||
Écrire une fonction de signature \mintinline{ocaml}{thue_morse_4 : int -> int list}, un appel à \mintinline{ocaml}{thue_morse_4 n} générant $T_n$. Cette fonction fera appel à une fonction récursive de signature \mintinline{ocaml}{morphisme : int list -> int list} renvoyant l'application du morphisme $\mu$ sur la liste d'entiers en entrée. On lèvera une exception \mintinline{ocaml}{INVALID_ARGUMENT} si le mot donné en entrée n'est pas binaire.
|
||||
\end{question}
|
||||
|
||||
\subsection{Mot infini de Thue-Morse}
|
||||
|
||||
\section*{11.2 - Mot infini de Thue-Morse}
|
||||
Le mot infini de Thue-Morse $T$ est le mot obtenu en itérant $\mu$ une infinité de fois, en partant du symbole 0 . Nous allons ici nous intéresser à la structure de $T$.
|
||||
Le mot infini de Thue-Morse $T$ est le mot obtenu en itérant $\mu$ une infinité de fois, en partant du symbole $0$. Nous allons ici nous intéresser à la structure de $T$.
|
||||
|
||||
\begin{definition}[Carré, cube]
|
||||
Soit $m \in \Sigma^{*}$. $m$ est un carré s'il s'écrit $m=w \cdot w$, où $w \in \Sigma^{*}$. C'est un cube si $m=w \cdot w \cdot w$, où $w \in \Sigma^{*}$.
|
||||
\end{definition}
|
||||
|
||||
Par exemple, le mot $m=110110110$ est un cube avec $w=110$.
|
||||
|
||||
\section*{Définition 5 (carré, cube)}
|
||||
Soit $m \in \Sigma^{*}$. $m$ est un carré s'il s'écrit $m=w . w$, où $w \in \Sigma^{*}$. C'est un cube si $m=w . w . w$, où $w \in \Sigma^{*}$.\\
|
||||
Par exemple, le mot $m=110110110$ est un cube avec $w=110$.\\
|
||||
\begin{question}
|
||||
Montrer qu'il n'existe pas de mots de $\Sigma^{*}$ de longueur supérieure ou égale à 4 sans carrés.
|
||||
Montrer qu'il n'existe pas de mots de $\Sigma^{*}$ de longueur supérieure ou égale à $4$ sans carrés.
|
||||
\end{question}
|
||||
|
||||
\begin{question}
|
||||
Écrire une fonction récursive de signature divise\_mot : int list -> int list * int list qui divise un mot $m$ en deux sous-mots de taille identique, le premier constitué des $|m| / 2$ premiers éléments de $m$, le second des éléments restants. On supposera ici que $|m|$ est paire.
|
||||
Écrire une fonction récursive de signature \mintinline{ocaml}{divise_mot : int list -> int list * int list} qui divise un mot $m$ en deux sous-mots de taille identique, le premier constitué des $|m| / 2$ premiers éléments de $m$, le second des éléments restants. On supposera ici que $|m|$ est paire.
|
||||
\end{question}
|
||||
|
||||
\begin{question}
|
||||
En déduire une fonction de signature est\_carre : int list -> bool qui détermine si un mot $m$ est un carré. On prendra soin de vérifier que $|m|$ est paire.
|
||||
En déduire une fonction de signature \mintinline{ocaml}{est_carre : int list -> bool} qui détermine si un mot $m$ est un carré. On prendra soin de vérifier que $|m|$ est paire.
|
||||
\end{question}
|
||||
|
||||
\begin{question}
|
||||
Montrer que $T$ ne contient aucun cube de la forme 000 ou 111.
|
||||
Montrer que $T$ ne contient aucun cube de la forme $000$ ou $111$.
|
||||
\end{question}
|
||||
|
||||
\begin{definition}[Entrelacement]
|
||||
$m \in \Sigma^{*}$ est un entrelacement s'il contient un facteur de la forme $xyz$ où $x, y, z$ sont des facteurs non vides de $m$ et $x y=y z$. On dit que les deux facteurs $x y$ et $y z$ se chevauchent sur la partie commune $y$.
|
||||
\end{definition}
|
||||
|
||||
\section*{Définition 6 (entrelacement)}
|
||||
$m \in \Sigma^{*}$ est un entrelacement s'il contient un facteur de la forme xyz où $x, y, z$ sont des facteurs non vides de $m$ et $x y=y z$. On dit que les deux facteurs $x y$ et $y z$ se chevauchent sur la partie commune $y$.
|
||||
|
||||
Par exemple, le mot 10101001 est un entrelacement, puisqu'il contient le facteur 010 en positions 2 et 4 , qui se chevauchent sur le 0 en position 4 (en gras).
|
||||
Par exemple, le mot $101\mathbf{0}1001$ est un entrelacement, puisqu'il contient le facteur $010$ en positions $2$ et $4$, qui se chevauchent sur le $0$ en position $4$ (en gras).
|
||||
|
||||
\begin{question}
|
||||
Écrire une fonction récursive de signature sousliste : int list -> int -> int -> int list telle que sousliste 1st i 1 renvoie la sous-liste de 1st qui commence à l'indice i et de longueur 1. Si la sous-liste dépasse la fin de la liste 1st, elle est tronquée.
|
||||
Écrire une fonction récursive de signature \mintinline{ocaml}{sousliste : int list -> int -> int -> int list} telle que \mintinline{ocaml}{sousliste lst i l} renvoie la sous-liste de \mintinline{ocaml}{lst} qui commence à l'indice \mintinline{ocaml}{i} et de longueur \mintinline{ocaml}{l}. Si la sous-liste dépasse la fin de la liste \mintinline{ocaml}{lst}, elle est tronquée.
|
||||
\end{question}
|
||||
|
||||
|
||||
\begin{question}
|
||||
Écrire une fonction de signature est\_entrelacement : int list -> bool telle que l'appel est\_entrelacement m renvoie true si m est un entrelacement, false sinon. On pourra tester récursivement toutes les longueurs de facteurs possibles et, pour un facteur donné, vérifier s'il apparaît ailleurs dans le mot avec chevauchement. On utilisera obligatoirement la fonction sousliste.
|
||||
Écrire une fonction de signature \mintinline{ocaml}{est_entrelacement : int list -> bool} telle que l'appel \mintinline{ocaml}{est_entrelacement m} renvoie \mintinline{ocaml}{true} si \mintinline{ocaml}{m} est un entrelacement, \mintinline{ocaml}{false} sinon. On pourra tester récursivement toutes les longueurs de facteurs possibles et, pour un facteur donné, vérifier s'il apparaît ailleurs dans le mot avec chevauchement. On utilisera obligatoirement la fonction \mintinline{ocaml}{sousliste}.
|
||||
\end{question}
|
||||
|
||||
\begin{question}
|
||||
Montrer que si un mot $m$ contient un facteur cube, alors c'est un entrelacement.
|
||||
\end{question}
|
||||
|
||||
On admet dans la suite que si un mot est un entrelacement dont la partie commune est de longueur $k \geq 1$, alors c'est également un entrelacement de partie commune de longueur $1$.
|
||||
|
||||
On admet dans la suite que si un mot est un entrelacement dont la partie commune est de longueur $k \geq 1$, alors c'est également un entrelacement de partie commune de longueur 1.\\
|
||||
\begin{question}
|
||||
Montrer que si un mot $m$ est un entrelacement, alors il contient un facteur de la forme avava, où $a \in \Sigma$ et $v \in \Sigma^{*}$.
|
||||
\begin{question}\label{q:facteur-avava}
|
||||
Montrer que si un mot $m$ est un entrelacement, alors il contient un facteur de la forme $avava$, où $a \in \Sigma$ et $v \in \Sigma^{*}$.
|
||||
\end{question}
|
||||
|
||||
\begin{question}
|
||||
Soit $m=a_{0} a_{1} \cdots a_{2 n-1} \in \Sigma^{*}$ tel que, pour tout $i \in \llbracket[0, n-1], a_{2 i} a_{2 i+1}$ s'écrit soit 01 , soit 10 . Montrer qu'il n'est pas possible d'écrire les mots $0 m 0$ et $1 m 1$ sous la forme $b_{0} b_{1} \cdots b_{2 n+1}$, où, pour tout $i \in \llbracket 0, n \rrbracket, b_{2 i} b_{2 i+1}$ s'écrit soit 01 , soit 10.
|
||||
Soit $m=a_{0} a_{1} \cdots a_{2 n-1} \in \Sigma^{*}$ tel que, pour tout $i \in \llbracket[0, n-1]$, $a_{2 i} a_{2 i+1}$ s'écrit soit $01$, soit $10$. Montrer qu'il n'est pas possible d'écrire les mots $0 m 0$ et $1 m 1$ sous la forme $b_{0} b_{1} \cdots b_{2 n+1}$, où, pour tout $i \in \llbracket 0, n \rrbracket$, $b_{2 i} b_{2 i+1}$ s'écrit soit $01$, soit $10$.
|
||||
\end{question}
|
||||
|
||||
Soit $m \in \Sigma^{*}$. On construit le mot $\mu(m)$ où $\mu$ est défini après la définition 4. Si $\mu(m)=$ wavavaz où $a \in \Sigma$ et $v, w, z \in \Sigma^{*}$, on peut montrer qu'alors $v$ contient un nombre impair de symboles.\\
|
||||
Soit $m \in \Sigma^{*}$. On construit le mot $\mu(m)$ où $\mu$ est défini après la définition \ref{def:quatrieme}. Si $\mu(m)= wavavaz$ où $a \in \Sigma$ et $v, w, z \in \Sigma^{*}$, on peut montrer qu'alors $v$ contient un nombre impair de symboles.
|
||||
|
||||
\begin{question}
|
||||
Montrer, en utilisant Q37 et l'indication précédente, que si $\mu(m)$ est un entrelacement, alors $m$ est un entrelacement.
|
||||
Montrer, en utilisant la question \ref{q:facteur-avava} et l'indication précédente, que si $\mu(m)$ est un entrelacement, alors $m$ est un entrelacement.
|
||||
\end{question}
|
||||
|
||||
\begin{question}
|
||||
Montrer par récurrence que pour tout $n \in \mathbb{N}, T_{n}$ n'est pas un entrelacement.
|
||||
Montrer par récurrence que pour tout $n \in \mathbb{N}$, $T_n$ n'est pas un entrelacement.
|
||||
\end{question}
|
||||
|
||||
\begin{question}
|
||||
En déduire que pour tout $n \in \mathbb{N}, T_{n}$ ne contient pas de cube.
|
||||
En déduire que pour tout $n \in \mathbb{N}$, $T_n$ ne contient pas de cube.
|
||||
\end{question}
|
||||
|
||||
Par passage à la limite, on admet alors que $T$ n'est pas un entrelacement et ne contient donc pas de cube.
|
||||
|
||||
Référencer dans un nouveau ticket
Bloquer un utilisateur