Théorie des Langages - Département informatique de l`IUT
Transcription
Théorie des Langages - Département informatique de l`IUT
iut Lille A – Université Lille1 – département Informatique Mathématiques – un énoncé de ≪ Théorie des Langages ≫ Exercice I - Des constructions d’AFdc. Dans cet exercice, on s’intéresse au langage L des mots sur l’alphabet x | y | z qui commencent par xy ET qui finissent par yyz ; plus précisément, on cherche à construire des AF (automates finis) qui reconnaissent ce langage. 1. Donner la liste des mots du langage L de longueur inférieure ou égale à 6. Indication : cette liste devrait comporter cinq mots ; si vous n’en trouvez que quatre, alors vous avez sans doute oublié le plus court d’entre eux ! xyyz , xyyyz , xyαyyz pour α parmi {x, y, z} 2. On propose l’AF suivant : − x 2 1 2 3 4 5 6 + 3 y z 3 3|4 3 5 6 Dessiner cet AF. Cet AF convient-il ? Pourquoi ? 1 x 2 y y 3 4 y 5 z 6 x|y|z Cet AF reconnaı̂t le langage xy(x | y | z)∗ yyz qui est certes inclus dans le langage L — en effet, les mots de xy(x | y | z)∗ yyz commencent tous par xy et se terminent par yyz — mais il y manque le mot xyyz pour obtenir tous les mots de L... L’AF proposé ne convient donc pas ! 3. En tentant de corriger le défaut de l’AF précédent en lui ajoutant une transition de l’état 4 vers l’état 6, d’étiquette z : x y z − 1 2 2 3 3 3 3|4 3 4 5 6 5 6 6 + Le défaut de l’AF précédent a-t-il été corrigé ? Ce nouvel AF convient-il pour autant ? Pourquoi ? 1 x 2 y y 3 4 y 5 z 6 z x|y|z La transition ajoutée permet une lecture qui conduit à accepter maintenant le mot xyyz ! y x y z 1 −→ 2 −→ 3 −→ 3 | 4 −→ 3 | 6 où 6 est acceptant Mais notre enthousiasme est de courte durée, car le nouvel AF accepte aussi le mot xyzyz x y z y z 1 −→ 2 −→ 3 −→ 3 −→ 3 | 4 −→ 3 | 6 où 6 est acceptant qui pourtant ne se termine pas par yyz et n’appartient donc pas à L... Un énoncé de théorie des langages 2 4. Proposer une expression régulière pour le langage L. Le langage L a été défini 1 comme le ≪ langage des mots sur l’alphabet x | y | z qui commencent par xy ET qui finissent par yyz ≫, il est composé de mots constitués du préfixe xy et du suffixe yyz entre lesquels s’intercale un mot quelconque, à ces mots de longueur au moins 5 s’ajoute le mot xyyz de longueur 4 ; d’où l’expression régulière du langage : L = xy(x | y | z)∗ yyz | xyyz 5. Dessiner l’AF suivant puis expliquer pourquoi il reconnaı̂t le langage L : − 1 2 3 4 5 6 + x 2 3 y z 3|4 3|4 3 5 6 y x 1 2 y 3 y y 4 z 5 6 x|y|z y Les chemins menant de l’état de départ 1 à l’état acceptant 6 passent soit par les transitions 2 −→ 3 et y y 3 −→ 4, soit par la transition 2 −→ 4, d’où l’expression régulière sous forme de réunion xy(x | y | z)∗ yyz | xyyz. 6. Construire, par l’algorithme de subset construction, un AFdc (Automate Fini déterministe complet) équivalent à cet AF : on dessinera l’automate obtenu. Indication : on devrait obtenir un AFdc à 7 états — on n’oubliera pas l’état de blocage... − 1/1 2/2 ×/3 34/4 3/5 345/6 36/7 + x y z 2/2 ×/3 ×/3 ×/3 34/4 ×/3 ×/3 ×/3 ×/3 3/5 345/6 3/5 3/5 34/4 3/5 3/5 345/6 36/7 3/5 34/4 3/5 y y 345/6 x|z x|z 1/1 x x|z y|z ×/3 x|y|z 2/2 y 34/4 x 3/5 y z x|z y 36/7 1. Attention à éviter tout contresens dans la lecture de l’énoncé : cette définition de L a été donnée en tout début d’énoncé, avant sa première question : il n’est donc plus question ici des mots de L de longueur au plus 6 comme dans la première question, ni du langage reconnu par l’AF étudié dans la question suivante... Un énoncé de théorie des langages 3 7. En déduire l’Afdc minimal équivalent. Reste à ≪ minimaliser ≫ cet AFdc par l’algorithme de Nérode ; les 6 états refusants permettent de 2 construire 6×5 2 = 15 peper tandis que le seul état acceptant n’en fournit aucune : − 1 2 3 4 5 6 7 + 12 13 14 15 16 23 24 25 26 34 35 36 45 46 56 x 2 3 3 5 5 5 5 23◦ 23◦ 25◦ 25◦ 25◦ 3◦ 35◦ 35◦ 35◦ 35◦ 35◦ 35◦ 5◦ 5◦ 5◦ y 3 4 3 6 4 6 4 34◦ 3◦ 36◦ 34◦ 36◦ 34◦ 46◦ 4◦ 46◦ 36◦ 34◦ 36◦ 46◦ 6◦ 46◦ z 3 3 3 5 5 7 5 3◦ 3◦ 35◦ 35◦ 37• 3◦ 35◦ 35◦ 37• 35◦ 35◦ 37• 5◦ 57• 57• 12 13 14 15 23 24 25 34 35 45 12 13 15 23 25 35 13 25 x 23◦ 23◦ 25◦ 25◦ 3◦ 35◦ 35◦ 35◦ 35◦ 5◦ 23◦ 23◦ 25◦ 3◦ 35◦ 35◦ 23• 35• y 34◦ 3◦ 36• 34◦ 34◦ 46• 4◦ 36• 34◦ 46• 34• 3◦ 34• 34• 4◦ 34• 3◦ 4◦ z 3◦ 3◦ 35◦ 35◦ 3◦ 35◦ 35◦ 35◦ 35◦ 5◦ 3◦ 3◦ 35◦ 3◦ 35◦ 35◦ 3◦ 35• Nous voyons qu’il ne reste plus aucune peper en fin de calcul et que donc l’AFdc obtenu est l’AFdc minimal du langage étudié. Exercice II - Des grammaires On considère la grammaire G dont l’ensemble des terminaux est {a, b, c}, dont l’ensemble des variables est {S, X, Y, Z}, dont l’axiome est S et qui a pour ensemble de règles de production : : : R3 : R4 : R1 R2 S−→ aX Y −→ cbY X−→ abcZ X−→ aS : X−→ abY c : Z−→ abcZ R7 : Y −→ ε R5 R6 1. Cette grammaire est-elle régulière ? Linéaire ? Algébrique ? Pourquoi ? Cette grammaire est algébrique car le membre gauche de chaque règle est une variable, elle est de plus linéaire car en plus de la condition précédente on voit que le membre droit de chaque règle comporte soit zéro, soit une variable. Elle est par contre non régulière car dans le membre droit d’au moins une règle – R5 : X −→ abY c – la variable présente n’est pas en fin du membre droit. 2. Proposez 3 mots produits par la grammaire G en montrant pour chacun d’eux comment (production ou arbre de dérivation) il est produit. Les trois mots aabc, aabcbcbc et aaaabcbcbc appartiennent au langage produit, comme l’indiquent les productions R1 R5 R7 S =⇒ aX =⇒ aabY c =⇒ aabc, R1 R5 R2 R2 R7 S =⇒ aX =⇒ aabY c =⇒ aabcbY c =⇒ aabcbcbY c =⇒ aabcbcbc et R1 R4 R1 R5 R2 R2 R7 S =⇒ aX =⇒ aaS =⇒ aaaX =⇒ aaaabY c =⇒ aaaabcbY c =⇒ aaaabcbcbY c =⇒ aaaabcbcbc. Comme la grammaire étudiée est algébrique (autrement dit context free), on peut préférer proposer des arbres de dérivation : 2. La notation 23◦ indique que la paire 2 | 3 fait (pour l’instant) partie de la liste des peper tandis que 23• indique que cette paire ne fait pas ou ne fait plus partie de la liste des peper . Un énoncé de théorie des langages 4 S S R1 S R1 a X a R5 ab R1 Y c R7 X a R5 ab Y c R2 ε cb R4 a Y S R1 a R2 cb X Y X R5 ab R7 ε Y c R2 cb Y R2 cb Y R7 ε 3. Dessiner un ≪ automate fini ≫ qui montre quels sont les enchaı̂nements possibles entre règles lorsque l’on cherche à produire des mots terminanux en partant du symbôle initial S ; en particulier, justifier que certaines règles sont ≪ inaccessibles ≫ : on précisera clairement quelles sont ces règles inutiles. Dans l’AF suivant, on note mcS pour ≪ mot contenant S pour seule variable ≫ : R1 : S −→ aX mcS R5 : X −→ abY c mcX R4 mcY : X −→ aS R2 R3 R7 : Y −→ ε mot terminal : Y −→ cbY : X −→ abcZ mcZ R6 : Z −→ abcZ Aucun chemin depuis le départ jusqu’à l’acceptant ne passe par mcZ (état dit ≪ non co-accessible ≫ car il n’en part aucun chemin vers un acceptant), ce qui indique que la variable Z et les règles R3 et R6 sont inutiles 3 . 4. À l’aide de l’≪ automate ≫ de la question précédente, déterminer le langage produit par la grammaire G. Indication : on devrait trouver a2m+2 (bc)n+1 : m, n ∈ N . Toute production d’un mot terminal est donc de type suivant (en remarquant au préalable l’enchaı̂nement R1 R4 S =⇒ aX =⇒ aaS) : (R1 R4)m R1 R5 (R2)n R7 S =⇒ (aa)m S =⇒ (aa)m aX =⇒ (aa)m aabY c =⇒ (aa)m aab(cb)n Y c =⇒ (aa)m aab(cb)n εc où (aa)m aab(cb)n εc = (aa)m+1 (bc)n+1 = a2m+2 (bc)n+1 et où les deux paramètres 4 sont des entiers naturels quelconques et indépendants. 5. Montrer que le langage précédent peut être écrit sous forme d’expression régulière (on donnera une telle expression régulière) et proposer une grammaire régulière qui engendre ce langage. 3. On remarquera que la grammaire obtenue après effacement des règles R3 et R6 reste (évidemment !) linéaire mais ne devient pas pour autant régulière, la régle ≪ fautive ≫ R5 n’ayant pas été effacée. Cependant et comme on le verra plus loin, le langage obtenu est aa(aa)∗ bc(bc)∗ et est donc régulier, et d’ailleurs on pourra proposer une autre grammaire, celle-là régulière, qui engendre ce même langage. 4. Les trois mots aabc, aabcbcbc et aaaabcbcbc de la question 2 sont obtenus respectivement pour (m, n) = (0, 0), (m, n) = (0, 2) et (m, n) = (1, 2). Un énoncé de théorie des langages 5 Ce langage est décrit par l’expression régulière aa(aa)∗ bc(bc)∗ , il est reconnu par l’AF : S a a a c b X a Y c b il est donc produit par la grammaire régulière ({a, b, c} ; {S, X, Y } ; S; {S −→ aaX; X −→ aaX | bcY ; Y −→ bcY | ε}) 6. On envisage maintenant le langage a2n+2 (bc)n+1 : n ∈ N . 6.a. Proposer une grammaire linéaire qui engendre ce langage. Il est plus facile de présenter le langage à produire en mettant en évidence l’exposant n, soit donc : 2n+2 a (bc)n+1 : n ∈ N = {(aa)n aabc(bc)n : n ∈ N} Il s’agit maintenant de créer une règle qui produise un aa en début de mot en même temps qu’un bc en fin de mot : S −→ aaSbc que l’on applique n fois à partir de l’axiome S pour arriver à (aa)n S(bc)n , mot que l’on ≪ termine ≫ par la règle S −→ aabc. Une grammaire produisant le langage proposé est donc : ({a, b, c} ; {S} ; S; {S −→ aaSbc; S −→ aabc}) 6.b. Est-il possible de proposer une grammaire régulière qui engendre ce langage ? Justifier la réponse ! Un tel langage n’est pas régulier car, en cours de lecture d’un mot a2n+2 (bc)n+1 du langage, on doit ≪ mémoriser ≫ la valeur de l’entier n ∈ N, ce qui suppose une mémoire infinie et donc inaccessible à un automate fini. Plus précisément, si ce langage était régulier, alors il serait reconnaissable, il existerait donc un automate fini qui le reconnaı̂trait, on en déduirait donc un AFdc équivalent. Notons δ l’état de départ de cet (hypothétique) AFdc. La liste d’états δ · a2n+2 bc : n∈N paraı̂t certes infinie du fait de son indexation par n ∈ N, mais notre AFdc ne compterait qu’un nombre fini d’états, l’un au moins d’entre eux serait donc ≪ atteint ≫ pour plusieurs valeurs différentes de l’indice n, nous aurions donc nécessairement 5 : ∃n ≥ 0 : ∃p > 0 : δ · a2n+2 bc = δ · a2n+2p+2 bc d’où l’on déduirait, en lisant (bc)n depuis cet état, que : δ · a2n+2 (bc)n+1 = δ · a2n+2p+2 (bc)n+1 et ce dernier état devrait être à la fois acceptant (car a2n+2 (bc)n+1 appartient au langage reconnu) et refusant (car a2n+2p+2 (bc)n+1 n’appartient pas au langage reconnu). Cette contradiction montre l’absurdité de l’hypothèse émise, à savoir la régularité du langage 2n+2 a (bc)n+1 : n ∈ N Exercice III - Automates finis & grammaires. 1. Soit un AFdc A sur l’alphabet a | b | c qui reconnaı̂t le seul mot a2007 . 5. Le lecteur remarquera que l’on peut prolonger ce raisonnement : de δ · a2n+2 bc = δ · a2n+2p+2 bc on déduirait que ∀k ≥ 0 : δ · a2n+2 bc = δ · a2n+2kp+2 bc et donc que δ · a2n+2 (ap )∗ bc serait inclus dans le langage reconnu L. Un énoncé de théorie des langages 6 1.a. Justifier que alors cet automate a au moins 2009 états... On remarquera d’abord (même si la question n’était pas formellement posée) que l’AF : − a 1 2 3 .. . i .. . 2006 2007 + × 0 a b|c a 1 b|c a i 2 b|c b × × × .. . c × × × .. . i+1 × .. .. . . 2007 × × × × × × .. . 0 1 2 .. . i+1 b|c b|c × × × 2006 a b|c 2007 a|b|c × a|b|c est déterministe et complet, qu’il comporte exactement 2009 états et qu’il reconnaı̂t le seul mot a2007 ... La question posée est donc de savoir si l’on peut ≪ faire mieux ≫ que l’AFdc proposé ci-dessus ! Soit un AFdc dont je note le départ δ et qui reconnaı̂t ce langage. S’il existait deux entiers i, j avec 0 ≤ i < j ≤ 2008 mais pourtant δ · ai = δ · aj alors – du fait que 0 ≤ i < j ≤ 2008 et donc que 0 ≤ i ≤ 2007 — l’état δ · ai est sur le chemin menant de l’état de départ δ à l’état acceptant δ · a2007 : δ ai δ · ai = δ · aj a2007−i δ · a2007 aj−i on aurait un 6 autre mot reconnu a2007+(j−i) . Cette contradiction impose que l’hypothèse faite – à savoir l’égalité de deux états parmi les δ · ai : 0 ≤ i ≤ 2008 – est absurde, il y a donc au moins autant d’états que d’entiers entre 0 et 2008 inclus, soit 2009. 1.b. En quoi la réponse précédente est-elle modifiée si l’alphabet est réduit à la seule lettre a ? En rien ! Dans la démonstration précédente, on n’a pas utilisé les lettres b et c, on a ≪ besoin l’état poubelle pour rejeter les mots du type ai avec i > 2007. ≫ de 2. On a étudié en cours la grammaire (linéaire) 7 S −→ aSb | ε qui produit le langage {an bn : n ≥ 0}. En vous inspirant de cet exemple, proposer des grammaires pour chacun des langages suivants (on se contentera d’en énoncer les règles...) : 2.a. a2 n (bc)3 n : n ≥ 0 , S −→ aaSbcbcbc | ε 2.b. a2 n b3 c2007 n : n ≥ 0 , S −→ aaSc2007 | bbb 6. On aurait même une infinité de mots reconnus : en notant m = j − i avec m > 0 puisque i < j, on voit que tous les mots de a2007 (am )∗ seraient reconnus... 7. Comme à l’habitude, les variables sont notées par des lettres majuscules et les terminaux par des lettres minuscules, la variable de départ est S comme start : on se contente donc pour définir cette grammaire d’en énoncer les régles de production qui sont donc S −→ aSb et S −→ ε. Un énoncé de théorie des langages 7 2.c. a2 n b3 n c2007 : n ≥ 0 , S −→ Xc2007 ; X −→ aaXbbb | ε 2.d. {am bn : m ≥ n ≥ 0}, S −→ XY ; X −→ aX | ε ; Y −→ aY b | ε encore que S −→ aS | aSb | ε ne manque pas non plus d’élégance. 2.e. langage des mots sur {a; b} qui comportent autant de a que de b. On admirera la règle AB −→ BA, dite shuffle : S −→ ASB | ε ; AB −→ BA ; A −→ a ; B −→ b 2.f. langage des mots sur {a; b; c} qui comportent autant de a que de b. Par rapport au cas précédent – la lettre supplémentaire c qui apparaı̂t dans des positions et quantités quelconques, alors que l’égalité des nombres de a et de b doit elle être maintenue – il ≪ suffit ≫ de permettre la production des c en nombre quelconque au début du processus (ainsi, en appliquant k fois la ′ règle S −→ ASB et k ′ fois la règle S −→ Sc, on produit Ak Sck B k puis en appliquant S −→ ε on obtient ′ Ak ck B k , il s’agit ensuite de pouvoir non seulement échanger l’ordre des A et des B mais aussi de pouvoir déplacer les c parmi les A et les B : S −→ ASB | Sc | ε ; AB −→ BA ; Ac −→ cA ; Bc −→ cB ; A −→ a ; B −→ b Exercice IV - Des transitions ≪ instantanées ≫. 1. On désire construire l’AFdc minimal sur l’alphabet x | y | z du langage x∗ y ∗ zx∗ y ∗ , On propose pour cela l’AF (évidemment non déterministe) suivant : − 1 2 3 4 ε 2 x y 1 2 3 4 4 + z 3 En enchaı̂nant les procédés vus en cours (suppression des transitions ≪ instantanées ≫, subset construction, algorithme de Nérode), construire l’AFdc minimal équivalent. Comme à l’habitude et en suivant les chemins depuis le départ 1 vers l’acceptant 4, on obtient une expression régulière du langage reconnu x∗ εy ∗ εzx∗ εy ∗ qui se simplifie fort heureusement en x∗ y ∗ zx∗ y ∗ . ε 1 2 z y x ε 3 4 y x On constate d’abord que 1·ε = 1| 2 ; 2·ε = 2 ; 3·ε=3|4 ; ce qui nous permet de retirer les transitions instantanées : − 1 − 2 3 4 + x y 12 2 34 4 y z y z 2 x 34 z 1 x 4·ε=4 3 x 4 x Un énoncé de théorie des langages 8 puis d’appliquer 8 l’algorithme de subset construction et enfin de représenter l’AFdc obtenu : x − 12/1 2/2 34/3 + ×/4 4/5 + x z 12/1 x y z 12/1 2/2 34/3 ×/4 2/2 34/3 34/3 4/5 ×/4 ×/4 ×/4 ×/4 ×/4 4/5 ×/4 34/3 y z z y 2/2 y y x ×/4 4/5 x|z x|y|z Reste à ≪ minimaliser ≫ cet AFdc par l’algorithme de Nérode ; les 3 états refusants permettent de construire 3×2 9 2 = 3 peper tandis que les 2 états acceptants fournissent une quatrième peper : − x y z 1 2 3 4 2 3 3 5 4 4 4 4 4 5 4 14◦ 2◦ 3◦ 14◦ 24◦ 34• 4◦ 24◦ 34• 34• 5◦ 4◦ 14• 2◦ 3◦ 1 2 3 + 4 5 + 12 14 24 35 12 Nous voyons qu’il ne reste plus aucune peper en fin de calcul et que donc l’AFdc obtenu est l’AFdc minimal du langage x∗ y ∗ zx∗ y ∗ . 2. On envisage maintenant l’AF : − 1 2 3 4 5 ε 2 3 5 x y 1 2 z 4 3 + 5 2.a. Proposer une expression régulière de son langage reconnu. 1 L’AF x ε 2 ε y ε 3 z x 5 reconnaı̂t x∗ y ∗ (zx)∗ y ∗ . y 4 2.b. Construire l’AFdc minimal équivalent. On constate d’abord que 1·ε=1|2|3|5 ; 2·ε = 2|3 |5 ; 3·ε =3 | 5 ; 4·ε =4 ; 5·ε = 5 ce qui nous permet de retirer les transitions instantanées : − − − − 1 2 3 4 5 x 1235 y z 235 4 35 + 5 8. Comme à l’habitude, nous notons 12 pour 1 | 2 et × pour le ≪ blocage ≫, nous avons aussi renuméroté les états dans leur ordre de création c’est-à-dire en ≪ largeur d’abord ≫. 9. La notation 14◦ indique que la paire 14 fait (pour l’instant) partie de la liste des peper tandis que 14• indique que la paire 14 ne fait pas ou ne fait plus partie de la liste des peper . Un énoncé de théorie des langages 9 puis d’appliquer l’algorithme de subset construction : − 1235/1 235/2 4/3 ×/4 35/5 5/6 + + + + 1235/1 235/2 4/3 ×/4 235/2 4/3 35/5 ×/4 ×/4 ×/4 ×/4 ×/4 ×/4 5/6 4/3 ×/4 5/6 ×/4 Nous pouvons représenter l’AFdc obtenu : x 4/3 z 1235/1 x 35/5 z y y|z z y y x 235/2 x ×/4 5/6 x|y y x|y|z Reste à ≪ minimaliser ≫ cet AFdc par l’algorithme de Nérode ; les 4 états acceptants permettent de 10 construire 4×3 : 2 = 6 peper tandis que les 2 états refusants fournissent une septième peper − 1 2 3 4 5 6 12 15 16 25 26 34 56 25 26 56 25 + + + + x 1 4 5 4 4 4 14• 14• 14• 4◦ 4◦ 45• 4◦ 4◦ 4• 4• 4◦ y 2 2 4 4 6 6 2◦ 26◦ 26◦ 26◦ 26◦ 4◦ 6◦ 26◦ 26◦ 6◦ 26• z 3 3 4 4 3 4 3◦ 3◦ 34◦ 3◦ 34◦ 4◦ 34◦ 3◦ 34◦ 34◦ 3◦ Nous voyons qu’il ne reste plus aucune peper en fin de calcul et que donc l’AFdc obtenu est l’AFdc minimal du langage x∗ y ∗ (zx)∗ y ∗ . 10. La notation 14◦ indique que la paire 14 fait (pour l’instant) partie de la liste des peper tandis que 14• indique que la paire 14 ne fait pas ou ne fait plus partie de la liste des peper .