Máquinas de Turing y verificadores William Cruz-Santos y Guillermo Morales-Luna Departamento de Computación, Cinvestav-IPN, Ciudad de México noviembre de 2010 Resumen Se revisan las nociones fundamentales de las máquinas de Turing deterministas y no-deterministas. Las definiciones de las clases de problemas P y NP, la noción de completitud y se demuestra el teorema de Cook-Levin [1, 2]. 1 Introducción Sea Σ un conjunto finito de sı́mbolos llamado alfabeto, por Σ ∗ se denota al conjunto de todas las cadenas de sı́mbolos tomados de Σ y la cadena vacı́a , llamado diccionario. Si L ⊂ Σ ∗ decimos que L es un lenguaje sobre el alfabeto Σ. Para cualquier cadena x ∈ Σ ∗ , se denota por |x| la longitud de x. Definición 11 Una Máquina de Turing Determinista M (MTD) es una 7-tupla (Q, Σ, Γ, δ, q0 , b, F ) donde Q es un conjunto finito de estados de control, Σ es el alfabeto de entrada, Γ es el alfabeto de la cinta, q0 ∈ Q es el estado inicial, b un sı́mbolo especial, F ⊂ Q un conjunto de estados finales i.e., F = {qY , qN } y δ es una función de transición tal que δ : (Q − {qY , qN }) × Γ → Q × Γ × {−1, 0, 1} con δ : (q, X) 7→ (p, Y, D), donde p ∈ Q es el estado siguiente, Y ∈ Γ , es el nuevo sı́mbolo escrito sobre la cinta en la posición actual y D es la dirección de la cabeza lectora. Aquı́ -1,1,0 significa un movimiento a la izquierda, derecha o sin movimiento respectivamente. Dada una MTD M y una cadena de entrada x ∈ Σ ∗ , se denota por M (x) la aplicación de M sobre x. Inicialmente se copia x en la cinta a partir de la posición número uno y se realizan los siguientes pasos según sea el caso: 1. Se inicia en el estado q0 y la cabeza de lectura/escritura se sitúa sobre el primer sı́mbolo de entrada. 2. Si el estado actual es qY o qN la computación termina. 3. Si el estado actual es q ∈ Q − {qY , qN } se lee el sı́mbolo s sobre la cinta en la que se encuentra la cabeza lectora y el siguiente estado es δ(q, s) = (q 0 , s0 , D). Es decir, se borra el sı́mbolo s sobre la cinta y se escribe el sı́mbolo s0 , la cabeza se mueve una posición a la izquierda si D = −1 o una posición a la derecha si D = 1, finalmente el nuevo estado es q 0 . Por ejemplo, considere la siguiente descripción de una MTD M con Γ = {0, 1, b}, Σ = {0, 1}, Q = {q0 , q1 , q2 , q3 }, F = {qY , qN } y la función de transición δ que se muestra en la tabla 1. La tabla 2 muestra la computación de M sobre x = 10100. Tabla 1. Función de transición δ. δ q0 q1 q2 q3 0 (q0 , 0, +1) (q2 , b, −1) (qY , b, −1) (qN , b, −1) 1 (q0 , 1, +1) (q3 , b, −1) (qN , b, −1) (qN , b, −1) b (q1 , b, −1) (qN , b, −1) (qN , b, −1) (qN , b, −1) Tabla 2. Computación de M con x = 10100. ∇ q0 : b 1 0 1 0 ∇ q0 : b 1 0 1 0 ∇ q0 : b 1 0 1 0 ∇ q0 : b 1 0 1 0 q0 : b 1 0 1 q0 : b 1 0 1 q1 : b 1 0 1 0 b 0 b 0 b 0 b ∇ 0 0 b ∇ 0 0 b ∇ 0 0 b ∇ 0 b b q2 : b 1 0 1 ∇ qY : b 1 0 1 b b b Ası́, dada una MTD M y x ∈ Σ ∗ se dice que M acepta a x si y sólo si, la computación de M sobre x termina en el estado qY y escribimos M (x) = 1, M (x) = 0 si es qN y M (x) = ⊥ en otro caso. El lenguaje que reconoce M está dado por LM = {x ∈ Σ ∗ |M acepta a x}. El tiempo de computación de M con entrada x es el número de pasos que realiza hasta llegar a un estado terminal. Si para toda x ∈ Σ ∗ , M (x) 6= ⊥ se define la complejidad en tiempo de M como TM : Z+ → Z+ dada por TM (n) = max x∈Σ ∗ ,|x|=n {tiempo computación de M (x)} Una MTD M es de complejidad polinomial en tiempo si existe un polinomio p tal que para toda n ∈ Z+ , TM (n) ≤ p(n). Definición 12 La clase P consiste de los lenguajes L para los cuales existe una MTD M de complejidad polinomial en tiempo tal que L = LM . Codificación de problemas de decisión Hasta ahora sólo se ha hablado de lenguajes sobre cierto alfabeto, extendamos la representación de los lenguajes como una codificación de problemas de decisión. Un problema de decisión Π es aquel que pregunta por cierta propiedad o estructura de un problema y que tiene como respuesta positiva o negativa. Formalmente consiste de un conjunto de instancias DΠ y un subconjunto de instancias positivas YΠ ⊆ DΠ . Para un problema de decisión Π, el esquema de codificación e proporciona una forma de codificar instancias del problema Π en cadenas sobre un alfabeto Σ. Tal codificación induce una partición a Σ ∗ en tres clases de cadenas: aquellas que no son instancias de Π, aquellas que son instancias negativas de Π y aquellas que son instancias positivas de Π. El lenguaje de un problema de decisión Π bajo un esquema de codificación e sobre un alfabeto Σ es L[Π, e] = {x ∈ Σ ∗ |x codifica una instancia positiva de Π}. De aquı́ en adelante no se hará distinción entre un problema de decisión y un lenguaje, asumiremos que existe un esquema de codificación para representarlo. 1.1 No determinismo y la clase NP Definición 13 Una Máquina de Turing No-determinista N (MTN) es una 7tupla (Q, Σ, Γ, ∆, q0 , b, F ) donde Q, Σ, Γ , q0 ∈ Q y F ⊂ Q se definen como en una MTD y ∆ ya no es una función, si no, una relación ∆ ⊂ [(Q − {qY , qN }) × Γ ] × (Q × Γ × {−1, 0, 1}). Esto significa que para un estado actual de N existen más de un estado siguiente o ninguno. Para alguna entrada x ∈ Σ ∗ , M (x) es un ”árbol de computación” donde cada ”rama de computación” es uno de los posibles caminos que toma M con la entrada x según ∆. La MTN N funciona de la siguiente forma: 1. Toma como entrada x ∈ Σ ∗ , se escribe sobre la cinta a partir de la posición 1 hasta la número |x|, la cabeza lectora se localiza sobre el primer sı́mbolo en la cinta y el estado inicial es q0 . 2. Explora todas las ramas de computación en paralelo a partir del estado inicial al igual que una MTD. Se dice que N acepta a x si existe al menos una rama de computación que llegue al estado terminal qY . El lenguaje que reconoce una MTN N es LN = {x ∈ Σ ∗ |N acepta a x}. El tiempo de computación de N con la entrada x ∈ LN es la longitud mı́nima de todas las ramas de computación que terminan en el estado qY . La complejidad en tiempo de una MTN N se define como TN : Z+ → Z+ dada por TN (n) = max {tiempo computación de N (x)} x∈LN ,|x|=n Una MTN N es de complejidad polinomial en tiempo si existe un polinomio p tal que para toda n ≥ 1, TN (n) ≤ p(n). Definición 14 La clase N P consiste de los lenguajes L para los cuales existe una MTN N de complejidad polinomial en tiempo tal que L = LN . Cada rama de computación corresponde a una función de transición por lo que una MTD es un caso especial de una MTN entonces resulta que P ⊆ N P . Un problema fundamental en teorı́a de la computación es saber si a caso P = N P o P 6= N P . La MTN y certificados Considere otra definición de una MTN. Sea N 0 = (Q, Σ, Γ, δ, q0 , b, F ) una MTD de complejidad polinomial que posee un segundo modulo de control no-determinista (MCN) que es una MTN con su propia cinta y cabeza de lectura/escritura. El primer modulo de control determinista (MCD) lleva a cabo la tarea de verificador, es decir, dada una instancia de un problema y una posible solución, el MCD verifica si satisface al problema o no. Para una entrada x ∈ Σ ∗ , N 0 funciona de la siguiente forma: 1. Se escribe x sobre la cinta a partir de la posición número uno hacia la derecha, el MCN tiene como entrada a x y de todas las ramas de computación exitosas si es que existen, escoge una y la escribe sobre la cinta de N 0 como certificado de que x ∈ LM CN a partir de la posición numero -1 hacia la izquierda. 2. Se verifica si el certificado que escribió el MCN satisface a la instancia del problema. Es fácil ver que esta definición es equivalente a 13 ya que se trata de una MTN con un modulo adicional de verificación de complejidad polinomial que no afecta la complejidad de la misma. Al MCN se le puede ver como un modulo que provee de soluciones para el problema y que el MCD se encarga de verificar. 1.2 Transformaciones polinomiales y completitud Asumiendo P 6= N P la diferencia entre P y N P − P es importante. Los problemas en P se pueden decidir en tiempo polinomial mientras que los problemas en N P − P son intratables. Considere la siguiente condición, si Π ∈ N P y P 6= N P entonces Π ∈ N P − P . Suponiendo la condición anterior es importante comparar la dificultad de los problemas por medio de transformaciones polinomiales. Una transformación polinomial de un lenguaje L1 ∈ Σ1∗ a un lenguaje L2 ∈ Σ2∗ es una función f : Σ1∗ → Σ2∗ que satisface las siguientes condiciones: 1. Existe una MTD de complejidad polinomial que calcula f . 2. Para toda x ∈ Σ1∗ , x ∈ L1 si y sólo si f (x) ∈ L2 . Si existe una transformación polinomial de L1 a L2 entonces se escribe L1 ∝ L2 y se lee, L1 se transforma polinomialmente a L2 . Lema 11 Si L1 ∝ L2 entonces L2 ∈ P implica L1 ∈ P . Demostración: sean los lenguajes L1 y L2 sobre los alfabetos Σ1 y Σ2 respectivamente. Sean f : Σ1∗ → Σ2∗ una transformación polinomial de L1 a L2 , Mf la MTD que la calcula y M2 una MTD de complejidad polinomial que reconoce a L2 . Para cada x ∈ Σ1∗ , Mf (x) = f (x) ∈ Σ2∗ por lo que M2 (f (x)) = 1 ⇐⇒ f (x) ∈ L2 entonces x ∈ L1 . La composición M2 ◦ Mf define una MTD de complejidad polinomial que reconoce a L1 . Lema 12 Si L1 ∝ L2 y L2 ∝ L3 entonces L1 ∝ L3 . Demostración: sean los lenguajes L1 , L2 y L3 sobre los alfabetos Σ1 , Σ2 y Σ3 respectivamente. Sean f1 : Σ1∗ → Σ2∗ y f2 : Σ2∗ → Σ3∗ transformaciones polinomiales de L1 a L2 y de L2 a L3 respectivamente. Sea f : Σ1∗ → Σ3∗ tal que ∀x ∈ Σ1∗ : f (x) = (f2 ◦ f1 )(x) es una transformación polinomial de L1 a L3 . Finalmente, ya que f1 y f2 se computan por MTD’s de complejidad polinomial entonces la composición es también polinomial. Dos lenguajes L1 y L2 son equivalentes si L1 ∝ L2 y L2 ∝ L1 . Ası́, la relación ∝ define un orden parcial sobre las clases de equivalencia de lenguajes, i.e., P y NP. Definición 15 Un lenguaje L es N P -completo si L ∈ N P y para cualquier otro lenguaje L0 ∈ N P , L0 ∝ L. Del mismo modo un problema de decisión Π es N P -completo según la definición 15 considerando su lenguaje L[Π, e] correspondiente. Si Π se puede resolver en tiempo polinomial entonces todos los problemas en N P se pueden resolver en tiempo polinomial. Si algún problema Π 0 ∈ N P es intratable entonces todos los problemas N P -completos también lo son, finalmente si Π ∈ P entonces P = NP. Lema 13 Si L1 , L2 ∈ N P , L1 es N P -completo y L1 ∝ L2 entonces L2 es N P completo. Demostración: se tiene que L2 ∈ N P y para demostrar la proposición se necesita que cada L0 ∈ N P , L0 ∝ L2 . Para cualquier L0 ∈ N P , L0 ∝ L1 ya que L1 es N P -completo, como L1 ∝ L2 por transitividad L0 ∝ L2 . n−1 El problema de satisfactibilidad Sea X = (Xj )j=0 un conjunto de variables δ booleanas. Una literal es de la forma X donde X ∈ X y δ ∈ {0, 1} : X 0 = ¬X y X 1 = X. Una cláusula es una disyunción de literales y una forma conjuntiva (FC) es una conjunción de cláusulas. Una asignación es una cadena ε = (εj )nj=1 ∈ {0, 1}n . Una asignación satisface a la literal Xjδ si y sólo si εj = δ; satisface a una cláusula si al menos una literal se satisface; y satisface a una FC si y sólo si todas las cláusulas se satisfacen. Una m-cláusula consiste de una cláusula con exactamente m literales y una m-FC es una FC únicamente con m-cláusulas. Problema 11 (Satisfactibilidad (SAT)) Dada una FC, decidir si existe una asignación que la satisfaga. Teorema 11 (Cook-Levin) El problema de satisfactibilidad booleana es N P completo. Demostración: SAT es N P -completo si y sólo si 1. SAT ∈ N P 2. ∀Π ∈ N P =⇒ Π ∝ SAT 1) existe una MTN N de complejidad polinomial que reconoce al lenguaje LSAT = L[SAT, e]. Lo único que tiene que hacer N es que para cualquier entrada x que corresponde a una codificación de instancias de SAT, N explora todas las asignaciones posibles o ramas de computación para x. Si x ∈ LSAT entonces existe al menos una rama de computación que termina en el estado qY donde la longitud de las ramas de computación están acotadas polinomialmente en |x|, por tanto N reconoce a LSAT . 2) en términos de lenguajes se quiere demostrar que ∀L ∈ N P =⇒ L ∝ LSAT . ∗ Es decir, se necesita describir una transformación polinomial fL : Σ ∗ → ΣSAT ∗ tal que para cualquier lenguaje L ∈ N P y x ∈ Σ entonces x ∈ L si y sólo si fL (x) ∈ LSAT . Se considerará que fL va de las cadenas en Σ ∗ a SAT de formas conjuntivas, de tal forma que fL (x) es una FC en lugar de pertenecer al lenguaje LSAT . En consecuencia fL (x) es una FC que se satisface si y sólo si x ∈ L. Cada lenguaje L ∈ N P se puede describir de forma estándar dando la descripción de una MTN de complejidad polinomial que lo reconozca. Por ejemplo, si N es una MTN tal que L = LN entonces fL transforma instancias de LN a LSAT usando la descripción de N . Se empleará la definición alternativa de una MTN con certificados. Sea N = (Q, Σ, Γ, ∆, q0 , b, F ) una MTN de complejidad polinomial que reconoce el lenguaje LN donde la complejidad en tiempo TN (n) de N está acotada por un polinomio p para toda n ∈ Z+ . Es evidente que si x ∈ L entonces existe una computación de N sobre x que termina en un estado de aceptación (ver tabla 2), de forma que se utilizan a lo más p(|x|) celdas sobre la cinta para escribir el certificado y se utilizan a lo más p(|x|) + 1 celdas en la verificación. Ası́, el contenido de estas celdas, la posición de la cabeza lectora y el estado final describen la computación de N con la entrada x. Es necesario construir una FC que se satisfaga cuando la tabla de computación sea de aceptación. Considere la siguiente enumeración de Q como q0 , q1 = qY , q2 = qN , q3 , . . . , qr y de Γ como s0 = b, s1 , s2 , . . . , sν donde r = card Q − 1 y ν = card Γ − 1. Sea U = {Qi,k , Hi,j , Si,j,k } un conjunto de variables booleanas donde cada una de ellas representa una propiedad sobre la computación de una MTN, i.e., Qi,k se refiere al estado qk que se encuentra N en el paso i, Hi,j al contenido de la cinta en la celda j en el paso i y Si,j,k al sı́mbolo sk que se lee en la celda j en el paso i. Una descripción más precisa se puede ver en la tabla 3 donde n = |x|. Para alguna entrada x ∈ L, fL (x) es una FC Φ sobre U que consta de 6 conjuntos de cláusulas donde cada uno de ellos impone ciertas restricciones en la computación de la MTN que en conjunción satisfacen lo que requerimos (ver tabla 4). Tabla 3. Variables booleanas en U. Variable Rango Qi,k 0 ≤ i ≤ p(n) 0≤k≤r Hi,j 0 ≤ i ≤ p(n) −p(n) ≤ j ≤ p(n) + 1 Si,j,k 0 ≤ i ≤ p(n) −p(n) ≤ j ≤ p(n) + 1 0≤k≤ν Significado en el paso i, N está en el estado qk en el paso i, la cabeza lee la celda j en el paso i, la celda j contiene el sı́mbolo sk Tabla 4. Conjuntos de cláusulas en Φ. Cláusulas G1 G2 G3 G4 G5 G6 Tipo de restricción en el paso i, N se encuentra en un único estado en el paso i, la cabeza lee exactamente una celda en el paso i, cada celda contiene un único sı́mbolo en Γ en el paso 0, N se encuentra en el estado q0 si en el paso p(n), N se encuentra en el estado qY entonces x es aceptada para cada paso i, 0 ≤ i ≤ p(n), la configuración de N en el paso i + 1 resulta de la aplicación de δ con la configuración del paso i Conjunto G1 : ϕ1 = ^ (Q1i,0 ∨ Q1i,1 ∨ · · · ∨ Q1i,r ) (1) i ψ1 = ^ (Q0i,j ∨ Q0i,s ) (2) i,j,s G1 = ϕ1 ∧ ψ1 (3) donde 0 ≤ i ≤ p(n) y 0 ≤ j < s ≤ r. ϕ1 se satisface siempre que en cualquier paso i, N se encuentre en al menos un estado y ψ1 se satisface siempre que se encuentre en un sólo estado. La conjunción de ϕ1 y ψ1 aseguran que en cada paso N se encuentre en un sólo estado. Conjunto G2 : ^ 1 1 1 ϕ2 = (Hi,−p(n) ∨ Hi,−p(n)+1 ∨ · · · ∨ Hi,p(n)+1 ) (4) i ψ2 = ^ 0 0 (Hi,j ∨ Hi,s ) (5) i,j,s G2 = ϕ2 ∧ ψ2 (6) donde 0 ≤ i ≤ p(n), −p(n) ≤ j < s ≤ p(n) + 1. ϕ2 se satisface siempre que en cualquier paso i, N lea al menos un celda sobre la cinta y ψ2 se satisface siempre que la cabeza lectora lea una sola celda en cada paso. La conjunción de ϕ2 y ψ2 aseguran que en cada paso N lea una sola celda. Conjunto G3 : ^ 1 1 1 ϕ3 = (Si,j,0 ∨ Si,j,1 ∨ · · · ∨ Si,j,ν ) (7) i,j ψ3 = ^ 0 0 (Si,j,k ∨ Si,j,t ) (8) i,j,k,t G3 = ϕ3 ∧ ψ3 (9) donde 0 ≤ i ≤ p(n), −p(n) ≤ j ≤ p(n) + 1, 0 ≤ k < t ≤ ν. ϕ3 se satisface siempre que en cualquier paso i, en cualquier celda j se lee al menos un sı́mbolo sk y ψ3 se satisface siempre que el paso i y celda j solo exista un solo sı́mbolo de Γ . La conjunción de ϕ3 y ψ3 aseguran que en cada paso y cada posición sobre la cinta contenga un sólo sı́mbolo. Conjunto G4 : 1 1 ϕ4 = Q10,0 ∧ H0,1 ∧ S0,0,0 ψ4 = φ4 = 1 1 S0,1,k ∧ S0,2,k ∧ ··· 1 2 1 1 S0,n+1,0 ∧ S0,n+2,0 ∧ G4 = ϕ4 ∧ ψ4 ∧ φ4 (10) 1 ∧ S0,n,k n 1 · · · ∧ S0,p(n)+1,0 (11) (12) (13) donde x = sk1 sk2 · · · skn . ϕ4 se satisface si el estado inicial en el paso i = 0 es q0 , la cabeza lectora se encuentre en la posición j = 1 y el sı́mbolo en la posición j = 0 se encuentre el sı́mbolo sk0 (espacio en blanco); ψ4 se satisface si en el paso i = 0 el contenido de la cinta desde la celda j = 1 hasta j = n se encuentra escrita la entrada x y φ4 se satisface si el resto de las celdas n + 1 hasta p(n) + 1 están en blanco. Conjunto G5 : G5 = Q1p(n),1 (14) G5 se satisface si en a lo más p(n) pasos el estado actual de N es qY . Conjunto G6 : consta de dos subconjuntos 1. Si la cabeza lectora no se encuentra en la celda j en el paso i entonces el sı́mbolo en la celda j no cambia entre los pasos i e i + 1. ^ 0 1 1 ϕ6 = (Si,j,l ∨ Hi,j ∨ Si+1,j,l ) (15) i,j,l donde 0 ≤ i ≤ p(n), −p(n) ≤ j ≤ p(n) + 1 y 0 ≤ l ≤ ν. 2. El estado siguiente depende de la función de transición δ. Para cada 4tupla (i, j, k, l) con 0 ≤ i ≤ p(n), −p(n) ≤ j ≤ p(n) + 1, 0 ≤ k ≤ r y 0 ≤ l ≤ ν, considere las siguientes cláusulas ^ 0 0 1 0 0 ψ6 = ((Hi,j ∨ Q0i,k ∨ Si,j,l ∨ Hi+1,j+∆ ) ∧ (Hi,j ∨ Q0i,k ∨ Si,j,l ∨ Q1i+1,k0 ) ∧ i,j,k,l 0 0 1 (Hi,j ∨ Q0i,k ∨ Si,j,l ∨ Si+1,j,l 0 )) (16) Tabla 5. Complejidad de Φ en términos del número de cláusulas. Conjunto G1 G2 G3 G4 G5 G6 Número de cláusulas (p(n) + 1)(r + 1)(r/2) + p(n) + 1 ... ... 3 1 2(p(n) + 1)2 (ν + 1) + 6p(n)(p(n) + 1)(r + 1)(ν + 1) donde si qk ∈ Q − {qY , qN } los valores ∆, k 0 y l0 son tales que δ(qk , sl ) = (qk0 , sl0 , ∆), y si qk ∈ {qY , qN } entonces ∆ = 0, k 0 = k y l0 = l. Se tiene que G6 = ϕ6 ∧ ψ6 cumple con la restricción deseada. Por lo tanto, para cada x ∈ L se tiene que existe una computación de N sobre x de longitud a lo más p(x) que induce una asignación sobre las variables en U V6 que satisface a Φ = i=1 Gi . Finalmente, queda por demostrar que este procedimiento se puede realizar en tiempo polinomial en la longitud de x. Esto es cierto si la longitud de Φ está acotada polinomialmente en n, por ejemplo, si (card U) · (card Φ) está acotada por p. La tabla 5 muestra la complejidad de Φ por lo que card Φ = O(p(n)2 ) y por la tabla 3 se tiene que card U = O(p(n)2 ) donde se ignoran los factores constantes que dependen de los valores fijos r y ν. Entonces (card U) · (card Φ) = O(p(n)4 ) que es polinomial en p(n). Referencias 1. Michael R. Garey and David S. Johnson. Computers and Intractability; A Guide to the Theory of NP-Completeness. W. H. Freeman & Co., New York, NY, USA, 1990. 2. Christos M. Papadimitriou. Computational complexity. Addison-Wesley, Reading, Massachusetts, 1994.