Pourquoi les fonctions calculables sont-elles également appelées fonctions récursives?

23

Dans la théorie de la calculabilité, les fonctions calculables sont également appelées fonctions récursives. Au moins à première vue, ils n'ont rien de commun avec ce que vous appelez "récursif" dans la programmation quotidienne (c'est-à-dire les fonctions qui s'appellent elles-mêmes).

Quelle est la signification réelle de récursif dans le contexte de la calculabilité? Pourquoi ces fonctions sont-elles appelées "récursives"?

Autrement dit: quel est le lien entre les deux sens de la «récursivité»?

Golo Roden
la source
2
Fonction μ-récursive
Thomas Klimpel
3
Ils trichent, car ils incluent l' opérateur μ . Il s'agit d'un opérateur de minimisation, mais bien sûr, la minimisation a très peu à voir avec la récursivité. Il semble donc que quelqu'un (Kleene) pense que "récursif" sonnerait bien, alors il a inventé une excuse pour utiliser ce nom. Bien plus tard, Robert Soare a expliqué que "calculable" sonnerait beaucoup mieux, et que "récursif" n'était qu'un truc marketing des premiers jours, et tout le monde était d'accord.
Thomas Klimpel
3
Qu'en est-il des fonctions récursives primitives? Copiés à partir de wikipedia, ils sont définis comme et . C'est une fonction qui s'appelle. h ( S ( y ) , x 1 , , x k ) = g ( y , h ( y , x 1 , , X k ) , x 1 , ,h(0,x1,,xk)=f(x1,,xk)h(S(y),x1,,xk)=g(y,h(y,x1,,xk),x1,,xk)
Hendrik Jan
3
@GoloRoden Notez que la balise-description de 'calculabilité' (vous l'avez utilisée pour cette question) dit: "théorie de calculabilité aka théorie de récursivité". Gödel a appelé les fonctions récursives , mais le terme a évolué vers calculable . Probablement pour éviter des confusions comme la vôtre. Les personnes qui étudient la théorie de la calculabilité (de manière intensive) ont tendance à utiliser le terme théorie de la récursivité plus pour «respecter» ses racines.
Auberon
1
parce qu'ils sont définis de manière récursive, c'est-à-dire que " des fonctions plus complexes sont définies en termes de fonctions plus simples et précédemment définies "
Nikos M.

Réponses:

13

Définissez quelques fonctions de base:

  • fonction zéro

    zero:NN:x0
  • fonction successeur

    succ:NN:xx+1
  • fonction de projection

pin:NnN:(x1,x2,,xn)xi

À partir de maintenant, j'utiliserai pour indiquer (x1,x2,,xn)xn¯(x1,x2,,xn)

Définissez une composition:

Fonctions données

  • N kNg1,g2,,gm chacun avec signatureNkN
  • f:NmN

Construisez la fonction suivante:

h:NkN:xk¯h(xk¯)=f(g1(xk¯),g2(xk¯),,gm(xk¯))

Définissez la récursion primitive:

Fonctions données

  • f:NkN
  • g:Nk+2N

Construisez la fonction suivante (par morceaux):

h:Nk+1N:(xk¯,y+1){f(xk¯),y+1=0g(xk¯,y,h(xk¯,y)),y+1>0

Toutes les fonctions qui peuvent être faites en utilisant des compositions et une récursion primitive sur des fonctions de base , sont appelées récursives primitives . On l'appelle ainsi par définition. Bien qu'il existe un lien avec des fonctions qui s'appellent elles-mêmes, il n'est pas nécessaire d'essayer de les lier les unes aux autres. Vous pourriez considérer la récursivité comme un homonyme.

Cette définition et construction ci-dessus a été construite par Gödel (quelques autres personnes étaient également impliquées) dans une tentative de capturer toutes les fonctions qui sont calculables, c'est-à-dire qu'il existe une machine de Turing pour cette fonction. Notez que le concept d'une machine de Turing n'était pas encore décrit, ou qu'il était au moins très vague.

(Un) heureusement, quelqu'un appelé Ackermann est venu et a défini la fonction suivante:

  • Ack:N2N
  • Ack(0,y)=y+1
  • Ack(x+1,0)=Ack(x,1)
  • Ack(x+1,y+1)=Ack(x,Ack(x+1,y))

Cette fonction est calculable, mais il n'y a aucun moyen de la construire en utilisant uniquement les constructions ci-dessus! (ie n'est pas récursif primitif) Cela signifie que Gödel et son groupe n'ont pas réussi à capturer toutes les fonctions calculables dans leur construction!Ack

Gödel a dû étendre sa classe de fonctions pour que puisse être construit. Il l'a fait en définissant ce qui suit:Ack

Minimisation illimitée

  • g:NkN
  • SI ALORS AUTRE n'est pas défini.[f(xk¯,y)=0 AND f(xk¯,z) is defined z<y AND f(xk¯,z)0]

    g(xk¯)=y

    g(xk¯)

Ce dernier peut être difficile à saisir, mais cela signifie essentiellement que est la plus petite racine de (si une racine existe).g((x1,x2,,xk))f


Toutes les fonctions qui peuvent être construites avec toutes les constructions définies ci-dessus sont appelées récursives . Encore une fois, le nom récursif est juste par définition, et il n'a pas nécessairement de corrélation avec les fonctions qui s'appellent. Vraiment, considérez-le comme un homonyme.

Les fonctions récursives peuvent être des fonctions récursives partielles ou des fonctions récursives totales . Toutes les fonctions récursives partielles sont des fonctions récursives totales. Toutes les fonctions récursives primitives sont totales. Comme exemple d'une fonction récursive partielle qui n'est pas totale, considérons la minimisation de la fonction successeur. La fonction successeur n'a pas de racine, donc sa minimisation n'est pas définie. Un exemple de fonction récursive totale (qui utilise la minimisation) est .Ack

Maintenant, Gödel était capable de construire la fonction avec sa classe élargie de fonctions. En fait, chaque fonction qui peut être calculée par une machine de Turing, peut être représentée en utilisant les constructions ci-dessus et vice versa, chaque construction peut être représentée par une machine de Turing.Ack

Si vous êtes intrigué, vous pouvez essayer d'agrandir la classe de Gödel. Vous pouvez essayer de définir «l'opposé» de la minimisation illimitée. Autrement dit, la maximisation illimitée , c'est-à-dire la fonction qui trouve la plus grande racine. Cependant, vous pouvez trouver que le calcul de cette fonction est difficile (impossible). Vous pouvez lire le problème du castor occupé , qui essaie d'appliquer une maximisation illimitée.

Auberon
la source
4
Je sais que les définitions données ne répondent pas vraiment à la question, mais ma réponse décrit l'évolution de la théorie de la récursivité / calculabilité, en quelque sorte. Cela pourrait valoir la peine d'être lu.
Auberon
J'aime ça, merci pour vos efforts :-)
Golo Roden
Dans "si ", je pense que vous voulez dire . De plus, il n'y a pas de clause then avant la clause else du prochain point. h ( ( x 1 , x 2 , . . . , x k , 0 ) )h((x1,x2,...,xk),0)=f((x1,x2,...,xk))h((x1,x2,...,xk,0))
Eric Towers
2
Afaik, c'est subtilement faux. L'ensemble if -fonctions récursives est appelé l'ensemble des fonctions partiellement récursives alors que les fonctions récursives sont toujours totales. C'est pourquoi l'ensemble de toutes les fonctions totales (resp. Les langues qui peuvent être décidées) est appelé R.μ
Raphael
1
Il y a pas mal de déclarations incorrectes dans votre réponse. Vous ne devriez pas inventer l'histoire pour une réponse.
Kaveh
17

Les fondateurs de la théorie de la calculabilité étaient des mathématiciens. Ils ont fondé ce qu'on appelle maintenant la théorie de la calculabilité avant qu'il n'y ait d'ordinateurs. Comment les mathématiciens définissaient-ils les fonctions qui pouvaient être calculées? Par des définitions récursives!

Il y avait donc une fonction récursive avant tout autre modèle de calcul comme les machines de Turing ou le calcul lambda ou les machines à registres. Les gens ont donc appelé ces fonctions des fonctions récursives. Le fait qu'ils se soient avérés être exactement ce que les machines Turing et d'autres modèles peuvent calculer est un événement ultérieur (principalement prouvé par Kleene).

Nous avons la définition simple d'une fonction récursive qui est maintenant appelée fonction récursive primitive . Il n'y avait pas assez de généralités (par exemple la fonction d'Ackermann), donc les gens ont développé des notions plus générales comme les fonctions récursives et les fonctions récursives générales de Herbrand-Gödel qui capturaient toutes les fonctions calculables (en supposant la thèse de l'Église). Church a affirmé que son modèle de calcul lambda capturait toutes les fonctions calculables. Beaucoup de gens, et en particulier Gödel, n'étaient pas convaincus que ceux-ci capturent toutes les fonctions qui peuvent être calculées. Jusqu'à l'analyse du calcul par Turing et l'introduction de son modèle de machine.μ

Nom du champ utilisé pour la théorie de la récursivité. Cependant, il y a eu une poussée réussie au cours des dernières décennies pour changer le nom en quelque chose de plus attrayant de la théorie de la récursivité à quelque chose de plus informatique (vs mathy). En conséquence, le domaine est maintenant appelé théorie de la calculabilité. Cependant, si vous regardez des livres, des articles, des conférences, etc. dans les premières décennies, ils sont appelés théorie de la récursivité et non théorie de la calculabilité. Même le titre du livre de Soare de 1987 (qui était la principale personne à l'origine de la tentative de changer le nom en théorie de la calculabilité) est "Ensembles et degrés énumérables récursivement".

Si vous voulez en savoir plus sur l'histoire un endroit amusant et bon à lire est le premier chapitre de la théorie de la récursivité classique par Odifreddi.

Kaveh
la source
7

Robert Soare a écrit un essai sur cette question. Selon lui, le terme de fonctions récursives (générales) a été inventé par Gödel, qui les a définies en utilisant une sorte de récursivité mutuelle. Le nom est resté, mais plus tard, d'autres définitions équivalentes ont été trouvées.

Pour plus d'informations, je recommande l'essai de Soare.

Yuval Filmus
la source
0

au lieu de mettre un long commentaire a décidé d'ajouter une réponse:

Parce qu'elles sont définies de manière récursive , c'est-à-dire que " des fonctions plus complexes sont définies en termes de fonctions précédemment définies et plus simples "

Ce type de procédure itérative ou incrémentale crée des fonctions bien définies (au sens mathématique)

C'est le sens de la récursivité dans le langage mathématique. Voir ci-dessous comment cela se rapporte à la récursivité dans le langage de programmation.

Comparez cette procédure avec des techniques et des méthodes comme l' induction (mathématique) qui est également un exemple de récursivité en mathématiques.

La programmation a une veine mathématique aussi bien qu'une ingénierie.

Cette procédure (généralement constructive) est également appelée « amorçage » dans le langage des systèmes d'exploitation.

Cependant, une récursivité d'exécution de la même fonction (c'est-à-dire se calant pendant son exécution ), car elle doit (hmm, devrait) se produire sur des valeurs (ou arguments) déjà calculés, ou en d'autres termes, dans la partie de l'ensemble de résultats déjà calculée , est également récursif dans le sens ci-dessus, c'est-à-dire " défini par rapport aux fonctions précédemment définies (et leurs valeurs) "

Sinon n'est pas bien défini et conduit à des choses comme Stack Overflow :))))

Pour donner un autre exemple des systèmes d'exploitation, une récursivité d'exécution (s'appelle elle-même) peut être considérée comme l'analogue d'un redémarrage du système d'exploitation après une certaine mise à jour (par exemple, une mise à jour principale). De nombreux systèmes d'exploitation effectuent la procédure suivante:

  1. un démarrage initial pour charger des routines de bas niveau (par exemple E / S)
  2. faire les mises à jour nécessaires (en utilisant les routines de bas niveau)
  3. redémarrer (effectivement, se ré-appeler), mais cette fois en chargeant les routines les plus complexes (ou même tout le système)

La belle réponse d' Auberon illustre plus en détail une telle procédure.

Nikos M.
la source