0% ont trouvé ce document utile (0 vote)
157 vues9 pages

td2 - Machines - Corrige

Le document présente un TD sur les machines de Turing, abordant des exercices de manipulation de rubans, de reconnaissance de langages et de construction de machines. Il inclut des questions sur les déplacements, les remplacements, les copies et les effacements, ainsi que des langages réguliers et hors-contextes. Les solutions sont fournies sous forme de transitions de machines de Turing pour chaque exercice.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
157 vues9 pages

td2 - Machines - Corrige

Le document présente un TD sur les machines de Turing, abordant des exercices de manipulation de rubans, de reconnaissance de langages et de construction de machines. Il inclut des questions sur les déplacements, les remplacements, les copies et les effacements, ainsi que des langages réguliers et hors-contextes. Les solutions sont fournies sous forme de transitions de machines de Turing pour chaque exercice.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Calculabilité et Complexité – TD 2 –

TD 2 - Machines de Turing
Dans ce TD, on considère des machines opérant sur un ruban semi-infini (indexé par les entiers naturels).
On note # le symbole case vide, et on suppose que la configuration initiale associée au mot w d’une machine
ayant comme état initial q0 est q0 #w : autrement dit le pointeur est initialement sur la première case du ruban,
qui est initialement laissée vide.

Première partie – Manipulation du ruban

Exercice 1. Déplacements sur le ruban


Question 1. - Avancer jusqu’à un symbole - Soit Σ = {a, b, ℓ} un alphabet d’entrée. Écrire une machine de
Turing Aℓ qui avance la tête de lecture jusqu’à la première occurence du symbole ℓ, puis recule pour se placer
sur la case immédiatement à gauche. Cette machine refuse les mots qui ne contiennent pas le symbole ℓ.
Solution :

a/a, ·
b/b, ·

#/#, · ℓ/ℓ, ¶
i 0 1

Question 2. - Remplacer - Soit Σ = {a, b, c} l’alphabet d’entrée. Écrire une machine Ra,b qui échange les
a et les b du mot d’entrée (en laissant les c inchangés) et qui s’arrète sur la première case du ruban.
Solution :

a/b, · a/a, ¶
b/a, · b/b, ¶
c/c, · c/c, ¶

#/#, · #/#, ¶ #/#, »


i 0 1 2

Exercice 2. Copies et effacements


On fixe pour cet exercice l’alphabet Σ = {a, b}. Les symboles ℓ et w seront utilisés respectivement pour
dénoter un symbole de Σ et un mot de Σ⋆ .
Question 1. - Effacer - Écrire une machine E qui, en partant d’un ruban #ℓw, s’arrète avec le ruban #w.
Solution :

a/a, ¶
a/a, ·
b/b, · a/#, ¶ ?/a, ¶
2a
a/?, ·
#/#, · b/?, · #/#, ¶
i 0 1 2 b/a, ¶ a/b, ¶ 3

2b
b/#, ¶ ?/b, ¶

b/b, ¶

Paul Brunet 1/9


Calculabilité et Complexité – TD 2 –

Question 2. - Effacer jusqu’à un symbole - Écrire une machine Eℓ qui efface toutes les lettres de son entrée
jusqu’au premier ℓ ∈ Σ inclus.

Solution :
On donne la solution suivante dans le cas où ℓ = a.
?/?, ¶ #/#, ·
a/a, ·
b/b, ·
2a 3a
a/a, ¶
b/?, · ?/?, · ?/#, ¶ b/b, ¶
#/#, ¶
a/?, ¶ ?/a, · a/a, ¶
#/#, · b/b, ¶ #/#, ·
i 0 1 3 4 5
a/?, · #/#, ¶
b/?, ¶ ?/b, ·

2b 3b
#/#, ·
a/a, ·
?/?, ¶ b/b, ·

Le cas ℓ = b se traite de la même manière, en échangeant a et b dans les deux transitions sortant de
l’état 0. Ainsi on effacera tous les a jusqu’à croiser le premier b.

Question 3. - Insérer - Écrire trois machines Iℓ , I′ℓ , et I′′ℓ qui prennent en entrée un mot w ∈ Σ⋆ (donc un
ruban #w) et s’arrètent respectivement avec les rubans #ℓw, #wℓ, et #wℓ#.

Solution :
Machine Iℓ
a/a, ·

a/a, ¶
a/?, · #/a, ¶ b/b, ¶
1a

#/#, · ?/ℓ, ¶
i 0 b/a, · a/b, · 1 2

1b
b/?, · #/b, ¶

b/b, ·

Machine I′ℓ
a/a, · a/a, ¶
b/b, · b/b, ¶

#/#, · #/ℓ, ¶ #/#, »


i 0 1 2

Machine I′′ℓ
a/a, ·
b/b, ·

#/#, · #/ℓ, ·
i 0 1

Paul Brunet 2/9


Calculabilité et Complexité – TD 2 –

Question 4. - Copier - Soit Γ un alphabet de travail contenant Σ, et ℓ, m ∈ Γ \ (Σ ∪ {#}) deux symboles


ℓ qui prend en entrée un mot w1 ℓw2 , avec w1 , w2 ∈ Σ , et s’arrète avec le

de travail. Écrire une machine Cm
ruban #w1 ℓw2 mw1 .
Solution :

a/a, · a/a, · a/a, ·


b/b, · b/b, · b/b, ·
a/a, ¶
b/b, ¶
m/m, · ℓ/ℓ, ¶
a/A, · ℓ/ℓ, · #/m, · #/a, ¶ m/m, ¶
i 1a 2a 3a
#/#, ·

0 1
ℓ/ℓ, ¶
m/m, ·
a/a, ¶ b/B, · ℓ/ℓ, · #/m, · #/b, ¶
b/b, ¶ 2 1b 2b 3b

#/#, »
a/a, · a/a, · a/a, ·
b/b, · b/b, · b/b, ·
3
A/a, ·
B/b, ·

Deuxième partie – Reconnaissance de langages

Exercice 3. Langage mystère


Quel est le langage sur l’alphabet Σ = {a, b, c} reconnu par la machine suivante ?

c/z, ¶ b/b, ·
q6 q0 q4 q3
a/a, ¶ z/z, ·
b/b, ¶
y/y, ¶
#/#, » #/#, · z/z, ¶ b/y, ·
#/#, » x/x, ·

y/y, · q5 q1 q2 a/a, ·
z/z, · y/y, · a/x, · y/y, ·

Exercice 4. Langages réguliers


Question 1. - Sous-mot - Écrire une machine de Turing acceptant les mots sur l’alphabet Σ = {a, b} qui
contiennent le sous-mot aab et se terminent par un b (et refusant tous les autres mots).
Solution :

a/a, · a/a, ·
b/b, · b/b, ·

#/#, · a/a, · a/a, · b/b, · #/#, ¶ b/b, ·


i 0 1 2 3 4 5

Paul Brunet 3/9


Calculabilité et Complexité – TD 2 –

Question 2. Écrire une machine de Turing acceptant le langage Ja⋆ ba⋆ bK.
Solution :

a/a, · a/a, ·

#/#, · b/b, · b/b, · #/#, ¶


i 0 1 2 3

Question 3. Écrire une machine de Turing acceptant le langage


 ⋆
w ∈ {a, b, c} w contient abc mais pas bb .

Solution :
Le langage demandé est un langage régulier, on peut donc le reconnaître avec un automate à états finis.
Voici un tel automate :
a a, c
b
c a c
a ab abc
a
c
ε a b b a, c
c
b
b b bb b′
b

On peut ensuite transformer cet automate en machine de Turing, en applicant les modifications suivantes :
— on ajoute un nouvel état initial i et un nouvel état final ok ;
x x/x,·
— chaque transition p −
→ q est remplacée par p −−−→ q ;
#/#,·
— on ajoute une transition i −−−→ ε, et pour chaque état final de l’automate q ∈ F, on ajoute une
#/#,¶
transition q −−−→ ok.
On obtient ainsi la machine suivante :
a/a, ·
a/a, · c/c, ·
b/b, ·
c/c, · a/a, · c/c, · #/#, ¶
a ab abc
c/c, ·
#/#, · a/a, ·
ε a/a, · b/b, · b/b, · a/a, ·
i c/c, · ok
c/c, · b/b, ·
b/b, · b bb b′
b/b, · #/#, ¶

On peut également reconnaître ce langage avec une machine de Turing qui n’est pas la traduction d’un
automate. La machine suivante commence par lire le mot d’entrée de gauche à droite sur l’état 0, en
déclanchant de manière non-déterministe le test du motif abc, passant ainsi par les états 1 et 2, avant
de finir la lecture de l’entrée dans l’état 3. Atteindre l’état 3 est possible pour tous les mots de la forme
uabcv, c’est à dire ceux qui contiennent le motif recherché. Ensuite, la machine relit le mot, cette fois-ci
de droite à gauche, et cherche de manière déterministe à détecter le motif bb. La détection de ce motif
mène à l’état 6, qui se comporte comme un état « puit » : cet état n’est pas final, et aucune transition
ne permet de le quitter. Le mots contenant ce motif sont donc rejetés. À l’inverse, les mots ne contenant
pas se motif seront lus en entier par une exécution visitant les états 4 et 5 un certain nombre de fois, et
se terminant dans l’état final ok.

Paul Brunet 4/9


Calculabilité et Complexité – TD 2 –

#/#, · a/a, · b/b, ¶


i 0 1 6 5
a/a, · #/#, ·
b/b, · a/a, ¶ a/a, ¶
c/c, · c/c, ¶ c/c, ¶
a/a, · b/b, ·
b/b, · b/b, ¶
c/c, · c/c, · #/#, ¶
2 3 4 ok
#/#, ·

Exercice 5. Langages hors-contextes


Question 1. Écrire une machine de Turing acceptant les mots bien parenthèsés sur l’alphabet Σ = {a, (, )},
c’est à dire le langage décrit par la grammaire S → ε | a | SS | (S).

Solution :

a/a, ·
(/(, · a/a, ¶

#/#, · #/#, ¶ #/#, ·


i 0 2 3

)/a, ¶ (/a, ·

1 a/a, ¶

Question 2. Écrire une machine de Turing acceptant le langage {an bn | n ∈ N} .

Solution :

b/b, ·

i a/#, · 1 2 #/#, ¶
#/#, · b/b, ¶
a/a, ¶
0 a/a, · b/b, · 3

#/#, ¶ #/#, · b/#, ¶


5 4

Exercice 6.
 n
On considère le langage L := a2 n∈N .
Question 1. Proposer une machine reconnaissant L.

Solution :

A/A, · A/A, ¶
a/a, ¶ X/A, ¶
#/#, · a/A, ·
i 0 1 2 4
#/#, · A/A, ·
#/#, ¶
A/X, · a/A, ¶

5 3

Paul Brunet 5/9


Calculabilité et Complexité – TD 2 –

Question 2. Montrer que ce langage n’est pas régulier.


Solution :
n+1
On utilise le lemme de l’étoile, avec la fonction φ : n 7→ a2 . Clairement, |φ(n)| = 2n+1 > n. Considérons
n+1
une décomposion a2 = u1 u2 u3 avec u2 6= ε et |u1 u2 | ⩽ n. Je note |u2 | = k. Comme u2 6= ε et
0 n+1
|u2 | ⩽ |u1 u2 | ⩽ n, on a 0 < k ⩽ n. Or u1 (u2 ) u3 = u1 u3 = a2 −k . On remarque que comme k > 0, on
a2 n+1
− k < 2 . De plus, comme k ⩽ n < 2 , on a 2
n+1 n n+1
− k > 2n+1 − 2n = 2n . Donc 2n+1 − k est
0
strictement compris entre deux puissances de 2 successives, et donc u1 (u2 ) u3 ∈ / L.

Exercice 7. Les carrés


Les machines de Turing peuvent reconnaître plus que les langages hors-contexte. C’est le cas par exemple

du langage L := ww w ∈ {a, b} des carrés. On peut montrer, par exemple avec le lemme de la double
étoile, que ce langage n’est pas hors-contexte : il ne peut être défini à l’aide d’une grammaire hors-contexte.

Question 1. Écrire une machine de Turing reconnaissant le langage wXw, où w ∈ {a, b} .
Solution :

a/a, ·
b/b, · X/X, ·
a/a, ¶
b/b, ¶
X/X, · X/X, ¶
Xi a/#, · X1a X2a a/X, ¶
#/#, ·
#/#, ·
X0 X1
#/#, ¶ X1b X2b
X3 X2 X/#, · b/#, · b/X, ¶
X/X, ·

a/a, · X/X, ·
X/#, · b/b, ·

Question 2. Écrire une machine de Turing qui rejette les mots de longueur impaire, et pour les mots de
longueur paire insère le symbole X entre les deux moitiés du mot. Par exemple, le mot abcd est transformé
en abXcd.
Solution :

a/a, ·
b/b, ·
#/#, ¶ a/X, · #/a, ¶
#/#, · X/#, ¶ P1a
Pi P0 P1 P2
P1b
a/a, ¶ b/X, · #/b, ¶
b/b, ¶ a/a, ·
b/b, · A/a, · X/X, ¶
A/a, ¶ a/A, · B/b, ·
#/#, » B/b, ¶ X/X, ¶ b/B, · #/#, · a/a, ¶
P8 P7 P6 P5 P4 P3 b/b, ¶

Paul Brunet 6/9


Calculabilité et Complexité – TD 2 –

Question 3. Combiner les machines des deux questions précédentes pour en produire une reconnaissant L.
Solution :

a/a, ·
b/b, ·
a/X, · #/a, ¶
#/#, ¶ P1a
#/#, · X/#, ¶
Pi P0 P1 P2
b/X, · #/b, ¶
P1b
a/a, · X/X, ¶
b/b, · A/a, ·
a/A, · B/b, ·
X/X, ¶ b/B, · #/#, · a/a, ¶
P6 P5 P4 P3 b/b, ¶
a/a, ·
A/a, ¶ b/b, · X/X, ·
B/b, ¶

a/a, ¶ a/#, · X/X, · a/X, ¶


b/b, ¶ P7 #/#, · X1a X2a
#/#, · a/a, ¶
X/#, · X0 X1 b/b, ¶
X/#, · X/X, ¶
X1b X2b
b/#, · X/X, · b/X, ¶
#/#, ¶
X3 X2
a/a, · X/X, ·
b/b, ·

Question 4. Montrer que ce langage n’est pas rationnel.


Solution :
On utilise le lemme de l’étoile.
Soit un entier n. Le mot w = an ban b est un carré, et appartient donc au langage L.
En revanche pour tout découpage w = u1 u2 u3 tel que |u1 u2 | < n et u2 6= ε, on observe que le u1 u2 ne
contient que des a.
0
Par conséquent, le mot u1 (u2 ) u3 = u1 u3 est de la forme ak ban b, avec k < n. Ce mot n’est donc pas un
carré, et en temps que tel n’appartient pas à L.
Si L était régulier, d’après le lemme de l’étoile il existerait un certain entier N tel que pour tout mot w ∈ L
de longueur supérieure à N, il existe un découpage w = u1 u2 u3 avec |u1 u2 | < n et u2 6= ε, tel que pour
k
tout entier k ∈ N on aie u1 (u2 ) u3 ∈ L. On a montré plus haut une famille de mots arbitrairement longs
pour lesquels un tel découpage est impossible, ce qui prouve que L n’est pas régulier.

Paul Brunet 7/9


Calculabilité et Complexité – TD 2 –

Troisième partie – Arithmétique

Exercice 8. Calculs unaires


On se donne un alphabet {a, b}. On code l’entier n sur cet alphabet par le mot an , c’est à dire le mot
constitué de n fois la lettre a. On pourra également coder une séquence finie d’entiers hn1 , . . . , nm i par le mot
an1 ban2 · · · banm .
Question 1. Écrire une machine qui « calcule zéro », c’est à dire qu’elle prend en entrée le codage d’un entier
et produit en sortie le codage de 0.

Solution :

a/a, · a/#, ¶

#/#, · #/#, ¶ #/#, »


Zi Z0 Z1 Z2

Question 2. Écrire une machine qui incrémente son entrée d’une unité, c’est à dire qu’elle prend en entrée
le codage d’un entier n et produit en sortie le codage de n + 1.

Solution :

a/a, · a/a, ¶

#/#, · #/a, ¶ #/#, »


Ii I0 I1 I2

Question 3. Écrire une machine qui calcule l’addition, c’est à dire qu’elle prend en entrée le codage d’une
paire d’entiers hn, mi et produit en sortie le codage de n + m.

Solution :

a/a, · a/a, · a/a, ¶

#/#, · b/a, · #/#, ¶ a/#, ¶ #/#, »


Ai A0 A1 A2 A3 A4

Exercice 9. Calculs binaires


On se donne l’alphabet {0, 1, |}. On code l’entier n en binaire sur cet alphabet, avec le bit de poids fort à
droite. Par exemple, les 8 premiers entiers sont codés comme suit :

0 7→ 0 2 7→ 01 4 7→ 001 6 7→ 011
1 7→ 1 3 7→ 11 5 7→ 101 7 7→ 111.

On note [n]2 le code de l’entier n. On pourra également coder une séquence finie d’entiers hn1 , . . . , nm i par le
mot [n1 ]2 | [n2 ]2 · · · | [nm ]2 . Par exemple la paire h2, 5i est représentée par 01|101.
Question 1. Écrire une machine qui « calcule zéro », c’est à dire qu’elle prend en entrée le codage d’un entier
et produit en sortie le codage de 0.

Paul Brunet 8/9


Calculabilité et Complexité – TD 2 –

Solution :

0/0, · 1/#, ¶
1/1, · 0/#, ¶

#/#, · #/#, ¶ #/#, · #/0, ¶


Zi Z0 Z1 Z2 Z3

Question 2. Écrire une machine qui incrémente son entrée d’une unité, c’est à dire qu’elle prend en entrée
le codage d’un entier n et produit en sortie le codage de n + 1.
Solution :

0/0, ¶
1/0, · 1/1, ¶

0/1, ¶
#/#, · #/1, ¶ #/#, »
Ii I0 I1 I2

Question 3. Écrire une machine qui calcule l’addition, c’est à dire qu’elle prend en entrée le codage d’une
paire d’entiers hn, mi et produit en sortie le codage de n + m.
Question 4. Écrire une machine qui calcule la multiplication, c’est à dire qu’elle prend en entrée le codage
d’une paire d’entiers hn, mi et produit en sortie le codage de n × m.

Paul Brunet 9/9

Vous aimerez peut-être aussi