17 KiB
up, tags, aliases, source, header-auto-numbering
| up | tags | aliases | source | header-auto-numbering | |||||
|---|---|---|---|---|---|---|---|---|---|
|
|
|
[!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 à EEest clos par récurrence, cc'est-à-dire que sip \in \mathbb{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)
^definition-courte
[!info] Notations Pour raccourcir les notations, et quand l'arité des fonctions est claire, on utilise
\overline{x}pour noter tout un groupe de paramètres. Par exemple :f(\overbracket{x_1, x_2, \dots, x_{p}})deviendraf(\overline{x})\forall \overbracket{x_1, x_2, \dots, x_{p}}, \forall y,\quad f(\overbracket{x_1, x_2, \dots, x_{p}}, y+1) = h(\overbracket{x_1, x_2, \dots, x_{p}}, y, f(\overbracket{x_1, x_2, \dots, x_{p}}, y))deviendra\forall \overline{x}, \forall y,\quad f(\overline{x}, y+1) = h(\overline{x}, y, f(\overline{x}, y))^notations
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 Notons
\operatorname{prec} = \lambda x.x \dot{-}1. On a démontré dans le lemme précédent que cette fontion est récursive primitive. Maintenant, on peut définir\operatorname{sub} = \lambda xy.x \dot{-} ycomme :\operatorname{sub} = \rho(P_1^{1}, \operatorname{prec}(P_3^{3}))
[!proposition]- La fonction signe est récursive primitive On définit la fonction signe par :
\operatorname{sg}: \begin{cases} \operatorname{sg}(0) = 0\\ \operatorname{sg(x) = 1 \text{ si } x \neq 0} \end{cases}(car on est sur\mathbb{N}) Cette fonction est récursive primitive[!démonstration]- Démonstration On peut écrire
\operatorname{sg}de plusieurs manières :
\operatorname{sg} = 1 \dot{-} (1 \dot{-}x)\operatorname{sg} = \rho(C_0^{0}, C_2^{1})Ce qui montre, dans tous les cas, que\operatorname{sg}est récursive primitive
[!proposition]- Le prédicat
x>yest récursif primitif Le prédiatx>yest récursif primitif.
- dem ce prédicat est équivalent à
\operatorname{sg}(x \dot{-}y)
[!proposition]- Somme et produits limités Soit
f \in \mathscr{F}_{p+1}une fonction récursive primitive Alors les fonctions :
g = \lambda x_1 x_2 \dots x_{p} y. \sum\limits_{t=0}^{y} f(x_1, x_2, \dots, x_{p}, t)h = \lambda x_1 x_2 \dots x_{p}y. \prod\limits_{t=0}^{y} f(x_1, x_2, \dots, x_{p}, t)sont récursives primitives
[!démonstration]- Démonstration Ces fonctions se définissent facilement par un schéma de récurrence. Pour la somme, par exemple :
g(x_1, x_2, \dots, x_{p}, 0) = f(x_1, x_2, \dots, x_{p}, 0)g(x_1, x_2, \dots, x_{p}, y+1) = g(x_1, x_2, \dots, x_{p}, y) + f(x_1, x_2, \dots, x_{p}, y+1)[!corollaire] factorielle La factorielle peut être définie comme un produit limité, et est donc récursive primitive ^somme-et-produits-limites
Propriétés de clôture
[!proposition]+ clôture par substitution de variables L'ensemble des fonctions récursives primitives est clos par substitution de variables : Soit
f \in \mathscr{F}_{p}récursive primitive Soit\sigma : [\![1; p]\!] \to [\![1;p]\!]Alors la fonction\lambda x_1 x_2\dots x_{p}. f(x_{\sigma(1)}, x_{\sigma(2)}, \dots, x_{\sigma(p)})est aussi récursive primitive
- dem cette fonction est égale à
f(P_{p}^{\sigma(1)}, P_{p}^{\sigma(2)}, \dots, P_{p}^{\sigma(p)})
[!proposition]+ clôture par quantification bornée L'ensemble des prédicats récursifs primitifs est clos par quantification bornée. Cela veut dire que, si
A \subseteq \mathbb{N}^{p+1}est ensemble récursif primitif, alors les ensembles suivants le sont aussi :
B = \{ (\overline{x}, z) \in \mathbb{N}^{p+1} \mid \exists t \leq z,\quad (\overline{x}, t) \in A \}C = \{ (\overline{x}, z) \in \mathbb{N}^{p+1} \mid \forall t \leq z (\overline{x}, t) \in A \}[!démonstration]- Démonstration La fonction caractéristique de
Best donnée par :\chi _{B}(\overline{x}, z) = \mathrm{sg}\left( \sum\limits_{t=0}^{z} \chi _{A}(\overline{x}, t) \right)et celle deCpar :\chi _{C}(\overline{x}, z) = \mathrm{sg}\left( \prod\limits_{t=0}^{z} \chi _{A}(\overline{x}, t) \right)^cloture-par-quantification-bornee
Schémas de définition supplémentaires
On peut trouver de nouveaux schémas de définitions de fonctions qui sont stables sur les fonctions récursives primitives.
[!proposition]+ Schéma de définition par cas Soient
fetgdeux fonctions récursives primitives de\mathscr{F}_{p}SoitA \subseteq \mathbb{N}^{p}un ensemble récursif primitif Alors, la fonctionhdéfinie par :\begin{cases} h(x_1, x_2, \dots, x_{p}) = f(x_1, x_2, \dots, x_{p}) \text{ si } (x_1, x_2, \dots, x_{p}) \in A\\ h(x_1, x_2, \dots, x_{p}) = g(x_1, x_2, \dots, x_{p}) \text{ sinon} \end{cases}est récursive primitive[!démonstration]- Démonstration Il suffit de remarquer que
h = f \cdot \chi(A) + g\cdot \chi(\mathbb{N}^{p} \dot{-} A)[!info]- Généralisation à plus de 2 cas On peut généraliser ce schéma : Soient
f_1, f_2, \dots, f_{n+1} \in \mathscr{F}_{p}des fonctions récursives primitives SoientA_1, A_2, \dots, A_{n} \subseteq \mathbb{N}^{p}des ensembles récursifs primitifs Alors la fonctiongdéfinie par :
g(x_1, x_2, \dots, x_{p}) = f_1(x_1, x_2, \dots, x_{p})si(x_1, x_2, \dots, x_{p}) \in A_1g(x_1, x_2, \dots, x_{p}) = f_2(x_1, x_2, \dots, x_{p})si(x_1, x_2, \dots, x_{p}) \neq A_1et(x_1, x_2, \dots, x_{p}) \in A_2g(x_1, x_2, \dots, x_{p}) = f_3(x_1, x_2, \dots, x_{p})si(x_1, x_2, \dots, x_{p}) \notin A_1 \cup A_2et(x_1, x_2, \dots, x_{p}) \in A_3\vdotsg(x_1, x_2, \dots, x_{p}) = f_{n}(x_1, x_2, \dots, x_{p})si(x_1, x_2, \dots, x_{p}) \notin A_1 \cup A_2 \cup \cdots \cup A_{n-1}et(x_1, x_2, \dots, x_{p}) \in A_{n}g(x_1, x_2, \dots, x_{p}) = f_{n+1}(x_1, x_2, \dots, x_{p})si(x_1, x_2, \dots, x_{p}) \notin A_1 \cup A_2 \cup \cdots \cup A_{n}est une fonction récursive primitive.[!démonstration]- Démonstration On remarque que :
g = f_1 \cdot \chi(A_1) + f_2 \cdot \chi(A_2 \setminus A_1) + f_3 \cdot \chi(A_3 \setminus (A_1 \cup A_2)) + \cdots + f_{n}\cdot \chi(A_{n} \setminus (A_1 \cup A_2 \cup \cdots \cup A_{n-1})) + f_{n+1} \cdot \chi(\mathbb{N}^{p} \setminus (A_1 \cup A_2 \cup \cdots \cup A_{n}))[!corollaire] Corollaire :
\supet\infsont récursives primitives on voit que les fonctions\lambda x_1 x_2 \dots x_{p}. \sup\limits(x_1, x_2, \dots, x_{p})et\lambda x_1 x_2 \dots x_{p}. \inf(x_1, x_2, \dots, x_{p})sont récursives primitives.
\sup\limitspeut être définie comme suit :
\sup(x_1, x_2, \dots, x_{p}) = x_1six_1 \geq x_2etx_2 \geq x_3et ... etx_1 \geq x_{p}\sup(x_1, x_2, \dots, x_{p}) = x_2sinon et six_2 \geq x_3et ... etx_2 \geq x_{p}\vdots\sup(x_1, x_2, \dots, x_{p}) = x_{p-1}sinon et six_{p-1} \geq x_{p}\sup(x_1, x_2, \dots, x_{p}) = x_{p}sinon ^schema-par-cas
[!proposition]+ Récurrences doubles Soient
g, g' \in \mathscr{F}_{p}eth, h' \in \mathscr{F}_{p+3}quatre fonctions. A l'aide de ces fonctions, on peut définir simultanément deux nouvelles fonctionsf, f' \in \mathscr{F}_{p+1}par les conditions suivantes :
f(\overline{x}, 0) = g(\overline{x})f'(\overline{x}, 0) = g'(\overline{x})f(\overline{x}, y+1) = h(\overline{x}, y, f(\overline{x}, y), f'(\overline{x}, y))f'(\overline{x}, y+1) = h'(\overline{x}, y, f(\overline{x}, y), f'(\overline{x}, y))Et ces fonctionsfetf'sont récursives primitives dès queg, g', h, h'sont toutes les quatres récursives primitives.[!démonstration]- Démonstration Pour montrer que
fetf'sont prim-réc dès queg, g', heth'le sont, introduisons la fonctionsk = \alpha_2(f, f'), en utilisant\alpha_2qui bijecte les couples de\mathbb{N}^{2}et les entiers de\mathbb{N}(voir suites finies d'entiers comme fonctions récursives primitives) Commefetf'sont en même temps dans cette fonction, on peut la définir d'un seul coup par schéma de récurrence. Pour cela, on mélange les deux valeurs defetf'en une seule (c'est la valeur dek), et on la sépare à nouveau lors du calcul du schéma de récurrence.kpeut donc être définie comme suit :k(\overline{x}, 0) = \alpha_2(g(\overline{x}), g'(\overline{x}))\begin{align} k(\overline{x}, y+1) = \alpha_2(&h(\overline{x}, y, \quad \beta_2^{1}(k(\overline{x}, y)), \quad \beta_2^{2}(k(\overline{x}, y))), \\&h'(\overline{x}, y, \quad \beta_2^{1}(k(\overline{x}, y)), \quad \beta_2^{2}(k(\overline{x}, y)))) \end{align}La fonctionkest donc récursive primitive
Exemples
[!example] fonction partie entière
q(x, y)La fonctionq(x, y)égale à la partie entière de\frac{x}{y}siy \neq 0et à0siy=0est récursive primitive.
- dem elle est définie par :
q(x, y) = \mu t \leq x ((t+1)\cdot y > x)
[!example] fonction pi
- dem on peut la définir par récurrence comme
\pi(0) = 2et\pi(n+1) = \mu z \leq ( \pi(n)! + 1) \quad (z> \pi(n) \text{ et } z \text{ est premier})
- i on utilise le fait qu'il y a toujours un nombre premier strictement compris entre
petp! + 2