CALCULABILITE DECIDABILITE THESE DE CHURCH PRINCIPAUX RESULTATS Plan • La calculabilité effective • Les fonctions processus Patrick Bellot Télécom ParisTech 1 La calculabilité effective • La notion de calculabilité effective est fondamentale en informatique et en mathématiques modernes. • On dit que « quelque chose » est effectivement calculable s’il existe un procédé quelconque mais automatisable permettant de l’obtenir. • C’est une notion intuitive. Exemples • Etant donné un entier n strictement positif, le n-ième nombre premier est effectivement calculable (crible d’Erastosthène). • Soit deux entiers x et y, décider si x est divisible par y est effectivement calculable. • Soit n strictement positif, décider s’il existe une suite de n chiffres 7 consécutifs dans le développement décimal de π n’est pas effectivement calculable. 2 Codage de Gödel • Le codage de Gödel est une technique qui consiste à coder tous les éléments d’un domaine D (dénombrable) par des entiers naturels: σ : D ⎯→ Ν σ-1 : Ν ⎯→ D • La fonction de codage σ et la fonction de décodage σ-1 doivent être effectivement calculables. Exemples de codage • Codage de N2: σ : N x N ⎯→ Ν σ(x,y) = 2x 3y • Codage de Z: σ : Z ⎯→ Ν σ(x) = ⎧2x ⎩-2x-1 si x > 0 si x < 0 3 Exemples de codage • Codage des chaînes de caractères: σ("ABC …") = A3A2A1B3B2B1C3C2C1… Chaque lettre X est codée par X3X2X1 où X3X2X1 est le code ASCII de la lettre en base 10 sur 3 chiffres (0 ≤ codage < 256). Le codage de la chaîne est obtenu en concaténant les codages des lettres. Se ramener aux entiers naturels • En supposant que l’on peut définir un codage de Gödel σ pour un domaine D étudié, on peut se restreindre à étudier les fonctions effectivement calculables sur les entiers naturels. • Une fonction f : Dk ⎯→ D est dite effectivement calculable si la fonction ϕ : Nk ⎯→ N définie par ϕ(x1,…,xk) = σ(f(σ -1(x1),…, σ -1(xk)) est effectivement calculable. 4 Se ramener aux entiers naturels • Une fonction f : Dk ⎯→ D est dite effectivement calculable si la fonction ϕ : Nk ⎯→ N définie par ϕ(x1,…,xk) = σ (f(σ-1(x1),…, σ-1(xk)) est effectivement calculable. • Si ϕ est effectivement calculable, il existe un processus de calcul pour calculer f : f(d1,…,dk) = σ(ϕ(σ-1(d1),…, σ-1(dk)) Les entiers naturels • Une fonction f : Nk ⎯→ N est dite effectivement calculable s’il existe un procédé automatisable permettant de calculer le résultat f(x1,…,xk) pour tous les entiers x1,…,xk. • On choisit de s’intéresser aux fonctions partielles sur les entiers naturels, c’est-à-dire que l’on autorise que la fonction ne soit pas définie pour certains arguments. 5 Les fonctions partielles • Une fonction est dite partielle si elle est indéfinie pour certains de ses arguments. • Exemple. f : N x N ⎯→ Ν définie par f(x,y)= x - y est indéfinie si x < y. • Une fonction partielle f : Nk ⎯→ N est dite effectivement calculable s’il existe un procédé automatisable permettant de calculer le résultat f(x1,…,xk) pour tous les entiers x1,…,xk tels que f(x1,…,xk) est définie. Remarque • La calculabilité effective ne prend pas en compte la complexité des calculs : un calcul qui a une complexité « délirante » est quand même considéré comme un calcul. • La calculabilité effective ne prend pas en compte la réalité : on peut supposer un ordinateur à mémoire infinie ou des calculs plus longs que la durée de vie de l’Univers. 6 La décidabilité • Un prédicat exprime une relation entre des objets. On considère les prédicats sur les entiers naturels. Exemple : R(x,y) signifiant que x est divisible par y. • La fonction caractéristique d’une relation à n paramètres R(x1,…,xn) est la fonction CR définie par: CR(x1,…,xn) = 1 si R(x1,…,xn) 0 sinon La décidabilité • Un prédicat est dit (effectivement) décidable si sa fonction caractéristique est effectivement calculable. • Si un prédicat est décidable, on peut toujours décider si ses arguments le satisfont en calculant sa fonction caractéristique pour ses arguments : la fonction étant partout définie, le processus se termine toujours. Il suffit d’être patient car on a toujours une réponse. • Le processus de décision peut néanmoins ne pas être réaliste : cf. la décomposition en facteurs premiers d’un très grand entier. 7 La semi-décidabilité • Un prédicat R(x1,…,xn) est dit semi-décidable si la fonction SR définie par : SR(x1,…,xn) = 1 si R(x1,…,xn) indéfini sinon est effectivement calculable. • Par extension de langage, la fonction SR sera appelée fonction semi-caractéristique du prédicat R. La semi-décidabilité • Si le prédicat R est satisfait pour des paramètres x1,…,xn, le programme de la fonction SR se terminera et on en saura le résultat. • Si le prédicat R n’est pas satisfait pour des paramètres x1,…,xn, le programme de la fonction SR ne se terminera probablement pas et on ne saura jamais rien. 8 La semi-décidabilité • La semi-décidabilité d’une relation signifie donc qu’on est capable à l’aide d’un processus de calcul de savoir qu’elle est satisfaite lorsqu’elle l’est. • En revanche, lorsque la relation n’est pas satisfaite, il n’existe aucun processus de calcul permettant de conclure à coup sûr. La semi-décidabilté (exemple) • La relation R(n) signifiant « Il existe une suite de n chiffres 7 consécutifs dans le développement décimal de π» est semidécidable. Il suffit de calculer le développement décimal de π jusqu’à l’apparition des n chiffres 7 consécutifs. Si une telle série de chiffres existe, le programme se terminera. Dans le cas contraire, il continuera sans s’arrêter… 9 Divers modèles de calculabilité • • • • • • • • • La machine de Turing, 1936 Les fonctions générales récursives de Gödel, Herbrand & Kleene, 1936 Les fonctions λ-définissables de Church, 1931 Les combinateurs de Curry, 1930 Les automates finis Les URS, Uniformly reflexive structures, de Wagner & Strong, 1970 L’URM, Unlimited Register Machine, Stepherdson & Sturgis, 1963 Les règles de productions de Post & Markov, 1943 Etc. Une première définition de la calculabilité effective Nous allons commencer par examiner les URM qui fournissent une définition plutôt opérationnelle de la calculabilité effective assez proche de ce que l’on connaît avec nos ordinateurs… 10 U.R.M. L’URM (Unlimited Register Machine) est un ordinateur abstrait : • possédant un nombre infini de registres à valeurs entières et positives (illimitées) nommés R1, R2, … • un jeu d’instructions très simples URM :Programmes • Un programme est une liste finie et numérotées d’instructions. • Ces instructions sont exécutées en commençant par la première. • Après l’exécution d’une instruction, on exécute l’instruction suivante sauf en cas d’instruction de saut. • L’exécution est arrêtée lorsqu’il n’y a plus d’instructions suivante. 11 URM : Instructions • Z(n) (instruction zéro) Rn := 0 ; • S(n) (instruction successeur) Rn := Rn + 1 • T(m,n) (instruction de transfert) Rn := Rm • J(m,n,q) (instruction de saut conditionnel) Si Rn=Rm aller à l’instruction numéro q URM : Exemple • Le programme suivant: 1 – J (1,2,6) 2 – S(2) 3 – S(3) 4 – J(1,2,6) 5 – J(1,1,2) 6 – T (3,1) • La configuration initiale suivante: R1 = 9 R2 = 7 R3 = 0 Etc… 12 URM : Exécution 1. 2. 3. 4. 5. 6. J(1,2,6) S(2) S(3) J(1,2,6) J(1,1,2) T(3,1) URM : Exemple R1 = 9 R2 = 7 R3 = 0 Etc… 1. J(1,2,6) R1 = 9 R2 = 7 R3 = 0 Etc… 2. S(2) R1 = 9 R2 = 8 R3 = 0 Etc… 3. S(3) R1 = 9 R2 = 8 R3 = 1 Etc… 4. J(1,2,6) R1 = 9 R2 = 8 R3 = 1 Etc… 5. J(1,1,2) R1 = 9 R2 = 8 R3 = 1 Etc… 2. S(2) R1 = 9 R2 = 9 R3 = 1 Etc… 3. S(3) R1 = 9 R2 = 9 R3 = 2 Etc… 4. J(1,2,6) R1 = 9 R2 = 9 R3 = 2 Etc… 6. T(3,1) R1 = 2 R2 = 9 R3 = 2 Etc… 7. Arrêt R1 = 2 R2 = 9 R3 = 2 Etc… • Que calcule ce programme ? 1. Si R1 ≥ R2 alors R1 := R1 – R2 2. Si R1 < R2 alors le programme ne se termine pas • Autre programme qui ne se termine jamais: 1. J(1,1,1) 13 URM : Terminologie • Une configuration (initiale) notée (a1,…,an) désigne un état initial des registres tel que : – Ri = ai – Ri = 0 si si 1≤i≤n i>n • Soit P un programme URM, si P ne se termine pas pour une configuration initiale (a1,…,an), on le note P (a1,…,an) ↑ • Soit P un programme URM, si P se termine et si b est le contenu du registre R1 lorsque P s’arrête, on le note P (a1,…,an) ↓ b Fonctions URM-Calculables • Une fonction partielle f : Nk ⎯→ N est dite URM-calculable s’il existe un programme URM nommé F telle que pour toute configuration (a1,…,ak) on a : – F(a1,…,ak) ↓ b – F(a1,…,ak) ↑ si si f (a1,…,ak) = b f (a1,…,ak) est inféfini • Exemple : la fonction f : N2 ⎯→ N telle que : f(x,y) = x-y si x ≥ y, indéfini sinon est URM-calculable. 14 Un autre exemple • La fonction f : N ⎯→ N définie par f(n)=n/2 si n est pair, indéfini sinon est URM-calculable : 1. 2. 3. 4. 5. 6. J(1,2,6) S(2) S(2) S(3) J(1,1,1) T(3,1) Ce programme commence avec la configuration (n,0,0) puis boucle en incrémentant R2 de 2 et R3 de 1 jusqu’à ce que R2 soit égal à R1. Si n est pair, la boucle se termine donc dans une configuration (n,2k,k) avec n=2k puis R3=k est recopié dans R1. Si n est impair, le programme ne se termine pas. Calculabilité Effective (Définition temporaire) • Il est clair que les fonctions URM-calculables sont effectivement calculables, on adopte donc la définition temporaire suivante: Une fonction est effectivemenet calculable si et seulement si elle est URM-calculable 15 Standardisation de programmes URM • Un programme URM de n instructions est en forme standard si pour toute instruction de saut J(i,j,k), on a k ≤ n+1. • Pour tout programme P, il existe un programme P’ en forme standard tel que : P(x1,…,xn)↓b si et seulement si P’(x1,…,xn)↓b Il suffit de remplacer tous les sauts après n+2 par des sauts en n+1. • ON NE CONSIDERERA PLUS QUE DES PROGRAMMES EN FORME STANDARD. Séquencer des programmes URM • Soit P et Q des programmes URM avec respectivement p et q instructions, on note (PQ) le séquencement des programmes P et Q obtenu comme suit: – On renumérote les instructions de Q en ajoutant p à chaque numéro d’instruction. – On remplace dans Q chaque instruction J(i,j,k) par J(i,j,k+p) – Les instructions de (PQ) sont celles de P suivies de celles de Q modifiées. 16 Séquencer des programmes URM Programme P 1 : I1 … p : Ip Programme Q 1 : J1 … x : J(m,n,k) … k:… … q : Jq Programme (PQ) 1 : I1 … p : Ip p+1 : J1 … p+x : J(m,n,p+k) … p+k : … … p+q : Jq Appeler un sous-programme URM • Soit P un programme URM, on note ρ(P) le plus grand numéro de registre utilisé dans P. Si n > ρ(P), alors P ne modifie pas Rn. • Soit P un programme calculant une fonction f à n arguments et soit u,v1,…,vn > ρ(P), on note P[v1,…,vn→u] le programme obtenu par le séquencement des quatre programmes suivants : 1. T(Rv1,1) 2. T(Rv2,2) … n. T(Rvn,n) P 1. T(1,u) 1. Z(1) 2. Z(2) … ρ(P). Z(ρ(P) ) 17 Les fonctions partielles récursives Les fonctions partielles récursives fournissent une définition mathématique de la calculabilité effective par opposition aux URM qui en fournissent une définition opérationnelle. Les fonctions partielles récursives sont un ensemble de fonctions sur les entiers naturels. Les fonctions de base Les fonctions de base sont des fonctions partielles récursives « données ». Les autres fonctions partielles récursives sont construites à partir de ces fonctions de base par des opérations que nous verrons plus tard. 18 Les fonctions de base • La fonction « zéro » notée 0 : N → N telle que 0(x)=0 pour tout x est une fonction de base. • Notons que la fonction « zéro » est URMcalculable : 1. Z(1) Les fonctions de base • La fonction « successeur » notée s : N → N telle que s(x) = x+1 pour tout x est une fonction de base. • Notons que la fonction « successeur » est URMcalculable : 1. S(1) 19 Les fonctions de base • Les projections notées Ui,n : Nn → N, pour 1≤i≤n, telles que Ui,n(x1,…,xn)=xi sont des fonctions de base. • Notons que les projections sont URMcalculables : 1. T(i,1) La substitution • La « substitution », normalement appelée composition de fonctions, est un procédé basique permettant de construire une nouvelle fonction à partir de fonctions existantes. • Soient f(y1,…,yk), g1(x1,…,xn),…,gk(x1,…,xn) des fonctions effectivement calculables, la fonction h(x1, …,xn) définie par : h(x1,…,xn) = f(g1(x1,…,xn),…, gk(x1,…,xn)) est aussi effectivement calculable, c’est intuitif ! • h est la composition de f avec g1,…,gn. 20 URM et substitution La substitution (exemples) • La fonction K1 telle que K1(x)=1 est effectivement calculable car c’est la composition de s avec 0. • La fonction f telle que f(x)=x+1 est effectivement calculable puisque c’est S. • La fonction g telle que g(x) = x+2 est effectivement calculable car c’est la composition de f avec f. h(x1,…,xn) = f(g1(x1,…,xn),…, gk(x1,…,xn)) Supposons que f, g1,…, gk soient URM-calculables.Soient F,G1, …,Gk des programmes URM calculant f, g1,…, gk. On pose m = max(n,ρ(f), ρ(g1),…, ρ(gk)) . G1[m+1,…,m+n → m+n+1] T(1,m+1) Le séquencement de T(2,m+2) … T(n,m+n) G2[m+1,…,m+n → m+n+2] et de … Gk[m+1,…,m+n → m+n+k] F[m+n+1,…,m+n+k → 1] permet de calculer h qui est aussi URM-calculable. 21 La récursion • La « récursion », normalement appelée récursivité, est un procédé de contruire de nouvelles fonctions à partir de fonctions existantes. • Soient f(x1,..,xn) et g(x1,..,xn,y,z) des fonctions effectivement calculables, la fonction h(x1,..,xn,y) définie par : h(x1,..,xn,0) = f(x1,..,xn) h(x1,..,xn,y+1) = g(x1,..,xn,y,h(x1,..,xn,y)) est intuitivement calculable. • La récursion est la forme naturelle de la récursivité sur les entiers naturels. La récursion (exemples) • f(x) = x est effectivement calculable • g(x,y,z) = z+1 est effectivement calculable • h(x,y) définie par: - h(x,0) = f(x) - h(x,y+1) = g(x,y,h(x,y)) - h(x,0) = x - h(x,y+1) = h(x,y)+1 est effectivement calculable. h est l’addition 22 La récursion (exemples) • Si n=0 dans les équations de la récursion, elles deviennent : – h(0) = a – h(y+1) = g(y,h(y)) f(x) = x, g(x,y,z) = z+1 +(x,0) = x +(x,y+1) = s(+(x,y)) f(x) = 0, g(x,y,z) = x+z *(x,0) = 0 *(x,y+1) = x + *(x,y) • Avec a=1 et g(y,z) = (y + 1) z, on obtient la fonction factorielle qui est calculable. f(x) = 1, g(x,y,z) = x z ^(x,0) = 1 ^(x,y+1) = x ^(x,y) n=0, f() = 0, g(y,z) = y p(0) = 0 p(y+1) = y f(x) = x, g(x,y,z) = p(z) - (x,0) = x - (x,y+1) = - (x,y) - 1 n=0, f() = 0, g(y,z) = 1 z(0) = 0 z(y+1) = 1 min(x,y) = x – (x – y) max(x,y) = x + (y – x) 23 URM et récursion • Soient f(x1,..,xn) et g(x1,..,xn,y,z) des fonctions URM calculables dont les programmes sont F et G. On note m = max(n+2, ρ(f), ρ(g)). • On utilise les registres ainsi : – 1 à m : registres de travail des programmes – m+1 à m+n : stockage des arguments x1,..,xn – m+n+1 : stockage de y – m+n+2 : stockage d’une valeur k variant de 0 à y – m+n+3 : h(x1,..,xn,k) avec k dans m+n+2 • On va effectuer les calculs h(x1,..,xn,0) puis h(x1,..,xn,1) puis h(x1,..,xn,2) puis … jusqu’à h(x1,..,xn,y). T(1,m+1) // x1 T(2,m+2) // x2 … T(n,m+n) // xn Z(n+1,m+n+1) // y Z(m+n+2) // k=0 (inutile) F[1,..,n → m+n+3] // h(x1,..,xn,0) // Rm+n+1 = y, Rm+n+2 = k, Rm+n+3 = h(x1,..,xn,k) p: J(m+n+1,m+n+2,g) // si y=k, aller en q G[m+1,..,m+n,m+n+2,m+n+3 → m+n+3] // Rm+n+1 = y, Rm+n+2 = k, Rm+n+3 = g(x1,..,xn,k,h(x1,..,xn,k)) = h(x1,..,xn,k+1) S(m+n+2) // k++ // Rm+n+1 = y, Rm+n+2 = k, Rm+n+3 = h(x1,..,xn,k) J(1,1,p) // aller en p // Rm+n+1 = y = Rm+n+2 = k, Rm+n+3 = h(x1,..,xn,y) T(m+n+3,1) // R1= h(x1,..,xn,y) Donc h est URM calculable si g et f le sont. 24 La définition par cas On remarque qu’à l’aide des constructions précédentes, il est possible de mettre en œuvre la définition par cas: F(x) = f1(x) si M1(x), f2(x) si M2(x),…,fk(x) si Mk(x), g(x) sinon En effet, si f1,…,fk,g sont calculables et si M1,…,Mk sont décidables, on peut calculer F avec uniquement des opérations calculables: hk+1(x) = hk(x) = … hi(x) = … h1(x) = F(x) = g(x) CMk(x) fk(x) + (1- CMk(x)) hk+1(x) CMi(x) fi(x) + (1- CMi(x)) hi+1(x) CM1(x) f1(x) + (1- CM1(x)) h2(x) h1(x) Les opérations logiques • Si P(x1,..,xn) et Q(x1,..,xn) sont des relations décidables alors les relations suivantes le sont aussi : – U(x1,..,xn) – V(x1,..,xn) – W(x1,..,xn) ≅ ≅ ≅ P(x1,..,xn) ∧ Q(x1,..,xn) P(x1,..,xn) ∨ Q(x1,..,xn) ⎤ P(x1,..,xn) • En effet, les fonctions caractéristiques sont : – CU(x1,..,xn) = – CV(x1,..,xn) = – CW(x1,..,xn) = CP(x1,..,xn) CQ(x1,..,xn) max(CP(x1,..,xn),CQ(x1,..,xn)) 1 - CP(x1,..,xn) et sont calculables. Cela se généralise à des fonctions à un nombre quelconque d’arguments. 25 Somme et produit bornés • Soit f(x1,..,xn,y) une fonction totale et calculable, la fonction Sf définie par Sf(x1,..,xn ,y) = f(x1,..,xn,0) + f(x1,..,xn,1) + … + f(x1,..,xn,y) est aussi calculable grâce à l’opération de « récursion » : Sf(x1,..,xn ,0) = f(x1,..,xn,0) Sf(x1,..,xn ,y+1) = Sf(x1,..,xn ,y) + f(x1,..,xn,y+1) qui correspond à : Sf(x1,..,xn ,0) = F(x1,..,xn) Sf(x1,..,xn ,y+1) = G(x1,..,xn,y, Sf(x1,..,xn ,y)) avec F(x1,..,xn) = f(x1,..,xn,0) et G(x1,..,xn,y,z) = f(x1,..,xn,,y+1) + z qui sont calculables. Sf est appelé la fonction somme bornée de f. • De même, le produit borné de f défini par : Pf(x1,..,xn ,y) = f(x1,..,xn,0) . f(x1,..,xn,1) . … . f(x1,..,xn,y) Somme et produit bornés Soient f(x1,..,xn,y) et g(x1,..,xn, z1,..,zk) des fonctions totales et calculables, les deux fonctions suivantes sont aussi totales et calculables : – Sf,g(x1,..,xn, z1,..,zk) = Sf(x1,..,xn, g(x1,..,xn, z1,..,zk)) – Pf,g(x1,..,xn, z1,..,zk) = Pf(x1,..,xn, g(x1,..,xn, z1,..,zk)) 26 La minimalisation bornée La minimalisation bornée • La minimalisation est une nouvelle opération qui permet de construire de nouvelles fonctions et qui vient s’ajouter aux opérations de substitution et de récursion. • L’opérateur µz<y.P(z) désigne le plus petit z strictement inférieur à y tel que P(z) soit satisfait, ou bien y si un tel z n’existe pas. µ est appelé opérateur de minimalisation bornée. • Soit f(x1,..,xn,y) une fonction totale et calculable, la fonction g(x1,..,xn ,y) définie par : g(x1,..,xn ,y) = µz<y.(f(x1,..,xn,z) = 0) est aussi une fonction totale et calculable. • On a vu z telle que z(0)=0 et z(y+1)=1, posons : h(x1,..,xn,v) = z(f(x1,..,xn,0)) z(f(x1,..,xn,1)) … z(f(x1,..,xn,v)) Soient x1,..,xn,y et 1 ≤ r ≤ y tels que r = µz<y.(f(x1,..,xn,z) = 0), on a h(x1,..,xn,0) = h(x1,..,xn,1) = … = h(x1,..,xn,r-1) = 1 h(x1,..,xn,r) = h(x1,..,xn,r+1) = … = h(x1,..,xn,y) = 0 et donc: µz<y.(f(x1,..,xn,z) = 0) = h(x1,..,xn,0) + h(x1,..,xn,1) +…+ h(x1,..,xn,y) 27 La minimalisation bornée La minimalisation bornée Soient f(x1,..,xn,y) et g(x1,..,xn, z1,..,zk) des fonctions totales et calculables, la fonctions suivante est aussi totale et calculable : Si R(x1,..,xn,y) est un prédicat décidable : h(x1,..,xn, z1,..,zk) = µz< g(x1,..,xn, z1,..,zk)).f(x1,..,xn,y) • Q(x1,..,xn,y) ≅ ∀ z < y . R(x1,..,xn,z) est décidable • f(x1,..,xn,y) = µz<y. R(x1,..,xn,z) est calculable • E(x1,..,xn,y) ≅ ∃ z < y . R(x1,..,xn,z) est décidable 28 La minimalisation NON bornée • Soit f(x1,..,xn,y) une fonction totale et calculable, la fonction g(x1,..,xn) définie par : g(x1,..,xn) = µz.(f(x1,..,xn,z) = 0) si z existe indéfini sinon est aussi une fonction partielle et calculable. La minimalisation NON bornée • On pose m = max(n,ρ(f)), le programme suivant calcule la fonction g : p: q: T(1,m+1) … T(n,m+n) Z(m+n+1) Z(1) F[m+1,…,m+n,m+n+1 → 1] J(1,m+n+2,q) S(m+n+1) J(1,1,p) T(m+n+1,1) 29 Les relations • Si R(x1,..,xn,y) est une relation décidable, la fonction g(x1,..,xn) = µz.R(x1,..,xn,z) est effectivement calculable et partielle. Remarque • La minimalisation permet de construire des fonctions partielles à partir de fonctions totales: Soit f(x,y) = abs(x –y.y) une fonction totale, En effet: g(x1,..,xn) = µz.(z(CR(x1,..,xn,z))=0) on pose: g(x) = µz.(f(x,z)=0) g est partielle. 30 Solution Exercice • Soit Ack(x,y) la fonction définie par: • Ack(0,y) = y+1 • Ack(x+1,0) = Ack(x,1) • Ack(x+1,y+1) = Ack(x,Ack(x+1,y)) • Ack est la fonction d’Ackermann. Montrer que Ack est calculable. On remarque que le calcul de Ack(x,y) utilise le calcul d’autres valeurs Ack(u,v) avec u<x ou bien u = x et v < y. Un ensemble fini de triplets S est dit adéquat si et seulement si : – si (0,z,z) ∈ S alors z ≠0 – si (x+1,0,z) ∈ S alors (x,1,z) ∈ S – si (x+1,y+1,z) ∈ S alors il existe u tel que (x+1,y,u) ∈ S et (x,u,z) ∈ S Pour tous les entiers m et n, il existe un ensemble de triplets adéquat S tel que (m,n,Ack(m,n)) ∈ S. Il suffit de prendre les triplets (x,y,Ack(x,y)) utilisés dans le calcul de Ack(m,n). Codage de Gödel. Un triplet (x,y,z) peut être codé par 2x3y5z. Un ensemble de nombres {u1,u2,…, un} peut être codé par le nombre pu1.pu2…pun ou pi est le i-ième nombre premier. Un ensemble S de triplet peut être codé comme l’ensemble des codes des triplets. 31 Si on note Sv un ensemble des triplets dont le code est v, on a: (x,y,z) ∈ Sv ⇔ pu divise v avec u = 2x3y5z On définit la relation R(x,y,v) par « ∃z / (x,y,z) ∈ Sv ». R(x,y,v) est décidable et g(x,y) = µv.R(x,y,v) est calculable. Donc: Ack(x,y) = µz.(x,y,z) ∈ Sg(x,y) est aussi calculable au sens des fonctions partielles récursives. LA THESE DE CHURCH • Nous venons de voir deux définitions possibles de la calculabilité : – Les machines URM – Les fonctions partielles récursives • Tout au long de la définition des FPR, nous avons vérifiées qu’elles étaient URMcalculables. 32 LA THESE DE CHURCH • On note C la classe des fonctions partielles URM-calculables. • On note R les fonctions partielles récursives: le plus petit ensemble de fonctions contenant les fonctions de base et fermé pour les opérations de substitution, de récursion et de minimalisation. • THEOREME : R=C. On a déjà vérifié R ⊆ C. • On note R0 l’ensemble défini comme la classe R sauf que l’on restreint l’opérateur de minimalisation à l’obtention de fonctions totales. C’est l’ensemble des fonctions µ–récursives ou encore l’ensemble des fonctions générales récursives. C⊆R • Soit P=I1,…,Is un programme URM calculant une fonction f(x1,…,xn). On adopte: – on notera X pour x1,…,xn ; – on appelle pas de calcul, l’exécution d’une instruction de la machine URM ; – c(X,t) désigne le contenu du registre R1 après t pas de calcul de P(X) si P(X) n’est pas encore arrêté, le contenu final de R1 sinon ; – j(X,t) désigne le numéro de l’instruction à exécuter après t pas de calcul de P(X) si P(X) n’est pas arrêté, 0 sinon. 33 C⊆R • c(X,t) et j(X,t) sont des fonctions totales. • Si f(X) est défini alors P(X) converge en t0 pas de calcul (t0 dépend de X) et l’on à: – t0 = µt.(j(X,t)=0) – f(X) = c(X,t0) = c(X, µt.(j(X,t)=0) • Si f(X) est indéfini, le calcul de µt.(j(X,t)=0) ne se termine pas et l’on a f(X) = c(X, µt.(j(X,t)=0) • Donc: f(X) = c(X, µt.(j(X,t)=0) Pour démontrer que f est une FPR, il suffit de démontrer que c et j en sont. En fait, ont peut les définir sans utiliser la minimalisation. Cela est compliqué et fait plus loin. Les Machines de Turing • Une machine de Turing est compsoée d’une bande infinie de cases, chacune pouvant contenir un symbole, d’une fenêtre montrant l’une de ces cases et d’une variable d’état. s0 s1 s2 s3 s4 s5 etc. Etatest : qcapable de deux actions simples: • La machine – Remplacer le symbole visible dans la fenêtre – Déplacer la fenêtre d’un cran vers la gauche ou la droite. – Changer d’état. 34 Les machines de Turing • Un programme est défini par: – Un ensemble fini de symboles pouvant figurer dans les cases. – Un ensemble fini d’états possibles. – Une spécification composée de quadruplets des types suivants: • qi sj sk ql signifiant: si l’état est qi et le symbole visible est sj, le remplacer par sk et se mettre dans l’état ql. • qi sj R ql signifiant: si l’état est qi et le symbole visible est sj, déplacer la fenêtre vers la droite, se mettre dans l’état ql. • qi sj L ql signifiant: si l’état est qi et le symbole visible est sj, déplacer la fenêtre vers la gauche, se mettre dans l’état ql. – Pour une paire qi sj, il ne doit exister qu’un seul quadruplet commençant par cette paire. Les machines de Turing • Exécuter un programme sur une machine de Turing, c’est: – Donner une bande initiale. – Donner la position initiale de la fenêtre. – Effectuer les transitions spécifiées par les quadruplets jusqu’à ce qu’aucun quadruplet ne soit applicable. – Le résultat est l’état final de la bande. 35 Exemple : l’addition de 2 entiers La calculabilité de Turing • Un entier n est codé par une suite de n+1 symboles I. Plusieurs entiers sont codés sur la bande séparés par des symboles #. Exemple: (2,3) est codé par : I I # I I I # … • Une fonction sur les entiers est effectivement calculable au sens de Turing s’il existe un programme de machine de Turing qui permet de la calculer. • • • • • • Symboles: 1 , # Etats: q1, q2 , q3 , q4 Etat initial: q1 Bande initiale: codage de (x,y) Bande finale: codage de x+y Programme: q1 I R q1 q1 # I q2 q2 I R q2 q2 # L q3 q3 I # q4 36 Machines de Turing • One note TC l’ensemble des fonctions calculables au sens de Turing. • THEOREME: TC = R = C. Systèmes de Post & Markov • Plutôt que de calculer, Post & Markov ont imaginé des systèmes générateurs de chaînes de caractères éventuellement vides : les systèmes de production. 37 Systèmes de Post & Markov • Un alphabet fini • Des mots sur cet alphabet • Des règles de production du type: P(x+y)(x-y)Q → P(x2 – y2)Q où P et Q désignent des chaînes arbitraires. • Un ensemble de mots appelés axiomes. • Les chaînes que l’on peut produire à partir des axiomes sont appelées des théorèmes. Systèmes de Post & Markov • Une fonction f est calculable au sens de Post et Markov si pour tout X = (x1,…,xn) argument : – Si f(X) =y est défini, la chaîne de caractères « f(X)=y » est un théorème. – Si f(X) est inféfini, aucune chaîne de caractères de la forme « f(X)=y » avec y entier n’est un théorème. 38 Systèmes de Post & Markov • On note PM les fonctions effectivement calculables au sens de Post et Markov. • THEOREME: PM = TC = R = C. La thèse de CHURCH • Quelle que soit la notion de calculabilité que l’on a mise en avant, on a toujours pu démontrer qu’elle était équivalente ou incluse dans celle définie par les fonctions partielles récursives de Kleene. • Autrement dit, quel que soit le sens que l’on donne à « effectivement calculable », une fonction effectivement calculable est toujours une fonction partielle récursive. 39 La thèse de CHURCH • D’où: LES PRINCIPAUX RESULTATS LA NOTION INTUITIVE ET INFORMELLE DE CALCULABILITE EFFECTIVE RECOUVRE EXACTEMENT CELLE DE FONCTION PARTIELLE RECURSIVE. (Thèse de CHURCH) Notons une fois encore qu’on ne s’intéresse qu’à la calculabilité indépendamment des problèmes de complexité… 40 Dénombrable & énumerable Dénombrabilité effective • Un ensemble X est dénombrable s’il existe une bijection de X vers N. • Un ensemble X est effectivement dénombrable s’il existe une bijection effectivement calculable de X dans N telle que sont inverse soit également effectivement calculable. • Un ensemble X est énumérable s’il existe une surjection g de N dans X. Si g est aussi injective, c’est une énumération: X = { g(0), g(1), ….} 41 Exemple • N×N est effectivement dénombrable : π: N×N →N π(m,n) = 2m (2n + 1) – 1 On note π1 et π2 les inverses. Exemple • N×N×N est effectivement dénombrable : ζ : N ×N ×N →N ζ(m,n,p) = π(m,π(n,p)) On note ζ1, ζ2 et ζ3 les inverses. 42 Exemple • U k≥1N k est effectivement dénombrable. τ(a1,…,ak) = 2a1 + 2a1+a2+1 + … + 2a1+…+ak+k-1 – 1 Théorème • L’ensemble des instructions d’une machine URM est effevtivement dénombrable: – – – – β(Z(n)) = 4 (n – 1) β(S(n)) = 4 (n – 1) + 1 β(T(m,n)) = 4 π(m-1,n-1) + 2 β(J(m,n,p)) = 4 ζ(m-1,n-1,p-1) + 3 • Pour calculer l’inverse β–1(n) : – si n = 4u + 0, l’instruction est Z(u+1) – si n = 4u + 1, l’instruction est S(u+1) – si n = 4u + 2, l’instruction est T(π1(u)+1, π2(u)+1) – si n = 4u + 3, l’instruction est J(ζ1(u)+1, ζ2(u)+1, ζ3(u)+1) 43 Théorème • L’ensemble des programmes URM est effectivement dénombrable. • Soit P = (I1,…,Is) un programme URM, on pose: γ(P) = τ(β(I1),…, β(Is)) • γ est un codage de GODEL. • γ(P) est le code de GODEL de P. • Soit n un entier naturel, on note Pn le programme dont le code de GODEL est n. • Si n≠m, Pn et Pm sont différents mais peuvent calculer la même fonction. Exemple • On considère le programme suivante: 1. T(1,3) 2. S(4) 3. Z(6) • On a: – β(T(1,3)) = 4 π(0,2)+2 = 4 (20(2.2+1)-1)+2 = 18 – β(S(4)) = 4.3 + 1 = 13 – β(Z(6)) = 4.5 = 20 • Puis: γ(P) = τ(β(T(1,3)), β(S(4)),β(Z(6))) = τ(18,13,20) = 218 + 218+13+1 + 2 18+13+20+2 – 1 = 218 + 232 + 253 – 1 = 9 007 203 549 970 431 44 Exemple • 4127 = τ(5,6) = 25 + 212 – 1 = 2a + 2a+b+1 – 1 avec a=5 et b=6 1. a = 5 = 4.1 + 1 = β(S(2)) 2. b = 6 = 4.1 + 2 = 4 π(1,0) + 2 = β(T(2,1)) 3. Donc 4127 est le code de GODEL du programme: – S(2) – T(2,1) Numérotation effective des fonctions effectivement calculables • Thèse de CHURCH : toute fonction effectivement calculable est calculée par un programme URM et que tout programme URM calcule une fonction effectivement calculable. • On peut donc se servir des codes de GODEL des programmes URM pour numéroter les fonctions effectivement calculables. 45 Numérotation effective des fonctions effectivement calculables • Φa(n) La fonction calculable n-aire calculée par Pa. • Φa Exemple • P4127 est le programme: 1. S(2) 2. T(2,1) • • Si la configuration initiale est (x), le résultat est 1 Si la configuration initiale est (x,y,..), le résultat est y+1 La fonction Φa(1). C’est une énumération avec REPETITION. • Φ4127(1)(x) = 1 • Φ4127(n)(x1,x2,…,xn) = x2+1 si n≥2 46 Numérotation • Soit f une fonction unaire effectivement calculable, il existe un programme URM P permettant de la calculer. Si a = γ(P) alors f = Φa. • On dit que a est un INDEX pour f. • Chaque fonction effectivement calculable a une infinité d’index. En effet, il suffit de rajouter T(1,1) à la fin de P pour obtenir un index différent. Théorème • Pour n ≥ 0, on note Cn l’ensemble des fonctions effectivement calculables d’arité n. • Pour n ≥ 0, Cn est effectivement dénombrable. La démonstration est difficile car il faut éviter les répétitions (on peut choisir pour index unique le plus petit des index de la fonction ?). • C l’ensemble de toutes les fonctions effectivement calculables (union des Cn pour n ≥ 0) est effectivement dénombrable (utilisation de τ). 47 Argument diagonal de Cantor Théorème • Il existe des fonctions qui ne sont pas calculables. • On pose : F(x) = Φx(x) +1 si Φx(x) est défini 0 sinon La fonction F est différente Φn pour tout n donc elle ne peut être calculable. • Ce type d’argument est appelé ARGUMENT DIAGONAL de CANTOR. • L’ensemble des fonctions représenté par une matrice: Φ0 Φ1 Φ2 0 Φ0(0) Φ1(0) Φ2(0) 1 Φ0(1) Φ1(1) Φ2(1) 2 Φ0(2) Φ1(2) Φ2(2) 3 Φ0(3) Φ1(3) Φ2(3) … … … … … … … … … … • Le principe est de s’arranger pour que F diffère de Φi en i, c’est-à-dire sur la diagonale de la matrice. 48 Théorème s-m-n (forme simple) • • Soit f(x,y) une fonction effectivement calculable alors il existe une fonction effectivement calculable k(x) telle que : f(x,y) = Φk(x)(y) • Autrement dit, si on fixe x on obtient une fonction effectivement calculable et l’on sait calculer un index pour cette fonction. Soit F le programme URM qui calcule f, on construit le programme suivant : – – – – • T(1,2) Z(1) S(1),…,S(1) x fois F R2 := y R1 := 0 R1 := x R1 := f(x,y) k(x) est le code de ce programme. Comme F est fixé, le code de ce programme est effectivement calculable en fonction de x. • Se rappeler de ce théorème au moment du cours sur la curryfication des fonctions. 49 Le théorème s-m-n • Pour tout m ≥ 1 et tout n ≥ 1, il existe une fonction totale effectivement calculable s-m-n d’arité m+1 telle que : Φe(m+n)(x1,..,xn,y1,..,ym) = Φs-m-n(e,x1,..,xn)(n)(y1,..ym) La fonction universelle • La fonction ΨU(x,y) définie par : ΨU(x,y) = Φx(y) est appelée la fonction UNIVERSELLE. • Connaissez-vous une fonction universelle ? 50 La fonction universelle Théorème • Plus généralement, on considère la fonction Pour n≥1, la fonction universelle ΨU(n)(e,x1,..,xn) = Φe(n)(x1,..,xn) ΨU(n)(e,x1,..,xn) C’est la fonction universelle pour les fonctions calculables d’arité n. est effectivement calculable. 51 Démonstration informelle • Pour calculer ΨU(n)(e,x1,..,xn), agir comme suit: – décoder Pe ; – simuler l’exécution de Pe sur les données x1,..,xn ; – si le calcul s’arrête, le résultat est dans R1 ; sinon c’est indéfini. Démonstration formelle • Une configuration (r1,…,rn) est codée par l’entier c = 2r13r25r3… • Il existe une fonction effectivement calculable ρi telle que ρi(c) = ri si i ≤ n, 0 sinon • On représente l’ETAT d’un calcul par σ = π(j,c) où c est la configuration courante et j le numéro de la prochaîne instruction à exécuter. • On conviendra que l’ETAT final, s’il existe, est de la forme π(0,c) où c est la configuration finale. Le résultat est ρ1(c). • Puis thèse de Church… 52 • On convient de noter (x1,…,xn) par X et on définit les fonctions : cn(e,X,t) est la configuration après t pas d’exécution de Pe(X) ; la configuration finale si l’exécution a duré moins de t pas ; • Pour calculer σn(e,X,t), nous allons utiliser la récursion. Pour cela, il faut la valeur de σn(e,X,0) et être capable d’exprimer σn(e,X,t+1) en fonction de σn(e,X,t). jn(e,X,t) est le numéro de l’instruction à exécuter après t pas d’exécution de Pe(X), 0 si l’exécution a duré moins de t pas ; • On a σn(e,X,0) = π (1, 2x13x25x3…) σn(e,X,t) est l’état du calcul après t pas d’exécution de Pe(X), c’est-à-dire π(cn(e,X,t) , jn(e,X,t)) • On démontre que σn et donc cn et jn sont effectivement calculables. Alors si Pe(X) s’arrête, il le fait en µt(jn(e,X,t) = 0) pas et la configuration finale est cn(e,X, µt(jn(e,X,t) = 0)) et l’on a : ΨU(n)(e,x1,..,xn) = ρ1(cn(e,X, µt(jn(e,X,t) = 0))) • Si j=0 alors σn(e,X,t+1) = σn(e,X,t) car l’exécution du programme est terminée. • Sinon, on extrait l’instruction numéro j du programme Pe et on l’applique à la configuration courante pour obtenir la nouvelle configuration et la nouvelle opération à effectuer. Ce sont des opérations effectivement calculables. qui est aussi effectivement calculable. 53 Théorème de la forme normale de Kleene Il existe une fonction totale calculable U(x) et pour tout n un prédicat décidable Tn(e,X,z) tel que : Φe(n)(X) est défini si et seulement si ∃z / Tn(e,X,z) et Φe(n)(X) = U(µz.Tn(e,X,z)) • Tn(e,X,z) ≡ jn(e,X,π1(z))=0 ∧ ρ1(cn(e,X,π1(z)))= π2(z) Autres résultats Le problème « Φx est-elle totale ? » est indécidable. • Supposons que la fonction g(x)=1 si Φx est totale, 0 sinon soit calculable, alors la fonction suivante le serait : f(x) = Φx(x)+1si g(x)=1, 0 sinon car Φx(x) = ΨU(x,x) l’est. Or, f est différente de toutes les fonctions calculables. 54 Autres résultats Le problème « Le calcul de Φx(y) se termine-t-il ? » est indécidable. • Supposons que la fonction g(x,y)=1 si Φx(y) est défini, 0 sinon soit calculable, alors la fonction suivante le serait : f(x) = Φx(x)+1si g(x,x)=1, 0 sinon car Φx(x) = ΨU(x,x) l’est. Or, f est différente de toutes les fonctions calculables. CONCLUSIONS • Tous les résultats de la théorie de la Calculabilité reposent sur la THESE DE CHURCH que personne n’est arrivé à démontrer ou à remettre en cause. • Par des méthodes triviales, elles arrive à démontrer des résultats fondamentaux. 55