Théorème d'itération

Le théorème d'itération est dû à Stephen Kleene, il est aussi connu sous le nom de théorème smn[1] dans sa forme paramétrisée.

Énoncé

Pour une énumération de fonction récursive

Si φ   {\displaystyle \varphi ~} est une énumération acceptable, alors il existe une fonction partielle récursive s   {\displaystyle s~} telle que pour tout indice e   {\displaystyle \mathbf {e} ~} et tous nombres x   {\displaystyle x~} et y   {\displaystyle y~}

φ s ( e , x ) ( y ) = φ e ( x , y ) {\displaystyle \varphi _{s(\mathbf {e} ,x)}(y)=\varphi _{\mathbf {e} }(x,y)} .

Pour un langage de programmation

Si φ {\displaystyle \varphi } est un langage de programmation acceptable alors il existe une fonction calculable s   {\displaystyle s~} telle que pour tout programme e {\displaystyle \mathbf {e} } et tous x   {\displaystyle x~} et y   {\displaystyle y~}

φ s ( e , x ) ( y ) = φ e ( x , y ) {\displaystyle \varphi _{s(\mathbf {e} ,x)}(y)=\varphi _{\mathbf {e} }(x,y)} .

s {\displaystyle s} est appelée fonction d'itération ou fonction s-m-n dans sa forme paramétrisée.

Évaluation partielle

La fonction d'itération est un des points fondamentaux de l'évaluation partielle. En effet, dans φ s ( e , x ) ( y ) = φ e ( x , y ) {\displaystyle \varphi _{s(\mathbf {e} ,x)}(y)=\varphi _{\mathbf {e} }(x,y)} , le programme s ( e , x ) {\displaystyle s(\mathbf {e} ,x)} peut être vu comme la spécialisation du programme e {\displaystyle \mathbf {e} } pour l'entrée x   {\displaystyle x~} , en d'autres termes, le programme e {\displaystyle \mathbf {e} } dont la première entrée a été fixée pour la valeur x   {\displaystyle x~} . Pour cette notion, on pourra se référer aux travaux de N. Jones.

Auto-référence

Par s ( x , x )   {\displaystyle s(x,x)~} , ce théorème permet de construire des programmes faisant référence à leurs propres codes puisque φ s ( x , x ) ( y ) = φ x ( x , y ) {\displaystyle \varphi _{s(x,x)}(y)=\varphi _{x}(x,y)} . En particulier, s ( x , x )   {\displaystyle s(x,x)~} est fondamental dans la construction d'une machine de Turing dont l'arrêt est indécidable ou dans la preuve du théorème de récursion de Kleene.

Exemple

Le programme Python suivant implémente la fonction s11 pour une fonction quelconque f et une variable x :

def S11(f,x):
    return lambda y: f(x,y)

Appliqué à la fonction d'addition entre deux nombres :

def addition(x,y):
    return x+y

def g(x):
    return S11(addition,x)

print(g(4)(3)) # affiche le résultat de addition(4,3) = 4+3 = 7

Dans l'exemple précédent, g s'écrit autrement g : x ( y x + y ) {\displaystyle g:x\mapsto (y\mapsto x+y)} .

Références

  1. René Cori et Daniel Lascar, Logique mathématiques II, p. 47
  • icône décorative Portail de l'informatique théorique