En logique mathématique et en informatique , une fonction récursive générale , également appelée fonction récursive partielle ou fonction μ-récursive , est une fonction partielle des nombres naturels vers les nombres naturels qui est « calculable » au sens intuitif comme au sens formel . Si la fonction est totale , on l'appelle aussi fonction récursive totale (parfois abrégée en fonction récursive ). En théorie de la calculabilité , il a été démontré que les fonctions μ-récursives sont précisément les fonctions calculables par les machines de Turing (c'est l'un des théorèmes qui soutiennent la thèse de Church-Turing ). Les fonctions μ-récursives sont étroitement liées aux fonctions récursives primitives , et leur définition inductive (ci-dessous) s'appuie sur celle des fonctions récursives primitives. Cependant, toute fonction récursive totale n'est pas une fonction récursive primitive ; l'exemple le plus connu est la fonction d'Ackermann .
D’autres classes de fonctions équivalentes sont les fonctions du lambda-calcul et les fonctions qui peuvent être calculées par des algorithmes de Markov .
Le sous-ensemble de toutes les fonctions récursives totales avec des valeurs dans .
La plus petite classe de fonctions incluant les fonctions initiales et stable par composition et récursivité primitive (c'est-à-dire sans minimisation) est celle des fonctions récursives primitives . Toutes les fonctions récursives primitives sont totales, ce qui n'est pas le cas des fonctions récursives partielles ; par exemple, la minimisation de la fonction successeur n'est pas définie. Les fonctions récursives primitives sont un sous-ensemble des fonctions récursives totales, qui sont elles-mêmes un sous-ensemble des fonctions récursives partielles. Par exemple, on peut démontrer que la fonction d'Ackermann est totalement récursive et non primitive.
Fonctions primitives ou « basiques » :
- Fonctions constantes : Pour tout entier naturel
- D'autres définitions utilisent une fonction zéro comme fonction primitive qui renvoie toujours zéro, et construisent les fonctions constantes à partir de la fonction zéro, de la fonction successeur et de l' opérateur de composition .
- Fonction successeur S :
- Fonction de projection
Opérateurs (le domaine d'une fonction définie par un opérateur est l'ensemble des valeurs des arguments telles que chaque application de fonction effectuée lors du calcul fournisse un résultat bien défini) :
- Opérateur de composition
- Opérateur de récursion primitive : Étant donné la fonction k -aire
- Opérateur de minimisation : Étant donné une fonction ( k +1)-aire
Intuitivement, la minimisation cherche — en commençant la recherche à partir de 0 et en remontant — le plus petit argument qui fait que la fonction renvoie zéro ; s’il n’existe pas un tel argument, ou si l’on rencontre un argument pour lequel n'est pas défini pour l'argument
Alors que certains manuels utilisent l'opérateur μ tel que défini ici d'autres exigent que l'opérateur μ soit appliqué uniquement aux fonctions totales peut être utilisé pour comparer des fonctions μ-récursives partielles. Ceci est défini pour toutes les fonctions partielles f et g de sorte que
Cela se vérifie si et seulement si, pour tout choix d'arguments, soit les deux fonctions sont définies et leurs valeurs sont égales, soit les deux fonctions ne sont pas définies.
Exemples
Des exemples n'impliquant pas l'opérateur de minimisation peuvent être trouvés dans la section Fonction récursive primitive#Exemples .
Les exemples suivants sont destinés uniquement à illustrer l'utilisation de l'opérateur de minimisation ; ils pourraient également être définis sans lui, bien que d'une manière plus compliquée, puisqu'ils sont tous récursifs primitifs.
Les exemples suivants définissent des fonctions récursives générales qui ne sont pas récursives primitives ; par conséquent, elles ne peuvent éviter d'utiliser l'opérateur de minimisation.
Fonction récursive totale
Une fonction récursive générale est dite totale si elle est définie pour toute entrée, ou, de manière équivalente, si elle peut être calculée par une machine de Turing totale . Il n'existe aucun moyen de déterminer par le calcul si une fonction récursive générale donnée est totale — voir le problème de l'arrêt .
Équivalence avec d'autres modèles de calculabilité
Dans l' équivalence des modèles de calculabilité , un parallèle est établi entre les machines de Turing qui ne s'arrêtent pas pour certaines entrées et le résultat indéfini de cette entrée dans la fonction récursive partielle correspondante. L'opérateur de recherche non borné n'est pas définissable par les règles de la récursivité primitive, car celles-ci ne fournissent aucun mécanisme pour les « boucles infinies » (valeurs indéfinies).
théorème de la forme normale
Un théorème de forme normale dû à Kleene affirme que pour chaque k, il existe des fonctions récursives primitives
Le nombre e est appelé un indice ou un nombre de Gödel pour la fonction f . Une conséquence de ce résultat est que toute fonction μ-récursive peut être définie en utilisant une seule instance de l'opérateur μ appliqué à une fonction récursive primitive (totale).
Minsky observe le
Construire U consiste à écrire la définition d'une fonction récursive générale U ( n , x ) qui interprète correctement le nombre n et calcule la fonction appropriée de x . Construire U directement impliquerait essentiellement le même effort et les mêmes idées que ceux que nous avons investis dans la construction de la machine de Turing universelle
Symbolisme
Plusieurs symbolismes différents sont utilisés dans la littérature. L'un des avantages de l'utilisation de ces symbolismes est que la dérivation d'une fonction par « imbrication » des opérateurs est plus facile à écrire sous une forme compacte. La chaîne de paramètres suit.
- Fonction constante : Kleene utilise "
- par exemple
- par exemple
- Fonction successeur : Kleene utilise
- Fonction identité : Kleene (1952) utilise
- par exemple
- Opérateur de composition (substitution) : Kleene utilise une police en gras
- Si on nous donne
- alors
- De la même manière, mais sans les indices et les exposants, BBJ écrit :
- Récursivité primitive : Kleene utilise le symbole
- étape de base :
- étape d'induction :
- Exemple : définition de récursion primitive de
Exemple : Kleene donne un exemple de la manière d'effectuer la dérivation récursive de
- étape de base :
- étape d'induction :
Il arrive à :