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 théorie de la complexité computationnelle sous le nom de classe de complexité R.
des n-uplets finis de nombres naturels et renvoient un seul nombre naturel. Elles constituent la plus petite classe de fonctions partielles incluant les fonctions initiales et sont stables par composition, récursion primitive et par l' opérateur de minimisation 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
- Fonction successeur S :
- Fonction de projection (également appelée fonction identité ) : Pour tout nombre naturel tel que :
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 (également appelé opérateur de substitution ) : Étant donné une fonction m -aire et m fonctions k -aires :
- Opérateur de récursion primitive
- Opérateur de minimisation
Intuitivement, la minimisation cherche, en partant de 0 et en remontant, le plus petit argument qui annule la fonction ; s’il n’existe pas d’argument de ce type, ou si l’on rencontre un argument pour lequel
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 Kleene (voir ci -dessous ) . La seule différence est qu'il devient indécidable de déterminer si une définition de fonction spécifique définit une fonction μ-récursive, de même qu'il est indécidable de déterminer si une fonction calculable (c'est-à-dire μ-récursive) est totale
La relation d'égalité forte peut être utilisée pour comparer des fonctions μ-récursives partielles. Elle est définie 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é
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 et telles que pour toute fonction μ-récursive à k variables libres, il existe un e tel que
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 que l' ensemble défini ci-dessus est en substance l'équivalent μ-récursif de la machine de Turing universelle :
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 qu'il est plus facile d'écrire la dérivation d'une fonction par « imbrication » des opérateurs les uns dans les autres sous une forme compacte. Dans ce qui suit, la chaîne de paramètres est abrégée comme suit :
- Fonction constante : Kleene utilise " " et Boolos-Burgess-Jeffrey (2002) (BBJ) utilise l'abréviation " " :
- par exemple
- par exemple
- Fonction successeur : Kleene utilise « et » pour « Successor ». Comme « successor » est considéré comme primitif, la plupart des textes utilisent l’apostrophe comme suit :
- Fonction identité : Kleene (1952) l'utilise pour désigner la fonction identité sur les variables ; BBJ utilise la fonction identité sur les variables pour :
- par exemple
- Opérateur de composition (substitution) : Kleene utilise le gras (à ne pas confondre avec son utilisation du terme « successeur » !). L’exposant se réfère à la fonction , tandis que l’indice se réfère à la variable .
- 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 où n indique le nombre de variables ; BBJ utilise . Étant donné :
- étape de base :
- étape d'induction :
- Exemple : définition de récursion primitive de
Exemple : Kleene donne un exemple de dérivation récursive (notez l'inversion des variables ) . Il commence par des fonctions initiales
- étape de base :
- étape d'induction :
Il arrive à :