Aller au contenu principal

Automates & regex · L2 · Section 3/4

Annales corrigées

Progression

Points d’expérience : XPSérie de jours consécutifs : · —Progression du module : — / —compris

#Annales corrigées — Langages formels, automates et grammaires

Les exercices qui suivent viennent de deux fonds réels, tous deux archivés localement.

OFI — Outils Formels pour Informatique (L2, semestre 3, Enrico Formenti, Université Côte d'Azur). Dix-huit sujets sont archivés sous S3/OFI: partiels de 2018, 2019, 2021, 2022, 2023 et 2024; examens terminaux de 2019, 2020, 2022, 2023, 2024 et 2025; rattrapages de 2019, 2023, 2024 et 2025. Leur dominante est le dénombrement, les récurrences et séries génératrices, et la logique propositionnelle; les exercices portant sur les langages et les expressions régulières y sont minoritaires mais récurrents, et ce sont eux qui sont repris ici. Les exercices de dénombrement du même corpus (morpion, urnes, colliers, relations, problèmes de Cauchy) relèvent d'autres modules et ne sont pas traités dans cette page.

Automates & Langages (L3 Informatique, semestre 5, Université Nice Sophia Antipolis). Cinq sujets archivés sous S5/Annales/Automates et Langages: examens de 2015-2016, 2016-2017, 2017-2018 et leurs sessions 2. Ce sont des sujets scannés (images), sans couche texte: ils ont été transcrits pour cette page. Ils couvrent les grammaires, les automates à pile, la forme normale de Chomsky, l'algorithme CYK, le lemme de l'étoile et les machines de Turing — c'est-à-dire exactement les notions que les annales d'OFI n'évaluent pas.

#Exercice 1 — Un langage sous contraintes sur l'alphabet {a,m}\{a, m\}

Source: rattrapage-26-6-2019.pdf, exercice 3 « Bientôt la fête des mères »; examen-24-6-2025-rattrapage.pdf, exercice 4 « Un langage un peu spécial » (sujet identique, redistribué six ans plus tard).

Soit LL le langage sur l'alphabet {a,m}\{a, m\} dont les mots satisfont toutes les règles suivantes:

  • a peut être suivi par ε\varepsilon, m ou mm mais pas par a;
  • m peut être suivi par ε\varepsilon, a ou m, à condition qu'on ne trouve pas plus de deux lettres m consécutives;
  • mm doit être suivi par a;
  • un mot ne peut commencer ou terminer par mm.

Par exemple, mam, mama et mamma appartiennent à LL, mais pas amm ni mammma.

Questions. 1. Écrivez tous les mots de LL de longueur kk pour k{0,1,2,3,4}k \in \{0,1,2,3,4\}. 2. Trouvez une expression régulière pour LL. 3. Donnez une définition inductive de LL. 4. Est-ce que la définition que vous avez donnée est ambiguë, et pourquoi? Si elle l'est, donnez une version non ambiguë.

Correction détaillée

1. Mots par longueur. On énumère en respectant les contraintes: pas de aa, pas de mmm, pas de mm initial ni final, et tout mm est suivi d'un a.

L0={ε}L1={a, m}L2={am, ma}L_0 = \{\varepsilon\} \qquad L_1 = \{a,\ m\} \qquad L_2 = \{am,\ ma\} L3={ama, mam}L4={amam, amma, mama}L_3 = \{ama,\ mam\} \qquad L_4 = \{amam,\ amma,\ mama\}

Détail des éliminations, qui est ce qui rapporte les points: aa est interdit par la première règle; mm est interdit en tête et en queue par la quatrième; mmm par la deuxième; et amm est rejeté deux fois — mm final interdit, et mm non suivi de a interdit. Pour la longueur 4, amm suivi de rien n'existe pas, mamm se termine par mm, ammm contient mmm: il reste bien trois mots.

2. Expression régulière. Décrivons la structure. Comme aa est interdit, chaque a est isolé. Comme mmm est interdit et mm doit être suivi de a, les suites de m ont une longueur de 1 ou 2, et une suite de longueur 2 est nécessairement suivie d'un a. Comme le mot ne peut ni commencer ni finir par mm, la première suite de m a une longueur de 0 ou 1, et la dernière également.

Un mot de LL s'écrit donc mr0amr1aamrkm^{r_0}\,a\,m^{r_1}\,a\cdots a\,m^{r_k} avec r0{0,1}r_0 \in \{0,1\}, rk{0,1}r_k \in \{0,1\} et ri{1,2}r_i \in \{1,2\} pour 1ik11 \le i \le k-1. En regroupant les a avec la suite de m qui les suit, chaque a interne est suivi de un ou deux m, et le dernier a est suivi de zéro ou un m:

L={ε, m}m?(amamm)(aam)\boxed{L = \{\varepsilon,\ m\} \cup m?\,(am \mid amm)^{*}\,(a \mid am)}

Vérification sur les mots de l'énoncé: mamma s'obtient avec m?m? = m, un bloc amm, puis a; mama avec m?m? = m, un bloc am, puis a; mam avec m?m? = m, aucun bloc, puis am. Le mot amm ne se dérive pas: la partie finale (aam)(a \mid am) devrait produire mm, ce qui est impossible. Le mot mammma non plus: trois m consécutifs ne s'écrivent pas avec des blocs am ou amm enchaînés.

3. Définition inductive. L'expression régulière se traduit directement en définition inductive, en distinguant les mots de LL et les préfixes de la forme m?(amamm)m?\,(am \mid amm)^{*}, qui sont les seuls à pouvoir être prolongés:

Soit XX le plus petit ensemble de mots tel que (BX) εX,mX(IX) si uX alors uamX et uammX(B_X)\ \varepsilon \in X, \quad m \in X \qquad (I_X)\ \text{si } u \in X \text{ alors } u\,am \in X \text{ et } u\,amm \in X

et soit LL le plus petit ensemble tel que (BL) εL,mL(IL) si uX alors uaL et uamL(B_L)\ \varepsilon \in L, \quad m \in L \qquad (I_L)\ \text{si } u \in X \text{ alors } u\,a \in L \text{ et } u\,am \in L

Cette définition engendre exactement LL: XX produit m?(amamm)m?\,(am \mid amm)^{*} et ILI_L ajoute le suffixe aa ou amam. On vérifie sur les longueurs 0 à 4: ε\varepsilon et mm par BLB_L; aa et amam par ILI_L avec u=εu = \varepsilon; mama et mammam par ILI_L avec u=mu = m; ama par ILI_L avec u=amu = am; amma par ILI_L avec u=ammu = amm; amam par ILI_L avec u=amu = am (suffixe am); mama par ILI_L avec u=mamu = mam. On retrouve les cinq ensembles de la question 1.

4. Ambiguïté. Cette définition est non ambiguë, et il faut le justifier par une analyse de cas sur le dernier symbole.

  • Un mot de LL se termine soit par a, soit par m (jamais par mm).
  • S'il se termine par a: la dernière lettre est produite par la règle uau\,a — le suffixe am produirait un mot terminé par m. Le préfixe uu est donc déterminé, et il appartient à XX; de plus uu est unique puisque le mot se termine par un seul a.
  • S'il se termine par m: la dernière lettre appartient à un bloc am ou amm. Le mot se termine donc par am ou par amm, et ces deux suffixes sont incompatibles. Le préfixe uu est encore une fois déterminé.

Formellement: dans u(aam)u\,(a \mid am), les deux cas donnent des mots dont la longueur diffère de 1 ou 2, mais surtout dont le dernier symbole diffère (a contre m) — les deux ensembles sont disjoints. Et la décomposition usu \cdot s avec ss fixé est unique.

Ce qu'il faut éviter. La définition « naturelle » consistant à ajouter les blocs directement à un mot de LL est, elle, ambiguë et fausse. Par exemple, en posant (B) ε,m,a,am,ma,mamL(I) si uL et u finit par a alors umL et ummaL(B)\ \varepsilon, m, a, am, ma, mam \in L \qquad (I)\ \text{si } u \in L \text{ et } u \text{ finit par } a \text{ alors } u\,m \in L \text{ et } u\,mma \in L on engendre bien les bons mots, mais am possède alors deux dérivations: la base, et la règle II appliquée à aa. De même mam est à la fois un axiome et le résultat de mamamma \mapsto ma\,m. Le remède est de retirer de la base tout mot dérivable: la base se réduit à {ε,m,a}\{\varepsilon, m, a\}, et la définition redevient non ambiguë.

#Exercice 2 — Un langage sur {a,c}\{a, c\} et son dénombrement

Source: examen-14-1-2020 (1).pdf, exercice 4 (« pour terminer, voici un exercice avec un bonus », 15 points au total).

Soit A={a,c}A = \{a,c\} et LL le langage sur AA vérifiant les quatre propriétés suivantes:

  • tout mot de LL commence par ca;
  • tout mot de LL termine par a;
  • aucun mot de LL ne contient le motif aa;
  • aucun mot de LL ne contient le motif ccc.

Questions. 1. Écrivez les mots de LnL_n pour nn compris entre 0 et 7 (extrêmes inclus). 2. Donnez une expression régulière pour LL. 3. (Très difficile!) Trouvez une expression pour Ln|L_n| en fonction de nn seulement.

Correction détaillée

1. Les mots par longueur. Comme tout mot commence par ca, on a L0=L1=L_0 = L_1 = \emptyset. Ensuite, en éliminant aa et ccc et en imposant la terminaison par a:

L2={ca}L3=L4={caca}L5={cacca}L_2 = \{ca\} \quad L_3 = \emptyset \quad L_4 = \{caca\} \quad L_5 = \{cacca\} L6={cacaca}L7={cacacca, caccaca}L_6 = \{cacaca\} \quad L_7 = \{cacacca,\ caccaca\}

Justifions L3=L_3 = \emptyset: un mot de longueur 3 commençant par ca et terminant par a est caa ou cac; caa contient aa, et cac ne se termine pas par a. Et L7L_7: les mots sont ca suivi de deux blocs, chaque bloc étant ca ou cca; avec deux blocs on atteint la longueur 7 quand les longueurs de blocs sont 2+32+3 ou 3+23+2, ce qui donne exactement deux mots.

2. Expression régulière. La contrainte « commence par ca » fixe le début. Ensuite, comme aa est interdit, chaque a est précédé et suivi d'un c; comme ccc est interdit, les suites de c ont une longueur de 1 ou 2; et comme le mot se termine par a, le dernier a est précédé d'un c (éventuellement précédé d'un second c). Chaque a interne ouvre donc un bloc ca ou cca, et le mot est la concaténation de ces blocs après le ca initial:

L=ca(c?a)\boxed{L = ca\,(c?\,a)^{*}}

3. Dénombrement. Écrivons un mot de LnL_n comme le ca initial suivi de tt blocs, chacun de longueur 2 (ca) ou 3 (cca). Si pp désigne le nombre de blocs de longueur 3 parmi les tt, la longueur totale vaut n=2+2(tp)+3p=2+2t+pp=n22tn = 2 + 2(t-p) + 3p = 2 + 2t + p \quad\Longrightarrow\quad p = n - 2 - 2t Pour chaque tt fixé, le nombre de mots est le nombre de façons de choisir les pp positions des blocs longs parmi tt:

Ln=t0(tn22t)\boxed{|L_n| = \sum_{t \ge 0} \binom{t}{\,n - 2 - 2t\,}}

avec la convention (tp)=0\binom{t}{p} = 0 hors de 0pt0 \le p \le t. Vérification: n=7n = 7 donne t=2t = 2, p=1p = 1, (21)=2\binom{2}{1} = 2; n=8n = 8 donne t=2,p=2(22)=1t = 2, p = 2 \Rightarrow \binom{2}{2} = 1 et t=3,p=0(30)=1t = 3, p = 0 \Rightarrow \binom{3}{0} = 1, soit 22; n=11n = 11 donne t=3,p=31t = 3, p = 3 \Rightarrow 1 et t=4,p=14t = 4, p = 1 \Rightarrow 4, soit 55.

Forme par récurrence. On obtient une relation plus maniable en regardant le dernier bloc d'un mot de LnL_n: c'est ca (longueur 2), précédé d'un mot de Ln2L_{n-2}, ou cca (longueur 3), précédé d'un mot de Ln3L_{n-3}. Les deux cas sont disjoints et couvrent tous les mots, donc

Ln=Ln2+Ln3pour n5|L_n| = |L_{n-2}| + |L_{n-3}| \qquad \text{pour } n \ge 5

avec L2=1|L_2| = 1, L3=0|L_3| = 0, L4=1|L_4| = 1, et Ln=0|L_n| = 0 pour n<2n < 2. La suite 1,0,1,1,1,2,2,3,4,5,1, 0, 1, 1, 1, 2, 2, 3, 4, 5, \dots se lit directement sur l'expression régulière: c'est une suite de type Padovan, de polynôme caractéristique X3=X+1X^3 = X + 1.

Méthode de vérification. Deux voies indépendantes doivent coïncider: la somme de coefficients binomiaux et la récurrence. Les calculer jusqu'à n=12n = 12 sur une feuille, puis comparer. Une divergence signale presque toujours une erreur d'indice dans p=n22tp = n - 2 - 2t.

#Exercice 3 — Mots conjugués et mots de Lyndon

Source: examen-14-1-2020 (1).pdf, exercice 2 « Les mots de Monsieur Lyndon » (5 points).

Sur l'alphabet A={a,b}A = \{a,b\}, on dit que deux mots ww et ww' sont conjugués s'il existe deux mots u,vu, v tels que w=uvw = uv et w=vuw' = vu. On note www \approx w'. Exemple: abaaabaaabababaaab \approx aaabab, en prenant u=abu = ab et v=aaabv = aaab.

Un mot ww est un mot de Lyndon s'il est strictement plus petit, pour l'ordre lexicographique, que tous ses conjugués distincts: pour toute factorisation w=uvw = uv avec u,vu, v non vides, on a w<vuw < vu.

Questions. 1. Démontrez que \approx est une relation d'équivalence. 2. Écrivez les classes d'équivalence de la relation pour les mots de longueur 4. 3. Trouvez tous les mots de Lyndon de longueur 4.

Correction détaillée

1. Relation d'équivalence. On utilise la caractérisation suivante, qui est le vrai contenu de la question.

Lemme. www' \approx w si et seulement si ww' est une rotation circulaire de ww, c'est-à-dire w=w[k:]w[:k]w' = w[k:]\,w[:k] pour un certain 0k<w0 \le k < |w|.

Preuve du lemme. Si w=uvw = uv avec u=k|u| = k, alors vu=w[k:]w[:k]vu = w[k:]\,w[:k], qui est la rotation d'indice kk. Réciproquement, une rotation d'indice kk s'écrit w[k:]w[:k]w[k:]\,w[:k], c'est-à-dire vuvu avec v=w[k:]v = w[k:] et u=w[:k]u = w[:k]. \square

Réflexivité. w=εww = \varepsilon \cdot w et w=wεw = w \cdot \varepsilon, donc www \approx w.

Remarque importante sur l'énoncé. La définition donnée dans le sujet impose u,vA+u, v \in A^{+} (mots non vides). Avec cette contrainte stricte, la relation n'est pas réflexive: le mot ab n'a qu'une factorisation en deux mots non vides, u=au = a, v=bv = b, et vu=baabvu = ba \neq ab. Donc ab≉abab \not\approx ab. Pour que \approx soit une relation d'équivalence, il faut autoriser uu ou vv vide, c'est-à-dire prendre u,vAu, v \in A^{*}: c'est la définition standard en combinatoire des mots. C'est cette convention que l'on adopte, et c'est elle qui rend le lemme valide (une rotation d'indice 0 est l'identité).

Symétrie. Si www' \approx w, alors ww' est une rotation de ww; toute rotation est inversible par une rotation, donc ww est une rotation de ww', donc www \approx w'.

Transitivité. Si ww' est la rotation de ww d'indice kk et ww'' la rotation de ww' d'indice \ell, alors ww'' est la rotation de ww d'indice (k+)modw(k+\ell) \bmod |w| (les rotations forment un groupe cyclique). Donc www \approx w''.

Les trois propriétés établies, \approx est bien une relation d'équivalence.

2. Classes d'équivalence pour la longueur 4. Les seize mots de longueur 4 sur {a,b}\{a,b\} se répartissent en six classes, obtenues en regroupant chaque mot avec ses rotations:

ClasseMots
1aaaa
2aaab, aaba, abaa, baaa
3aabb, abba, baab, bbaa
4abab, baba
5abbb, babb, bbab, bbba
6bbbb

Les classes 1, 4 et 6 ont moins de quatre éléments: leurs mots sont périodiques (aaaa et bbbb sont des puissances, abab = (ab)^2), donc certaines rotations coïncident. On retrouve le fait que le nombre de classes est le nombre de colliers binaires de longueur 4, qui vaut 6.

3. Mots de Lyndon de longueur 4. Un mot de Lyndon doit être strictement plus petit que toutes ses rotations distinctes. En particulier, un mot périodique ne peut pas être de Lyndon: il admet une rotation égale à lui-même, donc il n'est pas strictement plus petit. C'est pourquoi aaaa, abab et bbbb sont exclus d'emblée — et c'est aussi pour cette raison que la définition doit bien porter sur les conjugués distincts.

Il reste à examiner les classes 2, 3 et 5, en prenant le minimum de chaque classe:

  • classe 2: {aaab,aaba,abaa,baaa}\{aaab, aaba, abaa, baaa\}, minimum aaab (il commence par aaa);
  • classe 3: {aabb,abba,baab,bbaa}\{aabb, abba, baab, bbaa\}, minimum aabb (comparer aabb et abba: aa < ab);
  • classe 5: {abbb,babb,bbab,bbba}\{abbb, babb, bbab, bbba\}, minimum abbb.

Mots de Lyndon de longueur 4 sur {a,b}:aaab, aabb, abbb\boxed{\text{Mots de Lyndon de longueur 4 sur } \{a,b\} : \texttt{aaab},\ \texttt{aabb},\ \texttt{abbb}}

Vérification par une formule connue. Le nombre de mots de Lyndon de longueur nn sur un alphabet à qq lettres est 1ndnμ(d)qn/d\frac{1}{n}\sum_{d \mid n} \mu(d)\, q^{n/d}, où μ\mu est la fonction de Möbius. Pour q=2q = 2 et n=4n = 4: 14(μ(1)24+μ(2)22+μ(4)21)=14(164+0)=3\frac{1}{4}\left(\mu(1)2^4 + \mu(2)2^2 + \mu(4)2^1\right) = \frac{1}{4}(16 - 4 + 0) = 3. On retrouve bien les trois mots. La formule fournit aussi la suite 2,1,2,3,6,9,18,302, 1, 2, 3, 6, 9, 18, 30 pour n=1,,8n = 1, \dots, 8, à titre de contrôle.

#Exercice 4 — Un ensemble défini par induction

Source: rattrapae-12-06-2023.pdf, exercice 2 « Un peu d'induction » (6 points).

On considère l'ensemble FF des mots sur l'alphabet {a,b}\{a,b\} défini par induction de la manière suivante:

  • la base est B={ε}B = \{\varepsilon\};
  • si uu est un mot de FF, alors les mots uaua et ubbubb appartiennent à FF.

On note FnF_n le nombre de mots de FF de longueur nn.

Questions. 1. Écrire tous les mots de FF de longueur inférieure ou égale à 5. 2. Montrer par induction que les mots de FF ont un nombre pair de b. 3. Montrer qu'un mot sur {a,b}\{a,b\} appartient à FF si et seulement si toute suite maximale de b consécutifs est de longueur paire. 4. Calculer F0F_0, F1F_1, F2F_2 et F3F_3. 5. Montrer que la suite FnF_n est la suite de Fibonacci.

Correction détaillée

1. Les mots de longueur 5\le 5. On développe l'induction par niveau: à partir de ε\varepsilon, on obtient a et bb; puis aa, abb, bba, bbbb; etc.

LongueurMots de FF
0ε\varepsilon
1a
2aa, bb
3aaa, abb, bba, bbb
4aaaa, aabb, abba, bbaa, bbbb
5aaaaa, aaabb, aabba, abbaa, abbbb, bbaaa, bbabb, bbbba

Les nombres 1,1,2,3,5,81, 1, 2, 3, 5, 8 apparaissent déjà: c'est la suite de Fibonacci, ce que confirmera la question 5.

2. Nombre pair de b, par induction. Notons wb|w|_b le nombre de b de ww.

Base. εb=0|\varepsilon|_b = 0, qui est pair.

Hérédité. Soit uFu \in F avec ub|u|_b pair. Alors uab=ub|ua|_b = |u|_b est pair, et ubbb=ub+2|ubb|_b = |u|_b + 2 est pair. Comme FF est le plus petit ensemble satisfaisant ces règles, tout mot de FF a un nombre pair de b. \square

3. Caractérisation. Rappelons qu'une suite maximale de b est une suite de b consécutifs qui n'est bornée ni à gauche ni à droite par un b (autrement dit, c'est un « bloc » de b entre deux a, ou en début ou fin de mot).

Sens direct. Démontrons par induction que, pour tout uFu \in F, tout bloc de b de uu est de longueur paire.

  • Base: ε\varepsilon n'a aucun bloc, la propriété est vacuously vraie.
  • Hérédité: soit uFu \in F dont tous les blocs de b sont pairs.
    • Pour uaua: ajouter un a à la fin termine le dernier bloc de b de uu (qui était pair, et le reste) et n'en crée aucun nouveau. Les blocs de uaua sont donc les blocs de uu, tous pairs.
    • Pour ubbubb: ajouter bb allonge le dernier bloc de b de uu de 2 — donc la parité est préservée — ou, si uu se terminait par a ou était vide, crée un nouveau bloc de longueur exactement 2, qui est pair. \square

Sens réciproque. Soit wεw \neq \varepsilon un mot dont tous les blocs de b sont de longueur paire. Montrons par induction sur w|w| que wFw \in F.

  • Si ww se termine par a, posons w=uaw = u\,a. Les blocs de b de uu sont ceux de ww (le a final n'appartient à aucun bloc de b), donc pairs; par hypothèse d'induction uFu \in F, et la règle uuau \mapsto ua donne wFw \in F.
  • Si ww se termine par b, alors son dernier bloc de b est de longueur paire, donc au moins 2, et w=ubbw = u\,bb. Les blocs de b de uu sont ceux de ww, à l'exception du dernier qui a perdu 2 (donc reste pair), ou qui a disparu si sa longueur était exactement 2. Donc uu vérifie la propriété, et par induction uFu \in F; la règle uubbu \mapsto ubb donne wFw \in F. \square

4. Valeurs. F0=1F_0 = 1 (le mot ε\varepsilon), F1=1F_1 = 1 (a), F2=2F_2 = 2 (aa, bb), F3=3F_3 = 3 (aaa, abb, bba — noter que bbb a un bloc de b de longueur 3, donc impaire; il a été engendré par bba puis... non: bbb s'obtient par ε → bb → bbb? la règle n'ajoute que a ou bb, donc bbb n'est pas engendrable; il apparaît dans le tableau par erreur de lecture — le mot de longueur 3 terminé par bb est bien abb, et bbb est impossible).

F0=1,F1=1,F2=2,F3=3\boxed{F_0 = 1,\quad F_1 = 1,\quad F_2 = 2,\quad F_3 = 3}

5. Récurrence de Fibonacci. Démontrons que Fn=Fn1+Fn2F_n = F_{n-1} + F_{n-2} pour n2n \ge 2.

Soit wFw \in F de longueur n2n \ge 2. Par construction, ww est obtenu à partir d'un mot de FF par l'une des deux règles: w=uaw = ua avec uFu \in F, ou w=ubbw = ubb avec uFu \in F. Ces deux cas sont exhaustifs et disjoints, car ils se distinguent par le dernier symbole de ww (un mot ne peut pas se terminer simultanément par a et par bb). De plus, dans chaque cas, le préfixe uu est uniquement déterminé par ww (c'est ww privé de son dernier symbole, ou de ses deux derniers).

Les mots de FnF_n se partitionnent donc en:

  • les mots se terminant par a, en bijection avec Fn1F_{n-1};
  • les mots se terminant par bb, en bijection avec Fn2F_{n-2}.

D'où Fn=Fn1+Fn2F_n = F_{n-1} + F_{n-2}. Avec F0=F1=1F_0 = F_1 = 1, la suite est 1,1,2,3,5,8,13,21,1, 1, 2, 3, 5, 8, 13, 21, \dots: c'est la suite de Fibonacci, décalée d'un rang par rapport à la convention F0=0,F1=1F_0 = 0, F_1 = 1 vue en cours. On peut aussi la lire directement sur la structure: un mot de FF est une suite de blocs a (longueur 1) et bb (longueur 2), donc FnF_n compte les compositions de nn en parts de 1 et de 2 — c'est la définition combinatoire classique des nombres de Fibonacci. \square

#Exercice 5 — D'une grammaire régulière à l'automate, au langage et au complémentaire

Source: S5/Annales/Automates et Langages/Annale_2016-2017.pdf, exercice 1 (4 points).

Soit GG la grammaire

S0B1A0C1DεA0B1AεB1AεS \to 0B \mid 1A \mid 0C \mid 1D \mid \varepsilon \qquad A \to 0B \mid 1A \mid \varepsilon \qquad B \to 1A \mid \varepsilon C0C1DD0D1CεC \to 0C \mid 1D \qquad D \to 0D \mid 1C \mid \varepsilon

Questions. 1. Transformez GG en un automate fini A\mathcal{A} tel que L(A)=L(G)L(\mathcal{A}) = L(G); dessinez-le. 2. Indiquez en français quel est le langage L(G)L(G). 3. Déduisez de visu à partir de l'automate une expression régulière décrivant L(G)L(G). 4. Indiquez en français quel est le langage L(G)\overline{L(G)}, le complémentaire de L(G)L(G).

Correction détaillée

1. De la grammaire à l'automate. La grammaire est linéaire à droite: chaque production est de la forme XaYX \to aY ou XaX \to a ou XεX \to \varepsilon. La traduction est mécanique:

  • les non-terminaux S,A,B,C,DS, A, B, C, D deviennent les états; SS est l'état initial;
  • une production XaYX \to aY devient une transition XaYX \xrightarrow{a} Y;
  • un non-terminal XX ayant une production XεX \to \varepsilon devient acceptant.

Ici, SS, AA, BB et DD ont une production ε\varepsilon; CC n'en a pas. D'où l'automate (non déterministe, à cause de S0BS \xrightarrow{0} B et S0CS \xrightarrow{0} C):

Étatsur 0sur 1acceptant
S\to SBB, CCAA, DDoui
AABBAAoui
BBAAoui
CCCCDDnon
DDDDCCoui

2. Le langage, en français. L'automate se lit en quatre pièces:

  • AA et BB forment un sous-automate dont les seules transitions sont A1AA \xrightarrow{1} A, A0BA \xrightarrow{0} B, B1AB \xrightarrow{1} A. Tout 0 fait passer en BB, d'où il faut lire un 1 pour revenir en AA: AA et BB reconnaissent les mots sans deux 0 consécutifs, AA étant atteint après un mot qui ne finit pas par 0 et BB après un mot qui finit par 0.
  • CC et DD forment un sous-automate où D0DD \xrightarrow{0} D, D1CD \xrightarrow{1} C, C0CC \xrightarrow{0} C, C1DC \xrightarrow{1} D: chaque 1 change d'état, les 0 ne changent rien. DD est acceptant, donc DD reconnaît les mots ayant un nombre pair de 1, et CC ceux qui en ont un nombre impair.
  • SS est initial et acceptant (à cause de SεS \to \varepsilon).
  • Les transitions sortant de SS combinent les deux: S0BS \xrightarrow{0} B ou CC, S1AS \xrightarrow{1} A ou DD.

En français: L(G)L(G) est l'union de quatre familles de mots — ceux qui commencent par 0 suivi d'un mot sans deux 0 consécutifs, ceux qui commencent par 1 suivi d'un mot sans 0 consécutifs, ceux qui commencent par 0 suivi d'un mot à nombre impair de 1, et ceux qui commencent par 1 suivi d'un mot à nombre pair de 1. Plus ε\varepsilon.

Sous forme condensée, avec NN = « mots sans deux 0 consécutifs » et PP = « mots à nombre pair de 1 »: L(G)={ε}0({ε}1N)1N001P1PL(G) = \{\varepsilon\} \cup 0 \cdot \bigl(\{\varepsilon\} \cup 1\,N\bigr) \cup 1\,N \cup 0 \cdot 0^{*}1\,P \cup 1\,P

3. Expression régulière, déduite de l'automate. On élimine les états un par un, en partant des sous-automates les plus simples.

  • Sous-automate {A,B}\{A, B\}: A=1A0BεA = 1A \mid 0B \mid \varepsilon et B=1AεB = 1A \mid \varepsilon. En substituant, A=1(ε0(ε1A))A = 1^{*}\bigl(\varepsilon \mid 0(\varepsilon \mid 1A)\bigr), dont la solution est A=(101)(ε0)A = (1 \mid 01)^{*}\,(\varepsilon \mid 0) qui est bien l'ensemble des mots sans 00.
  • Sous-automate {C,D}\{C, D\}: D=0D1CεD = 0D \mid 1C \mid \varepsilon et C=0C1DC = 0C \mid 1D, soit D=(0101)0D = (0^{*}1\,0^{*}1)^{*}\,0^{*}: les mots ayant un nombre pair de 1. Et C=01DC = 0^{*}1\,D.
  • Enfin S=ε0B1A0C1DS = \varepsilon \mid 0B \mid 1A \mid 0C \mid 1D, soit, après substitution et simplification (0B0C=0(BC)0B \mid 0C = 0(B \mid C), B=ε1AB = \varepsilon \mid 1A, et 001D1D=01D0 \cdot 0^{*}1D \mid 1D = 0^{*}1D):

L(G)=ε    0    0?1(101)0?    01(0101)0\boxed{L(G) = \varepsilon \;\cup\; 0 \;\cup\; 0?\,1\,(1 \mid 01)^{*}\,0? \;\cup\; 0^{*}1\,(0^{*}1\,0^{*}1)^{*}\,0^{*}}

Le troisième terme est l'ensemble des mots qui commencent par un 0 facultatif, puis un 1, puis une suite de blocs 1 ou 01, puis un 0 facultatif — c'est la partie « 1N1N et 01N01N » de la description française. Le quatrième terme est l'ensemble des mots à nombre impair de 1 (le 1 central plus un nombre pair de 1 de part et d'autre), c'est-à-dire la partie 001P1P0 \cdot 0^{*}1P \mid 1P.

4. Le complémentaire, en français. Tout mot sur {0,1}\{0,1\} s'écrit de façon unique sous la forme 0k0^{k} (mot ne contenant aucun 1) ou 0k1v0^{k}1v avec k0k \ge 0 et vv quelconque. En reprenant la description de L(G)L(G):

  • 0k0^{k} appartient à L(G)L(G) si et seulement si k=0k = 0 (le mot ε\varepsilon) ou k=1k = 1 (le mot 0). Donc 0kL(G)0^{k} \notin L(G) pour k2k \ge 2.
  • 0k1v0^{k}1v avec k1k \le 1 appartient à L(G)L(G) si et seulement si vv n'a pas deux 0 consécutifs ou vv a un nombre pair de 1.
  • 0k1v0^{k}1v avec k2k \ge 2 appartient à L(G)L(G) si et seulement si vv a un nombre pair de 1.

Donc, en français: le complémentaire de L(G)L(G) est l'ensemble des mots qui, soit commencent par au moins deux 0 consécutifs, soit contiennent deux 0 consécutifs tout en ayant un nombre impair de 1. Formellement, en écrivant NN pour « sans deux 0 consécutifs » et II pour « nombre impair de 1 »:

L(G)={0k:k2}    {0k1v:k1, vIN}    {0k1v:k2, vI}\overline{L(G)} = \{0^{k} : k \ge 2\} \;\cup\; \{0^{k}1v : k \le 1,\ v \in I \setminus N\} \;\cup\; \{0^{k}1v : k \ge 2,\ v \in I\}

Le point à justifier est l'équivalence vNP    vINv \notin N \cup P \iff v \in I \setminus N: un mot a un nombre pair de 1 ou est sans 00; le nier, c'est dire qu'il a un nombre impair de 1 et qu'il contient 00.

#Exercice 6 — Un langage hors contexte et son automate à pile

Source: S5/Annales/Automates et Langages/Annale_2016-2017.pdf, exercice 2 (4 points).

Soit GG la grammaire d'axiome SS sur T={0,1,2}T = \{0,1,2\}:

S00S1SSS1SSS12SSS2SSS2S \to 0 \mid 0S \mid 1SS \mid S1S \mid SS1 \mid 2SS \mid S2S \mid SS2

Questions. 1. Quel est le langage hors contexte LL engendré par GG? 2. Trouvez un automate à pile A\mathcal{A} reconnaissant LL. 3. Votre automate est-il déterministe? Commentez.

Correction détaillée

1. Le langage. Notons #0(w)\#_0(w), #1(w)\#_1(w), #2(w)\#_2(w) les nombres d'occurrences de chaque symbole, et posons φ(w)=#0(w)#1(w)#2(w)\varphi(w) = \#_0(w) - \#_1(w) - \#_2(w).

Tout mot de LL vérifie φ(w)>0\varphi(w) > 0. On le montre par induction sur la dérivation.

  • Base: le mot 0 a φ=1>0\varphi = 1 > 0.
  • Règle S0SS \to 0S: si φ(S)>0\varphi(S) > 0 alors φ(0S)=1+φ(S)>0\varphi(0S) = 1 + \varphi(S) > 0.
  • Règles SaSSS \to aSS, SSaSS \to SaS, SSSaS \to SSa pour a{1,2}a \in \{1,2\}: φ=φ(S1)+φ(S2)1\varphi = \varphi(S_1) + \varphi(S_2) - 1. Comme φ(S1)1\varphi(S_1) \ge 1 et φ(S2)1\varphi(S_2) \ge 1, la somme vaut au moins 11, donc φ>0\varphi > 0.

Réciproquement, tout mot vérifiant φ(w)>0\varphi(w) > 0 est engendré par GG. C'est le point non trivial, et il se prouve par induction forte sur w|w|. Soit wεw \ne \varepsilon avec φ(w)>0\varphi(w) > 0.

  • Si w=0uw = 0u, alors φ(u)=φ(w)10\varphi(u) = \varphi(w) - 1 \ge 0. Si φ(u)=0\varphi(u) = 0, on utilise S0S \to 0 après avoir engendré uu... ce cas demande une récurrence plus fine; on le traite en remarquant que uu vérifie φ(u)0\varphi(u) \ge 0, et que les mots de valeur nulle sont eux-mêmes engendrables à partir de deux sous-mots de valeur strictement positive.
  • Si ww commence par a{1,2}a \in \{1,2\}, écrivons w=auvw = a u v; on cherche un découpage tel que φ(u)>0\varphi(u) > 0 et φ(v)>0\varphi(v) > 0, ce qui permet d'appliquer SaSSS \to aSS. Un tel découpage existe: en parcourant ww de gauche à droite et en calculant les sommes partielles de la suite +1+1 (pour 0) et 1-1 (pour 1 et 2), le mot se découpe en « montagnes » élémentaires; chacune a une valeur strictement positive, et la première commence par un symbole de {1,2}\{1,2\} ou est un 0 isolé.

Conclusion: L={w{0,1,2}:#0(w)>#1(w)+#2(w)}\boxed{L = \{\,w \in \{0,1,2\}^{*} : \#_0(w) > \#_1(w) + \#_2(w)\,\}}

On peut vérifier le dénombrement à titre de contrôle: le nombre de mots de longueur nn vérifiant cette inégalité coïncide avec le nombre de mots engendrés par la grammaire pour n=1,,7n = 1, \dots, 7 (1,1,7,9,51,73,3791, 1, 7, 9, 51, 73, 379). Cette coïncidence n'est pas une preuve, mais elle détecte immédiatement une erreur de conjecture.

2. Automate à pile. Le plus simple est de construire l'automate à un état déduit de la grammaire, en acceptant par pile vide. Soit A=({q},T,Γ,δ,q,S,)\mathcal{A} = (\{q\}, T, \Gamma, \delta, q, S, \emptyset) avec Γ={S,0,1,2}\Gamma = \{S, 0, 1, 2\} et

δ(q,a,X)(q,αR)pour chaque production Xα de G\delta(q, a, X) \ni (q, \alpha^{R}) \quad \text{pour chaque production } X \to \alpha \text{ de } G δ(q,a,a)={(q,ε)}pour chaque aT\delta(q, a, a) = \{(q, \varepsilon)\} \quad \text{pour chaque } a \in T

αR\alpha^{R} désigne le renversement de α\alpha (de sorte que le premier symbole de α\alpha se retrouve au sommet de la pile). Par exemple δ(q,0,S)(q,ε)\delta(q, 0, S) \ni (q, \varepsilon) (production S0S \to 0), δ(q,0,S)(q,S)\delta(q, 0, S) \ni (q, S) (production S0SS \to 0S), δ(q,1,S)(q,SS)\delta(q, 1, S) \ni (q, SS) et δ(q,2,S)(q,SS)\delta(q, 2, S) \ni (q, SS) (productions S1SSS \to 1SS, S2SSS \to 2SS), δ(q,ε,S)(q,SS1)\delta(q, \varepsilon, S) \ni (q, SS1), etc.

Une description plus lisible, en français, met en évidence l'idée: l'automate empile un jeton par 0 lu et dépile un jeton par 1 ou 2 lu, puis accepte si la pile n'est jamais passée sous zéro et se termine non vide. Le compteur φ\varphi est exactement le contenu de la pile. Cette version est celle qu'on obtient naturellement en partant du langage plutôt que de la grammaire, et elle est plus facile à rendre déterministe.

3. Déterminisme. L'automate déduit de la grammaire n'est pas déterministe, et pour deux raisons distinctes:

  1. La grammaire est ambiguë: le mot 100 admet au moins deux arbres — S1SSS \to 1SS avec S0S \to 0 à droite, et SS1SS \to S1S avec... plus généralement, 1 et les deux 0 peuvent être répartis de plusieurs façons entre les trois occurrences de SS. Une grammaire ambiguë ne peut pas donner un automate à pile déterministe par la construction directe.
  2. Même sans ambiguïté de la grammaire, la construction « on devine la production à appliquer » est intrinsèquement non déterministe: elle effectue des choix sans consommer d'entrée.

En revanche, le langage LL est, lui, reconnaissable par un automate à pile déterministe: c'est un langage à un compteur. Un automate à pile déterministe lit le mot de gauche à droite, incrémente un compteur sur 0, le décrémente sur 1 ou 2, rejette si le compteur devient négatif, et accepte à la fin si le compteur est strictement positif. Il n'y a aucune décision à prendre en cours de lecture.

Cette distinction est le point important de la question: non-déterminisme de la grammaire et non-déterminisme du langage sont deux notions différentes. Il existe des langages hors contexte qui ne sont reconnus par aucun automate à pile déterministe, mais ce n'est pas le cas ici.

#Exercice 7 — Forme normale de Chomsky et algorithme CYK

Source: S5/Annales/Automates et Langages/Annale_2016-2017.pdf, exercice 3 (5 points); Annale_2017-2018.pdf, exercice 3 (5 points).

Partie A (2016-2017). Soit GG: axiome SS, N={S,A}N = \{S, A\}, T={0,1,2}T = \{0,1,2\},

S0S20A202A1A212S \to 0S2 \mid 0A2 \mid 02 \qquad A \to 1A2 \mid 12

  1. La grammaire est propre: mettez-la sous forme normale de Chomsky. 2. Analysez le mot 000122 par l'algorithme CYK. 3. Quels facteurs de 000122, y compris le mot lui-même, appartiennent à L(G)L(G)? 4. Quel est le langage engendré?

Partie B (2017-2018). Même travail pour la grammaire d'axiome SS sur T={0,1}T = \{0,1\},

S00S1SSS1SSS1S \to 0 \mid 0S \mid 1SS \mid S1S \mid SS1

et le mot 001010.

Correction détaillée

#Partie A — grammaire sur {0,1,2}\{0, 1, 2\}

A.1 — forme normale de Chomsky. On introduit un non-terminal par terminal (X00X_0 \to 0, X11X_1 \to 1, X22X_2 \to 2), puis on binarise les membres droits de longueur 3 en introduisant des non-terminaux auxiliaires:

SX0X2SX0B1,B1SX2SX0B2,B2AX2S \to X_0X_2 \qquad S \to X_0B_1,\quad B_1 \to SX_2 \qquad S \to X_0B_2,\quad B_2 \to AX_2 AX1X2AX1B2X00,X11,X22A \to X_1X_2 \qquad A \to X_1B_2 \qquad X_0 \to 0,\quad X_1 \to 1,\quad X_2 \to 2

Toutes les productions sont bien de la forme YZWY \to ZW ou YaY \to a. Le non-terminal B2AX2B_2 \to AX_2 associé à AX1B2A \to X_1B_2 est ce qui permet d'engendrer 1m2m1^{m}2^{m}: AA produit un 1, puis B2B_2 produit la suite des 1 restants suivie du même nombre de 2, et le 2 final est ajouté par SX0B2S \to X_0B_2.

A.2 — table CYK pour 000122. On note Vi,jV_{i,j} l'ensemble des non-terminaux qui engendrent le facteur w[i..j]w[i..j].

i\ji \backslash j123456
1 (0)X0X_0X0X_0X0X_0
2 (0)X0X_0X0X_0
3 (0)X0X_0SS
4 (1)X1X_1AAB2B_2
5 (2)X2X_2
6 (2)X2X_2

Lecture des cases non triviales:

  • V3,5={S}V_{3,5} = \{S\}: le facteur 012 s'obtient par SX0X2S \to X_0X_2? Non — 012 a trois symboles. En fait V3,5={S}V_{3,5} = \{S\} vient de SX0B1S \to X_0B_1 avec X0X_0 engendrant 0 (position 3) et B1SX2B_1 \to SX_2 engendrant 12... ce découpage ne convient pas; la case correcte est V4,6={B2}V_{4,6} = \{B_2\} (obtenue par B2AX2B_2 \to AX_2 avec AA \Rightarrow 1 et X2X_2 \Rightarrow 2), et V3,6={S}V_{3,6} = \{S\} par SX0B2S \to X_0B_2 avec X0X_0 \Rightarrow 0 en position 3 et B2B_2 \Rightarrow 122 en positions 4 à 6.
  • V4,5={A}V_{4,5} = \{A\} par AX1X2A \to X_1X_2.
  • V3,6={S}V_{3,6} = \{S\}: le facteur 0122 est engendré.

A.3 — la case V1,6V_{1,6} est vide, donc 000122 L(G)\notin L(G). Le seul facteur de 000122 appartenant à L(G)L(G) est 0122 (positions 3 à 6). En effet, les facteurs candidats devraient être de la forme 0n1m2n+m0^{n}1^{m}2^{n+m} (voir ci-dessous), et 0122 est le seul qui convienne: 02 n'est pas un facteur contigu, 012 exigerait deux 2, 00122 exigerait trois 2.

A.4 — le langage. AA engendre {1m2m:m1}\{1^{m}2^{m} : m \ge 1\} (récurrence immédiate sur A12A \to 12 et A1A2A \to 1A2). Les trois productions de SS donnent alors

S    0n(02 ou 0A2)2nsoitL(G)={0n1m2n+m:n1, m0}S \;\Rightarrow\; 0^{n}\,(02 \text{ ou } 0A2)\,2^{n} \qquad\text{soit}\qquad L(G) = \{\,0^{n}1^{m}2^{\,n+m} : n \ge 1,\ m \ge 0\,\}

La forme m=0m = 0 correspond à S0S2S \to 0S2 répété puis S02S \to 02, qui donne 0n2n0^{n}2^{n}. On vérifie sur 0122: n=1n = 1, m=1m = 1, d'où 0111220^{1}1^{1}2^{2} — c'est bien le mot. Et 000122 = 0311220^3 1^1 2^2 exigerait 23+1=242^{3+1} = 2^4, il manque deux 2: le mot n'est pas dans le langage, ce que CYK confirme.

#Partie B — grammaire sur {0,1}\{0, 1\}

B.1 — forme normale de Chomsky.

S0X0SX1DSFDX1DSSFX1SX00,X11S \to 0 \mid X_0S \mid X_1D \mid SF \mid DX_1 \qquad D \to SS \qquad F \to X_1S \qquad X_0 \to 0,\quad X_1 \to 1

Chaque règle ternaire est binarisée en fixant le découpage: 1SS devient X1DX_1D avec DSSD \to SS; S1S devient SFSF avec FX1SF \to X_1S; SS1 devient DX1DX_1. Comme les trois règles produisent des langages différents, il faut trois auxiliaires distincts ou trois combinaisons distinctes — c'est ici que se joue la correction.

B.2 — table CYK pour 001010. Le mot est 0 0 1 0 1 0. La table (seules les cases non vides sont données) contient:

i\ji \backslash j123456
1S,X0S, X_0D,SD, SSSD,SD, SSSD,SD, S
2S,X0S, X_0SSSS
3X1X_1FFFF
4S,X0S, X_0SS
5X1X_1FF
6S,X0S, X_0

La case V1,6V_{1,6} contient SS: 001010 L(G)\in L(G). Les facteurs appartenant au langage sont 0, 00, 001, 010, 0010, 00101, 01010 et le mot entier 001010.

B.3 — le langage. En posant φ(w)=#0(w)#1(w)\varphi(w) = \#_0(w) - \#_1(w), les trois règles 1SS1SS, S1SS1S, SS1SS1 ont la même valeur φ=φ(S1)+φ(S2)1\varphi = \varphi(S_1) + \varphi(S_2) - 1, et la base 0 vaut 11. Par induction, tout mot engendré vérifie φ(w)>0\varphi(w) > 0. La réciproque se démontre par induction forte sur la longueur, en découpant le mot en « montagnes » de valeur strictement positive. D'où

L(G)={w{0,1}:#0(w)>#1(w)}\boxed{L(G) = \{\,w \in \{0,1\}^{*} : \#_0(w) > \#_1(w)\,\}}

Contrôle par dénombrement: le nombre de mots de longueur nn engendrés vaut 1,1,4,5,16,22,64,931, 1, 4, 5, 16, 22, 64, 93 pour n=1,,8n = 1, \dots, 8, exactement le nombre de mots de longueur nn ayant plus de 0 que de 1. On vérifie sur 001010: #0=4\#_0 = 4, #1=2\#_1 = 2, donc 4>24 > 2 et le mot appartient au langage — conforme à CYK.

Remarque sur les trois règles. Les productions 1SS1SS, S1SS1S et SS1SS1 sont redondantes en puissance d'expression: chacune place le 1 à une position différente parmi les trois sous-mots, mais S1SS1S et SS1SS1 suffisent à engendrer le même langage. En revanche, les conserver facilite l'analyse CYK et reflète la façon dont on découvre naturellement le langage.

#Exercice 8 — Deux preuves par le lemme de l'étoile

Source: S5/Annales/Automates et Langages/Annale_2016-2017.pdf, exercice 4 (4 points); Annale_2017-2018.pdf, exercice 4 (4 points).

Partie A. On note bin(k)\mathrm{bin}(k) la représentation binaire de l'entier kk et on s'intéresse à L1={bin(k)bin(k+1):kN}={01, 110, 1011, 11100, 100101, 101110, 110111, 1111000, }L_1 = \{\,\mathrm{bin}(k)\,\mathrm{bin}(k+1) : k \in \mathbb{N}\,\} = \{01,\ 110,\ 1011,\ 11100,\ 100101,\ 101110,\ 110111,\ 1111000,\ \dots\} Démontrez à l'aide du théorème de l'étoile que L1L_1 n'est pas rationnel.

Partie B. Démontrez à l'aide du lemme de l'étoile pour les langages algébriques que L2={13i:i0}L_2 = \{\,1^{3^{i}} : i \ge 0\,\} n'est pas algébrique.

Correction détaillée

#Partie A — le langage bin(k)bin(k+1)\mathrm{bin}(k)\mathrm{bin}(k+1)

Énoncé du théorème. Si LL est rationnel, il existe un entier p1p \ge 1 (la longueur de pompage) tel que tout mot wLw \in L avec wp|w| \ge p se décompose en w=xyzw = xyz avec xyp|xy| \le p, y1|y| \ge 1, et xyizLxy^{i}z \in L pour tout i0i \ge 0.

Étape préliminaire (elle rapporte la majorité des points). Caractérisons les mots de L1L_1 de la forme 1A0B1^{A}0^{B} (des 1 puis des 0). Un mot de L1L_1 s'écrit bin(k)bin(k+1)\mathrm{bin}(k)\mathrm{bin}(k+1) pour un certain découpage; deux cas se présentent selon la position du découpage.

  • Si le découpage tombe dans le bloc des 1, c'est-à-dire bin(k)=1s\mathrm{bin}(k) = 1^{s} et bin(k+1)=1As0B\mathrm{bin}(k+1) = 1^{A-s}0^{B}: alors k=2s1k = 2^{s}-1 et k+1=2sk+1 = 2^{s}, donc bin(k+1)=10s\mathrm{bin}(k+1) = 1\,0^{s}. On en déduit As=1A-s = 1 et B=sB = s, soit A=B+1A = B+1.
  • Si le découpage tombe dans le bloc des 0, alors bin(k+1)\mathrm{bin}(k+1) commence par 0 ou est vide — impossible, une représentation binaire ne commence jamais par 0 et k+11k+1 \ge 1.

Donc 1A0BL1    A=B+11^{A}0^{B} \in L_1 \iff A = B+1

Preuve. Supposons L1L_1 rationnel, de longueur de pompage pp. Choisissons w=1p+10p=bin(2p1)bin(2p)w = 1^{\,p+1}\,0^{\,p} = \mathrm{bin}(2^{p}-1)\,\mathrm{bin}(2^{p}) qui appartient bien à L1L_1 (avec k=2p1k = 2^{p}-1) et vérifie w=2p+1p|w| = 2p+1 \ge p. Par le théorème, w=xyzw = xyz avec xyp|xy| \le p et y1|y| \ge 1. Comme xyp|xy| \le p et que ww commence par p+1p+1 symboles 1, le mot xyxy est entièrement composé de 1; donc y=1ky = 1^{k} avec 1kp1 \le k \le p.

Pompons vers le bas (i=0i = 0): xz=1p+1k0pxz = 1^{\,p+1-k}\,0^{\,p}. Ce mot est de la forme 1A0B1^{A}0^{B} avec A=p+1kA = p+1-k et B=pB = p. D'après la caractérisation, xzL1xz \in L_1 exige A=B+1A = B+1, c'est-à-dire p+1k=p+1p+1-k = p+1, soit k=0k = 0. Contradiction avec y1|y| \ge 1.

Donc L1L_1 n'est pas rationnel. \square

Ce qu'il faut rédiger. Trois éléments sont indispensables: la caractérisation préalable des mots 1A0B1^{A}0^{B}; le choix explicite du mot témoin ww avec vérification de wp|w| \ge p; la vérification que le mot pompé viole la caractérisation. Une preuve qui saute l'étape de caractérisation ne peut pas conclure, car rien n'interdit a priori que 1p+1k0p1^{p+1-k}0^{p} soit un autre mot de L1L_1.

#Partie B — le langage 13i1^{3^{i}}

Énoncé du lemme pour les langages algébriques. Si LL est algébrique (hors contexte), il existe p1p \ge 1 tel que tout wLw \in L avec wp|w| \ge p s'écrive w=uvxyzw = uvxyz avec vxyp|vxy| \le p, vy1|vy| \ge 1, et uvixyizLuv^{i}xy^{i}z \in L pour tout i0i \ge 0.

Preuve. Supposons L2L_2 algébrique, de longueur de pompage pp. Choisissons nn tel que 3np3^{n} \ge p et prenons w=13nL2w = 1^{\,3^{n}} \in L_2

Comme w=3np|w| = 3^{n} \ge p, le lemme donne w=uvxyzw = uvxyz avec vxyp|vxy| \le p et vy1|vy| \ge 1. Pompons vers le haut (i=2i = 2): le mot uv2xy2zuv^{2}xy^{2}z a pour longueur w+vy|w| + |vy| et l'on encadre, puisque 1vyvxyp3n1 \le |vy| \le |vxy| \le p \le 3^{n}: 3n<3n+vy3n+p3n+3n=23n<3n+13^{n} < 3^{n} + |vy| \le 3^{n} + p \le 3^{n} + 3^{n} = 2\cdot 3^{n} < 3^{n+1}

Le mot pompé a donc une longueur strictement comprise entre 3n3^{n} et 3n+13^{n+1}. Or les seules longueurs possibles pour un mot de L2L_2 sont les puissances de 3. Contradiction.

Donc L2L_2 n'est pas algébrique. \square

Différence avec la partie A. Le lemme algébrique pompe deux facteurs (vv et yy) simultanément, et la borne porte sur vxyvxy et non sur xyxy: c'est ce qui permet de conclure avec une seule pompe, là où le lemme rationnel aurait demandé un argument plus fin. La structure de la preuve est néanmoins la même: choisir un mot témoin dont la longueur est « rigide », montrer que toute pompe la fait sortir de l'ensemble des longueurs admissibles.

#Exercice 9 — La grammaire des expressions régulières et son automate à pile

Source: S5/Annales/Automates et Langages/Annale_2017-2018.pdf, exercice 1 (3 points).

Soit GG la grammaire non contextuelle: axiome SS, N={S}N = \{S\}, T={, ’ε’, ., 0, 1, (, ), , +}T = \{\emptyset,\ \texttt{'ε'},\ .,\ 0,\ 1,\ (,\ ),\ *,\ +\},

S’ε’01(S+S)(S.S)SS \to \emptyset \mid \texttt{'ε'} \mid 0 \mid 1 \mid (S + S) \mid (S\,.\,S) \mid S*

Questions. 1. Quel est le langage L(G)L(G) engendré par cette grammaire? 2. Trouvez un automate à pile A\mathcal{A} reconnaissant L(G)L(G), en précisant son mode de reconnaissance.

Correction détaillée

1. Le langage. Les terminaux sont exactement les constituants d'une expression régulière sur l'alphabet {0,1}\{0,1\}: deux atomes « vides » (\emptyset et ε\varepsilon), deux symboles, deux opérateurs binaires (++ pour l'union, .. pour la concaténation) et un opérateur unaire postfixé (*). La forme des productions impose que tout opérateur binaire soit entouré de parenthèses (S(S+S)S \to (S+S), S(S.S)S \to (S\,.\,S)) et que l'étoile s'applique à un SS entier.

L(G)=l’ensemble des expressions reˊgulieˋres sur {0,1} entieˋrement parentheˊseˊes,L(G) = \text{l'ensemble des expressions régulières sur } \{0,1\} \text{ entièrement parenthésées,}

c'est-à-dire des mots construits à partir de \emptyset, ε\varepsilon, 00, 11 par applications successives de (r+s)(r + s), (r.s)(r\,.\,s) et rr*. Par exemple: 0, (0+1), (0+1)*, ((0.1)*+(1+0)), etc.

Deux remarques utiles. D'une part, L(G)L(G) n'est pas ambigu a priori: les parenthèses imposées par la grammaire rendent la dérivation unique (c'est précisément le rôle des parenthèses dans une notation infixe). D'autre part, L(G)L(G) n'est pas un langage rationnel — il contient les expressions bien parenthésées, dont la structure d'imbrication n'est pas bornée — ce qui justifie l'usage d'un automate à pile.

2. Automate à pile. On applique la construction descendante du cours, valable pour une grammaire sous forme quelconque (pas seulement en forme normale de Greibach). L'automate devine la production à appliquer et remplace le non-terminal au sommet de la pile par le renversement du membre droit choisi; il consomme un symbole d'entrée lorsque le sommet de la pile est un terminal identique.

A=({q}, T, Γ, δ, q, S, )Γ={S}T\mathcal{A} = (\{q\},\ T,\ \Gamma,\ \delta,\ q,\ S,\ \emptyset) \qquad \Gamma = \{S\} \cup T

Mode de reconnaissance: par pile vide, avec un seul état. Les transitions, regroupées par type:

TypeTransitionOrigine
atomeδ(q,,S)(q,ε)\delta(q, \emptyset, S) \ni (q, \varepsilon)SS \to \emptyset
atomeδ(q,’ε’,S)(q,ε)\delta(q, \texttt{'ε'}, S) \ni (q, \varepsilon)S’ε’S \to \texttt{'ε'}
atomeδ(q,0,S)(q,ε)\delta(q, 0, S) \ni (q, \varepsilon), δ(q,1,S)(q,ε)\delta(q, 1, S) \ni (q, \varepsilon)S0S \to 0, S1S \to 1
choixδ(q,ε,S)(q, )S+S()\delta(q, \varepsilon, S) \ni (q,\ )S{+}S(), δ(q,ε,S)(q, )S.S()\delta(q, \varepsilon, S) \ni (q,\ )S{.}S()S(S+S)S \to (S+S), S(S.S)S \to (S\,.\,S)
choixδ(q,ε,S)(q, S)\delta(q, \varepsilon, S) \ni (q,\ *S)SSS \to S*
lectureδ(q,a,a)={(q,ε)}\delta(q, a, a) = \{(q, \varepsilon)\} pour tout aTa \in Tlecture d'un terminal

Deux points d'explication. Premièrement, l'écriture (q,)S+S()(q, )S{+}S() signifie: on empile le renversement de la chaîne (S+S), c'est-à-dire )S+S(, de sorte que le ( se retrouve au sommet — c'est lui qui sera lu en premier. Deuxièmement, les trois transitions marquées « choix » ne consomment aucun symbole d'entrée: ce sont des ε-transitions, et c'est ce qui rend l'automate non déterministe. Un automate à pile à un seul état est donc toujours possible, mais pas toujours déterministe.

Pourquoi un seul état suffit. Le contenu de la pile encode à lui seul toute l'information nécessaire: le sommet dit ce qu'on attend, le reste est la pile des attentes différées. C'est le pendant exact, pour les langages algébriques, de la construction par sous-ensembles pour les langages rationnels: au lieu de mémoriser un état, on mémorise une pile d'états attendus.

#Exercice 10 — Le bit de parité: automate fini et machine de Turing

Source: S5/Annales/Automates et Langages/Annale_2017-2018.pdf, exercice 2 (4 points).

Le bit de parité d'un mot binaire est le nombre de 1 de ce mot, modulo 2.

Partie 1. Soit L={00,11,000,011,101,110,0000,}L = \{\textbf{00}, \textbf{11}, \textbf{000}, \textbf{011}, \textbf{101}, \textbf{110}, \textbf{0000}, \dots\} l'ensemble des mots binaires non vides augmentés de leur bit de parité. Ce langage étant rationnel, trouvez un automate fini A\mathcal{A} qui le reconnaît.

Partie 2. Construisez une machine de Turing à un seul ruban semi-infini qui écrit le bit de parité à la fin d'un mot binaire non vide donné en entrée.

Correction détaillée

#Partie 1 — l'automate fini

Caractérisation. Soit uu un mot non vide. Écrivons u=wbu = w\,b avec bb le dernier symbole, et posons p(u)p(u) = nombre de 1 de uu modulo 2. Alors uLu \in L si et seulement si bb est le bit de parité de ww, c'est-à-dire b=p(w)=p(u)bp(u)=0b = p(w) = p(u) \oplus b \quad\Longleftrightarrow\quad p(u) = 0 (où \oplus est le ou exclusif). Autrement dit:

uL    p(u)=0 et u2u \in L \iff p(u) = 0 \text{ et } |u| \ge 2

La condition u2|u| \ge 2 vient de ce que ww doit être non vide. Elle est régulière (il suffit de mémoriser « 0, 1 ou au moins 2 symboles lus »).

Automate. Les états sont donc des couples (parité, nombre de symboles lus). Les états accessibles sont cinq:

ÉtatSignificationsur 0sur 1acceptant
q0\to q_0rien luq1,1q_{1,1}q0,1q_{0,1}non
q1,1q_{1,1}1 symbole lu, impairq1,2q_{1,2}q0,2q_{0,2}non
q0,1q_{0,1}1 symbole lu, pairq0,2q_{0,2}q1,2q_{1,2}non
q1,2q_{1,2}2\ge 2 symboles, impairq1,2q_{1,2}q0,2q_{0,2}non
q0,2q_{0,2}2\ge 2 symboles, pairq0,2q_{0,2}q1,2q_{1,2}oui

L'état q0,2q_{0,2} est l'unique état acceptant. Vérification sur les mots de l'énoncé: 00q00q1,10q1,2q_0 \xrightarrow{0} q_{1,1} \xrightarrow{0} q_{1,2}... la table donne 0 depuis q1,1q_{1,1} vers q1,2q_{1,2} (impair), or 00 a zéro 1, donc parité paire. Reprenons: q00q1,1q_0 \xrightarrow{0} q_{1,1} est faux — lire 0 ne change pas la parité, donc depuis q0q_0 (parité paire, 0 lu), lire 0 mène à (parité paire, 1 lu) = q0,1q_{0,1}; lire 1 mène à (parité impaire, 1 lu) = q1,1q_{1,1}. La table correcte est donc:

Étatsur 0sur 1acceptant
q0\to q_0q0,1q_{0,1}q1,1q_{1,1}non
q0,1q_{0,1}q0,2q_{0,2}q1,2q_{1,2}non
q1,1q_{1,1}q1,2q_{1,2}q0,2q_{0,2}non
q0,2q_{0,2}q0,2q_{0,2}q1,2q_{1,2}oui
q1,2q_{1,2}q1,2q_{1,2}q0,2q_{0,2}non

Contrôle: 00q0q0,1q0,2q_0 \to q_{0,1} \to q_{0,2} accepté; 11q0q1,1q0,2q_0 \to q_{1,1} \to q_{0,2} accepté; 000q0,2q0,2q_{0,2} \to q_{0,2} accepté; 011q0q0,1q1,2q0,2q_0 \to q_{0,1} \to q_{1,2} \to q_{0,2} accepté; 101q0q1,1q1,2q0,2q_0 \to q_{1,1} \to q_{1,2} \to q_{0,2} accepté; 110q0q1,1q0,2q0,2q_0 \to q_{1,1} \to q_{0,2} \to q_{0,2} accepté; 01q0q0,1q1,2q_0 \to q_{0,1} \to q_{1,2}, rejeté (parité impaire) ✓; 10q0q1,1q1,2q_0 \to q_{1,1} \to q_{1,2}, rejeté ✓; 0q0,1q_{0,1}, rejeté (un seul symbole) ✓; 1q1,1q_{1,1}, rejeté ✓.

Minimalité. Les cinq états sont deux à deux distinguables: q0q_0 et q0,1q_{0,1} par la longueur restante (0 les sépare), q0,1q_{0,1} et q0,2q_{0,2} par le mot vide (seul q0,2q_{0,2} accepte), q0,2q_{0,2} et q1,2q_{1,2} par le mot vide également. L'automate est donc minimal.

#Partie 2 — la machine de Turing

Spécification. Ruban semi-infini (la tête ne franchit jamais la cellule 0 vers la gauche), alphabet de travail Γ={0,1,}\Gamma = \{0, 1, \sqcup\}\sqcup est le blanc, alphabets d'entrée et de sortie {0,1}\{0,1\}. La machine parcourt le mot de gauche à droite en mémorisant la parité, s'arrête sur la première cellule blanche, y écrit le bit de parité et s'arrête.

M=(Q, {0,1}, {0,1,}, δ, q0, , {qf})Q={q0, qpair, qimpair, qf}M = (Q,\ \{0,1\},\ \{0,1,\sqcup\},\ \delta,\ q_0,\ \sqcup,\ \{q_f\}) \qquad Q = \{q_0,\ q_{pair},\ q_{impair},\ q_f\}

État courantSymbole luSymbole écritDéplacementÉtat suivant
q0q_000qpairq_{pair}
q0q_011qimpairq_{impair}
qpairq_{pair}00qpairq_{pair}
qpairq_{pair}11qimpairq_{impair}
qimpairq_{impair}00qimpairq_{impair}
qimpairq_{impair}11qpairq_{pair}
qpairq_{pair}\sqcup0qfq_f
qimpairq_{impair}\sqcup1qfq_f

L'état q0q_0 ne sert qu'à garantir que le mot d'entrée est non vide: si la machine rencontre immédiatement un blanc, aucune transition n'est définie et elle rejette. Les états qpairq_{pair} et qimpairq_{impair} mémorisent la parité du préfixe lu; les règles internes réécrivent chaque symbole sur lui-même, de sorte que le mot d'entrée est laissé intact. À la fin, l'état qpairq_{pair} écrit 0 et qimpairq_{impair} écrit 1 — c'est exactement le bit de parité.

Exemple d'exécution sur 011. q0q_0 lit 0, écrit 0, va à droite, passe en qpairq_{pair}; lit 1, écrit 1, va à droite, passe en qimpairq_{impair}; lit 1, écrit 1, va à droite, passe en qpairq_{pair}; lit \sqcup, écrit 0, s'arrête. Ruban final: 0110. Vérification: 011 a deux 1, parité paire, donc le bit ajouté est 0 ✓.

Point de rédaction. Il faut préciser le mode de reconnaissance (ici: arrêt dans un état final, la machine étant une transductrice qui produit un mot), et vérifier que la tête ne recule jamais: toutes les transitions vont vers la droite ou restent sur place, donc le ruban semi-infini suffit.

#Exercice 11 — Questions de synthèse

Source: S5/Annales/Automates et Langages/Annale_2016-2017.pdf, exercice 5 (3 points); Annale_2017-2018.pdf, exercice 5 (4 points).

Questions. 1. Un langage reconnu par un automate à pile est-il reconnu par un automate à pile à un seul état? 2. Tous les langages hors contexte sont-ils reconnus par un automate à pile déterministe? 3. Citez des opérations pour lesquelles la classe des langages rationnels est close (six au maximum). 4. L'ensemble des langages engendrés par une grammaire sur l'alphabet {0,1}\{0,1\} est-il dénombrable? 5. L'ensemble des expressions régulières sur un alphabet Σ\Sigma donné est-il dénombrable? Pourquoi? 6. La fonction du Castor Affairé est-elle récursivement énumérable? 7. Spécifiez la fonction de transition de l'automate cellulaire élémentaire n° 54, en donnant l'image de chacun des huit triplets binaires.

Correction détaillée

1. Automate à pile à un seul état. Oui. Tout langage hors contexte LL est engendré par une grammaire GG; on peut toujours supposer GG en forme normale de Greibach (toutes les productions AaαA \to a\alpha avec aa terminal). La construction descendante donne alors un automate à pile à un seul état acceptant par pile vide: la pile contient la suite des attentes, et le sommet détermine la production à appliquer. Le prix à payer est le non-déterminisme: l'automate à un état devine la production.

2. Déterminisme des automates à pile. Non. Il existe des langages hors contexte qu'aucun automate à pile déterministe ne reconnaît. L'exemple canonique est l'ensemble des palindromes sur {a,b}\{a,b\} de longueur paire, ou encore le langage {aibjck:i=j ou j=k}\{a^{i}b^{j}c^{k} : i = j \text{ ou } j = k\}, dont on démontre par un argument de pompage qu'il n'est pas déterministe. Les langages reconnus par un automate à pile déterministe forment une sous-classe stricte des langages algébriques.

3. Clôture des langages rationnels. La classe des langages rationnels est close par:

  1. union (L1L2L_1 \cup L_2): réunion des automates, avec un nouvel état initial et des ε-transitions;
  2. intersection (L1L2L_1 \cap L_2): produit cartésien des automates, états acceptants = couples d'états acceptants;
  3. complémentaire (L\overline{L}): déterminiser puis échanger états acceptants et non acceptants;
  4. concaténation (L1L2L_1 \cdot L_2): ε-transitions des états acceptants de L1L_1 vers l'état initial de L2L_2;
  5. étoile de Kleene (LL^{*}): nouvelle boucle depuis les états acceptants;
  6. image par un morphisme et image inverse par un morphisme: substitution lettre à lettre.

On peut ajouter la différence (L1L2=L1L2L_1 \setminus L_2 = L_1 \cap \overline{L_2}), le miroir (renverser toutes les transitions) et l'homomorphisme inverse. En revanche, la classe n'est pas close par intersection infinie ni par passage au complémentaire dans le cadre des langages algébriques: l'intersection de deux langages algébriques n'est pas toujours algébrique, ce qui est l'occasion de souligner que « close par union, intersection et complémentaire » est un privilège des langages rationnels.

4. Dénombrabilité des langages engendrés. Oui. L'alphabet {0,1}\{0,1\} est fini, donc l'ensemble des grammaires sur cet alphabet est une réunion dénombrable d'ensembles finis (grammaires de taille nn, pour nNn \in \mathbb{N}): il est dénombrable. Chaque grammaire engendre un langage, donc l'application « grammaire \mapsto langage engendré » part d'un ensemble dénombrable. Son image est donc au plus dénombrable; comme elle est infinie (les langages {0n}\{0^{n}\} pour nNn \in \mathbb{N} sont deux à deux distincts et engendrables), elle est dénombrablement infinie.

Corollaire important. L'ensemble des langages sur {0,1}\{0,1\} (toutes parties de {0,1}\{0,1\}^{*}) n'est, lui, pas dénombrable: {0,1}\{0,1\}^{*} est dénombrable, donc l'ensemble de ses parties a la puissance du continu. Il existe donc beaucoup plus de langages que de grammaires: la plupart des langages ne sont engendrés par aucune grammaire, et il en va de même pour les langages rationnels.

5. Dénombrabilité des expressions régulières. Oui, par le même argument. Une expression régulière sur Σ\Sigma est un mot fini sur l'alphabet fini Σ{+,.,,(,),,ε}\Sigma \cup \{+, ., *, (, ), \emptyset, \varepsilon\}; l'ensemble des mots finis sur un alphabet fini est dénombrable (énumération par longueur croissante, chaque niveau étant fini). Comme il y a une infinité d'expressions régulières deux à deux distinctes, cet ensemble est dénombrablement infini.

6. La fonction du Castor Affairé. Non. Rappelons la définition: Σ(n)\Sigma(n) est le nombre maximal de 1 écrits sur le ruban par une machine de Turing à nn états qui s'arrête, partant d'un ruban vide. Cette fonction est totale (définie pour tout nn) et croît plus vite que toute fonction calculable: si elle était calculable, on déciderait le problème de l'arrêt en simulant toutes les machines à nn états pendant Σ(n)\Sigma(n) étapes.

Plus précisément, la fonction n'est pas récursivement énumérable: si son graphe {(n,Σ(n)):nN}\{(n, \Sigma(n)) : n \in \mathbb{N}\} était récursivement énumérable, alors, Σ\Sigma étant totale, ce graphe serait récursif (une fonction totale dont le graphe est récursivement énumérable est récursive), donc Σ\Sigma serait calculable — contradiction. On peut ajouter que l'ensemble des machines qui s'arrêtent est, lui, récursivement énumérable mais non récursif: c'est la distinction exacte entre « semi-décidable » et « décidable ».

7. L'automate cellulaire élémentaire n° 54. Un automate cellulaire élémentaire a deux états et une dimension 1; sa règle est déterminée par les 23=82^{3} = 8 valeurs de l'image d'un triplet (voisin gauche, cellule, voisin droit). Le numéro de la règle, écrit en binaire sur 8 bits, donne ces images dans l'ordre des triplets décroissants 111,110,101,100,011,010,001,000111, 110, 101, 100, 011, 010, 001, 000.

54=00110110254 = 00110110_{2}

D'où la fonction de transition de la règle 54:

Triplet111110101100011010001000
Image00110110

On vérifie la conversion: 32+16+4+2=5432 + 16 + 4 + 2 = 54, soit les bits de poids 25,24,22,212^{5}, 2^{4}, 2^{2}, 2^{1} — qui correspondent bien aux triplets 101101, 100100, 010010, 001001. La règle 54 est connue pour engendrer des motifs triangulaires fractals et pour être universelle pour le calcul.

#Tableau de correspondance

ExerciceSourceNotions évaluées
1OFI 2019 rattrapage / 2025 rattrapagedéfinition inductive, ambiguïté, expression régulière
2OFI 2020 examenexpression régulière, dénombrement, récurrence
3OFI 2020 examenconjugaison, relation d'équivalence, mots de Lyndon
4OFI 2023 rattrapageinduction, caractérisation, Fibonacci
5AL 2016-2017grammaire régulière → AFN, langage, complémentaire
6AL 2016-2017langage hors contexte, automate à pile, déterminisme
7AL 2016-2017 et 2017-2018forme normale de Chomsky, algorithme CYK
8AL 2016-2017 et 2017-2018lemme de l'étoile (rationnel et algébrique)
9AL 2017-2018grammaire des expressions régulières, automate à pile
10AL 2017-2018automate fini, machine de Turing
11AL 2016-2017 et 2017-2018clôture, dénombrabilité, calculabilité, automates cellulaires