Lemme de Pompage
Lemme de Pompage
Lemme de Pompage
Corrigé – Laboratoire 2
Exercice 1
a) (b*a* + a)*b : •
* b
• a
* *
b a
b) a + b + cd* = (a + b) + cd* : +
+ •
a b c *
d
Exercice 2
Le langage accepte les nombres décimaux divisibles par 4, c’est-à-dire :
{m | ∀ k ∈ N+, m = 4k}.
Une manière de vérifier si un nombre est multiple de 4 (ou divisible par 4) est
d’en calculer le « modulo 4 ». On trouve alors les cas suivants :
Cas 1 : m = 4k ⇒ %4 = 0
Cas 2 : m = 4k + 1 ⇒ %4 = 1
Cas 3 : m = 4k + 2 ⇒ %4 = 2
Cas 4 : m = 4k + 3 ⇒ %4 = 3
Cas 5 : m = 4k + 4 = 4(k + 1) ⇒ %4 = 0 ≡ Cas 1
L’état initial est l’état 0 car nous considérons que la valeur initiale est 0 et 0
% 4 = 0. Dans cet automate, on considère que « se trouver dans un état »
correspond au fait que si l’on calcul le % 4 du nombre lu jusqu’à présent, le
résultat doit correspondre au nom de l’état courant. Si par exemple
l’automate veut valider le nombre ‘37’, alors 37 % 4 = 1, ce qui veut dire
qu’après avoir lu les symboles ‘3’ puis ‘7’, l’automate doit se trouver dans
l’état 1.
Cette approche pour construire l'automate repose cependant sur le fait que
l'affirmation suivante est vraie :
Il faut donc prouver que cette affirmation est vraie avant de pouvoir utiliser
cette méthode pour construire l'automate. Pour ce faire, nous allons utiliser
les 2 propriétés suivantes :
Aussi, définissons l'expression 'Aa' tel que 'A' représente tous les chiffres d'un
nombre, sauf le dernier qui lui est représenté par 'a'. Par exemple, Aa = 2517
implique que A = 251 et a = 7. Ainsi, on peut représenter les transitions de
notre automate par: t(A % n, a) = Aa % n. Autrement dit, si jusqu'à présent
on a lu le nombre A, on doit se trouver dans l'état A % n. À partir de cet état,
si on lit en entrée le symbole a, on doit se retrouver dans l'état Aa % n.
A * 10 + a = Aa
Notez que ceci est vrai lorsque l'on travaille en base 10 (nombre décimaux).
Si l'on est en binaire par contre, il faut faire * 2, en base 8 on fait * 8, etc... En
généralisant à toutes les bases, on pourrait écrire:
A * base + a = Aa
Aa % n = (A * base + a) % n
= ((A * base) % n + a % n) % n
= ((A % n * (base % n)) % n + a % n) % n
= ((A % n * (base % n)) + a) % n
Parmis toutes ces variables, voyons ce que nous connaissons:
• A % n → état de départ de la transition
• base → la base utilisée, par exemple la base 10 pour les nombres
décimaux
• n → le modulo utilisé
• a → le symbole d'entrée de la transition
Exercice 3
a) L11 = { akbak, ∀ k ∈ {1, 2, 3, …} }
v= Contradiction
a |j≥1
j
Si i = 0, le nombre de ‘a’ sera inférieur ou égal au nombre
(contient une de ‘b’. Ce mot ne fait pas partie du langage.
série de ‘a’
parmis les n
premiers)
Contient le ‘a’ à Décomposition invalide :
la position n+1 |uv| > n car v contient au moins un symbole à partir de la
ou contient des position n+1.
‘b’
v= Contradiction
e
3 condition :
Si i = 0, le nombre de ‘a’ diminue, car |v| ≥ 1.
v= Contradiction
a |j≥1
j e
3 condition :
(contient une Si i ≠ 1, le nombre de ‘a’ ≠ n alors que le nombre de ‘b’ =
série 2n+1.
de ‘a’)
Décomposition invalide :
Contient un ou |uv| > n car le premier ‘b’ est à la position n+1.
plusieurs ‘b’
v= Contradiction
e
3 condition :
aj | j ≥ 1
ère Si i = 0, le nombre de ‘a’ diminue, donc p < n ce qui
(1 série de
implique que p + q < r + 2. Le mot résultant ne fait donc
‘a’)
pas partie du langage.
Décomposition invalide :
Contient un ‘b’ |uv| > n car le premier ‘b’ est à la position n+1.
et/ou un ‘a’
dans la 2e série.
Exercice 4
La première chose à faire, est de s’assurer que les états sont nommés de 1 à
n, où n est le nombre d’états (ici de 1 à 3). C’est déjà le cas pour l’automate
qui est fourni, on peut continuer :
Note : Cette table a été construite grâce aux expressions qui se trouvent
plus bas.
k=
R(i, j, k) \ 0 1 2
R(1, 1, k) ε ε ε
R(1, 2, k) a a aa*
R(1, 3, k) b b aa*b + b
R(2, 1, k) ∅ ∅ ∅
R(2, 2, k) a+ε a+ε a*
R(2, 3, k) b b a*b
R(3, 1, k) a a a
R(3, 2, k) b aa + b (aa + b)a*
R(3, 3, k) ε ab + ε (aa + b)a*b + ab + ε
Pour k = 1:
R(1, 1, 1) = R(1, 1, 0)R(1, 1, 0)*R(1, 1, 0) + R(1, 1, 0) = ε
R(1, 2, 1) = R(1, 1, 0)R(1, 1, 0)*R(1, 2, 0) + R(1, 2, 0) = a
R(1, 3, 1) = R(1, 1, 0)R(1, 1, 0)*R(1, 3, 0) + R(1, 3, 0) = b
R(2, 1, 1) = R(2, 1, 0)R(1, 1, 0)*R(1, 1, 0) + R(2, 1, 0) = ∅
R(2, 2, 1) = R(2, 1, 0)R(1, 1, 0)*R(1, 2, 0) + R(2, 2, 0) = a+ε
R(2, 3, 1) = R(2, 1, 0)R(1, 1, 0)*R(1, 3, 0) + R(2, 3, 0) = b
R(3, 1, 1) = R(3, 1, 0)R(1, 1, 0)*R(1, 1, 0) + R(3, 1, 0) = a
R(3, 2, 1) = R(3, 1, 0)R(1, 1, 0)*R(1, 2, 0) + R(3, 2, 0) = aa + b
R(3, 3, 1) = R(3, 1, 0)R(1, 1, 0)*R(1, 3, 0) + R(3, 3, 0) = ab + ε
Pour k = 2 :
R(1, 1, 2) = R(1, 2, 1)R(2, 2, 1)*R(2, 1, 1) + R(1, 1, 1) = a(a+ε)* + ε = ε
R(1, 2, 2) = R(1, 2, 1)R(2, 2, 1)*R(2, 2, 1) + R(1, 2, 1) = a(a+ε)*(a+ε) + a = aa*
R(1, 3, 2) = R(1, 2, 1)R(2, 2, 1)*R(2, 3, 1) + R(1, 3, 1) = a(a+ε)*b + b = aa*b + b
= (aa+b)a*b + ab + ε