Vous êtes sur la page 1sur 7

Département : Informatique

Spécialité: Informatique, Niveau : Licence 2


Matière : Théorie des Langages

Série de TD N° : 01 - Corrigé Faculté des


Mathématiques et de
Langages Formels l'Informatique

Exercice 1.1 Déterminer les facteurs, les préfixes et les suffixes du mot u = abac.

Corrigé.
Facteurs : ε, a, b, c, ab, ba, ac, aba, bac, abac
Préfixes : ε, a, ab, aba, abac
Suffixes : ε, c, ac, bac, abac

Exercice 1.2 Soit u = a1 ...an un mot de longeur n, avec ai ≠ aj pour tous i ≠ j. Combien u comporte-t-il
de préfixes ? de suffixes ? de facteurs ?

Corrigé.
Les préfixes de u distincts de ε sont entièrement déterminés par leur dernière lettre, qui peut valoir
u[1], u[2], . . ., u[n]. Il y en a donc n, à quoi se rajoute le mot vide. Soit n+1 préfixes en tout pour
un mot u de longueur n.
On montre de manière similaire que le nombre de suffixes de u est n+1.
Pour déterminer le nombre de facteurs de u, il suffit de constater que les facteurs non-vides de u
sont exactement les préfixes de u[i..n] quand i parcourt {1,...,n}. D’où découle que le nombre de ces
facteurs (non vides) vaut :
n
nn  1
 nombre de préfixes non - vides de u[i..n]  n  n  1    1 
i 1 2
nn  1
À quoi se rajoute le mot vide, ce qui donne finalement 1  facteurs pour u.
2

Exercice 1.3
1. Compter les occurrences des lettres a et b dans les mots suivants : a3cbbca, aabg jdd, titi, babc.
2. Donner l’ensemble des couples (u, v) tels que uv = abaac.
3. Calculer LM pour les ensembles suivants :
 L = {a,ab,bb} et M = {ε,b,a2} ;
 L =  et M = {a,ba,bb} ;
 L = {ε} et M = {a,ba,bb} ;
 L = {aa,ab,ba} et M = {a,b}* .

Responsable du module : Nouioua Farid


Année Universitaire : 2020-2021 Page 1/7
Corrigé 3. {a, ab, bb} · {ε, b, a2} = {a, ab, bb, ab2 , b3 , a3 ,
1. aba2 , bba2} ;
u | u |a | u |b
 · {a,ba,bb} =  ;
a3cbbca 4 2
 {ε} · {a,ba,bb} = {a,ba,bb} ;
aabgjdd 2 1
 {aa,ab,ba} · {a,b}* est l’ensemble de tous
titi 0 0 les mots sur l’alphabet {a,b} qui débutent
babc 1 2 par le préfixe aa, ab, ou ba.

2.
u v
 abaac
a baac
ab aac
aba ac
abaa c
abaac 

Exercice 1.4 On considère l’alphabet  = {a,b}, et les langages L1 et L2 suivants :


L1 = {anbn | n  N}
L2 = {bnan | n  N}
Calculez : L1 ∪ L2, L1 ∩ L2, L1.L2, L2.L1, L12 .

Corrigé
 L1 ∪ L2 = {anbn | n  N} ∪ {bnan | n  N} = { anbn ou bnan | n  N }
 L1 ∩ L2 ={anbn | n  N} ∩ {bnan | n  N} = {ε }
 L1.L2 = { anbnbmam | n,m  N} = { anbn+mam | n,m  N }
 L2.L1 = { bnan ambm | n,m  N} = { bnan+mbm | n,m  N }
 L12 = { anbn ambm | n,m  N }

Responsable du module : Nouioua Farid


Année Universitaire : 2020-2021 Page 2/7
Département d’Informatique
2ème année Licence Informatique Théorie des langages
Exercice 1.5
Prouver les assertions suivantes, où  est un alphabet, a,b ∈  et u, v, x, y ∈ *.
1. au = bv ⇒ (a = b et u = v);
2. xu = xv ⇒ u = v ;
3. (xu = yv  |x| = |y|) ⇒ u = v ;
4. (xu = yv  |x| ≤ |y|) ⇒ (x est préfixe de y et v est suffixe de u).

Corrigé
1. Deux mots sont égaux s’ils sont la même longueur et si leurs lettres coïncident en
chaque position. Les mots au et bv s’écrivent sous la forme au1 ...up et bv1 ... vn, avec
ui , vi ∈  pour tout i. Puisque au = bv, on peut tirer de ce qui précède : p = n, a = b
et ui = vi pour tout i ≤ n. D’où en particulier a = b et u = v.
2. On établit ce résultat par récurrence sur |x|.
 Si |x| = 0, alors x = ε et la conclusion est immédiate.
 Sinon, On suppose que pour |x| = n, xu = xv ⇒ u = v. On montre la propriété
pour |x| = n+1.
Dans ce cas x = ay avec a ∈ , y ∈* et |y| = n et l’on a : ayu = ayv. D’après le
résultat 1 précédant, ceci impose yu = yv, et par hypothèse de récurrence : u = v.
3. Récurrence sur |x| = |y| :
 Si |x| = 0, alors x = y = ε et la conclusion est immédiate.
 Sinon, x = ax’ et y = by’ avec a,b ∈ et x’ , y’ ∈ * et |x’ | = |y’ |. On a : ax’u =
by’v. D’après 1, ceci impose a = b et x’u = y’v. Comme | x’ | < | x |, on peut
conclure, grâce à l’hypothèse de récurrence, que u = v.

Exercice 1.6 Montrer que :


1. Il n’existe pas de mot x ∈ {a,b}* tel que ax = xb.
2. Il n’existe pas de mots x, y ∈ {a,b}* tel que xay = ybx.

Corrigé
1. Rappelons que l’on note |u|a le nombre d’occurrences de la lettre a dans le mot u.
Clairement, si u et v sont deux mots, |uv|a = |u|a + |v|a. En particulier, si un mot x
satisfait ax = xb, on aurait |ax|a = |xb|a et donc |x|a +1 = |x|a , contradiction.
2. L’argument est le même que pour la question précédente : si xay = ybx, alors|xay|a =
|ybx|a et donc |x|a +|y|a +1 = |x|a +|y|a , contradiction.

Responsable du module : Nouioua Farid


Année Universitaire : 2020-2021 Page 3/7
Département d’Informatique
2ème année Licence Informatique Théorie des langages

Exercice 1.7 Soient A,B,C trois langages sur un même alphabet. Prouver les propriétés
suivantes :
1. (AB)C = A(BC)
2. A(B∪ C) = AB∪ AC
3. A(B ∩ C) ⊆ AB ∩ AC et l’inclusion réciproque est fausse en général.
4. A ⊆ B ⇒ A* ⊆ B*
5. (A*)* = A*
6. (A∪ B)* = (A*B*)*

Corrigé
1. Se déduit immédiatement de l’associativité de la concaténation des mots.
2. u ∈ A(B∪ C)  ∃a ∈ A,∃x ∈ B∪ C : u = ax
 (∃a ∈ A,∃x ∈ B : u = ax) ou (∃a ∈ A,∃x ∈ C : u = ax)
 u ∈ AB ou u ∈ AC
 u ∈ AB∪ AC
3. Tout mot u de A(B ∩C) s’écrit u = ax avec a ∈ A et x ∈ B ∩ C et appartient donc à
AB (puisque a ∈ A et x ∈ B) et AC (puisque a ∈ A et x ∈ C). Par contre, pour A =
{1,10}, B = {01} et C = {1}, on a 101 ∈ AB ∩ AC, mais clairement 101  A(B∩C)
car B∩C = 
4. Si A ⊆ B, alors tout mot de la forme u1 ...un avec n ∈ N et u1,...,un ∈ A est dans Bn,
puisque chaque ui est dans B. Autrement dit, An ⊆ Bn pour tout n. D’où s’ensuit que
A*   A n  B *   B n .
nN nN

5. De A ⊆ A* on tire, grâce à la question précédente : A* ⊆ (A*)*.


Montrons maintenant que (A*)* ⊆ A*. Soit u ∈ (A*)*. Donc il existe n  0 tel que u
∈ (A*)n. Cela veut dire que u peut s’écrire u = u0, …, un avec ui ∈ A* (pour tout i
entre 0 et n). Puisque chaque ui est une concaténation de mots de A, il s’en suit que u
est lui-même une concaténation de mots de A, c-à-d u ∈ A*. D’où l’inclusion (A* )*
⊆ A*.
6. On montre que : a) (A∪ B)* ⊆ (A*B*)* et b) (A*B*)* ⊆ (A∪ B)*
a) On a A ⊆ A* et A* ⊆ A*B*, puisque ε ∈ B* . D’où A ⊆ A*B*, et on prouve
de manière similaire que B ⊆ A*B*. L’inclusion A∪ B ⊆ A*B* en découle et
entraîne (A∪ B)* ⊆ (A*B*)*, par la question 4.
b) De A ⊆ A∪ B (resp. B ⊆ A∪ B) on tire, par la question 4, A* ⊆ (A∪B)* (resp.
B* ⊆ (A∪B)*), puis A*B* ⊆ (A∪B)*, puisque (A∪ B)* est clos pour la
concaténation. Il découle (A*B*)* ⊆ ((A∪ B)*)* (toujours par la question 4),
puis (A*B*)* ⊆ (A∪B)* puisque ((A∪B)*)* = (A∪B)* (question 5).

Responsable du module : Nouioua Farid


Année Universitaire : 2020-2021 Page 4/7
Département d’Informatique
2ème année Licence Informatique Théorie des langages
Exercice 1.8 Soient A, B deux langages sur un même alphabet.
1. Comparer (A∪ B)* et A* ∪ B*.

2. Comparer (A ∩ B)* et A* ∩ B*.

3. Comparer (AB)* et A*B*.

Corrigé
1. Nous avons (A*∪ B*)  (A∪ B)* mais l’inverse n’est pas toujours vrai.
Montrons que (A*∪ B*)  (A∪ B)*. De A ⊆ A∪ B (resp. B ⊆ A∪ B) on tire, par la
question 4 de l’exercice 7, A* ⊆ (A∪B)* (resp. B* ⊆ (A∪B)* ), d’où (A*∪ B*) 
(A∪ B)*.
Montrons maintenant qu’il existe A et B tel que (A∪ B)*  (A* ∪ B*). Prenons A =
{a} et B = {b}. On a ab  (A∪ B)* mais ab  A*∪ B* (les mots de A*∪ B* sont
formés soit uniquement de a ou uniquement de b).

2. Nous avons (A ∩ B)*  A* ∩ B* mais l’inverse n’est pas toujours vrai.


Montrons que (A ∩ B)*  A* ∩ B*. Soit w ∈ (A ∩ B)* donc w peut s’écrire u = u0,
…, un avec n  0 et ui ∈ A ∩ B (pour tout i entre 0 et n) c-à-d, ui ∈ A et ui ∈ B et
donc ui ∈ A* et ui ∈ B* d’où ui ∈ A* ∩ B*.
Montrons maintenant qu’il existe A et B tel que A* ∩ B*  (A ∩ B)*. Prenons A =
{a} et B = {aa}. On a aa  A*∩ B* mais aa  (A ∩ B)* (car A ∩ B =  et donc (A
∩ B)* ={} ).

3. Nous avons (AB)* ≠ A*B*.


Prenons A = {a} et B = {B}.
AB = {ab} et (AB)* = {, ab, abab, ababab, …} = {(ab)n | n  0}
A* = {, a, aa, aaa, …}, B* = {, b, bb, bbb, …} et
A*B* = {, b, bb, bbb, …, a, ab, abb, abbb, …., aa, aab, aabb, aabbb, aaa, aaab,
aaabb, aaabbb, …..} = {anbm | n, m  0}
Nous avons par exemple, abab  (AB)* mais abab  A*B* (car les mots de A*B*
sont formés d’une suite de a suivi d’une suite de b, c-à-d une fois qu’on a un b on ne
peut plus avoir un a à nouveau), d’où (AB)*  A*B*.
De plus par exemple, aa  A*B* (prendre n = 2 et m = 0) mais aa  (AB)* (car
dans (AB)*, on ne peut jamais avoir deux a consécutifs), d’où A*B*  (AB)*.

Responsable du module : Nouioua Farid


Année Universitaire : 2020-2021 Page 5/7
Département d’Informatique
2ème année Licence Informatique Théorie des langages
Exercice 1.9 Trouver l’ensemble des facteurs gauches et l’ensemble des facteurs droits des
langages sur l’alphabet Σ = {a,b} suivants :
1. L1 = {a n.bn | n ≥ 0}.
2. L2 = {an.bm | 0 ≥ n ≥ m}.
3. L3 = {w ∈ Σ* | |w|a = |w|b}.

Corrigé
1. L1 = {a n.bn | n ≥ 0} = {, ab, aabb, ….}
a) Facteurs gauches (préfixes). On peut montrer que
Préfixes(L1) = { a n.bm | n ≥ m ≥ 0}
Notons l’ensemble { an.bm | n ≥ m ≥ 0} par X. Pour cela, on montre que tout préfixe
d’un élément de L1 est dans X et tout élément de X est dans Préfixes(L1) i.e., un
préfixe d’un élément de L1 .
Il est clair que tous préfixe d’un mot de L1 est de la forme a n.bm avec n  m  0.
Tout mot de la forme an.bm pour n  m  0 représente un préfixe du mot a n.bn de
L1 (a n.bn s’obtient en ajoutant (n-m) b à la fin de a n.bm ).

b) Facteurs droits (suffixes). Avec un raisonnement similaire, on trouve :


Suffixes(L1) = { a n.bm | m ≥ n ≥ 0}
2. L2 = {an.bm | n ≥ m ≥ 0}. .
a) Facteurs gauches (préfixes). On peut montrer que
Préfixes(L2) = L2
Pour cela, on montre que tout préfixe d’un élément de L2 est dans L2 et tout élément
de L2 est dans Préfixes(L2) i.e., un préfixe d’un élément de L2 .
Soit w est un préfixe d’un élément quelconque an.bm (n ≥ m ≥ 0) de L2 , alors soit w
est de la forme ar avec r ≥ 0 et il est dans L2, ou bien de la forme an.bk avec k  m et
donc n ≥ k ≥ 0 et w est dans ce cas aussi dans L2.
Soit w un élément quelconque de L2. w est de la forme an.bm (n ≥ m ≥ 0), mais
comme w est préfixe de lui-même alors w est dans Préfixes(L2).

b) Facteurs droits (suffixes). On peut montrer que


Suffixe(L2) = { an.bm | n, m ≥ 0}
Notons l’ensemble { an.bm | n, m ≥ 0} par X. On montre alors que tout suffixe d’un
élément de L2 est dans X et tout élément de X est un suffixe d’un élément de L2 .

Soit w est un suffixe d’un élément quelconque an.bm (n ≥ m ≥ 0) de L2 , alors soit w


est de la forme br avec r ≥ 0 et il est dans X, ou bien de la forme ar.bm avec r, m ≥ 0
et w est dans ce cas aussi dans X.

Responsable du module : Nouioua Farid


Année Universitaire : 2020-2021 Page 6/7
Département d’Informatique
2ème année Licence Informatique Théorie des langages

Soit w un élément quelconque de X. w est de la forme an.bm avec n, m ≥ 0. On a


deux cas :

 Soit n ≥ m et donc w est dans L2 mais comme w est suffixe de lui-même alors
w est suffixe d’un élément de L2.

 Soit n < m et dans ce cas w est suffixe par exemple de am-n w = am-nanbm =
ambm qui est un élément de L2.

3. L3 = { w ∈ Σ* | |w|a = |w|b}

a) Facteurs gauches (préfixes). On peut montrer que

Préfixes(L3) = Σ* = {a,b}*

Pour cela, on montre que tout préfixe d’un élément de L3 est dans Σ* et tout élément
de Σ* est dans Préfixes(L3) i.e., un préfixe d’un élément de L3.

La première partie est triviale car tout préfixe d’un élément de L3 est un mot sur
l’alphabet Σ = {a,b}.

Soit w un mot quelconque de Σ*. On peut toujours compléter w par des symboles a
et b à droite pour obtenir un mot w’ avec |w’|a = |w’|b et donc w est un préfixe d’un
élément de L3.

b) Facteurs droits (suffixes). Par un raisonnement similaire, on montre que :

Suffixe(L3) = Σ* = {a,b}*

Responsable du module : Nouioua Farid


Année Universitaire : 2020-2021 Page 7/7

Vous aimerez peut-être aussi