En 1936, Alan Turing (1912-1954), dans [Turing36], présente sa machine (appelée depuis machine de Turing). Elle est composée :
Structure d'une machine de Turing
Le rôle du programme consiste à déterminer, pour un état qi de la machine et pour un symbole aj situé devant la tête de lecture-écriture, le nouvel état dans lequel passe la machine ainsi que l'opération effectuée sur le ruban. On représente un programme par un ensemble fini de quintuplets, appelé fonction de transition. Celle-ci définit les règles d'évolution, appelées règles de transition, de la forme (qi,aj, qk, al, dm) ou μ(qi,aj) = (qk, al, dm) où :
Parmi les états de la machine, il en existe un particulier : l'état initial (qI). C'est le premier état pris par la machine. Il existe aussi un ensemble d'états appelés états finaux.
Si la machine de Turing est telle qu'il n'existe pas de règle μ(qi,aj)=(x,y,z) pour l'état qi et le symbole aj de la configuration courante alors le ruban est dit terminal. Si l'état courant est un état final alors l'exécution est réussie et le programme s'est déroulé normalement. Le cas contraire est une situation d'échec.
La suite de symboles S du ruban terminal est une chaîne dite terminale (la disposition de départ étant appelée chaîne initiale). Dans cette configuration S(q), la machine de Turing s'arrête. Par ailleurs, le symbole ε permet aussi souvent d'arrêter la machine, c'est-à-dire qu'il n'existe pas de transition de la forme μ(q,ε).
La suite S1(q1), ..., Sn(qm) d'états (configurations) successifs du ruban et du programme lors de l'exécution d'une machine de Turing Tμ, est appelée calcul. Si S1 est la chaîne initiale et Sn une chaîne terminale alors Sn est aussi appelée résultat du calcul de S1 par la machine Tμ.
Les différents types d'automates sont des cas particuliers de la machine de Turing. Parmi ceux-ci, on trouve les automates : linéairement bornés, à pile, finis...
Les automates finis sont des machines de Turing très spécifiques. Leurs caractéristiques, leur manipulation et leurs applications sont présentés en détail dans la suite du chapitre.
La machine de Turing manipule des symboles. Ceci n'est pas restrictif car tous les problèmes calculables (pour lesquels il existe un algorithme permettant de les résoudre dans un temps fini) peuvent se ramener à la manipulation de symboles et donc peuvent être programmés sur une machine de Turing.
Dans le cadre de la théorie des langages, la correspondance est évidente. Les machines de Turing sont alors appelées accepteurs ou reconnaisseurs [Aho et al. 91] [Ginzburg 68].
Soit A un alphabet et A* l'ensemble des mots que l'on peut construire avec les symboles de A. Une chaîne (mot) awb (a et b ∈ A et w ∈ A*), écrite sur le ruban et entourée de caractères ε, est acceptée si la machine part de la position gauche (i.e. dans la configuration initiale (I,a)) et s'arrête avec la tête de lecture placée après le caractère le plus à droite différent de ε dans un état final (i.e. dans la configuration finale (qf,b) avec qf ∈ F). Si elle s'arrête dans un état n'étant pas final alors la chaîne est refusée.
Le langage défini par un accepteur
est l'ensemble des chaînes (mots) qu'il accepte. Il existe donc une correspondance
entre les grammaires (et les langages) et les machines de Turing (cette correspondance
sera étudiée en détail plus loin). Une machine de Turing
(ou un automate) est donc alors vue comme l'implémentation d'une fonction
f telle que :
f : A* → {Accepté, Refusé}.
vendredi, 19/09/03 21:42