UNIVERSITE JOSEPH FOURIER M1-informatique

publicité
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
Téléchargement