1
P vs NP
Frank Vega Delgado1
Abstract: The relationship between the complexity classes and
is a question that has not been answered by the theory of computation. The existence of a language in
that is not in , is sufficient evidence to prove that
≠
. If a language is not recursive it can not belong to the complexity class , hence it is proved that if a language is inand is not recursive then this also implies that
≠
. A problem with this feature it’s shown in this paper if we assume the hypothesis=
. That’s why it can confirm by reduction ad absurdum the opposite:≠
. The new problem, discovered when we formulated this hypothesis, is to find a possible input given an algorithm (which resolve a member of) and an output. This can be solved by a Turing’s machine, its complement doesn’t.
1 Introducción
La pregunta ¿
=
? ha motivado el desarrollo en el campo de la lógica matemática y de la tecnología electrónica durante la mitad del siglo XX y comienzo del XXI. Es considerado en este momento como unos de los problemas más importantes en la matemática y la ciencia de la computación.En la primera mitad del siglo XX se trabajó en formalizar el conocimiento sobre los algoritmos, usando el modelo teórico descrito por las máquinas de Turing y se encontraron ciertos problemas que no eran algorítmicamente solucionables. Por esa fecha surgieron las primeras computadoras y los matemáticos intentaron modelar las capacidades y limitaciones de tales dispositivos, germinando precisamente lo que hoy se conoce como la ciencia de la Complejidad Computacional.
Desde temprano las computadoras agilizaron muchas tareas que el hombre no podía hacer, pero en ocasiones se encontraban problemas difíciles y lentos de resolver por las más veloces computadoras de la época. La única manera de evitar tales demoras era encontrar un método de evadir la búsqueda exhaustiva que venía acompañada de la “fuerza bruta”.
1 Licenciado en Ciencia de la Computación, Ciudad de la Habana, Cuba.
2
La pregunta ¿
=
? consiste en saber si existe algún método de impedir esta demora existente. Si los problemas que se puedan verificar rápidamente tuvieran una solución rápida, entonces se podría prescindir en múltiples casos de la ineficiente fuerza bruta. Esta pregunta ha atraído la atención considerable de los especialistas y del mundo en general. Sin duda algunaha abrazado los fundamentos de la matemática y de la ciencia de la computación teniendo un gran impacto sobre estas ramas.
Se pretende en este artículo, como principal propuesta, dar respuesta a esa interrogante y, además, esclarecer las siguientes:
- ¿Se podría encontrar, dada una salida de un algoritmo de un problema que pertenece a
, alguna entrada por la cual se ejecute este algoritmo y se produzca esa salida?
- ¿Se podría demostrar que una cadena de caracteres no pertenece a la salida de un algoritmo de un problema que está en
?
Church y Turing en su trabajo de Entschiedungsproblem mostraron la existencia de problemas sin solución algorítmica e importantes herramientas que lo prueban. En este artículo se intenta dar respuesta a esas interrogantes usando esas mismas herramientas que hoy en día se siguen empleando dentro de la Teoría de la Computabilidad y en la Complejidad Computacional.
2 Definiciones básicas
La tesis formulada por Alan Turing y Alonzo Church, de forma independiente a mediados del siglo XX, prueba matemáticamente que para cualquier programa de computadora es posible crear una máquina de Turing equivalente. Eso implica que las máquinas de Turing realmente capturan la noción de lo que es un algoritmo o un procedimiento efectivo llevado a cabo por un humano o por una máquina.
Una máquina de Turing posee un conjunto finito de estados donde es el estado inicial y un conjunto finito de símbolos que se le llama el alfabeto de . El alfabeto contiene símbolos especiales como el símbolo inicial
⊳
. El funcionamiento de una máquina de Turing se basa en una función de transición, que recibe un estado inicial y una cadena de caracteres pertenecientes al alfabeto. Luego se va leyendo las celdas en una o varias cintas donde se encuentra ubicada la cadena de caracteres que se pasa como entrada y se borran y escriben en cada paso los símbolos pertenecientes al alfabeto para finalmente avanzar a la izquierda
⟵
, a la derecha⟶
o permanecer3
en el mismo lugar
−
(por cada celda a la vez), repitiendo esto según se indique en la función de transición, por último, se detiene en un estado final que puede ser de aceptación"sí"
o de rechazo" "
, representando así la salida.A la función de transición
se le conoce también como el “programa” de la máquina de Turing y se representa como un trío
( , ) = ( , , )
por cada estado actualy símbolo actual del alfabeto, con
como próximo estado,
el símbolo que sobrescribe a
y
∈ {⟶, ⟵, −}
sería la dirección en la que se mueve el cursor.Cuando existe más de una cinta,
sigue decidiendo el próximo estado pero puede sobrescribir símbolos diferentes y moverse en diferentes direcciones sobre cada cinta.
Se definen las operaciones realizadas por una máquina de Turing usando una configuración que contiene una completa descripción del estado actual en que se encuentra la máquina. Una configuración es un trío
( , , )
dondees el estado actual y
,
son cadenas sobre el alfabeto que muestran a la cadena a la izquierda del cursor (incluyendo al símbolo escaneado) y a la cadena a la derecha del cursor respectivamente, durante cualquier instante en el que se transite por ; en ocasiones cuando se encuentra vacía alguna de estas cadenas se pone el símbolo . La definición de configuración se puede extender a múltiples cintas utilizando sus respectivos cursores.Las cadenas de entrada de un algoritmo definen a un lenguaje. Existen distintos tipos de lenguaje clasificados según su comportamiento en las máquinas de Turing. Ejemplo de ello es el lenguaje recursivo, un tipo de lenguaje formal que también es llamado decidible o Turing-decidible, que se caracteriza porque existe una máquina de Turing que acepta cualquier palabra del lenguaje o de lo contrario rechaza. En caso de que nunca termine en vez de rechazar la palabra se dice que el lenguaje es recursivamente enumerable.
Existe una máquina de Turing capaz de simular el comportamiento de otras máquinas de Turing para una determinada entrada y se le nombra como máquina universal de Turing. Realizando una codificación de las máquinas de Turing se puede construir el alfabeto que utiliza esta máquina universal. Alan Turing descubrió por primera vez un problema que era recursivamente enumerable pero no era recursivo, le llamó HALTING y es el lenguaje que contiene a todas las máquinas de Turing
con entrada
codificadas según la máquina universal tal que
llega a parar con
.
4
Las máquinas de Turing se dividen en dos importantes categorías según la cantidad de posibles ejecuciones en cada paso de su programa. Si en los pasos de una máquina de Turing existe a lo sumo una posibilidad de ejecución, se dice que es una máquina de Turing determinista, mientras que en el caso de que exista más de una posible combinación de actuaciones se dice que se trata de una máquina de Turing no determinista.
Las máquinas de Turing deterministas y no deterministas caracterizan a dos principales clases de complejidades: las clases
y
. Una clase de complejidad es un conjunto de lenguajes agrupados por diferentes medidas de complejidad como el tiempo de corrida, la memoria utilizada, etc.
Se puede decir que la clase es el conjunto de lenguajes que representan a los problemas rápidos de resolver por una computadora. De ahí que tenga tanta importancia dentro de la ciencia de la computación. Esta clase está relacionada intrínsecamente con las máquinas de Turing deterministas y también con el tiempo de corrida polinómico en que se ejecutan estas máquinas de Turing.
La clase
al contrario de la clase resulta difícil encontrarle una solución veloz para muchos de los lenguajes que contiene y se define por aquellos que son decididos por alguna máquina de Turing no determinista en tiempo polinómico. También se puede definir a la clase de complejidad
como los lenguajes que pueden ser verificados rápidamente por una máquina de Turing determinista. A la cadena que permite la verificación de forma rápida se le conoce con el nombre de “certificado”.
Ha existido una interrogante que no ha encontrado respuesta dentro de la comunidad científica hasta ahora, y es el hecho de saber si se pueden resolver rápidamente los problemas que son fácilmente verificables o sea si ¿
=
?.Se intenta resolver más adelante esa interrogante usando los conocimientos descritos en este capítulo, definiendo por hipótesis que
=
para luego deducir todo lo contrario a través de la regla por reducción al absurdo. También se define un conjunto de máquinas de Turing capaces de ejecutar rápidamente a los problemas de la clase de complejidad,
si esa hipótesis realmente fuera posible.
Luego se expone un problema que engloba y explica las preguntas propuestas en este documento deduciendo que la hipótesis inicial era incorrecta y que precisamente≠
.5
3 Hipótesis y máquinas de Turing Certificadas
Se define la siguiente hipótesis:
=
. En base a esta hipótesis se llegará a una contradicción, demostrándose por reducción al absurdo lo contrario que es precisamente el resultado que persigue este documento:≠
.Se empieza definiendo un conjunto de maquinas de Turing deterministas que deciden polinómicamente a los lenguajes de la clase
.
Definición 3.1: Una máquina de Turing Certificada es una máquina de Turing de - cintas que cumple:
a)
es determinista y decide en tiempo polinómico a un lenguaje
∈
.b) El estado inicial de se usa solamente para leer el símbolo de comienzo
⊳
de cada cinta y avanzar de este modo hacia otros estados en la función de transición de .c)
,
de las -cintas, posee una cinta para la entrada y otra para la salida que serán la primera y última respectivamente.d) Cuando
acepte la cadena de entrada , se dice que
( ) = " í"
y su configuración final será( í, ⊳, , ⊳, , ⊳, , … , ⊳, )
, es decir, que en todas las cintas se encuentra el cursor posicionado en el símbolo de comienzo y a excepción de la cinta de salida, todas las demás quedan vacías (esta aseveración no toma en cuenta al símbolo de comienzo). Nótese que en la cinta de salida se finalizó poniéndose la cadenaque es el certificado para la cadena
.
El conjunto de las máquinas de Turing Certificadas se representa abreviadamente
. De este conjunto se plantea lo siguiente:
Proposición 3.1: Para cualquier máquina de Turing de -cintas
que decide en tiempo polinómico a un lenguaje
∈
, existe otra máquina de Turing de (+ 2)
-cintas con cintas de entrada y salida que simula acon el mismo orden y
∈
.La máquinas y coinciden en el inciso a) de la definición de debido a la propia descripción que se hizo de en la proposición y que se tomará como premisa.
Se asume que el inciso b) se puede resolver adicionando de antemano un estado adicional en . Para los incisos restantes de la definición de se va a utilizar la siguiente demostración constructiva:
6
La máquina de Turing comienza copiando la entrada contenida en la primera cinta sobre la segunda y luego simula las
cintas de
en las enumeradas desde la 2 hasta la
( + 1).
Cuandotermina, vacía todas las cintas que simulaban a
después de copiar la cadena de salida de
en la cinta
( + 2)
y luego regresa todos los cursores hacia el símbolo de comienzo de cada cinta, borrando desde luego la cinta de entrada y parando después en un estado correspondiente con el que terminó(de aceptación o de rechazo). Es necesario resaltar que si
se detiene aceptando, entonces su cadena de salida será el certificado de la cadena de entrada, la cual va a coincidir con la salida en .
Las máquinas de Turing que decidan en tiempo polinómico a un lenguaje
∈
garantizan la ejecución rápida del problema que ese lenguaje representa, por consiguiente, las máquinas de Turing Certificadas cumplen esa misma función a pesar de contener estas particularidades en su definición.4 El lenguaje CERTIFICANDO
Se define un problema llamado CERTIFICANDO de la siguiente manera: ¿Dada una máquina de Turing Certificada
∈
y∈ {0,1}
∗, existe∈ {0,1}
∗ tal que( ) = " í"
con la cadena de salida ?Definición 4.1: CERTIFICANDO (abreviadamente ) es un lenguaje sobre el alfabeto de la máquina universal de Turing definido como:
= { ; : ∈
, ∃ ( ) = "sí" }
El lenguaje
demuestra que precisamente la cadena
∈ {0,1}
∗ es certificado de alguna cadena∈
cuando∈ .
De esta definición se deduce una importante proposición:Proposición 4.1: El lenguaje pertenece a la clase
.
Dada cualquier instancia de este lenguaje
( ; ) ∈
, esta puede ser verificada polinómicamente una vez hallada∈ {0,1}
∗, simplemente evaluando y comprobando la validez del certificado para la cadena encontrada.Para demostrar que el problema CERTIFICANDO tiene solución en una computadora es necesario que al menos sea aceptado por alguna máquina de Turing.
7
Proposición 4.2:
es recursivamente enumerable.
Se necesita diseñar una máquina de Turing que acepte a . Para ello se construye para cualquier máquina de Turing de -cintas donde
∈
, otra máquina de Turing de -cintas que cumpla que:1) El alfabeto de es el mismo que el de .
2) Se construye los estados y la transición de a partir de la función de transición
y los estados de :
a) Si se tiene que
( , , , … , ) = , ,
, ,
, … , ,
entonces para todos los estados deen que
( ,
,
, … ,
) = ( ,
, ,
, , … ,
, )
, se adicionan enla siguiente relación utilizando y :
( , , , … , ) = ( , , , , , … , , )
donde se cumpla que( = ⟵) ⟹ ( =⟶) ∧ ( = ⟶) ⟹ ( =⟵) ∧ (( = −) ⟹ ( = −))
deba ser verdadero para1 ≤ ≤
. En el caso particular en que=
se debe aplicar la modificación ensolo si
( , , … , ) ≠ (
,
, … ,
)
.b) El estado inicial
en
se remplaza por el estado final
í
de , mientras que el estado de rechazo dese mantiene igual en .
c) El estado de aceptación
í
dese convierte en el estado inicial en y para cualquier estado
que aparezca relacionado con el estado de aceptación de usado en
de esta manera
( , , , … , ) = ( í, , , , , … , , ),
se construye enlo siguiente:
( , ⊳, ⊳ , … , ⊳ ) = ( , ⊳, , ⊳, , … , ⊳, )
donde= ⟶
.3) ubica su entrada en la -ésima cinta y su salida en la primera cinta.
Se deducen varios corolarios a partir de la definición anterior que describen algunas particularidades de esta máquina de Turing.
Corolario 4.1: Si no acepta la entrada entonces nunca termina.
A través de la construcción de
se aprecia que es imposible alcanzar el estado de rechazo desde el estado inicial de .
Corolario 4.2: será mayormente no determinista.
8
Es suficiente con que en la función de transición
de
se llegue a un estado a través de al menos otros dos para que deje de ser una función.
La cualidad más relevante de esta máquina de Turing es la que se presenta a continuación:
Proposición 4.3: Si
es una máquina de Turing de -cintas donde
∈
y se cumple que( ) = " í"
con el certificado , entonces( ) = " í"
y su cadena de salida podrá ser .En la construcción de sobre se logra que en todos los estados, excepto los estados de parada y el de inicio, se cambien aquellos símbolos que se leen en las cintas por los símbolos que sobrescriben a estos durante los pasos en la función de transición de y viceversa. Se puede además comprobar que es prácticamente un “espejo” de y transita de modo inverso por los estados de hacia los antecesores que aparecen en la función de transición , cambiando así, la dirección en el movimiento de las -cintas de
simulándola “hacia atrás”.
Como empieza con la salida de en su cinta de entrada se pudiera alcanzar, dirigiéndose en reverso por los estados de , la configuración
( í, ⊳, , ⊳, , ⊳ , , … , ⊳, )
, que prácticamente coincide con la configuración inicial de 2. Para lograr lo anterior se debe simular la ejecución de con utilizando una máquina universal de Turing que se va a denotar . La máquina posee la particularidad de que en ella se despliegan al mismo tiempo todas las variantes posibles del programa 3 (almacenándose todas las cadenas resultantes), permitiendo que se puedan tomar múltiples decisiones por cada paso, sin dejar de descartar ni un solo camino posible de aceptación, pero a la vez, sin llegar a priorizar a ninguno por el cual jamás pare.Si se llega al estado de aceptación de , procesando al unísono todas las posibles combinaciones de , entonces verifica si realmente la salida generada cumple con el certificado . En caso de que la verificación resulte fallida se continúa ejecutando el resto de los pasos de , si no finaliza aceptando. Esta máquina universal de Turing termina sin aceptar su entrada solo si se alcanza el estado de rechazo en para un determinado
(acción que es imposible que ocurra).
2 El estado inicial de se remplazó por el estado í en .
3 En la mayoría de los casos es no determinista.
9
Por lo tanto se puede concluir que el lenguaje es recursivamente enumerable, pues para cualquier
∈
y∈ {0,1}
∗, existe una máquina de Turing que se construye a partir dey si acepta a
mediante , entonces se demuestra que
( , ) ∈
.5 CERTIFICANDO y la clase P
Este capítulo comienza con la siguiente pregunta: ¿Pertenece el lenguaje a la clase
?
La no recursividad del problema CERTIFICANDO podría ser tomado como punto de partida para responder a esta pregunta.
Teorema 5.1: El lenguaje
no es recursivo.
Si se supone que exista una máquina de Turing que decida al lenguaje
y se toma a la máquina universal de Turing que acepta al lenguaje HALTING 4 (abreviadamente ), entonces esquemáticamente se puede definir a la máquina de Turing como:
( , ) ∶ ( , ( , )) = "sí"
( , ) ( , ( , ))
Con esta solución se concluye que la recursividad de mediante implicaría de cierta manera que decida también al lenguaje , lo cual resulta imposible dada la naturaleza de este lenguaje5.
El resultado anterior determina al siguiente teorema a modo de conclusión:
Teorema 5.2:
≠ .
∈ ,
sin embargo no es recursivo, propiedad que cumplen todos los lenguajes que pertenecen apor ser decididos por máquinas de Turing deterministas. Por lo tanto se ha llegado a una contradicción con respecto a la hipótesis inicialmente planteada, por ende, es razonable concluir con la siguiente respuesta:
≠
.
4 El problema de parada descrito por Alan Turing.
5 El lenguaje no es recursivo.
10
6 Conclusiones
En esta sección se dará respuesta a las interrogantes propuestas en la Introducción:
1. El lenguaje CERTIFICANDO, al ser recursivamente enumerable, demuestra que es posible encontrar, dada una salida de un algoritmo de un problema que pertenece a
, alguna entrada por la cual se ejecute dicho algoritmo y se produzca esa salida. Esto es posible porque CERTIFICANDO recorre la máquina de Turing, que representa al algoritmo en cuestión, de modo inverso, logrando que se pueda encontrar al menos una entrada para una salida.
2. La no recursividad de CERTIFICANDO prueba que una computadora no puede demostrar si una cadena de caracteres no pertenece a la salida de un algoritmo de un problema que está en
. Resulta ser que si se pudiera encontrar una respuesta afirmativa para este problema, entonces el complemento de CERTIFICANDO también tendría solución, hecho que se demostró que era imposible.
Bibliografía
- Christos H. P. (1994). Computational Complexity. Sand Diego: Addison-Wesley.
- Thomas H. C., Charles E. L., Ronald L. R. y Clifford S. (2001). Introduction to Algorithms (2da ed.). Massachusetts: MIT Press.
- Michael R. G. y David S. J. (1979). Computers and Intractability. A Guide to the Theory of NP-Completeness. Bell Telephone Laboratories.
- Harry R. L. y Christos H. P. (1998). Elements of the Theory of Computation (2da ed.). New Jersey: Prentice-Hall.