Files
cours/fonction récursive primitive.md

5.8 KiB

up, tags, aliases, source
up tags aliases source
s/maths
s/informatique
fonctions récursives primitives

[!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