D.E ZEGOUR Ecole Supérieure d’Informatique Modèles de calcul
Modèles de calcul Introduction L’étude de la calculabilité (décidabilité) nécessite l’utilisation d’un modèle théorique indépendant du langage et de l’ordinateur Machine de Turing : le module le plus utilisé Machine conçue en 1936 ( Mathématicien anglais Alan Turing ) (Turing est aussi célèbre pour avoir décodé les messages des nazis pendant la seconde guerre mondiale, et pour avoir inspiré le logo de la firme Apple). Ce modèle de machine de Turing caractérise bien ce qui est calculable. Il existe des modèles plus théoriques, comme le lambda calcul , les fonctions récursives, etc.
Modèles de calcul : Machine de Turing Définition Une machine de Turing se compose - une bande infinie de cases défilant devant une tête de lecture/écriture. (Mémoire) - d'une partie de contrôle (nombre fini d'états possibles et de transitions) (Microprocesseur) a b A B # q Contrairement à un ordinateur, - la mémoire est infinie. - l’accès est séquentiel ( pour un ordinateur la Ram est à accès directe)
Modèles de calcul : Machine de Turing Fonctionnement La machine est contrôlée par un nombre fini d'états { q0, …, qn }. Au départ, la machine se trouve dans l'état q0 qu'on appelle état initial. Calcul = une suite d'étapes de calcul . Une étape = (1) changer l'état de contrôle, (2) écrire un symbole sous la tête de lecture et (3) déplacer la tête de lecture. Les étapes sont décrites par les transitions de la machine.
Modèles de calcul : Machine de Turing Définition formelle Sept-uplet (Q, Σ, Γ, E, q0, F, #) où Q : ensemble fini d’états de contrôle { q0, …, qn }. Σ : alphabet d'entrée sans le symbole blanc #. Γ : alphabet de bande. Il inclut l'alphabet d'entrée Σ et le symbole blanc #. E : ensemble fini de transitions de la forme (p, a, q, b, x) où p et q sont des états, a et b sont des symboles de bande et x est un élément de {L, R}. Une transition (p, a, q, b, x) est aussi notée p, a → q, b, x. Q0 : état initial. F : ensemble des états finaux (états d'acceptation) # est le symbole blanc qui, au départ, remplit toutes les positions de la bande autres que celles contenant la donnée initiale.
Modèles de calcul : Machine de Turing Déterminisme et non déterminisme Une machine de Turing est déterministe si pour tout état p et tout symbole a, il existe au plus une transition de la forme p, a → q, b, x. Une machine de Turing est non déterministe, si à chaque paire (p, a) est associé un ensemble des triplets (q, b, x) tels que p, a → q, b, x soit une transition. x = L ou R, x = ← ou →
Modèles de calcul : Machine de Turing Exemple de machine de Turing ({0}, {a, b}, {a, b, #}, E, 0, {0}, #). E peut être décrit par E a b # 0, #, R 0, #, L Matrice Diagramme
Modèles de calcul : Machine de Turing Configurations a b A B # q u v À l’état q, une configuration = uqv u est le contenu de la bande (strictement) à gauche de la tête de lecture v est le contenu de la tête à droite de la tête de lecture. Le symbole sous la tête de lecture est donc le premier symbole de v configuration initiale : q0w ( q0 : état initial et w : donnée initiale)
Modèles de calcul : Machine de Turing Calculs Un calcul d'une machine de Turing se décompose en étapes. Une étape d'un calcul : passage d’une configuration à une autre en appliquant une des transitions de l'ensemble E. Un calcul : une suite C0, …, Cn de configurations telles que C0 ⇒ C1 ⇒ C2 ⇒ … ⇒ Cn-1 ⇒ Cn. C0 ⇒* Cn ( Fermeture réflexive et transitive de la relation ⇒).
Modèles de calcul : Machine de Turing Calculs possibles Lorsqu'on considère une suite de configurations C0 ⇒ C1 ⇒ C2 ⇒ C3 ⇒ … qui constituent le début d'un calcul, trois situations peuvent survenir. Le calcul atteint une configuration acceptante. Il est alors acceptant. Le calcul atteint une configuration bloquante. Il n'est alors pas acceptant. Le calcul se poursuit de manière infinie sans jamais atteindre ni une configuration acceptante ni une configuration bloquante. Il n'est alors pas acceptant.
Modèles de calcul : Machine de Turing ({0}, {a, b}, {a, b, #}, E, 0, {0}, #). Soit w = aba la donnée fournie à la machine Configuration Commentaire C0 = 0aba Configuration initiale C1 = #0ba Transition 0, a → 0, #, R C2 = ##0a Transition 0, b → 0, #, R C3 = ###0 C4 = ##0 Transition 0, # → 0, #, L C5 = #0 C6 = 0 E a b # 0, #, R 0, #, L
Modèles de calcul : Machine de Turing MT = ({0, 1, 2}, {a, b}, {a, b, #}, E, 0, {2}, #) avec les transitions données à la figure ci-dessous. Le mot d'entrée w = abba conduit aux différents calculs suivants. 0abba ⇒ a1bba ⇒ ab1ba ⇒ abb1a ⇒ abba0 ( bloquant) 0abba ⇒ a1bba ⇒ 1abba ⇒ a0bba ⇒ ab0ba ⇒ abb0a ⇒ abba1 ⇒ abba#2 (acceptant ) 0abba ⇒ a1bba ⇒ ab1ba ⇒ a1bba ⇒ ab1ba … ( ne termine pas et n'est donc pas acceptant. Le mot abba est donc accepté par la machine puisqu'au moins un de ces calculs est acceptant. Par contre le mot aa n'est pas accepté car le seul calcul possible est 0aa ⇒ a1a ⇒ aa0 qui n'est pas acceptant.
Modèles de calcul : Machine de Turing Une machine de Turing pour le langage X = {anbn | n ≥ 0} MT : Q = {0, 1, 2, 3, 4}, Σ = {a, b}, Γ = {a, b, A, B, #}, q0 = 0, 1 état final : 4 Cette machine est déterministe. Diagramme des transitions
Modèles de calcul : Machine de Turing Machines à plusieurs bandes Les machines à plusieurs bandes : extension des machines de Turing Elles disposent de plusieurs bandes sur lesquelles elles lisent et écrivent. Chaque transition a donc la forme p, a1,…,ak → q,b1,…,bk, x1,…,xk, où les x1,…,xk sont des éléments de {L, R, S}. p : état avant la transition q : état après la transition. Les symboles a1,…,ak sont les symboles lus sur chacune des k bandes et les symboles b1,…,bk sont les symboles écrits sur chacune des k bandes. x1,…,xk indiquent les mouvements des k têtes de lecture. ( L (Left) déplacement vers la gauche, (Right) déplacement vers la droite et S (Stay) aucun déplacement.
Modèles de calcul : Machine de Turing Machines à plusieurs bandes Toute machine à plusieurs bandes peut être simulée par une machine à une seule bande. L'idée de la simulation consiste à regrouper toutes les bandes en une seule bande. Une transition de la machine à plusieurs bandes = Parcours entier de la machine à une bande. Proposition. Soit t une fonction de N dans R+ telle que t(n) ≥ n pour tout n ≥ 0. Une machine à plusieurs bandes qui fonctionne en temps t(n) est équivalente à une machine à une seule bande qui fonctionne en temps t2(n).
Modèles de calcul : Machine de Turing Machines non déterministes Toute machine non déterministe peut être simulée par une machine déterministe. La simulation consiste alors à essayer successivement tous les calculs de la machine non déterministe. Si la machine non déterministe fonctionne en temps t(n), le nombre de calculs possibles pour une entrée de taille n est borné par kt(n) où k est le nombre maximal de transitions qui peuvent être effectuées à partir d'une configuration.
Modèles de calcul : Machine de Turing Machines non déterministes (suite) L'entier k est le cardinal maximal des ensembles δ(p, a) = { (q, b, x) | p, a → q, b, x ∈ E } pour tout p et tout a. Le temps de simulation d'un calcul est proportionnel à la longueur de ce calcul. Le temps nécessaire pour simuler tous les calculs est donc de l'ordre de t(n)kt(n). Comme on a la relation t(n)kt(n) = 2O(t(n)) si t(n) ≥ n, on obtient le résultat suivant. Proposition. Soit t une fonction de N dans R+ telle que t(n) ≥ n pour tout n ≥ 0. Une machine non déterministe qui fonctionne en temps t(n) est équivalente à une machine déterministe qui fonctionne en temps 2O(t(n)).
Modèles de calcul : Machine de Turing Codage des structures de données sur une machine de Turing Une machine de Turing travaille uniquement sur des mots. Cependant, la plupart des problèmes naturels ne s’expriment pas sur des mots, mais plutôt sur des graphes, des formules ou des entiers. Il fait donc transformer ces différentes données en des données utilisables par une machine de Turing, donc par des mots. Le paramètre important est la taille du codage
Modèles de calcul : Machine de Turing Machine de Turing universelle Une machine de Turing universelle UT est telle que pour toute machine de Turing T et toute donnée x, UT(d(T), x ) = T(x) où d(t) est le mot décrivant T Un ordinateur = machine de Turing universelle il a en entrée une machine de Turing particulière (programme à exécuter ) et des données. Il simule cette machine de Turing (Voir codage d'une machine de Turing)
Modèles de calcul : Machine de Turing Machine de Turing universelle ( // Début du codage de M 101, // Nombre d'états : 5 en binaire 10, // Nombre de symboles de Σ : 2 en binaire 101, // Nombre de symboles de Γ : 5 en binaire ( // Début du codage des transitions (0,1,1,11,1), // Transition (0,a) --> (1,A,R) (0,100,11,100,1), // Transition (0,B) --> (3,B,R) (1,1,1,1,1), // Transition (1,a) --> (1,a,R) (1,10,10,100,0), // Transition (1,b) --> (2,B,L) (1,100,1,100,1), // Transition (1,B) --> (1,B,R) (10,1,10,1,0), // Transition (2,a) --> (2,a,L) (10,11,0,11,1), // Transition (2,A) --> (0,A,R) (10,100,10,100,0), // Transition (2,B) --> (2,B,L) (11,100,11,100,1), // Transition (3,B) --> (3,B,R) (11,0,100,0,1), // Transition (3,#) --> (4,#,R) ), // Fin du codage des transitions 0, // Codage de l'état initial ( // Début du codage de l'ensemble F des états finaux 100 // Le seul état final est l'état 4 ) // Fin du codage de l'ensemble F des états finaux ) // Fin du codage de M Exemple TM qui accepte le langage X = { anbn | n ≥ 0}
Modèles de calcul : Machine RAM Description Une machine RAM est constituée d'un programme : une suite finie d'instructions. d'un registre spécial (compteur ordinal) qui contient le numéro de la prochaine instruction à exécuter d'une suite infinie de registres numérotés à partir de zéro. Le registre de numéro n est noté Rn. un registre spécial appelé accumulateur et noté A. Une bande d'entrée sur laquelle la machine lit ses données. Une bande de sortie sur laquelle la machine écrit ses résultats.
Modèles de calcul : Machine RAM Différence avec les microprocesseurs Le nombre de registres d'une RAM est illimité alors que la mémoire à laquelle accède un microprocesseur est limitée. De même, chaque registre de la RAM peut contenir un entier arbitrairement grand alors qu'un véritable régistre manipule des mots mémoire ayant un nombre fixé de bits.
Modèles de calcul : Machine RAM Registres Les registres et l'accumulateur contiennent les données manipulées par la machine. On suppose que chacun des registres ainsi que l'accumulateur peut contenir un entier positif ou nul. Les entiers contenus dans les registres peuvent être arbitrairement grands. Au lancement du programme tous les registres sont initialisés à la valeur zéro. Instructions Les instructions des machines RAM se divisent en quatre catégories qui sont les suivantes: Manipulations de registres Opérations arithmétiques Ruptures de séquences Instructions d'entrées/sorties
Modèles de calcul : Machine RAM Manipulation de registres load #<n> : Il s'agit de l'adressage absolu. La valeur de l'entier donné en paramètre est chargé dans l'accumulateur. load <n> : Il s'agit de l'adressage direct. Le contenu du registre Rn est chargé dans l'accumulateur. load (<n>) : Il s'agit de l'adressage indirect. Le contenu du registre Rp, où p est le contenu du registre Rn, est chargé dans l'accumulateur. Le registre Rn est utilisé comme un pointeur qui donne le numéro, c'est-à-dire l'adresse du registre à charger. store <n> : Il s'agit de l'adressage direct. Le contenu de l'accumulateur est chargé dans le registre Rn store (<n>) : Il s'agit de l'adressage indirect. Le contenu de l'accumulateur est chargé dans le registre Rp où p est le contenu du registre Rn.
Modèles de calcul : Machine RAM Opérations arithmétiques Seules 2 opérations arithmétiques : incr et decr. Ruptures de séquences Trois instructions de rupture de séquences jump, jz et stop. - jump adr (saut inconditionnel ) - jz adr (saut conditionne)l branchement à Adr si le contenu de l’accumulateur est égal à 0 L'instruction stop provoque l'arrêt de la machine. Instructions d'entrées/sorties read provoque la lecture d'un entier sur la bande d'entrée et le résultat est placé dans l'accumulateur. write provoque l'écriture du contenu de l'accumulateur sur la bande de sortie.
Modèles de calcul : Machine RAM 0 read 1 store 0 2 read 3 store 1 4 load 0 5 jz 12 6 decr 7 store 0 8 load 1 9 incr 10 store 1 11 jump 4 12 load 1 13 write 14 stop Exemples de programmes (le programme suivant lit deux entiers, calcule leur somme et l'écrit sur la bande de sortie.
Modèles de calcul : Machine RAM Les machines RAM sont équivalentes aux machines de Turing. (Ceci signifie que toute fonction calculée par une machine RAM peut aussi l'être par une machine de Turing et qu'inversement toute fonction calculée par une machine de Turing peut aussi l'être par une machine RAM) Réduction d'une machine de Turing vers une machine RAM Réduction d'une machine RAM vers une machine de Turing
Modèles de calcul : Circuit logique Description Un circuit booléen est un graphe orienté sans boucle. Chaque sommet est de degré entrant 0,1 ou 2. Les sommets de degré entrant 0 sont étiquetés soit par 0, soit par 1 soit par une variable (dans ce dernier cas on dit que c’est une entrée), ou par la constante 0 ou par la constante 1. Les sommets de degré entrant 1 sont étiquetés par ⌐. Les sommets de degré entrant 2 sont étiquetés par ou . Certains nœuds sont identifiés comme des sorties. Chaque circuit C à n-entrées et m-sorties définit naturellement une fonction booléenne à n-variables, i.e. une fonction f : {0; 1}n {0; 1}m.
Modèles de calcul: Toute fonction intuitivement calculable est calculable via les modèles de calcul : Machine de Turing (1936), Machine RAM Circuit logique Lambda-calcul (Church 1941), Fonctions récursives (Kleene 1936), Système normal de Post (1936)