From d091df49fe711210d02b1a9ba85c0259e11d10cf Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Thu, 2 Feb 2017 11:21:02 +0100 Subject: Take into account Akim's remarks. --- controle-20170207.tex | 166 ++++++++++++++++++++++++++------------------------ 1 file changed, 86 insertions(+), 80 deletions(-) diff --git a/controle-20170207.tex b/controle-20170207.tex index 1d42a3e..dae78cd 100644 --- a/controle-20170207.tex +++ b/controle-20170207.tex @@ -101,7 +101,7 @@ de traiter toutes les questions pour obtenir la totalité des points. L'usage de tous les documents (notes de cours manuscrites ou imprimées, feuilles d'exercices, livres) est autorisé. -L'usage des calculatrices électroniques est interdit. +L'usage des appareils électroniques est interdit. \medbreak @@ -118,7 +118,7 @@ L'énoncé comporte 4 pages (page de garde incluse) \exercice -On considère l'automate fini sur l'alphabet $\Sigma = \{a,b\}$ +On considère l'automate fini $M$ sur l'alphabet $\Sigma = \{a,b\}$ représenté par la figure suivante : \begin{center} \begin{tikzpicture}[>=latex,line join=bevel,automaton] @@ -145,7 +145,7 @@ représenté par la figure suivante : déterministe ou non ? avec transitions spontanées ou non ?) (1a) Décrire brièvement, en français, le langage $L$ reconnu -(=accepté) par l'automate en question, puis donner une expression +(=accepté) par l'automate $M$, puis donner une expression rationnelle qui le dénote. (On pourra préférer traiter la question (1b) d'abord.) @@ -155,17 +155,21 @@ $\varepsilon$, $a$, $b$, $ab$, $aa$, $aab$, $aabb$, $abab$, $ababa$. rapidement les réponses aux questions suivantes et ainsi détecter d'éventuelles erreurs lors des transformations des automates.) -(2) Éliminer les transitions spontanées de l'automate. -(On supprimera les états devenus inutiles.) +(2) Éliminer les transitions spontanées de l'automate $M$. (On +supprimera les états devenus inutiles.) On appellera $M_2$ l'automate +obtenu. -(3) Déterminiser l'automate ainsi obtenu, si nécessaire. (On demande -un automate déterministe complet.) Pour simplifier le travail du -correcteur, on demande de faire en sorte que les transitions -étiquetées par $a$ soient, dans la mesure du possible, horizontales de -la gauche vers la droite, et celles étiquetées par $b$, verticales du -haut vers le bas. +(3) Déterminiser l'automate $M_2$ obtenu en (2), si nécessaire. (On +demande un automate déterministe complet.) On appellera $M_3$ +l'automate déterminisé. -(4) Minimiser l'automate ainsi obtenu, si nécessaire (justifier). +Pour simplifier le travail du correcteur, on demande de représenter +$M_3$ de sorte que les transitions étiquetées par $a$ soient, dans la +mesure du possible, horizontales de la gauche vers la droite, et +celles étiquetées par $b$, verticales du haut vers le bas. + +(4) Minimiser l'automate $M_3$ obtenu en (3), si nécessaire +(justifier). (5) Donner un automate (de n'importe quelle sorte) qui reconnaît le langage $\overline{L} = \Sigma^*\setminus L$ complémentaire de $L$. @@ -179,22 +183,23 @@ complémentaire $\overline{L}$. (Ne pas hésiter à introduire des notations intermédiaires.) \begin{corrige} -(0) Il s'agit d'un automate non-déterministe à transitions spontanées, - ou ε-NFA (il n'y a pas de notion d'automate déterministe à - transitions spontanées). +(0) L'automate $M$ est un automate fini non-déterministe à transitions + spontanées, ou ε-NFA (le concept d'« automate déterministe à + transitions spontanées » n'aurait tout simplement pas de sens). \smallbreak (1a) Le chemin par les états $X,A,A',Y$ accepte les mots exactement un $a$, c'est-à-dire le langage dénoté par $b{*}ab{*}$. Le chemin par les états $X,B,B',Y$ accepte les mots comportant exactement un $b$, -c'est-à-dire le langage dénoté par $a{*}ba{*}$. L'automate dans son -ensemble accepte les mots comportant exactement un $a$ ou (inclusif) -exactement un $b$ (i.e. $L = \{w\in\Sigma^* : |w|_a = 1 +c'est-à-dire le langage dénoté par $a{*}ba{*}$. L'automate $M$ dans +son ensemble accepte les mots comportant exactement un $a$ ou +(inclusif) exactement un $b$ (i.e. $L = \{w\in\Sigma^* : |w|_a = 1 \penalty0\ \textrm{ou}\penalty0\ |w|_b = 1\}$ si $|w|_x$ désigne le nombre total d'occurrences de la lettre $x$ dans le mot $w$). C'est -le langage dénoté par l'expression rationnelle $b{*}ab{*} | -a{*}ba{*}$. +le langage dénoté par l'expression rationnelle $b{*}ab{*} | a{*}ba{*}$ +(nous notons ici et ailleurs $|$ pour la disjonction, qu'on peut aussi +noter $+$). (1b) Parmi les mots proposés, $a$, $b$, $ab$ et $aab$ appartiennent à $L$, tandis que $\varepsilon$, $aa$, $aabb$, $abab$ et $ababa$ n'y @@ -202,11 +207,11 @@ appartiennent pas. \smallbreak -(2) La ε-fermeture de l'état $X$ est $\{X,A,B\}$ ; la ε-fermeture de - l'état $A'$ est $\{A',Y\}$ et celle de l'état $B'$ est $\{B',Y\}$ ; - les autres états sont leur propre ε-fermeture (i.e., celle-ci est un - singleton). L'élimination des transitions spontanées conduit donc à - l'automate suivant : +(2) La ε-fermeture (arrière) de l'état $X$ est $\{X,A,B\}$ ; la +ε-fermeture de l'état $A'$ est $\{A',Y\}$ et celle de l'état $B'$ est +$\{B',Y\}$ ; les autres états sont leur propre ε-fermeture (i.e., +celle-ci est un singleton). L'élimination des transitions spontanées +conduit donc à l'automate $M_2$ suivant : \begin{center} \begin{tikzpicture}[>=latex,line join=bevel,automaton] \node (X) at (-80bp,0bp) [draw,circle,state,initial] {$X$}; @@ -231,8 +236,8 @@ non-spontanée n'y conduit.) \smallbreak -(3) L'algorithme de déterminisation conduit à l'automate suivant où, -pour plus de lisibilité, les états finaux ont été marqués en les +(3) L'algorithme de déterminisation conduit à l'automate $M_3$ suivant +où, pour plus de lisibilité, les états finaux ont été marqués en les entourant deux fois plutôt que par une flèche sortante : \begin{center} \begin{tikzpicture}[>=latex,line join=bevel,automaton] @@ -267,7 +272,7 @@ entourant deux fois plutôt que par une flèche sortante : \end{center} Pour la commodité de la suite de la correction, on renomme les états -de cet automate de la façon suivante : +de cet automate $M_3$ de la façon suivante : \begin{center} \begin{tikzpicture}[>=latex,line join=bevel,automaton] \node (s00) at (0bp,0bp) [draw,rounded corners,state,initial] {$00$}; @@ -307,7 +312,7 @@ lettre $b$. \smallbreak -(4) L'automate obtenu est déjà minimal. En effet, l'algorithme de +(4) L'automate $M_3$ est déjà minimal. En effet, l'algorithme de minimisation commence par séparer les classes $\{01,10,11,12,21\}$ (états finaux) et $\{00,02,20,22\}$ (états non-finaux) ; ensuite, la transition étiquetée par $a$ sépare la classe $\{01,10,11,12,21\}$ en @@ -327,6 +332,7 @@ automate fini déterministe complet, il suffit d'échanger états finaux et non-finaux : on peut donc prendre l'automate dessiné en (3) avec, cette fois, la convention que les états simplement entourés sont finaux (et les doublement entourés sont non-finaux). +Appelons-le $M_5$. \emph{Attention :} échanger états finaux et non-finaux ne marche pas pour reconnaître le complémentaire du langage reconnu par un automate @@ -337,17 +343,17 @@ non-final »). \smallbreak -(6) Puisque $L$ est le langage formé des mots ayant comportant -exactement un $a$ ou (inclusif) exactement un $b$, son complémentaire -$\overline{L}$ est formé des mots ayant un nombre différent de $1$ -de $a$ \emph{et} un nombre différent de $1$ de $b$ ; si on préfère, il -s'agit du langage comportant ($0$ ou au moins $2$ fois la lettre $a$) -\emph{et} ($0$ ou au moins $2$ fois la lettre $b$). +(6) Puisque $L$ est le langage formé des mots comportant exactement un +$a$ ou (inclusif) exactement un $b$, son complémentaire $\overline{L}$ +est formé des mots ayant un nombre différent de $1$ de $a$ \emph{et} +un nombre différent de $1$ de $b$ ; si on préfère, il s'agit du +langage comportant ($0$ ou au moins $2$ fois la lettre $a$) \emph{et} +($0$ ou au moins $2$ fois la lettre $b$). \smallbreak -(7) L'élimination des états n'est pas trop complexe car l'automate a -très peu de boucles. Éliminons simultanément tous les états +(7) L'élimination des états n'est pas trop complexe car l'automate +$M_5$ a très peu de boucles. Éliminons simultanément tous les états non-finaux ($01$, $10$, $11$, $12$ et $21$), et profitons-en pour créer un nouvel (et unique) état final $F$ : \begin{center} @@ -563,33 +569,33 @@ S &\rightarrow TS \;|\; \varepsilon\\ T &\rightarrow aSbSc\\ \end{aligned} \] -On notera $L(G) = L(G,S)$ le langage qu'elle engendre, et $L(G,T)$ le +On notera $L(S) = L_G$ le langage qu'elle engendre, et $L(T)$ le langage des mots qui dérivent de $T$ (c'est-à-dire, si on préfère, le langage engendré par la grammaire identique à $G$ mais ayant $T$ pour axiome). -(0) Donner quelques exemples de mots de $L(G)$ et de $L(G,T)$ (au +(0) Donner quelques exemples de mots de $L(S)$ et de $L(T)$ (au moins deux de chaque). -(1) Expliquer brièvement pourquoi $L(G)$ est l'ensemble des mots de la -forme $u_1\cdots u_k$ avec $u_i \in L(G,T)$, et pourquoi $L(G,T)$ est -l'ensemble des mots de la forme $awbw'c$ avec $w,w'\in L(G)$. (Par -conséquent, $L(G,T)$ est l'ensemble des mots de la forme $a u_1 \cdots +(1) Expliquer brièvement pourquoi $L(S)$ est l'ensemble des mots de la +forme $u_1\cdots u_k$ avec $u_i \in L(T)$, et pourquoi $L(T)$ est +l'ensemble des mots de la forme $awbw'c$ avec $w,w'\in L(S)$. (Par +conséquent, $L(T)$ est l'ensemble des mots de la forme $a u_1 \cdots u_k b u'_1\cdots u'_{\ell} c$ avec -$u_1,\ldots,u_k,u'_1,\ldots,u'_{\ell} \in L(G,T)$.) +$u_1,\ldots,u_k,u'_1,\ldots,u'_{\ell} \in L(T)$.) -(2) Comment exprimer $L(G)$ à partir de $L(G,T)$ au moyen d'une ou +(2) Comment exprimer $L(S)$ à partir de $L(T)$ au moyen d'une ou plusieurs opérations rationnelles\footnote{C'est-à-dire : union, concaténation, étoile de Kleene.} ? Y a-t-il inclusion de l'un dans l'autre ? -(3) Montrer que tout mot $w$ appartenant à $L(G)$ ou à $L(G,T)$ a le +(3) Montrer que tout mot $w$ appartenant à $L(S)$ ou à $L(T)$ a le même nombre de $a$, de $b$ et de $c$, c'est-à-dire $|w|_a = |w|_b = |w|_c$ où $|w|_x$ désigne le nombre total d'occurrences de la lettre $x$ dans le mot $w$. (4) Montrer par récurrence sur la longueur $|u|$ d'un mot $u\in -L(G,T)$ que si $v$ est un préfixe de $u$ de longueur $0<|v|<|u|$, +L(T)$ que si $v$ est un préfixe de $u$ de longueur $0<|v|<|u|$, alors on a $|v|_c < |v|_a$. Pour cela, on pourra écrire $u$ sous la forme $a u_1 \cdots u_k b u'_1\cdots u'_{\ell} c$ obtenue en (1), considérer un préfixe\footnote{\label{prefix-note}On signale à toutes @@ -599,50 +605,50 @@ considérer un préfixe\footnote{\label{prefix-note}On signale à toutes de $t_i$.} d'une telle expression, et appliquer la question (3) et l'hypothèse de récurrence. -(5) Déduire des questions (3) et (4) que si $u \in L(G,T)$ et si $v$ +(5) Déduire des questions (3) et (4) que si $u \in L(T)$ et si $v$ est un préfixe de $u$ autre que $u$ lui-même, alors $u \not\in -L(G,T)$. En déduire que $u\in L(G,T)$ et $z \in \Sigma^*$, alors $u$ +L(T)$. En déduire que $u\in L(T)$ et $z \in \Sigma^*$, alors $u$ est l'\emph{unique} préfixe du mot $w := uz$ qui appartienne -à $L(G,T)$ (autrement dit, aucun préfixe de $w$ de longueur ${<}|u|$ -ni ${>}|u|$ n'appartient à $L(G,T)$). +à $L(T)$ (autrement dit, aucun préfixe de $w$ de longueur ${<}|u|$ +ni ${>}|u|$ n'appartient à $L(T)$). (6) En déduire que si un mot $w$ s'écrit $w = u_1\cdots u_k$ avec -$u_1,\ldots,u_k \in L(G,T)$ alors cette factorisation est unique. +$u_1,\ldots,u_k \in L(T)$ alors cette factorisation est unique. (Comment peut-on caractériser $u_1$ comme préfixe de $w$ ?) Montrer de même la conclusion analogue pour $u_1\cdots u_k b u'_1\cdots -u'_\ell$ (on pourra noter que $bz\not\in L(G,T)$ quel que +u'_\ell$ (on pourra noter que $bz\not\in L(T)$ quel que soit $z\in\Sigma^*$). (7) En déduire que la grammaire $G$ est inambiguë. \begin{corrige} -(0) Les mots $abc$ et $aabcbc$ et $ababcc$ appartiennent à $L(G,T)$. - Les mots $\varepsilon$ et $abc$ et $abcabc$ appartiennent à $L(G)$. +(0) Les mots $abc$ et $aabcbc$ et $ababcc$ appartiennent à $L(T)$. + Les mots $\varepsilon$ et $abc$ et $abcabc$ appartiennent à $L(S)$. \smallbreak (1) En bref : il s'agit simplement d'une reformulation des règles de la grammaire. En plus détaillé : si on considère un arbre d'analyse - d'un mot $w$ de $L(G)$, soit il est la dérivation triviale du mot + d'un mot $w$ de $L(S)$, soit il est la dérivation triviale du mot vide, soit sa racine a deux fils étiquetés $T$ et $S$, l'un dont - descend un arbre d'analyse d'un mot $u_1$ de $L(G,T)$ et l'autre - dont descend un arbre d'analyse d'un autre mot $w'$ de $L(G)$, avec + descend un arbre d'analyse d'un mot $u_1$ de $L(T)$ et l'autre + dont descend un arbre d'analyse d'un autre mot $w'$ de $L(S)$, avec $w = u_1 w'$ : en répétant cette remarque jusqu'à tomber sur le mot vide, on voit que $w = u_1 u_2 \cdots u_k$ pour des mots $u_i \in - L(G,T)$ ; et réciproquement, tout mot de cette forme a un arbre + L(T)$ ; et réciproquement, tout mot de cette forme a un arbre d'analyse dans $G$ obtenu en mettant ensemble les arbres d'analyse des $u_i$ (en les associant deux par deux par la droite). Le cas - d'un mot $u$ de $L(G,T)$ est plus simple : son arbre d'analyse donne + d'un mot $u$ de $L(T)$ est plus simple : son arbre d'analyse donne directement une écriture sous la forme $awbw'c$ avec $w,w'$ les mots analysés par les arbres qui descendent des deux fils étiquetés $S$ de la racine (étiquetée $T$). \smallbreak -(2) La description faite en (1) signifie notamment que $L(G) = -L(G,T)^*$ où « $*$ » est l'étoile de Kleene. (Si on veut, la règle $S +(2) La description faite en (1) signifie notamment que $L(S) = +L(T)^*$ où « $*$ » est l'étoile de Kleene. (Si on veut, la règle $S \rightarrow TS \,|\, \varepsilon$ peut s'interpréter comme $S -\rightarrow T{*}$.) En particulier, on a $L(G,T) \subseteq L(G)$. +\rightarrow T{*}$.) En particulier, on a $L(T) \subseteq L(S)$. \smallbreak @@ -651,14 +657,14 @@ L(G,T)^*$ où « $*$ » est l'étoile de Kleene. (Si on veut, la règle $S préservée par toute dérivation immédiate pour $G$ puisqu'elle est préservée en remplaçant $S$ par $TS$ ou par le mot vide et en remplaçant $T$ par $aSbSc$. Elle est donc vérifiée pour tout mot de -$L(G)$ (et en particulier, pour tout mot de $L(G,T)$). +$L(S)$ (et en particulier, pour tout mot de $L(T)$). \smallbreak (4) On procède par récurrence sur $|u|$, ce qui permet de supposer la propriété déjà connue pour tout préfixe $v$ d'un mot de longueur strictement plus courte que $u$. Si $v$ est un préfixe d'un mot $u -\in L(G,T)$, qu'on peut écrire sous la forme $u = a u_1 \cdots u_k b +\in L(T)$, qu'on peut écrire sous la forme $u = a u_1 \cdots u_k b u'_1\cdots u'_{\ell} c$, et si $0<|v|<|u|$, on a soit $v = a u_1 \cdots u_{i-1} y$ où $y \neq \varepsilon$ est un préfixe de $u_i$, soit $v = a u_1\cdots u_k b u'_1\cdots u'_{i-1} y$ où $y \neq @@ -674,44 +680,44 @@ récurrence. \smallbreak -(5) Si $u \in L(G,T)$ et si $v$ est un préfixe de $u$ autre que $u$ +(5) Si $u \in L(T)$ et si $v$ est un préfixe de $u$ autre que $u$ lui-même, alors soit $v = \varepsilon$, qui n'appartient pas à -$L(G,T)$ (par exemple par la question (1)), soit $0<|v|<|u|$, auquel -cas la question (4) donne $|v|_c<|v|_a$, ce qui interdit $v\in L(G,T)$ -d'après (3). Dans tous les cas, $v\not\in L(G,T)$. +$L(T)$ (par exemple par la question (1)), soit $0<|v|<|u|$, auquel +cas la question (4) donne $|v|_c<|v|_a$, ce qui interdit $v\in L(T)$ +d'après (3). Dans tous les cas, $v\not\in L(T)$. -Si maintenant $u\in L(G,T)$ et $z\in\Sigma^*$, un préfixe de $w := uz$ +Si maintenant $u\in L(T)$ et $z\in\Sigma^*$, un préfixe de $w := uz$ est soit un préfixe de $u$ soit de la forme $uz'$ avec $z'$ un préfixe non vide de $z$ (cf. la note \ref{prefix-note}). Un préfixe de $w$ de -longueur ${<}|u|$ n'appartient pas à $L(G,T)$ d'après le paragraphe +longueur ${<}|u|$ n'appartient pas à $L(T)$ d'après le paragraphe précédent, et un mot de la forme $uz'$ ne peut pas y appartenir non plus car c'est alors $u$ lui-même qui serait un préfixe strict de $uz' -\in L(G,T)$ appartenant à $L(G,T)$, ce qui contredit de nouveau le +\in L(T)$ appartenant à $L(T)$, ce qui contredit de nouveau le paragraphe précédent. \smallbreak (6) D'après la question précédente, on peut définir $u_1$ comme -l'unique préfixe de $w$ qui appartient à $L(G,T)$ (tout préfixe +l'unique préfixe de $w$ qui appartient à $L(T)$ (tout préfixe strictement plus court ou strictement plus long n'appartient pas à -$L(G,T)$). Une fois que $u_1$ est défini, en appliquant le même +$L(T)$). Une fois que $u_1$ est défini, en appliquant le même raisonnement au suffixe correspondant $u_2\cdots u_k$, on voit que $u_2$ est défini de façon unique. En procédant ainsi (par récurrence sur $k$ si on veut), les $u_i$ sont définis de façon unique. Le même raisonnement vaut pour $u_1\cdots u_k b u'_1\cdots u'_\ell$ : -on a une factorisation en mots de $L(G,T)\cup\{b\}$ et à chaque fois +on a une factorisation en mots de $L(T)\cup\{b\}$ et à chaque fois le premier facteur est défini comme le seul préfixe possible -appartenant à $L(G,T)\cup\{b\}$. (On utilise le fait que $bz\not\in -L(G,T)$, qui découle du (1), pour voir que $bu'_1\cdots bu'_\ell$ n'a -pas de préfixe dans $L(G,T)$.) +appartenant à $L(T)\cup\{b\}$. (On utilise le fait que $bz\not\in +L(T)$, qui découle du (1), pour voir que $bu'_1\cdots bu'_\ell$ n'a +pas de préfixe dans $L(T)$.) \smallbreak (7) En reprenant l'analyse du (1), il s'agit de montrer que la -factorisation $u_1\cdots u_k$ d'un mot de $L(G)$ est unique et que la +factorisation $u_1\cdots u_k$ d'un mot de $L(S)$ est unique et que la factorisation $a u_1\cdots u_k b u'_1\cdots u'_\ell c$ d'un mot -de $L(G,T)$ l'est aussi. La première partie est exactement une +de $L(T)$ l'est aussi. La première partie est exactement une conclusion du (6), et la seconde l'est aussi dès lors qu'on retire le $a$ initial et le $c$ final. \end{corrige} -- cgit v1.2.3