IN L2 18 Université Mouloud MAMMERI de Tizi-Ouzou Faculté de génie électrique et informatique Départementd’informatique Année universitaire : 2016/2017 2ième année licence –Informatique module : Théorie des langages E preuve de M oyenne Durée le 09/03/2017 – Durée 1h 30mn – documents non autorisés EXERCICE 1 : (4 pts) Donner, lorsque cela est possible, un langage vérifiant chacune des propriétés suivantes : (il faudra justifier la vérification des propriétés par les langages donnés) 1) L1 : langage fini et régulier. (1 pt) 2) L2 : langage infini et régulier. (1 pt) 3) L3 : langage fini et non régulier. (1 pt) 4) L4 : langage infini et non régulier. (1 pt) EXERCICE 2 : (6 pts) I) Pour chacun des langages suivants, trouver des grammaires les engendrant : I-1) L1 = { an.b.am.b / n, m ≥ 0 } ; (1,5 pts) I-2) L2 = { 0n.w.wR.1n / n ≥ 0 ; w ∈ {a, b}* } ; (1,5 pts) n(n1) 2 / I-3) L3 = { a n ≥ 0 }. (1,5 pts) ( w ∈ L3 ssi w = a puissance (n×(n+1)/2) ) II) Trouver un automate d’états finis acceptant le langage L1 de I-1) de cet exercice. (1,5 pts) EXERCICE 3 : (4 pts) Soient les grammaires G1 et G2 définies par : G1 = ({a, b}, {S}, S, { S → aaS | Sbb | ab | a | b | ε }) et G2 = ({a, b}, {S, A, B}, S, { S → AB ; A → aAA | b ; bB → ε }). 1) Trouver L(G1) et L(G2). (2 pts) 2) Montrer que L(G1) est régulier en trouvant une grammaire régulière équivalente à G1. (1 pt) 3) Montrer que L(G2) n’est pas régulier en utilisant la propriété de fermeture de la classe des langages réguliers par rapport à l’intersection. (1 pt) (indication : déterminer L(G1) ∩ L(G2)) EXERCICE 4 : (6 pts) Soient deux automates d’états finis déterministes complets A1 = <V, S1, F1, S01, I1> et A2 = <V, S2, F2, S02, I2> qui reconnaissent respectivement les langages L1 et L2 sur un alphabet V. 1) On suppose que V = {a, b} et L1 = { w ∈ V* / |w|a = 1 mod 2 } et L2 = { w ∈ V* / |w|b = 0 mod 2 }. Construire pour L1 et L2 des automates déterministes A1 et A2 qui les reconnaissent. (2 pts) 2) On construit l’automate AU comme suit : AU = <V, S, F, S0, I> avec : S = S1 × S2, F = (F1 × S2)U(S1 × F2), S0 = (S01,S02) et I est tel que : (a , (Si,Sj) , (Sk,Sl)) I si et seulement si (a , Si , Sk) I1 et (a , Sj , Sl) I2. Construire AU pour l’exemple de la question précédente. (1 pt) 3) Montrer que, dans le cas général, AU est déterministe et reconnait le langage U = L1 U L2. (1 pt) 4) Comment faut-il modifier la construction donnée pour AU afin qu’il accepte L1 ∩ L2 ? (0,5 pt) 5) Comment faut-il modifier l’automate précédent, dans le cas général, pour obtenir un automate fini déterministe qui reconnait L1-L2 ? Déterminer les automates des complémentaires de L1 et de L2. (1,5 pts) (indication : complémentaire(L) = V*-L) Bon courage ! UMMTO / L2 informatique / Théorie des Langages / EMD Mars 2017 / M.S. Habet, Y. Yesli, C. Cherifi Bref corrigé : (E.M.D de ThL – L2 informatique – 2016/2017) EX.1 : 1) L1 = {ab, bac}. L1 est fini : il contient deux éléments. L1 est régulier : il peut être généré par la grammaire régulière ({a, b}, {S}, S, { S → ab | bac }) . 2) L2 = {an.b / n ≥ 0}. L2 est infini : il contient une infinité d’éléments. L2 est régulier : il peut être généré par la grammaire régulière ({a, b}, {S}, S, { S → aS | b }) . 3) Un tel langage (L3) n’existe pas car tout langage fini est régulier : en effet si on a un langage fini on peut toujours écrire une grammaire de type 3 ayant un nombre fini de règles de productions et qui génère ce langage (comme c’est fait dans 1)). 4) L4 = {an.bn / n ≥ 0}. L4 est infini : il contient un nombre infini d’éléments. L4 n’est pas régulier. Il existe plusieurs manières pour le montrer, par exemple par les dérivées : soit S0 = L4 ; S0 || a = {an-1.bn / n ≥ 1} = S0.{b} = S1. S0 || aa = S1 || a = {an-2.bn / n ≥ 2} = S0.{bb} = S2. … S0 || ak = Sk-1 || a = {an-k.bn / n ≥ k} = S0.{bk} = Sk. Pour chaque valeur de k, on a un langage Sk différent des autres. Comme il y a une infinité de valeurs de k possibles, il y a une infinité de dérivées du langage L4 ; donc celui-ci n’est pas régulier. (À noter qu’il ne suffit pas qu’il y ait une grammaire non régulière engendrant un langage pour dire que celui-ci n’est pas régulier). EX.2 : I) I-1) Une grammaire pour L1 : G1 = ({a, b, c}, {S, A}, S , P1) P1 : S → aS | bA ; A → aA | b I-2) Une grammaire pour L2 : G2 = ({0, 1, a, b}, {S, A}, S , P2) P2 : S → 0S1 | A ; A → aAa | bAb | ε I-3) Une grammaire pour L3 : G3 = ({a}, {S, A, B, C, D, E}, P3, S) P3 : S → BCD C → ECA | ε EA → aAE AED → D Aa → aA Ea → aE Ba → aB BD → ε II) Automate pour L1 : IN a L2 18 b S2 a S0 b S1 EX. 3 : 1) L(G1) = { a2.i+1.b2.j+1 / i, j ≥ 0 } U { a2.i+1.b2.j / i, j ≥ 0 } U { a2.i.b2.j+1 / i, j ≥ 0 } U { a2.i.b2.j / i, j ≥ 0 } = { an.bm / n, m ≥ 0 }. L(G2) = { w {a, b}* / |w|a = |w|b et u préfixe de w, |u|a |u|b }. 2) L(G1) est régulier car il peut être généré par la grammaire régulière : ({a, b}, {S, A}, S, { S → aS | A ; A → bA | ε }). 3) Déterminons L = L(G1) ∩ L(G2) : L = { w {a, b}* / w L(G1) et w L(G2) } = { an.bn / n ≥ 0 } ; en effet an.bn = an.bm avec n=m, donc an.bn L(G1) et aussi : | an.bn |a = | an.bn |b et u préfixe de an.bn, |u|a |u|b donc an.bn L(G2). L n’est pas régulier. Par conséquent L(G2) n’est pas régulier, car s’il l’était L serait régulier du fait que L(G1) est régulier et que le résultat de l’intersection de deux langages réguliers est toujours régulier (fermeture de la classe des langages réguliers par rapport à l’intersection). EX. 4 : 1) Automate déterministe complet A1 : - table de transition : a b S01 S1 S01 S1 S01 S1 - représentation graphique : b b a S01 S1 a Automate déterministe complet A2 : - table de transition : - représentation graphique : a b S02 S02 S2 S2 S2 S02 a a b S2 S02 b 2) Pour l’exemple, on obtient AU : S = { (S01, S02) , (S01, S2), (S1, S02) , (S1, S2) } S0 = (S01, S02) F = { (S1, S02) , (S1, S2), (S01, S02) } Table de transition : a b (S01,S02) = q0 (S1,S02) (S01,S2) (S01,S2) = q1 (S1,S2) (S01,S02) (S1,S02) = q2 (S01,S02) (S1,S2) (S1,S2) = q3 (S01,S2) (S1,S02) Remarque : représentation graphique correspondant à la table précédente b q0 a b q1 a a q2 b a q3 b 3) Comme A1 et A2 sont déterministes, alors AU est déterministe par construction. On montre que U = L1 U L2 par double inclusion : ● L1 U L2 ⊂ U : soit C = S01,..,Sf1 un chemin de A1, où Sf1 est un état final de A1. Alors C’ = (S01,S02), …, (Sf1,Sk2) est un chemin de AU, (avec (Sf1,Sk2) état final de AU) ; donc le mot reconnu par C est aussi dans U. Même raisonnement pour un mot de L2. ● U ⊂ L1 U L2 : soit C = c1, …, cp un chemin de AU ; avec c1 = (S01,S02) et cp ∈ F. Alors tout état ci,i=1,..,p est un couple (Si1,Si2) de S ; et le chemin S01, …, Sp1 est un chemin de A1 ; et si de plus Sp1 ∈ F1, alors le mot qui lui correspond est le même mot issu de C ; il appartient donc à L1. Même raisonnement pour le chemin S02, …, Sp2. IN L2 18 4) Pour obtenir l’intersection de L1 et L2, on garde la même définition que pour l’union ; avec une modification qui est : que F = F1 × F2. 5) De la même manière on garde la même définition avec cependant : F = F1 × (S2 - F2). - Complémentaire de L1 : c’est V*-L1 ; un automate de V*, pour V = {a, b}, étant : -- états : {s’} ; s’ est en même temps état initial et final ; -- transitions : (a,s’,s’), (b,s’,s’). a, b s’ On construit donc le complémentaire de L1 en calculant sa table de transition : a b (s’,S01) (s’,S1) (s’,S01) (s’,S1) (s’,S01) (s’,S1) -- état initial : (s’,S01) -- états finaux : (s’,S01) b b a (s’, S1) (s’, S01) a - Complémentaire de L2 : c’est V*-L2 ; il a pour table de transition : a b (s’,S02) (s’,S02) (s’,S2) (s’,S2) (s’,S2) (s’,S02) -- état initial : (s’,S02) -- états finaux : (s’,S2) a a b (s’, S02) (s’, S2) b ---------------------- Fin du corrigé de l’EMD de ThL – L2 informatique – 2016/2017 ----------------------