Définissez quelques fonctions de base:
pnje: Nn→ N : ( x1, x2, … ,Xn) ↦ xje
À partir de maintenant, j'utiliserai pour indiquer (x1,x2,…,xn)Xn¯( x1, x2, … , Xn)
Définissez une composition:
Fonctions données
- N k → Ng1,g2,…,gm chacun avec signatureNk→ N
- F: Nm→ N
Construisez la fonction suivante:
h : Nk→ N : xk¯↦ h ( xk¯) = f(g1( xk¯) , g2( xk¯) , … , Gm( xk¯) )
Définissez la récursion primitive:
Fonctions données
- F: Nk→ N
- g: Nk + 2→ N
Construisez la fonction suivante (par morceaux):
h:Nk+1→N:(xk¯,y+1)↦{f(xk¯),g(xk¯,y,h(xk¯,y)),y+1=0y+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:N2→N
- 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:Nk→N
- 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.