From 87d7cac42f7477cebc2670e3dda57deffb23f2c9 Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Wed, 1 Feb 2017 16:00:21 +0100 Subject: Re-read exam. --- controle-20170207.tex | 128 +++++++++++++++++++++++++++++--------------------- 1 file changed, 75 insertions(+), 53 deletions(-) diff --git a/controle-20170207.tex b/controle-20170207.tex index f9a138f..a3637f6 100644 --- a/controle-20170207.tex +++ b/controle-20170207.tex @@ -87,10 +87,15 @@ \noindent\textbf{Consignes.} -Les exercices sont indépendants sauf dans la mesure où le contraire -est précisé. Ils pourront être traités dans un ordre quelconque, mais -on demande de faire apparaître de façon très visible dans les copies -où commence chaque exercice. +Les exercices sont totalement indépendants. Ils pourront être traités +dans un ordre quelconque, mais on demande de faire apparaître de façon +très visible dans les copies où commence chaque exercice. + +\medbreak + +Le sujet étant délibérément trop long pour le temps imparti, il sera +possible d'obtenir la totalité des points en ne traitant qu'une partie +des exercices. \medbreak @@ -146,8 +151,8 @@ rationnelle qui le dénote. (On pourra préférer traiter la question (1b) Pour chacun des mots suivants, dire s'ils sont dans $L$ ou non : $\varepsilon$, $a$, $b$, $ab$, $aa$, $aab$, $aabb$, $abab$, $ababa$. (Note : il est conseillé de réutiliser ces mots pour vérifier -rapidement les réponses aux questions suivantes et ainsi détecter des -erreurs lors des transformations des automates.) +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, s'il y en a. (On supprimera les états devenus inutiles.) @@ -161,8 +166,8 @@ haut vers le bas. (4) Minimiser l'automate ainsi obtenu, si nécessaire. -(5) Donner un automate du type qu'on voudra qui reconnaît le langage -$\overline{L} = \Sigma^*\setminus L$ complémentaire de $L$. +(5) Donner un automate (de n'importe quelle sorte) qui reconnaît le +langage $\overline{L} = \Sigma^*\setminus L$ complémentaire de $L$. (6) Décrire brièvement, en français, le langage ce langage complémentaire $\overline{L}$. @@ -292,6 +297,11 @@ de cet automate de la façon suivante : \draw[->] (s22) to[loop below] node[auto]{$b$} (s22); \end{tikzpicture} \end{center} +Ici, l'état $0\bullet$ signifie que l'automate n'a pas rencontré +de $a$, l'état $1\bullet$ qu'il en a rencontré exactement un, et +l'état $2\bullet$ qu'il en a rencontré au moins deux ; les états +$\bullet0$, $\bullet1$ et $\bullet2$ ont la même signification pour la +lettre $b$. \smallbreak @@ -396,7 +406,9 @@ babb{*}a \penalty0\,|\,bbb{*}ab{*}a$ dénote le langage formé des mots comportant au moins deux $b$ et exactement deux $a$ et qui finissent par un $a$ : l'expression du cas (iv) correspond donc à écrire un mot ayant au moins deux $a$ et au moins deux $b$ comme le premier préfixe -qui vérifie cette propriété suivi d'un suffixe quelconque. +qui vérifie cette propriété suivi d'un suffixe quelconque. (On +pouvait utiliser directement ce raisonnement pour produire +l'expression.) \end{corrige} @@ -407,7 +419,7 @@ qui vérifie cette propriété suivi d'un suffixe quelconque. \exercice Soit $\Sigma$ un alphabet (fini, non vide) fixé. Les questions -suivantes sont indépendantes. +suivantes sont indépendantes (mais on remarquera leur parallélisme). (1) Expliquer, au moyen des résultats vus en cours, pourquoi il existe un algorithme $A_1$ qui, donnée une expression rationnelle $r$ @@ -424,9 +436,10 @@ langage $L_G$ engendré par $G$ est différent du langage $\Sigma^*$ de tous les mots. (« Semi-décider » signifie que l'algorithme $A_2$ doit prendre en entrée une grammaire hors contexte $G$, terminer en temps fini en répondant « vrai » s'il existe un mot $w\in\Sigma^*$ tel que -$w\not\in L_G$, et ne pas terminer — ou éventuellement terminer en -répondant « faux » — si $L_G = \Sigma^*$.) Indication : on peut -tester tous les mots possibles. +$w\not\in L_G$, et ne pas terminer\footnote{On peut admettre qu'il + termine parfois en répondant « faux », mais ce ne sera pas utile.} +si $L_G = \Sigma^*$.) Indication : on peut tester tous les mots +possibles. (3) Expliquer pourquoi il existe un tel algorithme $A_3$ : on lui fournit en entrée un algorithme $T$ qui décide un langage $L_T @@ -436,12 +449,11 @@ fini quand on lui présente un mot sur $\Sigma$, et répond « vrai » ou « vrai »), et l'algorithme $A_3$ doit semi-décider si $L_T$ est différent de $\Sigma^*$. (C'est-à-dire que $A_3$ doit terminer en répondant « vrai » s'il existe un mot $w\in\Sigma^*$ tel que $w\not\in -L_T$, et ne pas terminer — ou éventuellement terminer en répondant -« faux » — si $L_T = \Sigma^*$.) Indication : la même approche permet -de traiter les questions (2) et (3). +L_T$, et ne pas terminer si $L_T = \Sigma^*$.) Indication : la même +approche permet de traiter les questions (2) et (3). -(4) Expliquer pourquoi il n'existe pas d'algorithme $A_4$ qui, dans -les mêmes conditions que $A_3$, décide (au lieu de seulement +(4) Expliquer pourquoi il \emph{n'existe pas} d'algorithme $A_4$ qui, +dans les mêmes conditions que $A_3$, décide (au lieu de seulement semi-décider) si $L_T$ est différent de $\Sigma^*$. (C'est-à-dire que $A_4$ est censé terminer toujours, et répondre « vrai » s'il existe un mot $w\in\Sigma^*$ tel que $w\not\in L_T$, et « faux » si $L_T = @@ -507,10 +519,10 @@ programme $T$ ne considère que la longueur $|w|$ de $w$, et lance étapes : si l'exécution termine dans le temps imparti, alors $T$ rejette le mot $w$, sinon, il l'accepte (dans tous les cas, $T$ termine et répond « vrai » ou « faux », donc il est une entrée -légitime à $A_4$). Cette construction fait que $L_T$ rejette un mot -précisément lorsque $S$ termine sur $x$ : si au contraire $S$ ne -termine pas sur $x$, alors $L_T = \Sigma^*$. L'utilisation de $A_4$ -sur $T$ permet donc de savoir algorithmiquement si $S$ termine +légitime à $A_4$). Cette construction fait que $L_T$ rejette au moins +un mot précisément lorsque $S$ termine sur $x$ : si au contraire $S$ +ne termine pas sur $x$, alors $L_T = \Sigma^*$. L'utilisation de +$A_4$ sur $T$ permet donc de savoir algorithmiquement si $S$ termine sur $x$, ce qui contredit l'indécidabilité du problème de l'arrêt. Variante de la même idée : on appelle « trace d'exécution » de $S$ sur @@ -537,8 +549,9 @@ l'indécidabilité du problème de l'arrêt. \exercice -On considère la grammaire hors-contexte $G$ d'axiome $S$ sur -l'alphabet $\Sigma = \{a,b,c\}$ donnée par +On considère la grammaire hors-contexte $G$ d'axiome $S$ (et de +nonterminaux $N = \{S, T\}$) sur l'alphabet $\Sigma = \{a,b,c\}$ +donnée par \[ \begin{aligned} S &\rightarrow TS \;|\; \varepsilon\\ @@ -550,29 +563,30 @@ 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)$. + (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 la forme $awbw'c$ avec $w,w'\in L(G)$. (En -particulier, $L(G,T)$ est l'ensemble des mots de la forme $a u_1 -\cdots u_k b u'_1\cdots u'_{\ell} c$ avec +l'ensemble des mots 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 +u_k b u'_1\cdots u'_{\ell} c$ avec $u_1,\ldots,u_k,u'_1,\ldots,u'_{\ell} \in L(G,T)$.) -(2) Comment décrire $L(G)$ simplement en fonction de $L(G,T)$ ? Y -a-t-il inclusion de l'un dans l'autre ? +(2) Comment décrire $L(G)$ de manière simple en fonction de $L(G,T)$ ? +Y a-t-il inclusion de l'un dans l'autre ? (3) Montrer que tout mot $w$ de $L(G)$ 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 $|u|$ que si $v$ est un préfixe strict -d'un mot $u\in L(G,T)$, alors $|v|_c < |v|_a$. (« Préfixe strict » -signifie que $v$ est un préfixe de $u$ et $v\neq u$. On pourra écrire -$u$ sous la forme $a u_1 \cdots u_k b u'_1\cdots u'_{\ell} c$ donnée -en (1).) +(4) Montrer par récurrence sur $|u|$ que si $v$ est un préfixe d'un +mot $u\in L(G,T)$ de longueur $0<|v|<|u|$, alors on a $|v|_c < |v|_a$. +(On pourra écrire $u$ sous la forme $a u_1 \cdots u_k b u'_1\cdots +u'_{\ell} c$ obtenue en (1).) (5) En déduire que si $u \in L(G,T)$ et $z \in \Sigma^+$ (c'est-à-dire $z\in\Sigma^*$ et $z\neq\varepsilon$) alors $uz \not\in L(G,T)$. -Montrer aussi que $bz \not\in L(G,T)$. +Expliquer par ailleurs pourquoi $bz \not\in L(G,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. @@ -582,6 +596,11 @@ la conclusion analogue pour $u_1\cdots u_k b u'_1\cdots u'_\ell$. (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)$. + +\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 @@ -596,7 +615,7 @@ la conclusion analogue pour $u_1\cdots u_k b u'_1\cdots u'_\ell$. d'un mot $u$ de $L(G,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. + de la racine (étiquetée $T$). \smallbreak @@ -607,11 +626,12 @@ L(G,T)^*$ où « $*$ » est l'étoile de Kleene. (Si on veut, la règle $S \smallbreak -(3) La propriété $|\gamma|_a = |\gamma|_b = |\gamma|_c$ est vérifiée -pour $S$ et elle est 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)$). +(3) La propriété $|\gamma|_a = |\gamma|_b = |\gamma|_c$ (ici $\gamma +\in (\Sigma\cup N)^*$) est vérifiée pour $\gamma = S$ et elle est +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)$). \smallbreak @@ -619,22 +639,24 @@ tout mot de $L(G)$ (et en particulier, pour tout mot de $L(G,T)$). 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 -u'_1\cdots u'_{\ell} c$, on a soit $v = a u_1 \cdots u_{i-1} y$ où $y$ -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$ est un préfixe de $u'_i$. Dans tous les cas, tous -les facteurs $t$ qui interviennent dans cette écriture vérifient -$|t|_c \leq |t|_a$ : c'est trivial pour $a$ et $b$, c'est le cas pour -chaque $u_j$ par la question (3), et pour $y$ cela découle soit de -l'hypothèse de récurrence (lorsque $y$ est un préfixe strict de $u_i$ -resp. $u'_i$) soit par de question (3) (lorsque $y$ est en fait égal à -$u_i$ resp. $u'_i$). Comme par ailleurs $|a|_c = 0 < 1 = |a|_a$, une +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 +\varepsilon$ est un préfixe de $u'_i$. Dans tous les cas, tous les +facteurs $t$ qui interviennent dans cette écriture vérifient $|t|_c +\leq |t|_a$ : c'est trivial pour $a$ et $b$, c'est le cas pour chaque +$u_j$ par la question (3), et pour $y$ cela découle soit de +l'hypothèse de récurrence (lorsque $|y|<|u_i|$ resp. $|y|<|u'_i|$) +soit par de question (3) (lorsque $y$ est en fait égal à $u_i$ +resp. $u'_i$). Comme par ailleurs $|a|_c = 0 < 1 = |a|_a$, une égalité est stricte et on en déduit $|v|_c < |v|_a$, ce qui conclut la récurrence. En particulier, on observe pour la question suivante que $v\not\in -L(G,T)$ pour tout préfixe strict $v$ d'un mot de $L(G,T)$ (car on -vient de montrer $|v|_c < |v|_a$, alors qu'un mot de $L(G,T)$ vérifie -$|u|_c = |u|_a$ d'après (3)). +L(G,T)$ pour tout préfixe strict $v$ d'un mot de $L(G,T)$ (si $v = +\varepsilon$ c'est clair, et si $0<|v|<|u|$, on vient de montrer +$|v|_c < |v|_a$ alors qu'un mot de $L(G,T)$ vérifie $|u|_c = |u|_a$ +d'après (3)). \smallbreak -- cgit v1.2.3