Es imposible escribir un lenguaje de programación que permita todas las máquinas que se detienen en todas las entradas y no en otras. Sin embargo, parece fácil definir dicho lenguaje de programación para cualquier clase de complejidad estándar. En particular, podemos definir un lenguaje en el que podamos expresar todos los cálculos eficientes y solo los cálculos eficientes.
Por ejemplo, para algo como : tome su lenguaje de programación favorito, y después de escribir su programa (correspondiente a Turing Machine ), agregue tres valores al encabezado: un entero , y un entero , y una salida predeterminada . Cuando se compila el programa, genera una máquina Turing que, dada la entrada de tamaño ejecuta en para pasos. Si no se detiene antes de que los pasos estén arriba, envíe la salida predeterminadaM ′ c k d M x n M ′ x c n k M ′ c n k d P. A menos que me equivoque, estos lenguajes de programación nos permitirán expresar todos los cálculos en y nada más. Sin embargo, este lenguaje propuesto es intrínsecamente no interesante.
Mi pregunta: ¿existen lenguajes de programación que capturen subconjuntos de funciones computables (como todas las funciones computables eficientemente) de una manera no trivial? Si no hay, ¿hay alguna razón para esto?