UNIVERSITE JOSEPH FOURIER M1-informatique Calculabilité et complexité Année 2006-2007 Quick du 2 mai 2007 (durée : 1h30 - sans document) – corrigé, v4 Questions de cours Remarque : 3 lignes suffisent pour répondre à chacune des questions. 1. Définir formellement la classe RP A des fonctions récursives primitives “relativement à A ⊆ N”. IVoir le cours.J 2. Quand on définit l’ensemble P des fonctions récursives partielles, on introduit l’opérateur de “minimalisation” µ (ou MinGen). Donner sa définition exacte en précisant le sens de f = µ[g] où g est une fonction à n + 1 arguments et en donnant l’arité de f . If est d’arité n, et est définie par : (∀~x(n) ) [f (~x) = “le plus petit y, s’il existe, tel que g(y, ~x) = 0]. Dans la définition de P A , on exige que µ s’applique à des fonctions totales (g ∈ R(n+1)A ). J 3. Pourquoi tout modèle de calcul général doit-il permettre de programmer des fonctions non totales ? I Parce qu’on veut pouvoir programmer tout ce qui est “intuitivement calculable”, et donc pouvoir utiliser des boucles tant que , qui peuvent mener à des calculs qui ne se terminent pas.J (k) (k) 4. Expliquer en français ce que définit la notation ϕn par rapport à la notation ΨZ , en précisant ce que représentent k, n et Z. (k) (k) Iϕn désigne la fonction ΨZ d’arité k sur les entiers (de Nk vers N) calculée par la Machine de Turing Z, où n est un indice de Z, c’est à dire le numéro d’un de ses nombres de Gödel (elle en a p! si elle a p quadruplets). J Fonctions récursives primitives Soit le prédicat à n + 2 arguments Conv défini par “Conv(z, ~x, p) ≡ ϕz (~x) converge en au plus p pas.” (n+2) Formellement, si tn est le prédicat de Turing pour les fonctions d’arité n, qui a été défini en cours par tn (z, ~x, y) ≡ “y est le nombre de Gödel d’un calcul de la machine de Turing de numéro (indice) z lancée sur la configuration initiale associée à ~x (q0 |x1 +1 B . . . |xn +1 ), et dont on a montré qu’il est récursif primitif, on a : Conv(z, ~x, p) = sg(1 + µy [tn (z, ~x, y) ∧ |y| ≤ p]) 1. Montrer que la minimalisation peut être bornée par une fonction récursive primitive. I On a vu en cours que le prédicat Conv A défini de même, mais relativement à un ensemble A, est récursif primitif relativement à A. On peut refaire la même démonstration en supprimant le A, et on obtient donc que Conv est récursif primitif. Faisons-le. L’idée est assez simple : la taille de la description instantanée (la Pnplus courte possible) de la configuration d’entrée (au 0ème pas de calcul) est E(~x, 0) = i=1 (xi + 2). Après k ≤ p pas de calcul, la longueur de la description instantanée n’a pas augmenté de plus de k, puisqu’un pas de calcul ne peut l’augmenter de plus de 1. Donc E(~x, k) ≤ E(~x, 0) + k. 1 Soit alors M (z) le plus grand code d’un symbole pouvant figurer dans une description instantanée de la machine Z de numéro z. Si le plus grand indice i d’un état ou d’un symbole est N , on peut prendre M (z) = 4N + 9, sachant que le code de l’état qi est 4i + 9 et que celui du symbole Sj ) est 4j + 7. Le nombre de Gödel y d’un calcul de Z de longueur p à partir de la configuration initiale correspondant à l’entrée ~x peut alors être borné par une fonction RP : y ≤ M axN gCalc(z, ~x, p) = p Y QE(~x,0)+k P r(k) m=1 P r(m)M (z) k=1 D’où : Conv(z, ~x, p) = sg(1 + µy ≤ M axN gCalc(z, ~x, p) [tn (z, ~x, y)]). J 2. Peut-on en déduire que Conv est récursif primitif, récursif, partiel récursif, ou rien de tout cela ? IOn a démontré en cours que la classes des prédicats RP est fermée par minimalisation bornée. Par conséquent, le prédicat Conv est récursif primitif. J ( y si ϕx (x) ↓ 3. Construire h ∈ RP (1) telle que (∀x, y) ϕh(x) (y) = ↑ sinon Remarque : cette question est indépendante des deux questions précédentes et du prédicat Conv. ( y si ϕx (x) ↓ Indication : utiliser la fonction η définie par η(x, y) = ↑ sinon I Utilisons la méthode vue en cours. ( y i) Considérons la fonction η définie par η(x, y) = ↑ si x ∈ K sinon (≡ ϕx (x) ↓) ii) η est partielle récursive. On peut le montrer de deux façons. – Voie machinale. η est intuitivement calculable. En effet, pour la calculer sur le couple d’entrée (x, y), on peut procéder ainsi : lancer le calcul de ϕx (y), puis, si et quand il converge, retourner y et s’arrêter. Par la thèse de Church, η ∈ P (2) . – Voie algébrique. η(x, y) = y + sg(1 + ϕx (x)). D’après le théorème d’énumération, η(x, y) = y + sg(1 + ϕu1 (x, x)), où u1 est un indice de la fonction universelle de (2) (2) (2) (2) P (1) . Donc η = σ[+, A2 , σ[sg, σ[S, σ[ϕu1 , A1 , A1 ]]]], et par suite η ∈ P (2) . iii) Donc η a un indice, soit i. (2) Par le théorème s-m-n, (∀x, y)[η(x, y) = ϕi (x, y) = ϕs11 (i,x) (y)]. h = λx.[s11 (i, x)] convient : h ∈ RP puisque s11 ∈ RP , et on a bien l’égalité désirée. J Machines de Turing q0 1 q1 1 1. Soit la machine de Turing Z définie par les quadruplets suivants : q2 B q1 B q3 1 (n) Quelles sont les fonctions ΨZ calculées par Z, pour toutes les arités n ? (n) I ΨZ (x1 , x2 , . . . , xn ) = n. Le montrer par récurrence sur n. Pour n = 0, Z en q0 B, le calcul produit donc 0. Pour n = 1, on a q0 |x+1 ` |q1 |x `2x |B x q1 B ` |B x+1 q3 B. J 2 R B R R R q1 q2 q1 q3 q1 reste bloquée 2. Construire une machine de Turing Z1 calculant relativement à A ⊆ N la fonction ψ définie par y + 1 si x + y + 2 ∈ A ψ(x, y) = x sinon et si x + y + 1 ∈ A ↑ sinon I On part comme toujours dans la configuration q0 |x+1 B|y+1 . On teste immédiatement si x + y + 2 ∈ A. Si oui, on efface le premier bloc de | et on s’arrête. Si non, on efface le premier | du premier bloc, et on teste si x + y + 1 ∈ A. Si oui, on va à droite effacer le second bloc, et on s’arrête. Si non, on boucle, soit en restant sur place, soit en allant à l’infini vers la gauche. D’où la machine Z donnée par ses quadruplets : q0 | q1 q2 ` q1 |x+1 B|y+1 q1 | B q 3 si x+y+2 ∈ A, et alors effacer |x+1 x+1 y+1 q3 B R q1 ` B q B| et arrêt. 1 x+1 y+1 x y+1 q2 | B q 4 ` q2 | B| ` q4 B| B| q4 B q5 q6 si x+y+2 ∈ / A, et alors tester x + y + 1 ∈ A y+1 q5 B R q7 si x+y+2 ∈ / A&x + y + 1 ∈ A, effacer | x y+1 q7 | R q 7 ` | q B| 7 x y+1 q7 B R q8 ` | Bq | 8 x y+1 q8 | B q 7 ` | BB q8 B et arrêt. q6 B B q6 si x+y+2 ∈ / A et x + y + 1 ∈ / A, boucler J Fonctions récursives Soit la fonction ψ définie ci-dessus par (rappel pour qui n’aurait pas lu la partie précédente !) y + 1 si x + y + 2 ∈ A ψ(x, y) = x sinon et si x + y + 1 ∈ A ↑ sinon 1. Montrer que ψ est récursive (ψ ∈ P (2)A ) par la voie algébrique. Indication : Exprimer ψ à partir de fonctions de base ou connues et des opérateurs σ et µ de substitution et de “minimalisation”. I ψ(x, y) = sg(µi [i + sg(1A (x + y + 2) + 1A (x + y + 1)) = 0]) × (1A (x + y + 2) × (y + 1) + sg(1A (x + y + 2)) × 1A (x + y + 1) × x). Puisque toute substitution peut se ramener à une substitution régulière, que toutes les fonctions apparaissant dans cette expression sont dans P A et que la minimalisation d’applique à une fonction totale et même récursive primitive relativement à A, le résultat s’ensuit. J 2. Quel théorème fondamental vu en cours permet de déduire de la machine de Turing Z1 (de la question 2 de l’exercice précédent) que ψ est récursive ? Indication : si vous n’avez pas répondu à la question 2 de l’exercice précédent, vous pouvez supposer l’existence de la machine de Turing Z1 . IT A ⊆ P A , ou T A = P A .J 3. Donner une valeur particulière de A ⊆ N pour laquelle la fonction ψ est totale. I x + y peut-être n’importe quel entier non nul. Pour qu’on ait toujours x + y + 1 ∈ A 3 ou x + y + 2 ∈ A, il suffit que, pour tout n ∈ N, n + 1 ou n + 2 soit dans A. On peut donc retirer de N des entiers arbitraires, du moment qu’on ne retire pas de couple (n, n + 1). Par conséquent, A = N convient, ainsi que A = {n | n > 0}, et que l’ensemble des pairs 2N, l’ensemble des impairs 2N + 1, les pairs non nuls 2N − {0}, N − (2 + 3N), etc.J 4