Uploaded by Idir DJOUAB

18

advertisement
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(n1)
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 ----------------------
Download