Il y a un peu de liberté dans ce que nous considérons comme "la même valeur". Permettez-moi de montrer qu’il n’existe pas un tel algorithme si «la même valeur» signifie «équivalent sur le plan de l’observation». J'utiliserai un fragment du calcul des constructions, à savoir le système T de Gödel (simplement tapé -calculus, les nombres naturels et la récursion primitive sur eux), donc l'argument s'applique déjà à un calcul beaucoup plus faible.λ
Étant donné un nombre , soit soit le chiffre correspondant le représentant, c'est-à-dire, applications de à . Étant donné un mahcine Turing , soit le chiffre codant d'une manière raisonnable.¯ n n s u c c 0 M ⌈ M ⌉ Mnn¯¯¯ns u c c0M⌈ M⌉M
Disons que deux termes fermés sont équivalents , écrits , quand pour tout , et se normalisent tous les deux au même chiffre (ils se normalisent à un chiffre parce que nous sommes dans un claculus fortement normalisant). t ≃ u n ∈ N tt , u : n a t → n a tt ≃ un∈N stn¯¯¯sn¯¯¯
Supposons que nous ayons un algorithme qui, étant donné tout terme fermé de type calcule un terme équivalent minimal. Ensuite, nous pouvons résoudre l'oracle Halting comme suit.nat→nat
Il existe un terme tel que, pour tous les et toutes les machines de Turing ,
normalise en si s'arrête en étapes, et il se normalise en sinon. Ceci est bien connu, car la simulation d'une machine de Turing pour un nombre fixe d'étapes est récursive primitive. n ∈ N M S ( ⌈ M ⌉ , ¯ n ) ¯ 1 T n ¯ 0 nS:nat×nat→natn∈NMS(⌈M⌉,n¯¯¯)1¯¯¯Tn0¯¯¯n
Il existe de nombreux termes fermés qui sont des termes minimaux équivalents à . Notre algorithme de minimisation renvoie l'un d'eux lorsque nous lui donnons , et il peut même arriver que soit en fait le seulement ce terme minimal. Tout cela n'a pas d'importance, la seule chose qui compte, c'est qu'il existe un nombre fini de termes minimaux équivalents à . λ x : n a t .Z1,…,Zkλ x : n a t .λx:nat.0λ x : n a t .λx:nat.0λ x : n a t .λx:nat.0λx:nat.0
Maintenant, étant donné n'importe quelle machine , considérons le terme
Si s'exécute pour toujours, alors normalise en pour chaque et est équivalent à . Pour décider si s'exécute pour toujours, nous introduisons dans notre algorithme de minimisation et vérifions si l'algorithme a renvoyé l'un des . Si c'est le cas, alors s'exécute pour toujours. Si ce n'est pas le cas, cela s'arrête. (Remarque: l'algorithme n'a pas besoin de calculer lesu : = λ x : n a t .MM u ¯ n ¯ 0 n λ x : n a t .
u:=λx:nat.S(⌈M⌉,x)
Mun¯¯¯0¯¯¯nM u Z 1 , … , Z k M Z 1 , … , Z kλx:nat.0MuZ1,…,ZkMZ1,…,Zk en soi, ceux-ci peuvent être codés en dur dans l'algorithme.)
Ce serait bien de connaître un argument qui fonctionne avec une notion plus faible d'équivalence, par exemple juste réductibilité.β