7.2 Fonctions récursives totales

publicité
158
CHAPITRE 7. FONCTIONS RÉCURSIVES
7.2
Fonctions récursives totales
Un ensemble de fonctions F est fermé par minimisation si, pour toute application ξ ∈ F telle que ∀"n∃m.ξ("n, m) = 0, la fonction φ définie par
φ("n) = min(ξ("n, m) = 0)
m
est dans F .
Definition 7.2.1 L’ensemble des fonctions récursives (totales) est le plus petit
ensemble de fonctions qui contient les fonctions initiales et qui est fermé par
composition, récursion primitive, et minimisation.
Théorème 7.2.1 La fonction d’Ackermann est récursive totale.
C’est une conséquence de l’exercice 169.
Exercice 167
Montrer que la fonction J :
J(x, y) = x +
(x + y)(x + y + 1)
2
est une bijection de N2 dans N. On note (K(z), L(z)) = J −1 (z).
Montrer que J, K, L ∈ C.
Exercice 168
Soit p0 , p1 , . . . , pn , ... la suite strictement croissante des nombres premiers. Montrer que les fonctions suivantes sont primitives récursives :
1. La fonction PrimeS(n) = pn
2. La fonction Log qui, à i, n associe l’exposant de pi dans la décomposition
de n en facteurs premiers.
Exercice 169 (6)
Soit p0 , p1 , . . . , pn , . . . la suite des nombres premiers et C l’application qui à une
suite finie d’entiers k0 , . . . , kn associe pk00 +1 × · · · × pnkn +1 . C est une injection
de l’ensemble des suites finies d’entiers dans N.
1. Montrer que la fonction D définie par :
!
ri + 1 Si ∃n ≥ i, ∃r1 , . . . , rn . k = C(J(0, r0 ), . . . , J(n, rn ))
D(i, k) =
0
sinon
est récursive primitive.
2. Soit A" la fonction définie par :

 m+1
A" (n, m, k) =
D(J(n − 1, 1), k)

D(J(n − 1, D(J(n, m − 1), k)), k)
Montrer que A" est récursive primitive.
Si n = 0
Si n > 0, m = 0
sinon
7.2. FONCTIONS RÉCURSIVES TOTALES
159
3. k est une approximation de la fonction d’Ackermann si
(a) pour tous n, m, D(J(n, m), k) '= 0 entraine D(J(n, m), k) = A" (n, m, k)
(b) pour tout n, pour tout m, si D(J(n, m), k) '= 0, alors pour tout
j < m, D(J(n, j), k) '= 0.
Soit P le prédicat qui est vrai sur les entiers qui sont des approximations
de la fonction d’Ackermann. Montrer que P est récursif primitif.
4. Montrer que, pour tous n, m ∈ N
(a) si P (k) = 1 et D(J(n, m), k) '= 0, alors A(n, m) = A" (n, m, k)
(b) il existe un entier k tel que D(J(n, m), k) '= 0 et P (k) = 1.
5. En déduire qu’il existe deux fonctions récursives primitives φ, ψ telles que,
pour tous n, m ∈ N,
A(n, m) = ψ(n, m, min{x ∈ N | φ(n, m, x) = 0})
Exercice 170 (5)
Si h est une fonction de N dans N on appelle itération de h la fonction f (n, x)
définie par :
!
x
si n = 0
f (n, x) =
h(f (n − 1, x)) sinon
Montrer que la plus petite classe de fonctions sur les entiers qui contient les
fonctions de base, les fonctions J, K, L et qui est close par itération et composition, coı̈ncide avec l’ensemble des fonctions récursives primitives.
Exercice 171
Montrer qu’il existe une fonction non récursive primitive dont le graphe est
récursif primitif. (Le graphe de f est l’ensemble des paires (n, f (n)).
160
7.3
CHAPITRE 7. FONCTIONS RÉCURSIVES
Fonctions semi-récursives et ensembles récursivement
énumérables
La minimisation est étendue au cas où on n’a pas nécessairement ∀"n∃m.ξ("n, m) =
0. Dans ce cas, la fonction φ définie est une fonction partielle :
φ("n) = min{m | (ξ("n, m) = 0) ∧ ∀k < m, ξ("n, k) '=⊥}
La composisition de fonctions récursives totales est étendue aux fonctions
partielles : la composée n’est définie que lorsque les fonctions composantes le
sont. De même, la récursion primitive appliquée à des fonctions partielles :
φ = Prim(ξ, ψ) est définie en (m, "n) si m = 0 et ξ("n) '=⊥ ou bien m > 0,
φ(m − 1, "n) est définie et ψ est définie en (φ(m − 1, "n), m − 1, "n).
Definition 7.3.1 L’ensemble des fonctions récursives partielles (aussi appelées
fonctions semi-récursives) est le plus petit ensemble de fonctions sur les entiers
contenant les fonctions initiales et clos par récursion primitive, composition et
minimisation.
Un ensemble est récursif si sa fonction caractéristique est une fonction
récursive totale. Un ensemble S est récursivement énumérable si la fonction
qui vaut 1 quand n ∈ S et est indéfinie ou vaut 0 quand n ∈
/ S est récursive
partielle.
7.3.1
Turing-calculabilité et fonctions récursives
A l’appui de la thèse de Church, les notions de calculabilité définies sur
les entiers par les machines de Turing et les fonctions récursives partielles
coı̈ncident :
Théorème 7.3.1 Soit f : Nk → N une fonction partielle. f est semi récursive
(resp. récursive) ssi il existe une machine de Turing Mf telle que Mf s’arrête
exactement sur les données du domaine de définition de f et, lorsqu’elle s’arrête
sur n1 , . . . , nk , le ruban contient f (n1 , . . . , nk ).
Preuve:
On suppose que les entiers sont représentés (dans une base b) par des mots.
Tout d’abord, si f est récursive partielle (resp. récursive totale), f est calculable par une machine de Turing. On montre que l’ensemble des fonctions
partielles calculables par une M.T., contient les fonctions initiales et est clos
par récursion primitive, par composition et par minimisation.
– soit M0 une machine à k rubans et M1 , . . . , Mk k machines à n rubans
calculant respectivement f0 , f1 , . . . , fk . La machine à n × k rubans dont
les données sont sur les rubans de numéro divisible par k et qui simule
Mi sur les rubans i × k − i + 1, . . . , i × k, puis M0 sur les rubans de
numéros divisibles par k calcule f0 (f1 ("n), . . . , fk ("n)) (et ne s’arrête pas
lorsque l’une des fonctions fi n’est pas définie en n ou bien f0 n’est pas
définie sur f1 ("n), . . . , fk ("n))
7.3. FONCTIONS SEMI-RÉCURSIVES ET ENSEMBLES RÉCURSIVEMENT ÉNUMÉRABLES161
– Pour la minimisation : on garde sur un ruban les essais successifs de la
valeur n. Initialement, n = 0. Si le calcul de f (n, "x) se termine et donne
0, on rend n. Si le calcul se termine avec une valeur distincte de 0, on
incrémente n et on recommence. **a detailler **
– Pour la récursion primitive **a détailler **
Réciproquement, étant donné une machine de Turing, on construit une fonction récursive primitive qui simule un mouvement de la machine, puis avec un
coup de minimisation on termine. Plus précisément : les mots sont considérés
comme des entiers en base |Σ|+1. Les configurations sont des triplets (q, w1 , w2 )
et sont donc codés de manière bijective par des entiers supérieurs ou égaux à 2.
La fonction f qui à C(q, w1 , w2 ) associe C(q " , w1" , w2" ), codage de la configuration suivante si elle existe et 0 si q = accept, 1 si q = reject, est une fonction
primitive récursive puisque les fonctions reste, produit, somme sont primitives
récursives.
On définit alors g(n, γ) par g(0, γ) = γ et g(n + 1, γ) = g(n, f (γ)). Enfin,
h(γ) = g(min g(n, γ) = 0, γ)
n
calcule, à partir du codage d’une configuration γ, le codage de la configuration
finale de la machine (si elle existe) correspondant à un calcul commençant par
la configuration dont le code est γ.
On déduit alors que la fonction calculée est récursive, car le codage et le
décodage d’une configuration sont récursives.
Enfin, remarquons que dans ces constructions, le calcul de la machine sur
la donnée D se termine si et seulement si la fonction récursive correspondante
est définie sur la donnée D.
Corollaire 7.3.1 (Kleene) Toute fonction récursive partielle s’obtient à l’aide
d’une seule minimisation d’une fonction primitive récursive.
Exercice 172 (5)
Montrer que le problème suivant est indécidable :
Donnée : une fonction récursive primitive f
Question : f calcule-t-elle la fonction nulle ?
Exercice 173 (5)
Montrer que, si f est une fonction récursive partielle, alors son graphe est
récursif primitif.
7.3.2
Élimination de la récursion primitive
On veut montrer que la récursion primitive peut être simulée par les autres
constructions.
On note C le plus petit ensemble de fonctions sur les entiers qui contient
les fonctions initiales, l’addition, la multiplication, l’égalité, et qui est clos par
composition et minimisation. (Donc pas de récursion primitive ici).
Exercice 174
Montrer que les fonctions ou prédicats suivants sont dans C :
Téléchargement