Une fois nâest pas coutume, je vais parler de la thĂ©orie des automates. Plus prĂ©cisĂ©ment, je vais montrer 4 preuves complĂštement diffĂ©rentes dâun mĂȘme rĂ©sultat sur les automates pondĂ©rĂ©s. Ce billet a le double usage de servir de rĂ©fĂ©rence pour ce rĂ©sultat qui est connu, mais nâest pas facilement citable, mais aussi de sortir ces preuves de notes et dâĂ©changes oraux pour ne plus y penser par la suite.
Dans la mesure du possible, je vais rendre ces rĂ©sultats «âŻauto-contenusâŻÂ», Avant de rentrer dans les dĂ©tails et lâhistorique de la notion dâautomate pondĂ©rĂ©, on peut dĂ©jĂ dire que câest un modĂšle de calcul qui sert Ă reprĂ©senter des fonctions de type \(\Sigma^* \to \mathbb{F}\) oĂč \(\Sigma\) est un alphabet fini et \(\mathbb{F}\) un (semi-)anneau. Pour simplifier la prĂ©sentation des preuves, je vais me restreindre au cas oĂč \(\mathbb{F} = \mathbb{C}\), et je laisse le soin au lecteur de gĂ©nĂ©raliser les rĂ©sultats Ă dâautres anneaux.
La question qui nous intĂ©resse ici est de savoir si une telle fonction \(f \colon \Sigma^* \to \mathbb{C}\) est commutative, câest-Ă -dire, si pour tout mot \(u \in \Sigma^*\), pour toute permutation \(\sigma\) des lettres de \(u\), on a \(f(u) = f(\sigma(u))\).
Exemple. Un exemple typique de fonction commutative est la fonction qui compte le nombre de lettres \(a\) dans un mot \(u\). En effet, si on permute les lettres de \(u\), le nombre de \(a\) ne change pas.
Non-Exemple. Un exemple typique de fonction non-commutative est la fonction qui compte le nombre de fois oĂč le sous-mot \(ab\) apparaĂźt dans un mot \(u\). En effet, \(f(ab) = 1\), mais \(f(ba) = 0\).
Dans ce billet, nous allons donc donner plusieurs algorithmes pour décider si une fonction \(f\) calculée par un automate pondéré est commutative ou non.
Automates pondérés
Avant de parler du rĂ©sultat en question, je vais commencer par dĂ©finir ce quâest un automate pondĂ©rĂ©. Et comme toutes les preuves que je vais donner nâutilisent pas le mĂȘme modĂšle de calcul, je vais prĂ©senter les trois dĂ©finitions utiles pour ce billet. Les fonctions calculĂ©es par les automates pondĂ©rĂ©s Ă©taient dĂ©jĂ connues dans les annĂ©es 70 et les travaux de SchĂŒtzenberger (1962). Depuis, un certain nombre dâouvrages de rĂ©fĂ©rence ont Ă©tĂ© Ă©crits Ă leur sujet (Berstel and Reutenauer 1988, 2010; Sakarovitch 2009; Droste, Kuich, and Vogler 2009).
Les trois définitions présentées ci-aprÚs sont équivalentes, et les transformations entre ces trois modÚles sont faisables algorithmiquement.
Définition 1: Un automate pondéré⊠un automate avec des pondérations
Un automate pondĂ©rĂ© est un automate fini qui a des pondĂ©rations sur les arcs. Formellement, un automate pondĂ©rĂ© est un quintuplet \((Q, \Sigma, \delta, I, F)\) oĂč
- \(Q\) est un ensemble fini dâĂ©tats,
- \(\Sigma\) est un alphabet fini,
- \(\delta \colon Q \times \Sigma \times Q \to \mathbb{C}\) est une relation de transition pondérée,
- \(I \subseteq Q\) est un ensemble dâĂ©tats initiaux,
- \(F \colon Q \to \mathbb{C}\) est une fonction finale.
Ă tout mot dâentrĂ©e \(u \in \Sigma^*\), un tel automate possĂšde un certain nombre de calculs possiblesâŻ: ce sont les suites dâĂ©tats \(q_0 \xrightarrow{u_1} q_1 \xrightarrow{u_2} \cdots \xrightarrow{u_n} q_n\) avec \(q_0 \in I\). La valeur dâun tel calcul est le produit des pondĂ©rations des transitions empruntĂ©es avec la valeur de la fonction finale, câest-Ă -dire \(\delta(q_0, u_1, q_1) \cdot \delta(q_1, u_2, q_2) \cdots \delta(q_{n-1}, u_n, q_n) \cdot F(q_n)\). La fonction associĂ©e Ă un automate pondĂ©rĂ© est la fonction qui associe Ă un mot dâentrĂ©e \(u\) la somme des valeurs de tous les calculs possibles pour \(u\).
Exemple. La fonction \(f\) qui associe Ă \(u\) le nombre de \(a\) dans \(u\) peut se reprĂ©senter comme suit Ă lâaide dâun automate pondĂ©rĂ©. \(Q = \{q_0, q_1\}\), \(\Sigma = \{a, b\}\), \(\delta(q_0, a, q_0) = 1\), \(\delta(q_0, b, q_0) = 0\), \(\delta(q_0, a, q_1) = 1\), \(\delta(q_0, b, q_1) = 0\), \(\delta(q_1, a, q_1) = 1\), \(\delta(q_1, b, q_1) = 0\), \(I = \{q_0\}\), \(F(q_0) = 0\), \(F(q_1) = 1\).
Définition 2: Une version algÚbre linéaire
On utilisera la notation \(\mathcal{M}_{n}(\mathbb{C})\) pour dĂ©signer lâalgĂšbre des matrices carrĂ©es de taille \(n\) Ă coefficients complexes. Une reprĂ©sentation linĂ©aire dâun automate pondĂ©rĂ© est donnĂ©e par un triplet \((I, \mu, F)\), oĂč morphisme \(\mu \colon (\Sigma^*, \cdot) \to (\mathcal{M}_{n}(\mathbb{C}), \times)\), \(I\) est une matrice de taille \(n \times 1\), \(F\) est une matrice de taille \(1 \times n\).
Muni de cette reprĂ©sentation, on peut dĂ©finir la fonction \(f \colon \Sigma^* \to \mathbb{C}\) associĂ©e Ă lâautomate pondĂ©rĂ© comme \(f(u) = F \mu(u) I\).
Exemple. La fonction \(f\) qui associe Ă un mot \(u\) le nombre de \(a\) dans \(u\) peut se reprĂ©senter comme suit Ă lâaide dâune reprĂ©sentation linĂ©aire. On considĂšre \(\mu(a) = \begin{pmatrix} 1 & 0 \\ 0 & 1 \end{pmatrix}\), \(\mu(b) = \begin{pmatrix} 0 & 1 \\ 0 & 0 \end{pmatrix}\), \(I = \begin{pmatrix} 1 \\ 0 \end{pmatrix}\), \(F = \begin{pmatrix} 0 & 1 \end{pmatrix}\).
Définition 3: Une algÚbre différentielle
Lorsque lâon a une fonction \(f \colon \Sigma^* \to \mathbb{C}\), on peut dĂ©finir les opĂ©rateurs de dĂ©rivation Ă gauche et Ă droite \(\partial_a^L(f)(u) = f(au)\) et \(\partial_a^R(f)(u) = f(ua)\).
Une fonction \(f\) est finiment différentielle si elle appartient à un espace vectoriel de dimension fini de fonctions allant de \(\Sigma^*\) dans \(\mathbb{C}\), qui est stable par les opérateurs de dérivation à gauche et à droite.
Preuve(s) de la décidabilité de la commutativité
Ătant donnĂ© une fonction \(f \colon \Sigma^* \to \mathbb{C}\) calculĂ©e par un automate pondĂ©rĂ©, on veut savoir si \(f\) est commutative. Dans une majoritĂ© des preuves suivantes, on utilisera le fait que lâĂ©galitĂ© de deux automates pondĂ©rĂ©s est dĂ©cidable (Berstel and Reutenauer 2010, Chapitre 2, Corollaire 3.6).
Preuve 1: Permutations et générateurs
LâidĂ©e est de tester si \(f = f \circ \delta\), pour toute fonction \(\delta\) qui permute les lettres du mot dâentrĂ©e. Le principal problĂšme est quâil y a une infinitĂ© de telles fonctions. Un second problĂšme est que, si \(f\) est calculĂ©e par un automate pondĂ©rĂ©, il nâest pas immĂ©diat que \(f \circ \delta\) le soit aussi. La solution au problĂšme principal est de se restreindre Ă deux permutationsâŻ: on teste si \(f \circ \tau_{1,2} = f\) et si \(f \circ \sigma = f\), oĂč \(\tau_{1,2}\) permute les deux premiĂšres lettres dâun mot et \(\sigma\) Ă©change la premiĂšre et la derniĂšre lettre dâun mot.
Lemme. Si \(f \circ \tau_{1,2} = f \circ \sigma = f\) alors \(f\) est commutative.
Preuve.
On se souvient de ses cours de théorie des groupes de permutation et on se rappelle que tout élément du groupe symétrique de taille \(n\) est généré par la transposition \(\tau_{1,2}\) et le cycle \((1, 2, \ldots, n)\). On peut donc écrire toute permutation \(\gamma\) comme une composition de ces deux permutations. Comme \(f \circ \tau_{1,2} = f\) et \(f \circ \sigma = f\), on déduit immédiatement que pour toute permutation \(\gamma\), \(f \circ \gamma = f\).
Pour résoudre notre second problÚme, on utilise la présentation des automates pondérés sous forme de fonctions finiment différentielles.
Lemme. Si \(f\) est finiment différentielle alors \(f \circ \tau_{1,2}\) et \(f \circ \sigma\) sont finiment différentielles.
Preuve.
Supposons que \(f \in \langle f_1, \ldots, f_n \rangle = \mathbb{V}\) oĂč les \(f_i\) sont des fonctions de \(\Sigma^*\) dans \(\mathbb{C}\), et \(\mathbb{V}\) est stable par les opĂ©rateurs de dĂ©rivation Ă gauche et Ă droite.
On construit lâespace \(\mathbb{E}\) des fonctions de \(\Sigma^*\) dans \(\mathbb{C}\) engendrĂ© par les fonctions \(f_i\), \(f_i \circ \tau_{1,2}\), \(f_i \circ \sigma\), leurs dĂ©rivĂ©es Ă gauche et Ă droite par une lettre. Il est clair que \(\mathbb{E}\) est finiment gĂ©nĂ©rĂ© et contient \(f \circ \tau_{1,2}\) et \(f \circ \sigma\). Il reste Ă montrer que \(\mathbb{E}\) est stable par les opĂ©rateurs de dĂ©rivation Ă gauche et Ă droite.
Pour cela, il suffit de remarquer que \(\partial_a^L \partial_b^L (f \circ \tau_{1,2}) = \partial_b^L \partial_a^L (f)\) et que \(\partial_a^L (f \circ \sigma) = \partial_a^R (f)\).
On a donc un algorithme pour décider si une fonction \(f\) calculée par un automate pondéré est commutative.
Preuve 2: Minimisation
On calcule une reprĂ©sentation linĂ©aire minimale \((I, \mu, F)\) associĂ©e Ă la fonction \(f\). On teste si \(\mu(ab) = \mu(ba)\) pour tout \(a, b \in \Sigma\). VĂ©rifions tout dâabord que cette condition est suffisante.
Lemme. Si \(\mu(ab) = \mu(ba)\) pour tout \(a, b \in \Sigma\) alors \(f\) est commutative.
Preuve.
Soit \(w = u_1 \cdots u_n\) un mot. Alors \(f(w) = I \mu(w) F = I \mu(u_1) \cdots \mu(u_n) F\). Comme \(\mu(ab) = \mu(ba)\) pour tout \(a,b \in \Sigma\), on dĂ©duit que \(f(w)\) ne dĂ©pend pas de lâordre des lettres de \(w\).
Pour lâinstant, nous nâavions pas utilisĂ© la minimalitĂ© de la reprĂ©sentation linĂ©aire. On va utiliser le fait que pour toute reprĂ©sentation linĂ©aire minimale de dimension \(n\), tout vecteur de \(\mathbb{C}^n\) est accessibleâŻet co-accessible ; câest-Ă -dire que \(\mathbb{C}^n\) est gĂ©nĂ©rĂ© en tant quâespace vectoriel par les vecteurs de la forme \(I \mu(w)\) oĂč \(w \in \Sigma^*\), et que symĂ©triquement, \(\mathbb{C}^n\) est gĂ©nĂ©rĂ© en tant quâespace vectoriel par les vecteurs de la forme \(\mu(w) F\) oĂč \(w \in \Sigma^*\).
Lemme. Si \(f\) est commutative alors \(\mu(ab) = \mu(ba)\) pour tout \(a, b \in \Sigma\).
Preuve.
ConsidĂ©rons deux lettres \(a,b \in \Sigma\), et prouvons que \(\mu(ab) = \mu(ba)\). Pour cela, on va considĂ©rer un vecteur propre \(v\) de la matrice \(M = \mu(ab) - \mu(ba)\), et sa valeur propre associĂ©e \(\lambda\), telle que \(M v = \lambda v\). Il nous suffit de prouver que \(\lambda = 0\) pour conclure que \(M = 0\), puis lâĂ©galitĂ© dĂ©sirĂ©e.
Comme \(v \in \mathbb{C}^n\), il existe des mots \(u_i\) et des coefficients \(\alpha_i\) tels que \(v = \sum_i \alpha_i \mu(u_i) F\). De plus, il existe des mots \(w_j\) et des coefficients \(\beta_j\) tels que \({}^t v = \sum_j \beta_j I \mu(w_j)\). Considérons donc
\[\begin{align*} {}^t v M v &= \lambda |v|^2 \\ &= \sum_{i,j} \alpha_i \beta_j I \mu(w_j) (\mu(ab) - \mu(ba)) \mu(u_i) F \\ &= \sum_{i,j} \alpha_i \beta_j (I \mu(w_j ab u_i) F - I \mu(w_j ba u_i) F) \\ &= \sum_{i,j} \alpha_i \beta_j (f(w_j ab u_i) - f(w_j ba u_i)) \\ &= 0 \end{align*}\]
Comme \(v\) est un vecteur propre de \(M\), sa norme nâest pas nulle, et on dĂ©duit que \(\lambda = 0\).
Preuve 3: Uniformisation
Au lieu dâobserver des propriĂ©tĂ©s dâune reprĂ©sentation minimale de \(f\), on va construire une version commutative de \(f\) et tester lâĂ©galitĂ© avec \(f\). Plus prĂ©cisĂ©ment, nous allons calculer \(f \circ \text{sort}\) oĂč \(\text{sort}\) est une fonction qui trie les lettres dâun mot. On teste si \(f \circ \text{sort} = f\). Jâutilise en boĂźte noire le lemme suivant, pour lequel je nâai pas de rĂ©fĂ©rence prĂ©cise Ă citer.
Lemme. Soit \(g\) une fonction réguliÚre et \(f\) calculée par un automate pondéré. Alors \(f \circ g\) est calculée par un automate pondéré.
Il reste à vérifier que si \(f \circ \text{sort} = f\) alors \(f\) est commutative, ce qui est immédiat.
Lemme. Si \(f \circ \text{sort} = f\) alors \(f\) est commutative.
Preuve.
Soit \(w_1\) et \(w_2\) deux mots ayant le mĂȘme multiensemble de lettres. Alors, \(\text{sort}(w_1) = \text{sort}(w_2)\), et donc \(f(w_1) = f(\text{sort}(w_1)) = f(\text{sort}(w_2)) = f(w_2)\). Ainsi, \(f\) est commutative.
Preuve 4: Ăquations algĂ©briques
Ătant donnĂ© une fonction \(f\) calculĂ©e par une reprĂ©sentation linĂ©aire de la forme \((I, \mu, F)\), on veut tester si pour tous mots \(x,y,z,t\), on a \(I \mu(xyzt) F = I \mu(xzyt) F\). Par linĂ©aritĂ©, cela revient Ă dĂ©cider si pour tous mots \(x,y,z,t\), on a \(I (\mu(x)\mu(y)\mu(z)\mu(t) - \mu(x)\mu(z)\mu(y)\mu(t)) F = 0\). Cette Ă©quation est polynomiale en les coefficients de \(\mu(x), \mu(y), \mu(z), \mu(t)\). Notons \(P\) ce polynĂŽme possĂ©dant \(4 \times n^2\) inconnues.
La clĂŽture de Zariski dâun ensemble \(E\) de matrices est le plus petit ensemble contentant \(E\) de matrices \(M\) telles que pour tout polynĂŽme \(P\) en les coefficients de \(M\), si \(P\) sâannule sur \(E\), alors \(P(M) = 0\). Si on considĂšre \(E = \{ \mu(u) \mid u \in \Sigma^* \}\), qui est un semigroupe de matrices finiment engendrĂ© par les matrices \(\mu(a)\) oĂč \(a \in \Sigma\), alors la clĂŽture de Zariski de \(E^4\) doit contenir notre polynĂŽme \(P\).
ThĂ©orĂšme (Hrushovski et al. 2018). On peut calculer la clĂŽture de Zariski dâun semigroupe de matrice finiment gĂ©nĂ©rĂ©. Et dĂ©cider si un polynĂŽme \(P\) est dans cette clĂŽture.
Notre algorithme est alors le suivantâŻ: calculer la clĂŽture de Zariski de \(E = \{ \mu(u) \mid u \in \Sigma^* \}\). De ce calcul, on peut dĂ©duire la clĂŽture de Zariski de \(E^4\), et dĂ©cider si \(P\) sâannule sur cette clĂŽture.
Conclusion
Nous avons vu quatre algorithmes pour décider si une fonction \(f\) calculée par un automate pondéré est commutative ou non. Ces algorithmes sont basés sur des techniques trÚs variées et toutes utiles dans certains contextes.