En teoría de la computabilidad , el teorema de Rice-Shapiro es una generalización del teorema de Rice , llamado así por Henry Gordon Rice y Norman Shapiro . Afirma que cuando una propiedad semidecidible de funciones computables parciales es verdadera en una determinada función parcial, se puede extraer una subfunción finita tal que la propiedad siga siendo verdadera.
La idea informal del teorema es que la "única forma general" de obtener información sobre el comportamiento de un programa es ejecutar el programa y, debido a que un cálculo es finito, uno sólo puede probar el programa en un número finito de entradas.
Un teorema estrechamente relacionado es el teorema de Kreisel-Lacombe-Shoenfield-Tseitin , que fue obtenido independientemente por Georg Kreisel , Daniel Lacombe y Joseph R. Shoenfield [1] , y por Grigori Tseitin [2] .
Teorema de Rice-Shapiro. [3] : 482 [4] [5] Sea P un conjunto de funciones parciales computables tales que el conjunto de índices de P (es decir, el conjunto de índices e tales que φ e ∈ P , para alguna numeración admisible fija φ ) es semidecidible . Entonces, para cualquier función parcial computable f , se cumple que P contiene f si y solo si P contiene una subfunción finita de f (es decir, una función parcial definida en un número finito de puntos, que toma los mismos valores que f en esos puntos).
Teorema de Kreisel-Lacombe-Shoenfield-Tseitin. [3] : 362 [1] [2] [6] [7] [8] Sea P un conjunto de funciones computables totales tales que el conjunto de índices de P es decidible con la promesa de que la entrada es el índice de una función computable total (es decir, hay una función computable parcial D que, dado un índice e tal que φ e es total, devuelve 1 si φ e ∈ P y 0 en caso contrario; D ( e ) no necesita definirse si φ e no es total). Decimos que dos funciones totales f , g "concuerdan hasta n " si para todo k ≤ n se cumple que f ( k ) = g ( k ). Entonces, para cualquier función computable total f , existe n tal que para toda función computable total g que concuerde con f hasta n , f ∈ P ⟺ g ∈ P .
Los dos teoremas están estrechamente relacionados y también se relacionan con el teorema de Rice . En concreto:
Según el teorema de Rice-Shapiro, no es ni semidecidible ni co-semidecidible si un programa dado:
Según el teorema de Kreisel-Lacombe-Shoenfield-Tseitin, es indecidible si un programa dado que se supone que siempre termina :
Sea P un conjunto de funciones computables parciales con un conjunto de índices semidecidibles.
Primero demostramos que P es un conjunto cerrado hacia arriba , es decir, si f ⊆ g y f ∈ P , entonces g ∈ P (aquí, f ⊆ g significa que f es una subfunción de g , es decir, el gráfico de f está contenido en el gráfico de g ). La demostración utiliza un argumento diagonal típico de los teoremas de computabilidad.
Supongamos por contradicción que existen dos funciones f y g tales que f ∈ P , g ∉ P y f ⊆ g . Construimos un programa p de la siguiente manera. Este programa toma una entrada x . Utilizando una técnica de ensamblaje estándar, p ejecuta dos tareas en paralelo.
Distinguimos dos casos.
A continuación, demostramos que si P contiene una función computable parcial f , entonces contiene una subfunción finita de f . Fijemos una función computable parcial f en P . Construimos un programa p que toma la entrada x y ejecuta los siguientes pasos:
Supongamos que φ p ∉ P . Esto implica que el semialgoritmo para semidecidir P utilizado en el primer paso nunca devuelve verdadero. Entonces, p calcula f , y esto contradice el supuesto f ∈ P . Por lo tanto, debemos tener φ p ∈ P , y el algoritmo para semidecidir P devuelve verdadero en p después de una cierta cantidad de pasos n . La función parcial φ p solo se puede definir en entradas x tales que x ≤ n , y devuelve f ( x ) en tales entradas, por lo tanto, es una subfunción finita de f que pertenece a P .
Sólo queda reunir las dos partes de la demostración. Si P contiene una función computable parcial f , entonces contiene una subfunción finita de f por la segunda parte, y a la inversa, si contiene una subfunción finita de f , entonces contiene a f , porque está cerrada hacia arriba por la primera parte. De esta forma, el teorema queda demostrado.
Se dice que una función total es en última instancia cero si siempre toma el valor cero excepto para un número finito de puntos, es decir, existe N tal que para todo n ≥ N , h ( n ) = 0. Nótese que dicha función siempre es computable (se puede calcular simplemente verificando si la entrada está en una cierta lista predefinida y, de lo contrario, devolviendo cero).
Fijamos U como una enumeración computable de todas las funciones totales que en última instancia son cero, es decir, U es tal que:
Podemos construir U mediante técnicas estándar (por ejemplo, para aumentar N , enumerar funciones finalmente cero que estén limitadas por N y cero en entradas mayores que N ).
Sea P como en el enunciado del teorema: un conjunto de funciones computables totales tales que existe un algoritmo que, dado un índice e y una promesa de que φ e es computable, decide si φ e ∈ P .
Primero demostramos un lema: Para toda función total computable f , y para todo entero N , existe una función h en última instancia nula tal que h concuerda con f hasta N , y f ∈ P ⟺ h ∈ P .
Para demostrar este lema, fijemos una función computable total f y un entero N , y sea B el booleano f ∈ P. Construyamos un programa p que tome la entrada x y realice estos pasos:
Claramente, p siempre termina, es decir, φ p es total. Por lo tanto, la promesa de que P se ejecute en p se cumple.
Supongamos por contradicción que uno de f y φ p pertenece a P y el otro no, es decir, ( φ p ∈ P ) ≠ B . Entonces vemos que p calcula f , ya que P no devuelve B en p sin importar la cantidad de pasos. Por lo tanto, tenemos f = φ p , contradiciendo el hecho de que uno de f y φ p pertenece a P y el otro no. Este argumento prueba que f ∈ P ⟺ φ p ∈ P . Luego, el segundo paso hace que p devuelva cero para x suficientemente grande , por lo que φ p es en última instancia cero; y por construcción (debido al primer paso), φ p concuerda con f hasta N . Por lo tanto, podemos tomar h = φ p y el lema está probado.
Con el lema anterior, ahora podemos demostrar el teorema de Kreisel-Lacombe-Shoenfield-Tseitin. Nuevamente, fijemos P como en el enunciado del teorema, sea f una función computable total y sea B el booleano " f ∈ P ". Construyamos el programa p que toma la entrada x y ejecuta estos pasos:
Primero demostramos que P devuelve B en p . Supongamos por contradicción que este no es el caso ( P devuelve ¬ B o P no termina). Entonces p realmente calcula f . En particular, φ p es total, por lo que la promesa a P cuando se ejecuta en p se cumple, y P devuelve el booleano φ p ∈ P , que es f ∈ P , es decir, B , contradiciendo la suposición.
Sea n el número de pasos que P da para regresar a B en p . Afirmamos que n satisface la conclusión del teorema: para toda función total computable g que concuerda con f hasta n , se cumple que f ∈ P ⟺ g ∈ P . Supongamos por contradicción que existe g total computable que concuerda con f hasta n y tal que ( g ∈ P ) ≠ B .
Aplicando nuevamente el lema, existe k tal que U ( k ) concuerda con g hasta n y g ∈ P ⟺ U ( k ) ∈ P . Para tal k , U ( k ) concuerda con g hasta n y g concuerda con f hasta n , por lo tanto U ( k ) también concuerda con f hasta n , y como ( g ∈ P ) ≠ B y g ∈ P ⟺ U ( k ) ∈ P , tenemos ( U ( k ) ∈ P ) ≠ B . Por lo tanto, U ( k ) satisface las condiciones del paso de búsqueda paralela en el programa p , a saber: U ( k ) concuerda con f hasta n y ( U ( k ) ∈ P ) ≠ B . Esto prueba que la búsqueda en el segundo paso siempre termina. Fijamos k como el valor que encuentra.
Observamos que φ p = U ( k ). De hecho, o bien el segundo paso de p devuelve U ( k )( x ), o bien el tercer paso devuelve f ( x ), pero el último caso solo ocurre para x ≤ n , y sabemos que U ( k ) concuerda con f hasta n .
En particular, φ p = U ( k ) es total. Esto hace que la promesa a P se cumpla en p , por lo tanto, P devuelve φ p ∈ P en p .
Hemos encontrado una contradicción: por un lado, el booleano φ p ∈ P es el valor de retorno de P en p , que es B , y por otro lado, tenemos φ p = U ( k ), y sabemos que ( U ( k ) ∈ P ) ≠ B .
Para cualquier función unaria finita sobre números enteros, sea el 'truncado' de todas las funciones parcialmente recursivas que están definidas y concuerdan con , en el dominio de .
Equipe el conjunto de todas las funciones parcialmente recursivas con la topología generada por estos frusta como base . Tenga en cuenta que para cada frustum , el conjunto de índices es recursivamente enumerable. De manera más general, esto se cumple para cada conjunto de funciones parcialmente recursivas:
es recursivamente enumerable solo si y solo si es una unión recursivamente enumerable de frusta.
El teorema de Kreisel-Lacombe-Shoenfield-Tseitin se ha aplicado a problemas fundamentales en la elección social computacional (en sentido más amplio, teoría de juegos algorítmicos ). Por ejemplo, Kumabe y Mihara [9] [10] aplican este resultado a una investigación de los números de Nakamura para juegos simples en la teoría de juegos cooperativos y la teoría de la elección social .