Il est impossible d'écrire un langage de programmation qui autorise toutes les machines qui s'arrêtent sur toutes les entrées et aucune autre. Cependant, il semble facile de définir un tel langage de programmation pour n'importe quelle classe de complexité standard. En particulier, nous pouvons définir un langage dans lequel nous pouvons exprimer tous les calculs efficaces et seulement les calculs efficaces.
Par exemple, pour quelque chose comme : prenez votre langage de programmation préféré, et après avoir écrit votre programme (correspondant à Turing Machine M ' ), ajoutez trois valeurs à l'en-tête: un entier c , et un entier k , et une sortie par défaut d . Lorsque le programme est compilé, sortir une machine de Turing M qui, étant donné l'entrée x de taille n, exécute M ' sur x pour c n k étapes. Si M ′ ne s'arrête pas avant le c n kles étapes sont en hausse, sortir la sortie par défaut . Sauf erreur, ces langages de programmation nous permettront d'exprimer tous les calculs en P et rien de plus. Cependant, ce langage proposé est intrinsèquement non intéressant.
Ma question: existe-t-il des langages de programmation qui capturent des sous-ensembles de fonctions calculables (telles que toutes les fonctions efficacement calculables) de manière non triviale? S'il n'y en a pas, y a-t-il une raison à cela?