En teoría de computabilidad , el operador μ , el operador de minimización o el operador de búsqueda ilimitada buscan el menor número natural con una propiedad dada. Agregar el operador μ a las funciones recursivas primitivas permite definir todas las funciones computables .
Supongamos que R( y , x 1 , ..., x k ) es una relación fija ( k + 1)-aria sobre los números naturales . El operador μ "μ y ", ya sea en forma ilimitada o acotada, es una "función teórica de números" definida desde los números naturales hasta los números naturales. Sin embargo, "μ y " contiene un predicado sobre los números naturales, que puede considerarse como una condición que se evalúa como verdadera cuando se satisface el predicado y como falsa cuando no lo es.
El operador μ acotado aparece anteriormente en Kleene (1952) Capítulo IX Funciones recursivas primitivas, §45 Predicados, representación de factores primos como:
Stephen Kleene señala que se permite cualquiera de las seis restricciones de desigualdad en el rango de la variable y , es decir, y < z , y ≤ z , w < y < z , w < y ≤ z , w ≤ y < z y w ≤ y ≤ z . "Cuando el rango indicado no contiene ninguna y tal que R( y ) [sea "verdadero"], el valor de la expresión "μ y " es el número cardinal del rango" (p. 226); por eso aparece la " z " predeterminada en la definición anterior. Como se muestra a continuación, el operador μ acotado "μ y y < z " se define en términos de dos funciones recursivas primitivas llamadas suma finita Σ y producto finito Π, una función predicada que "hace la prueba" y una función representativa que convierte {t, f} en { 0 , 1 }.
En el Capítulo XI §57 Funciones recursivas generales, Kleene define el operador μ ilimitado sobre la variable y de la siguiente manera:
En este caso, R mismo, o su función representativa , entrega 0 cuando se satisface (es decir, entrega verdadero ); la función entrega entonces el número y . No existe ningún límite superior en y , por lo tanto, no aparecen expresiones de desigualdad en su definición.
Para un R( y ) dado, el μ-operador ilimitado μ y R( y ) (nótese que no se requiere "(E y )") es una función parcial . Kleene, en cambio, la convierte en una función total (cf. p. 317):
La versión total del operador μ ilimitado se estudia en matemáticas inversas de orden superior (Kohlenbach (2005)) en la siguiente forma:
donde los superíndices significan que n es de orden cero, f es de primer orden y μ es de segundo orden. Este axioma da lugar al sistema de los cinco grandes ACA 0 cuando se combina con la teoría básica habitual de las matemáticas inversas de orden superior. [ cita requerida ]
(i) En el contexto de las funciones recursivas primitivas , donde la variable de búsqueda y del operador μ está acotada, p. ej. y < z en la fórmula siguiente, si el predicado R es recursivo primitivo (Prueba de Kleene n.° E, p. 228), entonces
(ii) En el contexto de las funciones recursivas (totales) , donde la variable de búsqueda y no está acotada pero se garantiza que existe para todos los valores x i de los parámetros del predicado recursivo total R,
entonces los cinco operadores recursivos primitivos más el operador μ ilimitado pero total dan lugar a lo que Kleene llamó las funciones recursivas "generales" (es decir, funciones totales definidas por los seis operadores de recursión).
(iii) En el contexto de las funciones recursivas parciales : supongamos que la relación R se cumple si y solo si una función recursiva parcial converge a cero. Y supongamos que esa función recursiva parcial converge (a algo, no necesariamente a cero) siempre que μ y R( y , x 1 , ..., x k ) esté definida e y sea μ y R( y , x 1 , ..., x k ) o menor. Entonces la función μ y R( y , x 1 , ..., x k ) también es una función recursiva parcial.
El operador μ se utiliza en la caracterización de las funciones computables como funciones recursivas μ .
En matemáticas constructivas , el operador de búsqueda ilimitado está relacionado con el principio de Markov .
El operador μ acotado se puede expresar de forma bastante sencilla en términos de dos funciones recursivas primitivas (en adelante, "prf") que también se utilizan para definir la función CASE: el producto de términos Π y la suma de términos Σ (véase Kleene #B página 224). (Según sea necesario, cualquier límite para la variable, como s ≤ t o t < z , o 5 < x < 17, etc., es adecuado). Por ejemplo:
Antes de continuar, necesitamos introducir una función ψ llamada "la función que representa " del predicado R. La función ψ se define desde las entradas (t = "verdad", f = "falsedad") hasta las salidas (0, 1) ( ¡nótese el orden! ). En este caso, la entrada a ψ, es decir {t, f}, proviene de la salida de R:
Kleene demuestra que μ y y < z R( y ) se define de la siguiente manera; vemos que la función producto Π actúa como un operador booleano OR, y la suma Σ actúa de manera similar a un operador booleano AND pero produce {Σ≠0, Σ=0} en lugar de solo {1, 0}:
La ecuación es más fácil si se observa con un ejemplo, como el que dio Kleene. Él simplemente inventó las entradas para la función representativa ψ(R( y )). Designó las funciones representativas χ( y ) en lugar de ψ( x , y ):
El operador μ ilimitado (la función μ y ) es el que se define comúnmente en los textos. Pero el lector puede preguntarse por qué el operador μ ilimitado busca una función R( x , y ) que dé como resultado cero , en lugar de otro número natural.
La razón para el valor cero es que el operador ilimitado μ y se definirá en términos de la función "producto" Π con su índice y permitido para "crecer" a medida que el operador μ busca. Como se señaló en el ejemplo anterior, el producto Π x < y de una cadena de números ψ( x , 0) *, ..., * ψ( x , y ) da como resultado cero siempre que uno de sus miembros ψ( x , i ) sea cero:
si cualquier ψ( x , i ) = 0 donde 0≤ i ≤ s . Por lo tanto, Π actúa como un AND booleano.
La función μ y produce como "salida" un único número natural y = {0, 1, 2, 3, ...}. Sin embargo, dentro del operador pueden aparecer una de dos "situaciones": (a) una "función de teoría de números" χ que produce un único número natural, o (b) un "predicado" R que produce {t = verdadero, f = falso}. (Y, en el contexto de funciones recursivas parciales , Kleene admite más adelante un tercer resultado: "μ = indeciso". [1] )
Kleene divide su definición del operador μ ilimitado para manejar las dos situaciones (a) y (b). Para la situación (b), antes de que el predicado R( x , y ) pueda servir en una capacidad aritmética en el producto Π, su salida {t, f} debe ser primero "operada" por su función representativa χ para producir {0, 1}. Y para la situación (a) si se debe utilizar una definición, entonces la función teórica de números χ debe producir cero para "satisfacer" el operador μ. Con este asunto resuelto, demuestra con una sola "Prueba III" que los tipos (a) o (b) junto con los cinco operadores recursivos primitivos producen las funciones recursivas (totales) , con esta condición para una función total :
Kleene también admite una tercera situación (c) que no requiere la demostración de "para todo x existe una y tal que ψ( x , y )." La utiliza en su prueba de que existen más funciones recursivas totales de las que se pueden enumerar; cf nota al pie Demostración de función total.
La prueba de Kleene es informal y utiliza un ejemplo similar al primer ejemplo, pero primero convierte el operador μ en una forma diferente que utiliza el "producto de términos" Π que opera sobre la función χ que produce un número natural n , que puede ser cualquier número natural, y 0 en el caso en que la prueba del operador u se "satisfaga".
Esto es sutil. A primera vista, las ecuaciones parecen utilizar la recursión primitiva, pero Kleene no nos ha proporcionado un paso de base y un paso de inducción de la forma general:
Para ver lo que está pasando, primero tenemos que recordar que hemos asignado un parámetro (un número natural) a cada variable x i . Segundo, vemos un operador sucesor en funcionamiento iterando y (es decir, y' ). Y tercero, vemos que la función μ y y < z χ( y , x ) solo está produciendo instancias de χ( y , x ) es decir χ(0, x ), χ(1, x ), ... hasta que una instancia produce 0. Cuarto, cuando una instancia χ( n , x ) produce 0, hace que el término medio de τ, es decir, v = π( x , y' ) produzca 0. Finalmente, cuando el término medio v = 0, μ y y < z χ( y ) ejecuta la línea (iii) y "sale". La presentación de Kleene de las ecuaciones (ii) y (iii) se ha intercambiado para señalar que la línea (iii) representa una salida , una salida que se toma solo cuando la búsqueda encuentra con éxito una y que satisface χ( y ) y el término producto medio π( x , y' ) es 0; el operador entonces termina su búsqueda con τ( z' , 0, y ) = y .
Para el ejemplo de Kleene "...considera cualquier valor fijo de ( x i , ..., x n ) y escribe simplemente 'χ( y )' para 'χ( x i , ..., x n ), y )'":
Tanto Minsky (1967) p. 21 como Boolos-Burgess-Jeffrey (2002) p. 60-61 proporcionan definiciones del operador μ como una máquina abstracta; véase la nota al pie Definiciones alternativas de μ.
La siguiente demostración sigue a Minsky sin la "peculiaridad" mencionada en la nota al pie. La demostración utilizará un modelo de máquina contadora "sucesora" estrechamente relacionado con los axiomas de Peano y las funciones recursivas primitivas . El modelo consta de (i) una máquina de estados finitos con una TABLA de instrucciones y un denominado "registro de estados" que renombraremos "Registro de Instrucciones" (IR), (ii) unos pocos "registros", cada uno de los cuales puede contener sólo un único número natural, y (iii) un conjunto de instrucciones de cuatro "comandos" descritos en la siguiente tabla:
El algoritmo para el operador de minimización μ y [φ( x , y )] creará, en esencia, una secuencia de instancias de la función φ( x , y ) a medida que aumenta el valor del parámetro y (un número natural); el proceso continuará (ver Nota † a continuación) hasta que se produzca una coincidencia entre la salida de la función φ( x , y ) y algún número preestablecido (normalmente 0). Por lo tanto, la evaluación de φ( x , y ) requiere, al principio, la asignación de un número natural a cada una de sus variables x y una asignación de un "número de coincidencia" (normalmente 0) a un registro " w ", y un número (normalmente 0) al registro y .
En lo que sigue, asumimos que el Registro de Instrucciones (IR) encuentra la "rutina" μ y en la instrucción número " n ". Su primera acción será establecer un número en un registro " w " dedicado, un "ejemplo" del número que la función φ( x , y ) debe producir antes de que el algoritmo pueda terminar (clásicamente, este es el número cero, pero vea la nota al pie sobre el uso de números distintos de cero). La siguiente acción del algoritmo en la instrucción " n +1" será borrar el registro " y " -- " y " actuará como un "contador ascendente" que comienza desde 0. Luego, en la instrucción " n +2", el algoritmo evalúa su función φ( x , y ) -- asumimos que esto requiere j instrucciones para lograrse -- y al final de su evaluación φ( x , y ) deposita su salida en el registro "φ". En la instrucción ( n + j +3) el algoritmo compara el número en el registro " w " (por ejemplo, 0) con el número en el registro "φ"; si son iguales, el algoritmo ha tenido éxito y escapa a través de exit ; de lo contrario, incrementa el contenido del registro " y " y vuelve a realizar un bucle con este nuevo valor y para probar la función φ( x , y ) nuevamente.
Lo que es obligatorio para que la función sea una función total es una demostración mediante algún otro método (por ejemplo, inducción ) de que para todas y cada una de las combinaciones de valores de sus parámetros x i algún número natural y satisfará el operador μ de modo que el algoritmo que representa el cálculo pueda terminar:
Para ver un ejemplo de lo que esto significa en la práctica, vea los ejemplos en mu funciones recursivas —incluso el algoritmo de sustracción truncada más simple " x - y = d " puede producir, para los casos indefinidos cuando x < y , (1) ninguna terminación, (2) ningún número (es decir, algo incorrecto con el formato por lo que el resultado no se considera un número natural), o (3) engaño: números incorrectos en el formato correcto. El algoritmo de sustracción "adecuado" requiere una atención cuidadosa a todos los "casos".
Pero incluso cuando se ha demostrado que el algoritmo produce el resultado esperado en los casos {(0, 0), (1, 0), (0, 1), (2, 1), (1, 1), (1, 2)}, nos quedamos con una sensación de inquietud hasta que podamos idear una "demostración convincente" de que los casos ( x , y ) = ( n , m ) producen todos los resultados esperados. Volviendo al punto de Kleene: ¿es nuestra "demostración" (es decir, el algoritmo que es nuestra demostración) lo suficientemente convincente como para ser considerada efectiva ?
Minsky (1967) define el operador μ ilimitado en la página 210, pero con un defecto peculiar: el operador no dará como resultado t = 0 cuando se satisface su predicado (la prueba IF-THEN-ELSE); en lugar de eso, da como resultado t = 2. En la versión de Minsky, el contador es " t ", y la función φ( t , x ) deposita su número en el registro φ. En la definición habitual de μ, el registro w contendrá 0, pero Minsky observa que puede contener cualquier número k . El conjunto de instrucciones de Minsky es equivalente al siguiente, donde "JNE" = Saltar a z si no es igual:
El operador μ ilimitado también está definido por Boolos-Burgess-Jeffrey (2002) p. 60-61 para una máquina contadora con un conjunto de instrucciones equivalente al siguiente:
En esta versión, el contador "y" se llama "r2", y la función f( x , r2 ) deposita su número en el registro "r3". Quizás la razón por la que Boolos-Burgess-Jeffrey borra r3 es para facilitar un salto incondicional al bucle ; esto se hace a menudo mediante el uso de un registro dedicado "0" que contiene "0":