Sé que existe una máquina de Turing, si una función es computable. Entonces, cómo mostrar que la función no es computable o que no hay ninguna máquina de Turing para eso. ¿Hay algo como un lema de bombeo?
Sé que existe una máquina de Turing, si una función es computable. Entonces, cómo mostrar que la función no es computable o que no hay ninguna máquina de Turing para eso. ¿Hay algo como un lema de bombeo?
Respuestas:
Antes de responder a su pregunta general, déjeme dar un paso atrás, dar algunos antecedentes históricos y responder una pregunta preliminar: ¿Existen incluso funciones no computables?
[nota de notación: podemos relacionar cualquier función con un lenguaje y luego discutir la capacidad de decisión de lugar de la computabilidad de ]
Hay algunos idiomas que ninguna máquina de Turing puede decidir. El argumento es simple: hay "solo" innumerables TM diferentes, pero incontablemente muchos idiomas diferentes. Así, hay en la mayoría de idiomas decidibles, y el resto (infinitamente muchos) son indecidible. Otras lecturas:
Para poner nuestra mano en un lenguaje indecidible específico, la idea es usar una técnica llamada diagonalización (Georg Cantor, 1873) que originalmente se usó para mostrar que hay más números reales que enteros, o en otras palabras, que .
La idea para construir el primer lenguaje indecidible es simple: enumeramos todas las máquinas de Turing (¡lo cual es posible ya que son enumerables de forma recusiva!), Y creamos un lenguaje que no está de acuerdo con cada TM en al menos una entrada.
En lo anterior, cada fila es una TM y cada columna es una entrada. El valor de la celda es 0 si la TM rechaza o nunca se detiene, y 1 si la TM acepta esa entrada. Definimos que el lenguaje es tal que D contiene la i -ésima entrada si y solo si la i -ésima TM no acepta esa entrada.
Siguiendo la tabla anterior, ya que M 1 acepta ε . Del mismo modo, 0 ∉ D , pero 1 ∈ D ya que M 3 no acepta 1 .
Ahora, suponga que decide D y busque la línea k en la tabla: si hay 1 en la columna k , entonces M k acepta esa entrada pero no está en D , y si hay un 0 allí, la entrada está en D pero M k no lo acepta. Por lo tanto, M k no decide D , y llegamos a una contradicción.
Ahora para tu pregunta. Hay varias formas de demostrar que un idioma es indecidible. Intentaré tocar los más comunes.
El primer método es mostrar directamente que un lenguaje es indecidible, mostrando que ninguna TM puede decidirlo. Esto usualmente sigue el método de diagonalización que se muestra arriba.
Ejemplo.
Muestran que la (complemento de la) lengua diagonal es indecidible.
Prueba.
Suponga que es decidible y deje que M D sea su decisor. Hay dos casos:
A veces podemos usar las propiedades de cierre para mostrar que un idioma no es decidible, en función de otros idiomas que ya sabemos que no son decidibles.
Específicamente, si no es decidible (escribimos L ∉ R ), entonces también su complemento ¯ L es indecidible: si hay un decisor M para ¯ L , podríamos usarlo para decidir L al aceptar cada vez que M rechaza y viceversa. Como M siempre se detiene con una respuesta (es un factor decisivo), siempre podemos invertir su respuesta.
Conclusión: La diagonal lenguaje es indecidible, L D ∉ R .
Se puede aplicar un argumento similar al observar que si tanto como su complemento ¯ L son recursivamente enumerables, ambos son decidibles. Esto es particularmente útil si queremos demostrar que un lenguaje no es recursivamente enumerable, una propiedad fuerte que la indecidibilidad.
Por lo general, es bastante difícil demostrar directamente que un lenguaje es indecidible (a menos que ya esté construido de manera "diagonal"). El último y más común método para probar la indecidibilidad es usar otro lenguaje que ya sabemos que es indecidible. La idea es reducir un idioma a otro: mostrar que si uno es decidible, el otro también debe ser decidible, pero uno de ellos ya es indecidible, lo que lleva a la conclusión de que el primero también es indecidible. Lea más sobre las reducciones en "¿Cuáles son las técnicas comunes para reducir problemas entre sí?" .
Ejemplo.
Demostrar que el lenguaje diagonal es indecidible.
Prueba.
Sabemos que es indecidible. Reducimos L D a H P (esto se denota L D ≤ H P ), es decir, mostramos que si H P fuera decidible podríamos usar su decisor para decidir L D , lo cual es una contradicción.
La reducción funciona mediante la conversión de un candidato para L D (es decir, una entrada para cualquier potencial decisivo / aceptor para L D ) a un candidato w ' para H P tal que w ∈ L D si y sólo si w ' ∈ H P . Nos aseguramos de que esta conversión sea computable. Por lo tanto, decidir w ′ nos dice si w ∈ L D o no , por lo que si podemos decidir HP también podremos decidir L D ”.
Lectura adicional: se pueden encontrar muchos ejemplos de reducciones y probar la indecidibilidad de los idiomas a través de la etiqueta de reducciones .
Hay algunas restricciones más para que la reducción sea válida. La conversión en sí misma debe ser computable y estar bien definida para cualquier entrada.
Bueno, de hecho, la hay. Este es el teorema de Rice .
El teorema dice que muchos idiomas que tienen una determinada estructura son indecidibles. Debido a que todos estos idiomas tienen esta estructura determinada, podemos hacer la reducción una vez y aplicarla a cualquier idioma que admita una estructura similar.
El teorema se establece formalmente de la siguiente manera:
El conjunto es un subconjunto de idiomas en ; lo llamamos una propiedad porque describe una propiedad del lenguaje aceptado . Todas las TMs cuyo lenguaje satisface esta propiedad pertenecen a .
Por ejemplo, puede ser la propiedad de que el lenguaje aceptado contiene exactamente dos palabras:
En este caso, es el conjunto de todas las TM cuyo lenguaje consta de exactamente dos palabras:
La propiedad puede ser muy simple, pero no puede ser todos los idiomas RE o ninguno de los idiomas RE. Si o , se dice que la propiedad es trivial , y la inducida es computable. Un ejemplo para una simple es una que contiene un solo idioma, digamos . Tenga en cuenta que aunque contiene un solo lenguaje, hay infinitas máquinas cuyo lenguaje es , por lo que es infinito e indecidible.
El teorema es muy poderoso para demostrar la indecidibilidad de muchos idiomas.
Ejemplo.
El lenguaje , es indecidible
Prueba.
Podemos escribir como , es decir para la propiedad . Esta es una propiedad no trivial (incluye el lenguaje , pero no incluye, por ejemplo, el lenguaje . Por lo tanto, según el Teorema de Rice, es indecidible.
Ahora demostramos el teorema. Como se mencionó anteriormente, vamos a mostrar una reducción de a (para cualquier arbitraria no trivial ).
Prueba.
Sea una propiedad no trivial, . Mostramos , es decir, reducimos a para que si podemos decidir podamos decidir (lo que sabemos que es imposible, por lo tanto, no puede ser decidible). En la prueba a continuación se supone que el lenguaje vacío no es parte de , que es . (si el lenguaje vacío está en , una prueba equivalente funciona en la propiedad del complemento , omitiré los detalles). Desdeno es trivial, incluye al menos un idioma; llamemos a ese lenguaje y supongamos que es una máquina que acepta (dicha máquina existe, ya que incluye solo idiomas en RE).
Recuerde que en tal reducción (consulte la sección 3 anterior), debemos mostrar cómo convertir una entrada para en una entrada para para que
Deje , lo convertimos en donde la descripción de la máquina (en una entrada ) es la siguiente:
Vemos que esta conversión es válida. Primero tenga en cuenta que es simple construir la descripción de dado .
Si , detiene en . En este caso, continúa con el paso 2 y se comporta igual que . Por lo tanto, su lenguaje es aceptada . Por lo tanto, .
Si entonces bucles en . Este caso, bucles en cualquier entrada - se queda atascado en el paso 1. La lengua aceptada por'en este caso está vacía, . Por lo tanto, .
El teorema de arroz nos da una manera fácil de demostrar que un determinado lenguaje que satisfaga ciertas propiedades es indecidible, es decir, . La versión extendida del teorema de Rice nos permite determinar si el lenguaje es recursivamente enumerable o no, es decir, determina si , al verificar si satisface algunas propiedades adicionales.
Teorema (arroz, extendido). Dada una propiedad , el lenguaje es recursivamente enumerable ( ) si y solo si todas las siguientes tres declaraciones conjuntamente sostener
- Para cualquiera de los dos , si y también entonces también .
- Si entonces existe un subconjunto finito modo que .
- El conjunto de todos los idiomas finitos en es enumerable (en otras palabras: hay una TM que enumera todos los idiomas finitos ).
Prueba.
Este es un teorema de "si y solo si", y debemos probar ambas direcciones. Primero, mostramos que si una de las condiciones (1,2,3) no se cumple, entonces . Después de eso, mostraremos que si las tres condiciones se mantienen simultáneamente, entonces .
Si (1,2) se mantiene, pero (3) no, entonces .
Supongamos que , y veremos que tenemos una manera de aceptar cualquier lenguaje finito en (y, por lo tanto, el conjunto de todos estos idiomas es RE), por lo tanto, la condición (3) se cumple y llegamos a una contradicción . ¿Cómo decidir si una finita pertenece a o no? Fácilmente: utilizamos la descripción de para construir una máquina que acepta solo las palabras en , y ahora ejecutamos la máquina de en (recuerde, asumimos , por lo que hay una máquina que acepta!) Si entonces y desde , su máquina dirá sí en la entrada , y ya hemos terminado.
Si (2,3) se mantiene, pero (1) no, entonces .
Asumimos que y mostraremos que tenemos una manera de decidir , lo que lleva a una contradicción.
Debido a la condición (1) no se sostiene, hay un lenguaje y un superconjunto de la misma, modo que . Ahora vamos a repetir el argumento utilizado en la Sección 4 para decidir : dada una entrada para , construimos una máquina cuyo lenguaje es if o de lo contrario, su idioma es . Entonces, podemos decidir : o detiene en , o la RE-máquina para acepta; podemos ejecutar ambos en paralelo y tenemos la garantía de que al menos uno se detendrá.
Démosle los detalles de la construcción de (en la entrada ):
¿Por qué funciona esto? Si entonces 1.1 nunca se detiene, y acepta exactamente todas las entradas que se aceptan en el paso 1.2, entonces . Por otro lado, si , en algún momento, el paso 1.1 se detiene y acepta exactamente . Puede suceder que acepte de antemano, pero como , esto no cambia el idioma de en este caso.
Si (1,3) se mantiene, pero (2) no, entonces .
Nuevamente, asumiremos y mostraremos que vuelve decidible, lo cual es una contradicción.
Si la condición (2) no se cumple, entonces para cualquier , todos sus subconjuntos finitos satisfacen (tenga en cuenta que debe ser infinito, ya que ). Como en lo anterior, para decidir para una entrada dada , construimos una máquina cuyo lenguaje es if y algo finito contrario. La contradicción se sigue de manera similar a la anterior.
La construcción de esta máquina es bastante similar a la anterior que construimos. La máquina (en la entrada ) hace:
Sostiene que, si , en algún momento, digamos después de 1000 pasos, detiene en . Por lo tanto, el paso 1 detendrá (y rechazará) cualquier entrada de longitud . Por lo tanto, en este caso, es finito . También tenga en cuenta que y, en particular, por nuestras suposiciones sobre la invalidez de la condición (2), tenemos que .
Por otro lado, si , entonces el paso 1 nunca se detiene, y nunca rechazamos en el paso 2. En este caso, es fácil ver que y en en particular, .
Nos queda mostrar la otra dirección del teorema extendido. Es decir, debemos demostrar que si se cumplen todas las condiciones (1,2,3), entonces tenemos una TM que acepta , es decir, . En otras palabras, necesitamos mostrar una máquina para que para cualquier entrada para la cual , la máquina acepte esta entrada, .
Así es como se comporta la máquina (en input ):
Por que funciona Si tiene un subconjunto finito , y una vez que genera ese subconjunto, el paso 2.2 / 2.3 encontrará que acepta todas las palabras en ese idioma y aceptar.
Por otro lado, si no se puede aceptar todas las palabras para cualquier . De hecho, por la condición (1), cualquier también está en , por lo que si acepta todas las palabras en para alguna , entonces y por lo tanto , en contradicción.
Finalmente, tenga en cuenta que lo siguiente es un corolario simple (y muy útil) de lo anterior:
Corolario (Arroz, extendido). Dada una propiedad no trivial , de modo que , el lenguaje no es recursivamente enumerable, es decir, .
Una herramienta útil es el teorema de Rice . Aquí está lo que dice:
Sea un conjunto no trivial de funciones unarias parcialmente computables y una numeración Gödel de . Entonces el conjunto de índices de
No es recursivo.
También lo encuentra expresado en términos de codificaciones de máquinas de Turing (o cualquier otro lenguaje de programación completo de Turing), es decir, ; aquí define una numeración de Gödel.
Es decir, puede usar el teorema de Rice para probar que tales conjuntos no son recursivos, que son conjuntos de índices de conjuntos de funciones no triviales (o tal es reducible a ).
Tenga en cuenta que hay una extensión que se puede usar para mostrar que ciertos conjuntos de índices no son enumerables recursivamente.
Sea una numeración de Gödel. Considere el conjunto de productos naturales.
.
Ahora ya que para
El teorema de Rice se puede aplicar y no es decidible.
Dado que muchos no están familiarizados con las numeraciones de Gödel, tenga en cuenta que el ejemplo también funciona en términos de máquinas de Turing (es decir, programas) mediante el uso de .
Considere el conjunto de productos naturales.
que ciertamente no es computable. Sin embargo, no es un conjunto de índices para ninguna ! Deje para algunos . Como es una numeración de Gödel , hay (infinitamente) con pero para todos cumple porque .
¡Ten cuidado con esto! Como regla general, si el índice de la función se usa en "el lado derecho" o como parámetro de la función en la definición del conjunto, es probable que no sea un conjunto de índice. Es posible que necesite la propiedad de las numeraciones de Gödel y el teorema del punto de fijación para mostrar que un conjunto no es un conjunto de índices.
Vea aquí y aquí las publicaciones relacionadas sobre el teorema de Rice.