Polytech Paris Sud - ET4 Année 2018-2019
Informatique Théorique :
Langages rationnels et non rationnels
TD n ◦ 4
Semaine du 8 octobre
Rationnel ou non ?
Exercice 1. On considère l'alphabet A = {a, b} . Parmi les langages suivants, lesquels ne sont pas rationnels ? Justier.
1. {a
nb
n| n ≥ 0}
2. {a
nba
n| n ≥ 0}
3. {a
na
n| n ≥ 0}
4. {a
mb
p| m < p}
5. {a
mb
p| m ≥ p}
6. {a
nb
m| n ≥ 10 et m ≤ 5}
7. {a
nb
m| n ≥ 10 et m ≥ 5}
8. {w | |w|
a≥ 10 et |w|
b≤ 10} , où |w|
aest le nombre d'occurrences de a dans w 9. {w | |w|
a= |w|
b}
10. {a
nb
m| n + m ≤ 1024}
11. {a
nb
ma
nb
m| n, m ≥ 0}
12. {w | w est un palindrome }
Démonstration. On rappelle ici le lemme de l'étoile tel que formulé en cours : Pour tout langage rationnel L , il existe un entier N tel que pour tout f ,
f ∈ L
|f | ≥ N
= ⇒ ∃u, v, w ∈ A
∗, v 6= ε, f = uvw, |uv| ≤ N et uv
∗w ⊆ L
• Trouver une expression rationnelle
• Raisonner par union, concaténation, étoile de langages rationnels.
• Raisonner par complémentaire ou intersection
• On rappelle qu'un langage ni est toujours rationnel.
• On peut utiliser le théorème de Myhill-Nérode qui en plus est une CNS, mais la manipulation des résiduels n'est pas forcément aisée.
Attention l'inclusion ne fonctionne pas !
Pour prouver qu'un langage n'est pas rationnel on raisonne par l'absurde avec les points précédents. Ou on utilise le lemme de l'étoile par l'absurde. Ceci fonctionne en quatre étapes :
1. On suppose que le lemme de l'étoile est juste, et on écrit ce que cela signie. En particulier on xe le N de l'énoncé.
2. On donne le mot qui va poser problème pour le résultat.
3. On montre qu'il pose problème.
4. On conclut : comme on est arrivé à une absurdité le langage de départ n'était pas rationnel.
Dès lors on corrige :
1. Fait en cours. Utiliser le lemme de l'étoile avec le mot a
Nb
Net utiliser que |uv| ≤ N pour en déduire qu'on n'ajoute que des a ce qui déséquilibre le mot uv
0w = uw et mène à une absurdité.
2. Avec le lemme de l'étoile on considère a
Nba
N. Comme |uv| ≤ N on en déduit que v n'a que des a , et on perd l'équilibre pour uw .
3. Oui, il s'agit de (a
2)
∗.
4. Non. Utiliser le lemme de l'étoile avec a
Nb
N+1. Alors v ne comporte que des a , et dès qu'on en prend v
2on a plus de a que de b (au sens large).
5. Non. On peut considérer le complémentaire intersecté avec a
∗b
∗, et on retrouve le langage précédent. Sinon on peut considérer le mot a
Nb
N. La factorisation uvw fait que v ne comporte que des a . Alors le mot uv
0w = uw a strictement moins de a que de b , absurde.
6. Oui, soit construire l'automate soit dire que c'est a
10a
∗(ε+b+bb+bbb+bbbb+bbbbb) . 7. Oui, soit faire l'automate, soit a
10a
∗b
5b
∗.
8. Oui, on donne l'automate en remplaçant 10 par 2 et on comprend comment cela
fonctionne. Le premier chire est le nombre de a , le deuxième le nombre de b .
0,0
start 0,1 0,2 0, >2
1,0 1,1 1,2 1, >2
≥2,0 ≥2,1 ≥2,2 ≥2, >2 a
a
a
a
a
a
a
a
a a a
a, b b
b
b b b
b b b
b b b
9. Non rationnel : si on intersecte avec a
∗b
∗on obtient le langage de la question 1 qui n'est pas rationnel.
10. Oui car ce langage est ni (de taille P
1025 k=1k )
11. Non rationnel : avec le lemme de l'étoile, par exemple pour a
Nb
Na
Nb
Nle v ne contient que des a ce qui déséquilibre les deux blocs de a .
12. Non rationnel. Soit le prouver directement avec le mot a
Nba
Nsoit utiliser la ques- tion 2 en intersectant avec a
∗ba
∗.
Exercice 2 (bonus). Varier de méthodes et utiliser tantôt Myhill Nérode tantôt le lemme de l'étoile pour l'exo précédent (en fonction de ce que vous avez fait précédemment).
Arden, résiduels et égalités d'expressions rationnelles
Exercice 3. On considère l'alphabet A = {a, b} et l'automate A suivant sur A :
1
start 2 3
a
b
a, b
b a
Déterminer le système d'équations associé à A . Le résoudre par élimination et à l'aide
du lemme d'Arden et en déduire une expression rationnelle du langage reconnu par A .
Montrer que cette expression est équivalente à A
∗aA .
Démonstration. On a le système :
X
1= bX
1+ aX
2X
2= aX
2+ bX
1+ (a + b)X
3X
3= ε
D'où X
2= aX
2+ bX
1+ a + b = a
∗(bX
1+ a + b) et X
1= bX
1+ aa
∗bX
1+ aa
∗a + aa
∗b . D'où X
1= (b + aa
∗b)
∗aa
∗(a + b) . Or aa
∗= a
∗a . Montrons donc que (b + aa
∗b)
∗a
∗= A
∗. L'inclusion ⊆ est claire. Montrons ⊇ .
On étudie chaque bout séparément, et on montre que (b + aa
∗b) = a
∗b . Si u ∈ L(b + aa
∗b) alors u = b = a
0b ∈ L(a
∗b) ou u = aa
kb = a
k+1b ∈ L(a
∗b) . Dans l'autre sens, si u ∈ L(a
∗b) alors u = b ∈ L(b + aa
∗b) ou u = a
kb avec k ≥ 1 donc u = aa
k−1b ∈ L(aa
∗b) ⊆ L(b + aa
∗b) .
On montre donc que A
∗⊆ (a
∗b)
∗a
∗. On procède par induction sur la longueur de u ∈ A
∗. Si u = ε on a bien L((a
∗b)
∗a
∗).
Si u = wa avec w ∈ L((a
∗b)
∗a
∗) alors u ∈ L((a
∗b)
∗a
∗a) ⊆ L((a
∗b)
∗a
∗) .
Si u = wb avec w ∈ L((a
∗b)
∗a
∗) alors u ∈ L((a
∗b)
∗a
∗b) ⊆ L((a
∗b)
∗) ⊆ L((a
∗b)
∗a
∗) . Ainsi le langage de cet automate est bien L = A
∗aA . On calcule désormais les rési- duels :
ε−1L=L
a−1L=L+A b−1L=L
(aa)−1L=L+A+ε (ab)−1L=L+ε
(aaa)−1L=L+A+ε (aab)−1L=L+ε (aba)−1L=L+A (abb)−1L=L
a b
a b
a b a b
D'où l'automate minimal :
start L L+A
L+ε
L+A+ε a
b
a
a b
a
b b
Il a plus d'états ce qui n'est pas gênant car l'autre n'était pas déterministe.
Commentaire en C
Exercice 4. L'automate asynchrone suivant dénit les commentaires en langage C. L'al- phabet est celui de tous les caractères du clavier. Pour éviter la multiplication des transi- tions sur le schéma, l'étiquette ¬{x
1, . . . , x
n} d'une transition représente n'importe quelle lettre de l'alphabet distincte des lettres x
1, . . . , x
nmentionnées entre accolades (la tran- sition ayant cette étiquette représente donc en fait un ensemble de transitions, une par lettre du clavier autre que x
1, . . . , x
n).
1 start
2
3 4
5
7 8 9
10 6
11 12 13 /
∗
ε ε
ε
ε
ε
∗
¬{∗}
∗
¬{∗, /}
/
∗
∗
ε
ε
ε
1. Déterminiser puis compléter cet automate.
2. Minimiser par l'algorithme de Moore l'automate synchrone déterministe complet obtenu.
3. En déduire une expression rationnelle pour les commentaires en C.
Démonstration. 1. Voici l'automate :
1
start / 2 ∗ 3, 4, 5, 7, 11 ∗ 8,12 13
¬{∗}
∗ /
¬{∗, /}
∗ ∗
Voici son complété renuméroté :
1
start 2 3 4
6
7
5 8
/ ∗ ∗
¬{∗}
∗ /
¬{∗, /}
∗ ∗
¬{∗} ¬{∗}
¬{/}
¬{∗}
A A
2. On fait les itérations successives : Θ
0∗ / ¬{∗, /} Θ
11 I I I I I.1
2 I I I I I.1
3 I I I I I.1
4 I I II I I.2
5 I I I I I.1
6 I I I I I.1
8 I II II I I.1
7 II II
Θ
1∗ / ¬{∗, /} Θ
21 I I I I I.1
2 I I I I I.1
3 I II I I I.2
5 I II I I I.2
6 I II I I I.2
8 I I I I I.1
4 II II
7 III III
Θ
2∗ / ¬{∗, /} Θ
31 I I I I I.1
2 I II I I I.2
8 I I I I I.1
3 II III II II II 5 II III II II II 6 II III II II II
4 III III
7 IV IV
Θ
3∗ / ¬{∗, /} Θ
41 I I III I I.1
8 I I I I I.2
3 II IV II II II
5 II IV II II II
6 II IV II II II
2 III III
4 IV IV
7 V V
Puis on stabilise. On a donc l'automate suivant :
I
start II III IV V
VI
/ ∗
∗
¬{∗} ∗
/
¬{∗, /}
¬{/}
¬{∗}
A A