8.1 KiB
up, tags, aliases, source
| up | tags | aliases | source | |||
|---|---|---|---|---|---|---|
|
|
[!definition] fonction récursive primitive On définit par induction l'ensemble des fonctions récursives primitives comme suit :
[!definition] ensembles
\mathscr{F}_{p}et\mathscr{F}Soitp \in \mathbb{N}on note\mathscr{F}_{p}l'ensemble des applications de\mathbb{N}^{p} \to \mathbb{N}(par convention,\mathscr{F}_{0}ne contient que la suite vide) On note\displaystyle\mathscr{F} = \bigcup _{p \in \mathbb{N}} \mathscr{F}_{p}[!definition] Fonctions projection On note
P_{p}^{i}(pour1 \leq i \leq p) la fonction de\mathscr{F}_{p}telle que pour toutx_1, \dots, x_{p} \in \mathbb{N}on a :P_{p}^{i}(x_1, x_2, \dots, x_{p}) = x_{i}[!definition] fonction successeur On note
Sla fonction de\mathscr{F}_{1}qui à chaque entiernfait correspondren+1:S = \lambda x. x+1[!definition] Définition par récurrence Soient
f \in \mathscr{F}_{p}etg \in \mathscr{F}_{p+2}, il existe une unique fonction de\mathscr{F}_{p+1}qui, pour toutx_1, \dots, x_{p}, y \in \mathbb{N}respecte :
f(x_1, x_2, \dots, x_{p}, 0) = g(x_1, x_2, \dots, x_{p})f(x_1, x_2, \dots, x_{p}, y+1) = h(x_1, x_2, \dots, x_{p}, y, f(x_1, x_2, \dots, x_{p}, y))L'ensemble des fonctions récursives primitives est alors le plus petit des sous ensembles
Ede\mathscr{F}tel que :
Econtient toutes les fonctions constantes de\mathscr{F}
- i On notera
C_{p}^{x}la fonction constante d'aritépvalantxpartoutEcontient toutes les projectionsP_{p}^{i}pour tous les entierspetiavec1 \leq i \leq pEcontient la fonction successeurSEest clos par composition, c'est-à-dire que sin,p \in \mathbb{N}, sif_1, f_2, \dots, f_{n}sont des fonctions de\mathscr{F}_{p}qui sont aussi dansE, et sig \in \mathscr{F}_{n}est aussi dansE, alors la fonction composéeg(f_1, f_2, \dots, f_{n})appartient à E
- i on accepte l'abus de notation
g(f_1, f_2, \dots, f_{n})pour la compositionEest clos par récurrence, cc'est-à-dire que sip \in N, sig \in \mathscr{F}_{p}eth \in \mathscr{F}_{p+2}sont dansE, alors la fonctionf \in \mathscr{F}_{p+1}définie par récurrence à partir degethest aussi dansE:f : \begin{cases} f(x_1,x_2, \dots, x_{p}, 0) = g(x_1, x_2, \dots, x_{p})\\ f(x_1, x_2, \dots, x_{p}, y+1) = h(x_1, x_2, \dots, x_{p}, y, f(x_1, x_2, \dots, x_{p}, y)) \end{cases}
- i on pourra noter
f = \rho(g, h)
^definition
[!definition] Définition courte Soit
\mathscr{F}l'ensemble des fonctions à valeurs entières et à paramètres entiers. L'ensemble des fonctions récursives primitives est alors le plus petit des sous ensemblesEde\mathscr{F}tel que :
Econtient toutes les fonctions constantes de\mathscr{F}Econtient toutes les fonctions de projectionEcontient la fonction successeurEest clos par composition :f_1, f_2, \dots, f_{p}, g \in E \implies g(f_1, \dots, f_{p}) \in EEest clos par récurrence : sig\in \mathscr{F}_{p}eth \in \mathscr{F}_{p+2}sont dansEalorsf: \begin{cases} f(\overline{x}, 0) = g(\overline{x})\\ f(\overline{x}, y+1) = h(\overline{x}, y, f(\overline{x}, y)) \end{cases}est dansE
- i on pourra noter
f = \rho(g, h)
Remarques
[!info] Définition par le bas On peut également produire une définition "par le bas", en construisant d'abord l'ensemble
R_0contenant les fonctions constantes, projections et successeur, puis en posant pour toutn \in \mathbb{N}:R_0 = \{ \gamma \mid p \in \mathbb{N} \text{ et } \gamma \text{ est une fonction constante de } \mathbb{N}^{p} \to \mathbb{N} \} \cup \{ P_{p}^{i} \mid 1 \leq i \leq p \} \cup \{ S \}\begin{align} R_{n+1} = R_{n} &\cup \{ h \mid h \text{ est obtenue par récurrence à partir de deux fonctions de } R_{n} \}\\ &\cup \{ h \mid h \text{ est obtenue par composition de deux fonctions de } R_{n} \} \end{align}
[!info] Montrer une propriété des fonctions récursives primitives
- on peut montrer que cette propriété
\mathscr{P}est vraie sur les fonctions constantes, projections et successeur, puis montrer que\mathscr{P}est stable par composition et récursion- on peut montrer que
\mathscr{P}est vraie surR_0puis que si\mathscr{P}est vraie partout surR_{n}pour unn \in \mathbb{N}, alors elle est aussi vraie partout surR_{n+1}
Propriétés
[!proposition]+ les fonctions récursives primitives possèdent des algorithmes les calculant Il existe un algorithme pour calculer chacune des fonctions récursives primitives.
[!démonstration]- Démonstration Cela est évident :
- les fonctions constantes, projections et la fonction suivant possèdent toutes des algorithmes pour les calculer
- si
f_1, f_2, \dots, f_{n}etg \in \mathscr{F}_{n}sont des fonctions récursives primitives pour lesquelles il existe un algorithme de calcul, alors il existe un algorithme pour calculerg(f_1, f_2, \dots, f_{n}), qui consiste à donner en entrée de l'algorithme de calcul degles résultats des algorithmes de calcul def_1, f_2, \dots, f_{n}- si
g \in \mathscr{F}_{p}eth \in \mathscr{F}_{p+2}sont deux fonctions récursives primitives pour lesquelles il existe un algorithme de calcul, alors la fonctionf \in \mathscr{F}_{p+1}définie par récurrence à partir degethadmet également un algorithme de calcul, qui consiste en l'application du schéma de réccurence dans un algorithme :PROCEDURE f(x1, x2, ..., xn, y) rec <- g(x1, x2, ..., xn) FOR i <- 0 .. y: rec <- h(x1, x2, ..., xn, i, rec) END_FOR RETURN rec END_PROCEDURECela montre bien que la propriété de posséder un algorithme est vraie partout sur l'ensemble des fonctions récursives primitives
Fonctions élémentaires
Dans cette section, on démontre que quelques fonctions élémentaires sont récursives primitives.
[!proposition]+ L'addition est récursive primitive La fonction d'addition
\lambda x y. x + yest récursive primitive
- dem
\operatorname{add} = \rho(P_1^{1}, S(P_3^{3}))[!démonstration]- Démonstration On peut la définir par :
\begin{cases} x+0 = x\\ x+ (y+1) = (x+y) +1 \end{cases}Plus formellement, l'addition peut être définie par
\rho(P_1^{1}, S(P_{3}^{3}))\rho(\underbracket{P_1^{1}}_{\text{cas } x+0 = 0}, \underbracket{S(P_{3}^{3})}_{\text{cas }x+(y+1) = S(x+y)})
^addition
[!proposition]+ La multiplication est récursive primitives
\operatorname{mult} =\lambda xy. x \times yest récursive primitive
- dem
\operatorname{mult} = \rho(C_1^{0}, \operatorname{add}(P_3^{3}, P_{3}^{1}))[!démonstration]- Démonstration
\operatorname{mult} = \rho(C_1^{0}, \operatorname{add}(P_3^{3}, P_{3}^{1}))OùC_1^{0} = \lambda x. 0et\operatorname{add}est la fonction d'addition définie plus haut Comme on sait déjà que\operatorname{add}est récursive primitive, il suit que\operatorname{mult}l'est également ^multiplication
[!proposition]+ La fonction puissance est récursive primitive
\operatorname{pow} = \lambda xy. x^{y}est récursive primitive
- dem
\operatorname{pow} = \rho(C_{1}^{1}, \operatorname{mult}(P_{3}^{3}, P_3^{1}))^puissance
[!proposition]+ La soustraction positive est récursive primitve On note
x \dot{-} yla soustraction avec un plancher à 0 :x \dot{-} y = \begin{cases} x-y \text{ si } x \geq y\\ 0 \text{ sinon} \end{cases}La fonction\lambda xy. x \dot{-} yest récursive primitive.[!corollaire] Lemme : le précédent positif est récursif primitif La fonction
\lambda x. x \dot{-} 1est récursive primitive[!démonstration]- Démonstration On peut définir
\lambda x. x \dot{-} 1comme\rho(C_1^{0}, P_2^{1})Cela montre que cette fonction est bien récursive primitive[!démonstration]- Démonstration