Como hemos ido mencionando, en este capítulo introducimos una nueva técnica que tiene la teoría de complejidad computacional llamada aritmetización. Ésta permitió demostrar el teorema nombrado en el título de esta sección, el teorema PCP y otros muy importantes que fueron muy sorprendentes en los noventas. Esta técnica parece escapar de la limitación llamada relativización y es de una naturaleza distinta a la limitación vista en el capítulo de Circuitos llamada Na- tural proofs. Pero lamentablemente no permitió resolver los grandes problemas del campo y con el tiempo la comunidad se volvió a estancar. Finalmente se "justificó" o "formalizó" tal estancamiento a partir de su respectiva limitación conocida como algebrización. Esta limitación se analizará en la próxima sec- ción. La presente sección se basa principalmente en la subsección 8.3 de [8]. Vale agregar que el enunciado y la demostración del teorema PCP queda fuera del alcance del trabajo, el lector interesado puede ver los capítulos 11 y 22 de [8] y los trabajos [10, 11].
Yendo al meollo de la cuestión, la aritmetización consiste en transformar una fórmula booleana ϕ de n variables en un polinomio multivariable de n variables equivalente, pϕ, tal que toda asignación u ∈ {0, 1}n cumpla ϕ(u) = pϕ(u). Una
vez que tenemos pϕnada nos impide evaluarlo en otros valores distintos del cero
y del uno, digamos, evaluarlo en otro cuerpo como R o en cuerpos finitos. Esta acción le dará un sorprendente poder a los verificadores.
Cuando las variables toman 0, 1 podemos transformar los ∧ en . (producto) y ¬ en la resta (¬x en 1 − x). Por dar algunos ejemplos veamos las siguiente correspondencias entre fórmulas y polinomios cuando las variables toman cero o uno.
x ∧ y ←→ x.y
¬x ←→ 1 − x
x ∨ y ←→ 1 − (1 − x)(1 − y) x ∨ y ∨ ¬z ←→ 1 − (1 − x)(1 − y)z
La transformación es directa, dada ϕ una 3CNF de n variables y m cláusulas definimos pϕ=
m
Y
i≥1
picon piun polinomio de n variables equivalente a la i-ésima
cláusula de m. Esta equivalencia nace a partir de la correspondencia recién vista. Se observa que cada pi tiene al menos n − 3 variables que no "usa" ya que como
ϕ está en 3CNF cada cláusula tiene a lo sumo tres variables. Por ejemplo si la j-ésima cláusula de ϕ es x2∨ ¬x3∨ ¬x9 entonces
pj(x1, x2, . . . , x9, . . . , xn) = 1 − (1 − x2)x3x9. Otra observación importante es
que el grado del polinomio es menor o igual a 3m. Representaremos pϕsin "abrir
los paréntesis", por lo tanto pϕtiene una representación de tamaño O(m).
A continuación utilizaremos la aritmetización para probar un teorema tam- bién importante cuya demostración nos servirá como "entrada en calor" para probar PSPACE ⊆ IP.
Definamos el lenguaje #SAT como el conjunto de pares (ϕ, K) tal que ϕ es una 3CNF con exactamente K asignaciones que la satisfacen. Por ejemplo 3SAT × {0} ⊆ #SAT ya que ϕ ∈ 3SAT sii ϕ tiene exactamente cero asignaciones que la satisfacen. Como un dato curioso, #SAT es un problema completo (en el sentido de reducción de Karp, Definición 12) para una clase muy "poderosa" llamada #P en la cual está incluida por ejemplo PH. A continuación daremos un protocolo interactivo polinomial para #SAT mostrando que pertenece a IP y por lo tanto mostrando que #P ⊆ IP. El lector interesado puede ver el trabajo original [27].
Teorema 78. #SAT ∈ IP
Demostración. Sea ϕ una 3CNF de n variables, m cláusulas y K un entero. Sea pϕel polinomio multivariable construido por aritmetización a partir de ϕ. Como
vimos se cumple que ∀u ∈ {0, 1}n ϕ(u) = pϕ(u), luego si #ϕ es la cantidad de
asignaciones que la satisfacen entonces se cumple también:
#ϕ = X b1∈{0,1} X b2∈{0,1} . . . X bn∈{0,1} pϕ(b1, . . . , bn). (6.1)
El prover va tratar de convencer al verificador de que dicha suma es exactamente K, y a partir de ahora, nos podemos olvidar de ϕ y pensar en términos de pϕ. En
el primer paso el prover le envía al verificador un número primo q en el intervalo (2n, 22n]. El verificador chequea si q es primo con algún test de primalidad
eficiente. Notemos que necesariamente 0 ≤ #ϕ ≤ 2n, entonces como q > 2n se
tiene que la ecuación (6.1) se cumple sobre Z si y solo si se cumple para Zq,
el cuerpo de enteros módulo q. Por lo tanto pensaremos todas las operaciones sobre Zq. Probaremos el teorema dando un protocolo para verificar ecuaciones
Dado un polinomio multivariable g(x1, . . . , xn) de grado d, un entero K y
un primo q, mostremos un protocolo interactivo para decidir
K = X b1∈{0,1} X b2∈{0,1} . . . X bn∈{0,1} g(b1, . . . , bn). (6.2)
donde todas las operaciones son módulo q. Los únicos requerimientos para g es que sea representable en tamaño polinomial, y que pueda ser evaluado en tiempo polinomial para cualquier valor de las variables en el cuerpo, el cual es en este caso Zq. Naturalmente, estos requerimientos son satisfechos por pϕ. Notemos
que para cualquier asignación de valores b2, . . . , bn a las variables x2, . . . , xn se
tiene que g(x1, b2, . . . , bn) es un polinomio de una sola variable de grado d. Por
lo tanto el siguiente polinomio también tiene grado d y es de una sola variable: h(x1) = X b2∈{0,1} . . . X bn∈{0,1} g(x1, b2, . . . , bn). (6.3)
Si (6.2) es cierto entonces necesariamente h(0) + h(1) = K. A continuación mostraremos el protocolo Sumcheck para chequear (6.2), sea V el verificador y P el prover.
—————————————————————————————————— V : Si n = 1 chequea que g(0) + g(1) = K, si se cumple acepta sino rechaza. Si n ≥ 2 le dice a P que le envíe el respectivo h(x1) como el definido en (6.3).
P : Le envía algún polinomio s(x1) (si P no está mintiendo entonces efecti-
vamente s(x1) = h(x1)).
V : Va a tratar de verificar si efectivamente s(x1) = h(x1). Lo primero que
hace es chequear que s(0)+s(1) = K (si no lo cumple automáticamente rechaza). Luego toma aleatoriamente un a ∈ Zq y recursivamente usa este protocolo para
chequear s(a) = X b2∈{0,1} . . . X bn∈{0,1} g(a, b2, . . . , bn). —————————————————————————————————— Observemos que definiendo l(x2, . . . , xn) = g(a, x2, . . . , xn) tenemos que l es
un polinomio multivariable de n − 1 variables que cumple todos los requerimien- tos. Por ende es válido dar de entrada s(a) y l al protocolo recursivamente.
Analicemos: si efectivamente se cumple
K = X b1∈{0,1} X b2∈{0,1} . . . X bn∈{0,1} g(b1, . . . , bn).
Entonces existe un prover P que siempre brinda el correspondiente h en cada iteración del protocolo. Por lo tanto la probabilidad de aceptación es 1 que es mayor a 2
Por otro lado, si no se cumple entonces V rechaza con probabilidad mayor o igual a (1 −d
p)
n. Lo demostremos por inducción.
Caso n = 1. Supongamos que K 6=P
b1∈{0,1}g(b1) luego el verificador sim- plemente chequea que K 6= g(0) + g(1) y rechaza.
Caso inductivo. Supongamos que
K 6= X b1∈{0,1} X b2∈{0,1} . . . X bn∈{0,1} X bn+1∈{0,1} g(b1, . . . , bn, bn+1).
Luego P le envía un polinomio s(x1). El verificador chequea s(0) + s(1) = K (si
no se cumple lo rechaza) supongamos que lo cumple. Luego s(x1) es diferente
a h(x1) en consecuencia el polinomio s(x1) − h(x1) no es el polinomio nulo y
tiene a lo sumo d raíces. Osea, hay a lo sumo d valores a tal que s(a) = h(a). Entonces cuando V elije a ∈ Zq aleatorio se cumple
P r[s(a) 6= h(a)] ≥ 1 −d q.
Por lo tanto si el a elegido es uno tal que s(a) 6= h(a) entonces en el paso recur- sivo se tratará de probar que s(a) = g(a, x2, . . . , xn, xn+1), hecho falso. Como
este nuevo polinomio tiene n variables, por la hipótesis inductiva la probabilidad de que V rechace es de al menos (1 −dp)n. Por lo tanto
P r[V rechaza] ≥ (1 −d q).(1 − d p) n= (1 −d p) n+1≥ 2 3.
A continuación adaptaremos la anterior prueba para dar un protocolo inter- activo a TQBF. Recordando: TQBF es el lenguaje de fórmulas booleanas cuanti- ficadas (ver Definición 23) y cumple que es PSPACE-completo (ver Definición 22), por lo tanto demostrando que TQBF ∈ IP demostramos PSPACE ⊆ IP. El lector interesado puede ver el trabajo original [32] y también [33] donde se lo demuestra con el operador lineal que veremos.
Teorema 79. PSPACE ⊆ IP
Demostración. Dada una fórmula Booleana cuantificada
Ψ = ∀x1∃x2∀x3. . . ∃xnϕ(x1, . . . , xn), creamos su respectivo polinomio multiva-
riable mediante aritmetización, pϕ. Luego Ψ ∈ TQBF si y solo si
Y b1∈{0,1} X b2∈{0,1} Y b3∈{0,1} . . . X bn∈{0,1} pϕ(b1, . . . , bn) 6= 0. (6.4)
La primera impresión es que podríamos haber usado exactamente el mismo protocolo usado en el teorema anterior, la diferencia es que en este caso usamos el productorio para las variables cuantificadas con ∀. Vamos a chequear s(0).s(1) = K, y vamos a hacer algo análogo con las demás variables cuantifica- das con ∃. Se verá que no hay nada malo con esto, solo el tiempo de ejecución,
ya que el producto a diferencia de la suma aumenta el grado del polinomio. Si definiéramos h(x1) análogamente a (6.3) dejando como variable libre a x1 en
(6.4) entonces su grado aumentaría tal vez hasta 2n. Tal polinomio podría tener
2n coeficientes y por ende el prover no se lo podría transmitir al verificador. La
solución a este problema es notar que (6.4) se evalúa en {0, 1} entonces para cada x ∈ {0, 1} se tiene xk = x para todo k ≥ 1. Luego en principio podemos
convertir todo polinomio p(x1, . . . , xn) en un polinomio multilineal l(x1, . . . , xn)
(i.e, el grado de l es a lo sumo 1 en cada variable) que coincide con p en toda asignación x1, . . . , xn ∈ {0, 1}. En ese cometido definimos el operador Li sobre
polinomios de la siguiente manera:
Sea p un polinomio de n variables definimos:
Li(p)(x1, . . . , xn) = xi.p(x1, . . . , xi−1, 1, xi+1, . . . , xn)
+ (1 − xi).p(x1, . . . , xi−1, 0, xi+1, . . . , xn).
Luego Li(p) es lineal en xi y coincide con p en cualquier valor de las variables
mientras xi esté en {0, 1}. Por ende, L1(L2(. . . (Ln(p) . . .) es un polinomio mul-
tilineal que coincide con p en todas las posibles asignaciones de las variables en {0, 1}.
Por lo tanto podemos pensar en ∀xiy ∃xicomo operadores sobre polinomios
donde:
∀xip(x1, . . . , xn) = p(x1, . . . , xi−1, 0, xi+1, . . . , xn).p(x1, . . . , xi−1, 1, xi+1, . . . , xn).
∃xip(x1, . . . , xn) = p(x1, . . . , xi−1, 0, xi+1, . . . , xn)+p(x1, . . . , xi−1, 1, xi+1, . . . , xn).
Finalmente, podemos repensar (6.4) de la siguiente manera: si aplicamos la secuencia de operadores ∀x1∃x2∀x3. . . ∃xn sobre el polinomio pϕ(x1, . . . , xn)
(donde primero aplicamos ∃xny por último ∀x1) entonces obtenemos el valor no
nulo. Como se ha observado, solo nos interesa el resultado al que se llega cuando las variables toman 0 o 1 por lo tanto podemos utilizar una cantidad arbitraria de operadores Li y el resultado no va a variar. En particular vamos a utilizar
los operadores para que todo polinomio resultante de algún paso intermedio del protocolo Sumcheck tenga un grado bajo. Específicamente, utilizaremos la siguiente expresión:
∀x1L1∃x2L1L2∀x3L1L2L3. . . ∃xnL1L2L3. . . Ln pϕ(x1, . . . , xn).
Observemos que el tamaño de la expresión es O(1 + 2 + 3 + . . . + n) = O(n2).
En la adaptación del protocolo Sumcheck así como tenemos una ronda para cada operadorP también tendremos una para cada Q y otra para cada Li(don-
de en cada una el prover le enviará un polinomio de grado menor o igual a 2). A continuación damos una descripción inductiva del protocolo. Supongamos que para un polinomio g(x1, . . . , xn) el prover tiene la capacidad de convencer al ve-
rificador que g(a1, . . . , an) = K con probabilidad 1 para cualquier a1, . . . , an, K
que lo cumpla. Y con probabilidad de a lo sumo para aquellos que no. Sea u(x1, . . . , xl) cualquier polinomio de l variables obteniendo como
donde ∆ es ∃xi o ∀xi o Li para algún i ∈ {1, . . . , n}. Por ende, l es n − 1
en los primeros dos casos y n en el último. Sea d una cota superior del grado de u sobre la variable xi conocida por el verificador (en nuestro caso d ≤ 3m).
Mostraremos que el prover puede convencer al verificador de que
u(a1, . . . , al) = K0 con probabilidad 1 para cualesquiera valores a1, . . . , al, K0
que sea cierto y con probabilidad menor o igual a +dq cuando no lo sea (con q el primo definido como en el protocolo Sumcheck ). Para simplicidad supongamos que i = 1. El verificador realiza lo siguiente:
Caso 1: ∆ = ∃x1. El prover le brinda un polinomio s(x1) de grado d que
supuestamente es g(x1, a2, . . . , an). El verificador chequea que s(0) + s(1) = K0
(si no lo cumple automáticamente rechaza). Caso contrario, toma un a ∈ Zq
aleatorio y le pide al prover que demuestre que s(a) = g(a, a2, . . . , an).
Caso 2: ∆ = ∀x1. Igual que el caso anterior solo que el verificador chequea
s(0).s(1) = K0 en lugar de s(0) + s(1).
Caso 3: ∆ = L1. Análogamente a los casos anteriores el prover envía un
polinomio s(x1). El verificador chequea que
a1s(0) + (1 − a1)s(1) = K0
si no lo cumple entonces lo rechaza. Caso contrario, toma un a ∈ Zq aleatorio y
le pide al prover que demuestre que s(a) = g(a, a2, . . . , an).
La demostración de correctitud sigue la misma vista en #SAT ∈ IP. Otra vez la observación clave es que si s(x1) no es el polinomio correcto entonces con
probabilidad 1 −dq el prover falla en probar la falsa proposición de la próxima ronda.