fonctions récursives primitives — corrigé partiel Pa

UNIVERSITE JOSEPH FOURIER M1-info
Calculabilité Année 2013-14
TD1 — fonctions récursives primitives — corrigé partiel
Partie I : définition des RP avec base réduite et exemples de RP
1. Une base plus réduite pour RP. La définition standard des fonctions récursives pri-
mitives est
RP =<{m(n),A(p)
i, S},{σ, ρ}>avec m, n, i, p N,1ip
la base est formée des constantes m(n)(constante md’arité n), A(n)
ile choix du ième
argument parmi n,S(ou Succ) le successeur,
les règles ou constructeurs sont la substitution régulière σ(ou CompReg), et le schéma
de récursion primitive ρ(ou RecP rim).
Montrer qu’on peut aussi bien définir RP avec la seule constante 0(0) d’arité 0:
RP =<{0(0),A(n)
i, S},{σ, ρ}>avec nN,1in
IAppelons provisoirement RP 0l’ensemble défini ci-dessus (avec la base réduite). Il est
évident que RP 0RP , puisque Base(RP 0)Base(RP )et que les opérations de clôture
sont les mêmes.
Montrons que par IN que RP RP 0, i.e. que ((m, n)N2)[m(n)RP 0(n)].
On utilisera l’ordre lexicographique sur N2.
Soit (m0, n0)un couple arbitraire d’entiers.
Supposons par HI que ((m, n)N2)[(m, n)<(m0, n0) =m(n)RP 0(n)].
Montrons alors que m0(n0)RP 0(n0).
Trois cas se présentent.
(a) m0=n0= 0 : on a bien m0(n0)= 0(0) RP 0(n0).
(b) m0= 0, n0=n+ 1. Donc m0(n0)= 0(n+1). Or 0(n+1)(y, ~x)=0=0(n)(~x). Donc 0(n+1)
s’obtient par substitution à partir de 0(n):0(n+1) =σ[0(n),A(n+1)
2,...,A(n+1)
n+1 ].
Comme (0, n)<(0, n + 1), l’HI s’applique, et 0(n)RP 0.
Donc on a aussi 0(n+1) RP 0.
(c) m0=m+ 1, n0quelconque. Alors m0(n0)(~x)=(m+ 1)(n0)(~x) = m(n0)(~x)+1. Donc
m0(n0)=σ[S, m(n0)]. Comme (m, n0)<(m0, n0), l’HI s’applique, et m(n0)RP 0.
Donc m0(n0)RP 0.
On peut bien sûr aussi faire une double récursion, sur mpuis sur n, ou l’inverse. J
1
2. Quelques fonctions RP. Montrer que les fonctions suivantes sont récursives primitives
(RP) en les construisant à partir de fonctions de base avec les constructeurs CompReg
(σ) et RecP rim (ρ) :
(a) la multiplication Mult =λxy[x×y](on a déjà vu que Add =λxy[x+y]RP );
(b) la puissance ou exponentielle P uiss =Ack2=λxy[xy]
(donc P uiss(x, y) = xy=xy) ;
(c) la double puissance P P uiss =Ack3=lambdaxy[x↑↑ y](P P uiss(x, y) = x(x↑↑ x)
| {z }
yfois
) ;
(d) le signe sg =λx[x > 0] (sg(x) = 0 si x= 0 et 1si x > 0) ;
(e) le prédécesseur P d défini par P d(x) = 0 si x= 0 et x1si x > 0;
(f) la différence entière (ou“propre”, ou “tronquée”) Diff =λxy[x˙
y](Diff(x, y) =
x˙
y=xysi xyet 0sinon) ;
(g) la différence absolue Abs =λxy[|xy|].
3. Somme finie. Montrer que si f(n+1) est RP, alors h(n+1) = Σ[f]définie par h(y, ~x) =
Py
i=0 f(i, ~x)est aussi RP.
4. Prédicats RP simples. Montrer que les prédicats suivants sont RP : x= 0 ;x > y ;
x<y;x=y. (On a simplifié l’écriture en omettant les lambda ici . . . )
5. Nombres parfaits. Le nombre xest parfait s’il est égal à la somme de tous ses diviseurs
propres (différents de lui-même). Par exemple : 6 = 1 + 2 + 3,28 = 1 + 2 + 4 + 7 + 14.
Montrer que le prédicat EstParfait est récursif primitif. 1
1. On pourra aussi montrer que, pour tout nombre de Mersenne, i.e. tout nombre premier de forme 2p+1 1,
le nombre E(p) = 2p(2p+1 1) est parfait, et que la propriété d’être un nombre de Mersenne est aussi récursive
primitive.
2
Partie II : utilisation des propriétés de fermeture des RP
1. Montrer que les fonctions suivantes sont récursives primitives en utilisant les propriétés
de fermeture :
(a) Reste(2) =λxy[xmod y]; [Rappel : on convient que xmod 0 = xet que xdiv 0 = x.]
(b) Quotient(2) =λxy[xdiv y];
(c) ex2(1) :ex2(x)= l’exposant de 2 dans la décomposition de xen facteurs premiers ;
(d) P r(1) :P r(x) = px= le x-ième nombre premier (avec P r(0) = pr0= 2) ;
(e) exp(2) :exp(x, y)= l’exposant de pxdans la décomposition de yen facteurs premiers.
(f) C(2) :Cy
x= le nombre de combinaisons de xéléments pris yày;
(g) jk(1) :bxc= la partie entière de x;
(h) blogc(2), où blogxyc= la partie entière de logxy;
ICes démonstrations ont été faites en cours et sont dans le poly, sauf pour Cp
n. Pour
celle-là, il suffit de remarquer que Cp
n=bn!/(p!×(np)!)c, car “la division tombe juste”,
et que la factorielle est une fonction RP. J
2. Montrer que les prédicats RP sont fermés par les opérations suivantes : ;;¬,;
.
IFait en cours. J
3. Substitution. Soit Pun prédicat RP (d’arité n) et f1,...fndes fonctions RP (d’arité
k). Montrer que le prédicat Q(d’arité k) défini par
Q(z)P(f1(z), . . . , fn(z)) est aussi RP.
IImmédiat en considérant les fonctions caractéristiques. J
4. Montrer que les prédicats x|y(autre notation : Divise(x, y)), EstP remier(x)et x mod y =
zsont RP. (On a simplifié l’écriture en omettant encore ici les lambda. . . )
IImmédiat. J
Partie III : RP relative et autres exercices
Rappel
On définit formellement la classe RP Ades fonctions récursives primitives “relativement à
AN par :
RP A=D{m(n),A(n)
i, S, 1A},{σ, ρ}Eavec m, n N,1in, où
la base est formée des constantes m(n)(constante md’arité n), A(n)
ile choix du i-ème argu-
ment parmi n,S(ou Succ) le successeur, et 1Ala fonction caractéristique de AN2,
les règles ou constructeurs sont la substitution régulière σ(ou CompReg), et le schéma de
récursion primitive ρ(ou RecPrim).
1. Soient les fonctions f1et f2définies par f1=λzxy [Qz
t=0 (x+y+t)] et f2=λzxy hf1(z,x,y)
(z+1) i.
2. 1A(n)=1si nAet 0si n /A.
3
On a donc f1(z, x, y) = (x+y)(x+y+ 1) ···(x+y+z).
(a) Montrer que f1est récursive primitive (f1RP (3)).
(b) Montrer que f2est aussi dans RP (3). (On suppose qu’on a déjà montré que +et
div sont RP, mais attention, ici “/” dénote bien la division exacte).
IOn a donc :
f1(0, x, y) = x+y=P lus(x, y)
f1(z+ 1, x, y) = f1(z, x, y)×(x+y+z+ 1) qui doit être de forme
h(z, f1(z, x, y), x, y)
Donc h(u, v, w, t) = v×(w+t+u+ 1) = Mult(v, P lus(P lus(w, t), S(u)).
Par suite, f1=ρ[P lus, σ[Mult, A(4)
2, σ[P lus, σ[P lus, A(4)
3,A(4)
4], σ[S, A(4)
1]]]].
J
2. Soit fdéfinie par f(x, y) = x+ysi x+y+ 1 6∈ A
sinon .
(a) Construire une machine de Turing très simple calculant f.
IOn doit partir dans la configuration q0|x+1B|y+1. Pour faire le test, on effacera
le premier |. Si le test est positif, on bouclera, sinon on ôtera le premier |du second
bloc. D’où :
q0|B q0`q0B|xB|y+1
q0B q1q2`q1B|xB|y+1 si x+y+ 1 A, `q2B|xB|y+1 sinon
q1B B q1Bouclage si x+y+1A
q2B R q3Sinon, recherche du bloc |y+1
q3|R q3
q3B R q4`x+1 B|xBq4|y+1
q4|B q4Effacement du |et arrêt en B |xBq4B|y
J
(b) Montrer que f6∈ RP Asauf si A⊆ {0}, mais qu’on a toujours fPA.
IClairement, fRP Assi fest totale. En effet, si elle l’est, c’est qu’on est toujours
dans le premier cas, et donc c’est l’addition (f=P lus), qui est RP.
D’autre part, fest totale ssi (x, y N)[x+y+ 1 6∈ A], i.e. ssi A⊆ {0}. Il y a donc
deux cas, A=et A={0}.J
3. Soit get hdéfinies par
g(x, y) =
bx/2c+ysi xA
by/2c+xsi x6∈ Aet yA
sinon
et
h(x, y, z) =
bx/2c+ysi x+yA
by/2c+xsi y+z6∈ A
sinon
(a) Montrer que gPA, et qu’il y a une seule valeur de A(N) telle que gsoit totale
(fRA).
ILe cas indéfini est “x /Aet y /A”, et les trois cas sont exclusifs l’un de l’autre.
Pour rendre compte des cas où gest définie, on cherche htelle que h(x, y)ssi
xAou yA. Il faut faire appel à la minimisation pour le cas h(x, y). Une
possibilité est de définir hpar h(x, y) = µz[(1A(x)+1A(y)) ˙
z1]. Alors
h(x, y) = (0si xAou yA
sinon
4
Donc g(x, y) = (1+h(x, y)) ×[1A(x)×(bx/2c+y) +sg(1A(x))×1A(y)×(by/2c+x)].
hPA, car hest obtenue par minimisation sur une fonction de RP , donc totale et
dans P. On peut en effet écrire encore plus précisément : h(x, y) = µz[sg((1A(x) +
1A(y)) ˙
z) = 0].
Par suite, gPA, car gest obtenue par substitution générale à partir de fonctions
de PA(et même de RP Apour toutes celles différentes de h).
On peut aussi écrire directement : g(x, y) = 1A(x)([x/2] + y) + ¯sg(1A(x)) (1A(y)
([y/2] + x) + µz[z+ 1A(x)+1A(y) = 0].
Enfin, gn’est totale que si A=N.J
(b) Montrer que, sauf pour trois valeurs particulières de AN,h6∈ PA.
Donner ces trois valeurs A1,A2et A3, et les fonctions h1,h2et h3correspondantes.
I
i) hest une fonction si Aest vide (a=) ou plein (A=N), car on est alors toujours
dans le 1er ou le 2ème cas.
ii) Si An’est ni vide ni plein, on est dans ces deux cas à la fois si par exemple
x=aA,y= 0, et z=c /A.
Ces deux cas sont incompatibles si (xdiv 2) 6=x, soit si x6= 0 : le système
produit alors une relation non fonctionnelle. Donc hest aussi une fonction si
A={0}, et alors on n’est jamais dans le 2ème cas.
iii) Y a-t-il d’autres possibilités ? Non. En effet, si Acontient a > 0et n’est pas
plein, on peut prendre (x, y, z) = (a, 0, c)avec c /A, et on a 2valeurs différentes
puisque (adiv 2) 6=a.
On peut en conclure que hest une fonction ssi Aest vide, ou plein, ou réduit à {0}.
Que vaut alors h?
Dans les deux premiers cas, hest une fonction de RP A.
Pour A1=,h1(x, y, z) = by/2c+x.
Pour A2=N,h2(x, y, z) = bx/2c+y.
Dans le troisième cas, pour A3={0},
h3(x, y, z) =
0si x=y= 0
by/2c+xsi y+z > 0
sinon :y=z= 0 et x > 0
On peut alors écrire :
h3(x, y, z) = sg(y+z)×(by/2c+x)+µi[i+sg(y+z)×sg(x) = 0], et donc h3PA.
J
4. Soit ψdéfinie par ψ(x, y) = µt[(x+y)˙
t2= 0]. ( ˙
désigne la différence propre.)
(a) Montrer que ψest intuitivement calculable en donnant un (semi-)algorithme qui la
calcule. L’appliquer au calcul de ψ(2,3).
I
Programme ψ(x, y);
t0;
while do- ( (x+y)˙
t2)>0tt+ 1 ;while ;do-
return (t).
Pour ψ(2,3),x+y= 5.(x+y)˙
t2vaut 5pour t= 0,4pour t= 1,1pour t= 2, et
0pour t= 3. Donc ψ(2,3) = 3.J
(b) Montrer qu’on peut transformer la définition de ψde façon à remplacer µpar un
minimum borné. (Pour cela, étudier ce que vaut ψ(x, y)par rapport aux deux carrés
5
1 / 6 100%

fonctions récursives primitives — corrigé partiel Pa

La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !