--- up: tags: - s/maths - s/informatique aliases: - fonctions récursives primitives 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}$ > > Soit $p \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}$ (pour $1 \leq i \leq p$) la fonction de $\mathscr{F}_{p}$ telle que pour tout $x_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 $S$ la fonction de $\mathscr{F}_{1}$ qui à chaque entier $n$ fait correspondre $n+1$ : > > $S = \lambda x. x+1$ > > > [!definition] Définition par récurrence > > Soient $f \in \mathscr{F}_{p}$ et $g \in \mathscr{F}_{p+2}$, il existe une unique fonction de $\mathscr{F}_{p+1}$ qui, pour tout $x_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 $E$ de $\mathscr{F}$ tel que : > - $E$ contient toutes les fonctions constantes de $\mathscr{F}$ > - $E$ contient toutes les projections $P_{p}^{i}$ pour tous les entiers $p$ et $i$ avec $1 \leq i \leq p$ > - $E$ contient la fonction successeur $S$ > - $E$ est clos par composition, c'est-à-dire que si $n,p \in \mathbb{N}$ , si $f_1, f_2, \dots, f_{n}$ sont des fonctions de $\mathscr{F}_{p}$ qui sont aussi dans $E$, et si $g \in \mathscr{F}_{n}$ est aussi dans $E$, alors la fonction composée $g(f_1, f_2, \dots, f_{n})$ appartient à E > - $E$ est clos par récurrence, cc'est-à-dire que si $p \in N$, si $g \in \mathscr{F}_{p}$ et $h \in \mathscr{F}_{p+2}$ sont dans $E$, alors la fonction $f \in \mathscr{F}_{p+1}$ définie par récurrence à partir de $g$ et $h$ est aussi dans $E$ : $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}$ > ^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 ensembles $E$ de $\mathscr{F}$ tel que : > - $E$ contient toutes les fonctions **constantes** de $\mathscr{F}$ > - $E$ contient toutes les fonctions de **projection** > - $E$ contient la fonction **successeur** > - $E$ est **clos par composition** : $f_1, f_2, \dots, f_{p}, g \in E \implies g(f_1, \dots, f_{p}) \in E$ > - $E$ est **clos par récurrence** : si $g\in \mathscr{F}_{p}$ et $h \in \mathscr{F}_{p+2}$ sont dans $E$ alors $f: \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 dans $E$ > # Remarques > [!info] Définition par le bas > On peut également produire une définition "par le bas", en construisant d'abord l'ensemble $R_0$ contenant les fonctions constantes, projections et successeur, puis en posant pour tout $n \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 sur $R_0$ puis que si $\mathscr{P}$ est vraie partout sur $R_{n}$ pour un $n \in \mathbb{N}$, alors elle est aussi vraie partout sur $R_{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}$ et $g \in \mathscr{F}_{n}$ sont des fonctions récursives primitives pour lesquelles il existe un algorithme de calcul, alors il existe un algorithme pour calculer $g(f_1, f_2, \dots, f_{n})$, qui consiste à donner en entrée de l'algorithme de calcul de $g$ les résultats des algorithmes de calcul de $f_1, f_2, \dots, f_{n}$ > > - si $g \in \mathscr{F}_{p}$ et $h \in \mathscr{F}_{p+2}$ sont deux fonctions récursives primitives pour lesquelles il existe un algorithme de calcul, alors la fonction $f \in \mathscr{F}_{p+1}$ définie par récurrence à partir de $g$ et $h$ admet é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_PROCEDURE > > ``` > > > > Cela montre bien que la propriété de posséder un algorithme est vraie partout sur l'ensemble des fonctions récursives primitives # Exemples