Automates et machine de Turing
Automates finis
Définition
Un automate est un quintuplet \((K,T,M,I,F)\) avec :
\(K\) : ensemble fini d'états
\(T\) : vocabulaire terminal (alphabet)
\(M\) : Relation \(K \times T \times K\)
\(I \subset K\) : états initiaux
\(F \subset K\) : états finaux
\(\rightarrow\) Sert à construire des mots à partir d'un alphabet de base
1. Indeterministes
Définition
Un automate est indéterministe s’il existe au moins un état qui a plusieurs transitions sortantes avec la même étiquette
2. Déterministes
Définition
Un automate est déterministe si pour chaque état et chaque symbole de l’alphabet, il y a au plus une transition sortante avec ce symbole.
3. Complet
Définition
Un automate est complet s'il est déterministe et si pour chaque état et chaque symbole de l’alphabet, il y a exactement une transition sortante.
Exemple 1
- \(K = \{s,v,u\}\)
- \(T = \{a,b\}\)
- \(M = \{(s,a,s),(s,a,v),(v,b,v),(v,b,u)\}\)
- \(I = S\)
- \(F = S\)
\(s,a,s,a,s,a,s,a,v,b,v,b,v,b,u\)
Ce qui nous donne : \(aaaabbb\)
L'automate est indéterministe car l'état S a une transition sortante avec deux a. Il n'est pas complet.
Exemple 2
- \(K = \{q_0,q_1,q_2,q_3\}\)
- \(T = \{0,1\}\)
- \(I =\{q_0\}\)
- \(F = \{q_3\}\)
\(M\) :
- \(q_0 \rightarrow 0 \rightarrow q_0\)
- \(q_0 \rightarrow 1 \rightarrow q_1\)
- \(q_1 \rightarrow 0 \rightarrow q_2\)
- \(q_1 \rightarrow 1 \rightarrow q_0\)
- \(q_2 \rightarrow 0 \rightarrow q_3\)
- \(q_2 \rightarrow 1 \rightarrow q_1\)
- \(q_3 \rightarrow 0 \rightarrow q_3\)
- \(q_3 \rightarrow 1 \rightarrow q_3\)
Exemple 3
- \(K = \{q_0,q_1,q_2,q_3\}\)
- \(T = \{0,1\}\)
- \(I =\{q_0\}\)
- \(F = \{q_3\}\)
\(M_1\) :
- \(q_0 \rightarrow 0 \rightarrow q_0\)
- \(q_0 \rightarrow 1 \rightarrow q_3\)
- \(q_1 \rightarrow 0 \rightarrow q_2\)
- \(q_1 \rightarrow 1 \rightarrow q_1\)
- \(q_2 \rightarrow 0 \rightarrow q_0\)
- \(q_2 \rightarrow 1 \rightarrow q_3\)
- \(q_3 \rightarrow 0 \rightarrow X\)
- \(q_3 \rightarrow 1 \rightarrow X\)
Exercices
Construire :
-
Automate qui reconnait tous les mots formés d'autant de a que de b.
-
Ex : aababb
baab
-
-
Automate qui reconnait tous les mots dont le préfixe est ab
- \(q_0 \rightarrow a \rightarrow q_1\)
- \(q_0 \rightarrow b \rightarrow q_2\)
- \(q_1 \rightarrow a \rightarrow q_2\)
- \(q_1 \rightarrow b \rightarrow q_3\)
-
\(q_2 \rightarrow a \rightarrow q_2\)
-
\(q_2 \rightarrow b \rightarrow q_2\)
- \(q_3 \rightarrow a \rightarrow q_3\)
- \(q_3 \rightarrow b \rightarrow q_3\)
-
Automate qui reconnait tous les mots dont le préfixe est ba
-
Automate qui reconnait tous les mots dont le suffixe est ab
- \(q_0 \rightarrow a \rightarrow q_7\)
- \(q_0 \rightarrow a \rightarrow q_0\)
-
\(q_0 \rightarrow b \rightarrow q_0\)
-
\(q_7 \rightarrow b \rightarrow q_8\)
- \(q_7 \rightarrow a \rightarrow q_0\)
Expression régulière : \((a|b)*ab\)
-
Automate qui reconnait tous les mots dont le suffixe est ba
Propriété
\(AFD \iff AFI\)
Vrai, il y a toujours un moyen d'écrire un automate déterministe sous forme d'automate indéterminisme, ou inversement
Machine de Turing
Définition
Une machine de Turing est un automate déterministe. Il est composé d'une une mémoire schématisé par un ruban :
\(-\infty\) | \(+\infty\) | |||||
---|---|---|---|---|---|---|
Dans chaque case de la mémoire, on peut lire, écrire, se déplacer à droite ou à gauche, ou changer d'état.
\(0/1\)
\(Lire / Ecrire\)
\(D/G\) (droite / gauche)
\(L/R\) (left / right)
\(<Etat, caracter> \rightarrow <Etat',caracter', D/G>\)
Propriété
\(\forall p, un \; programme, \exists m, machine \; de \; Turing\)
et \(p\) et \(m\) font la même chose
Exercices
Exercice 1
- Faire tourner la machine de Turing suivante.
\(Etats = \{e_1,e_2,e_3,e_4,e_5\}\)
\(Alphabet = \{0,1\}\)
\(<e_1,0> \rightarrow arret\)
\(<e_1,1> \rightarrow <e_2,0,D>\)
\(<e_2,0> \rightarrow <e_3,0,D>\)
\(<e_2,1> \rightarrow <e_2,1,D>\)
\(<e_3,0> \rightarrow <e_4,1,G>\)
\(<e_3,1> \rightarrow <e_3,1,D>\)
\(<e_4,0> \rightarrow <e_5,0,G>\)
\(<e_4,1> \rightarrow <e_4,1,G>\)
\(<e_5,0> \rightarrow <e_1,1,D>\)
\(<e_5,1> \rightarrow <e_5,1,G>\)
cases | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
contenus | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
Correction
cases | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|---|
contenus | 0 | 0 | 0 |
Etapes
\(<e_1, case2>\)
\(<e_2,case3>\)
\(<e_2, case4>\)
\(<e_3, case5>\)
\(<e_4, case4>\)
\(<e_5, case3>\)
\(<e_5, case2>\)
\(<e_1, case3>\)
\(<e_2, case4>\)
\(<e_3, case5>\)
\(<e_3, case6>\)
\(<e_4, case5>\)
\(<e_4, case4>\)
\(<e_5, case3>\)
\(<e_1, case4>\)
Exercice 2
Soit l'alphabet : \(\{a,b,vide\}\)
- Ecrire une machine de Turing qui reconnait les mots ayant un nombre pair de \(a\).
- Donner l'automate
-
Donner l'expression régulière
Correction (expression régulière)
\((aa|b)*\) non
\(b*(b*ab*ab*)*\) oui
Exercice 3
- Faire tourner la machine de Turing suivante.
\((e_0,a) \rightarrow (e_1, a, R)\)
\((e_0,b) \rightarrow (e_2, c, R)\)
\((e_0,c) \rightarrow (e_0, c, R)\)
\((e_1, a) \rightarrow (e_1, a, R)\)
\((e_1, b) \rightarrow (e_2, c, R)\)
\((e_1, c) \rightarrow (e_0, c, R)\)
\((e_2, a) \rightarrow (e_2, b, L)\)
\((e_2, b) \rightarrow (e_2, c, R)\)
\((e_2, c) \rightarrow Stop\)
contenus | c | c | a | c | b | a | c |
---|---|---|---|---|---|---|---|
Correction
contenus | c | c | a | c | b | a | c |
---|---|---|---|---|---|---|---|
résultats | c | c | a | c | c | b | c |
Etats : \(e_0\) \(e_0\) \(e_1\) \(e_0\) \(e_2\) \(e_2\) \(stop\)
2.Ecrire une machine de Turing qui s'arrête après avoir écrit 0 s'il y a au moins un b dans un mot. Un mot est encadré par "".
\(Alphabet = \{a,b,c,g,t,o,"\}\)
Exemple : "gabtaca0"
Correction
\((e_0, ") \rightarrow (e_1, ", D)\)
\((e_0, x) \rightarrow (e_0, x, D)\)
\((e_1, ") \rightarrow (e_1, ", STOP)\)
\((e_1,b) \rightarrow (e_2, b, D)\)
\((e_1, x) \rightarrow (e_1, b, D)\)
\((e_2, ") \rightarrow (e_3, 0, D)\)
\((e_2,x) \rightarrow (e_2, x, D)\)
\((e_3, x) \rightarrow (e_3, ", STOP)\)