12 Paralelismo cuántico

Como hemos indicado anteriormente, en esta asignatura nos abstraeremos de la implementación particular de un ordenador cuántico y plantearemos una serie de reglas y operaciones que podemos aplicar a todos ellos. A continuación, veremos la formulación matemática que utilizaremos en el análisis y diseño de los algoritmos de computación cuántica.

12.1 Modelo de un ordenador cuántico

La máxima ventaja de un ordenador cuántico sobre uno clásico se obtiene utilizando estados cuánticos puros. Por ello, en este tema consideraremos que el estado interno del ordenador se representa con un estado puro. Para simplificar todavía más la exposición, siempre utilizaremos la base 0=[10]\ket{0}= \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] y 1=[01]\ket{1}= \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr] para representar el estado interno del sistema. Por ello, denominaremos a esta base de medida como base computacional.

Bit cuántico o cúbit

La unidad de información, o estado cuántico mínimo que puede manejar un procesador cuántico, es el cúbit. La representación de un cúbit en la base computacional se corresponde a una superposición de estados: ψ=α0+β1,\begin{align*} \ket{\psi} = \alpha \ket{0} + \beta \ket{1}, \end{align*} donde α\alpha y β\beta son números complejos tales que α2+β2=1|\alpha|^2+|\beta|^2=1. La matriz de densidad de probabilidad para este estado puro es ρ=ψψ\rho=\ket{\psi}\bra{\psi}, pero por claridad nos referiremos al estado cuántico simplemente como ψ\ket{\psi}.

Estado conjunto

El estado conjunto del sistema se describe por el producto tensorial (o producto de Kronecker) de los estados componentes del mismo. A menudo utilizaremos la notación abreviada: ψ1ψ2ψn  =  ψ1ψ2ψn\begin{align*} \ket{\psi_1 \psi_2 \cdots \psi_n} \;=\; \ket{\psi_1} \otimes \ket{\psi_2} \otimes\cdots \otimes \ket{\psi_n} \end{align*} Resaltar que el estado ψ1ψ2ψn\ket{\psi_1 \psi_2 \cdots \psi_n} se corresponde a un estado puro que comprende los nn cúbits del sistema.

Ejemplo 12.1 Consideremos un ordenador cuántico de 33 cúbits con un estado interno inicial 010\ket{0 1 0}. Utilizando el producto tensorial, tenemos que este estado se corresponde con el vector: 010=010=[10][01][10]=[0100]T[10]=[00100000]T\begin{align*} \ket{0 1 0} &= \ket{0} \otimes \ket{1} \otimes \ket{0}\\ &= \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] \otimes \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr]\otimes \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr]\\ &= [\begin{matrix}0&1&0&0\end{matrix}]^T \otimes \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr]\\ &= [\begin{matrix}0&0&1&0&0&0&0&0\end{matrix}]^T \end{align*} Se puede ver que para representar el estado interno de un ordenador de n=3n=3 cúbits es necesario utilizar un vector de longitud 2n=82^n=8. Esta propiedad se hará más relevante a medida que aumente la dimensión del sistema. Por ejemplo, para representar el estado interno de un ordenador de n=32n=32 cúbits ya será necesario un vector de longitud 2n41092^n \approx 4\cdot 10^9, y para el ordenador de n=53n=53 cúbits empleado por Google en el hito de la supremeacía cuántica 2n910152^n \approx 9\cdot 10^{15}.

Por tanto, el incremento en la potencia de cómputo de un ordenador cuántico escala de forma exponencial con el número de cúbits que es capaz de manejar.

Si consideramos un sistema de nn cúbits, la base computacional se corresponde a los 2n2^n vectores ortogonales 0000,0001,0010,0011, ,1111.\begin{align*} \ket{0 \cdots 000},\quad \ket{0 \cdots 001},\quad \ket{0 \cdots 010},\quad \ket{0 \cdots 011},\quad \ldots\ ,\quad \ket{1 \cdots 111}. \end{align*} Utilizando las propiedades del producto tensorial es posible representar cualquier estado interno del sistema en la base computacional. Por ejemplo, consideremos el estado +0\ket{+ 0}. Utilizando que +=12[+1+1]=12(0+1)\begin{align*} \ket{+} = \tfrac{1}{\sqrt{2}}\bigl[\begin{smallmatrix}+1\\+1\end{smallmatrix}\bigr] = \tfrac{1}{\sqrt{2}}\bigl(\ket{0}+\ket{1}\bigr) \end{align*} obtenemos +0=+0=12(0+1)0=12(00+10)=1200+1210.\begin{align*} \ket{+ 0} &= \ket{+}\otimes\ket{0}\\ &= \tfrac{1}{\sqrt{2}}\bigl(\ket{0}+\ket{1}\bigr)\otimes\ket{0}\\ &= \tfrac{1}{\sqrt{2}}\bigl(\ket{0}\otimes\ket{0} +\ket{1}\otimes\ket{0}\bigr)\\ &= \tfrac{1}{\sqrt{2}}\ket{00} + \tfrac{1}{\sqrt{2}} \ket{10}. \end{align*} Vemos que +0\ket{+ 0} es una combinación lineal de los vectores 00\ket{00} y 10\ket{10} de la base computacional correspondiente.

Ejercicio 12.1 Represente el estado 01+\ket{0 1 +} en la base computacional {000,001,,111}\{\ket{000}, \ket{001},\ldots,\ket{111}\}.

Medida del estado: base computacional

El proceso de medida en un ordenador cuántico se realiza siempre con respecto a la base computacional, es decir, por medio del POVM {Π0,Π1}\{\Pi_0, \Pi_1\} donde Π0=00\Pi_0=\ket{0}\bra{0} y Π1=11\Pi_1=\ket{1}\bra{1}. Así, para el estado ψ=α0+β1,\begin{align*} \ket{\psi} = \alpha \ket{0} + \beta \ket{1}, \end{align*} la probabilidad de medir cada uno de los dos posibles observables está dada por: Pr{‘0’}=Tr[Π0ψψ]=0ψψ0=α2,Pr{‘1’}=Tr[Π1ψψ]=1ψψ1=β2.\begin{align*} \Pr\{\text{`0'}\} &= \text{Tr}\bigl[\Pi_0 \ket{\psi}\bra{\psi}\bigr] = \braket{0}{\psi}\braket{\psi}{0} = |\alpha|^2,\\ \Pr\{\text{`1'}\} &= \text{Tr}\bigl[\Pi_1 \ket{\psi}\bra{\psi}\bigr] = \braket{1}{\psi}\braket{\psi}{1} = |\beta|^2. \end{align*} Para un sistema compuesto, la medida también se realiza con respecto al POVM correspondiente a la base computacional, que está dado por {Π000,Π001,,Π111},\begin{align*} \bigl\{\Pi_{0\cdot 00},\, \Pi_{0\cdot01},\, \ldots,\, \Pi_{1\cdot11}\bigr\}, \end{align*} donde Πi1in=i1ini1in\Pi_{i_1 \cdot i_n} = \ket{i_1 \cdots i_n} \bra{i_1 \cdots i_n}.

Ejercicio 12.2 Determine las probabilidades de los distintos resultados de una medida con respecto a la base computacional para un sistema de dimensión n=2n=2 con estado interno ϕ=a00+b01+c10+d11.\begin{align*} \ket{\phi} &= a \ket{00} + b\ket{01} + c\ket{10} + d\ket{11}. \end{align*}

Operaciones y puertas cuánticas

La evolución del estado interno de un ordenador cuántico es unitaria. Para un estado puro ψ\ket{\psi} (posiblemente compuesto por nn cúbits) y una matriz unitaria UU (de dimensión 2n×2n2^n \times 2^n) se tiene que el nuevo estado del sistema tras aplicar la operación UU está dado por ϕ=UψdondeUUH=UHU=I.\begin{align*} \ket{\phi} = U \ket{\psi}\quad\text{donde}\quad UU^{H}=U^{H}U=I. \end{align*} Normalmente, en un procesador cuántico, las operaciones se aplican sobre un subconjunto de los cúbits que componen el sistema. Esto se representa mediante la operación del producto tensorial (de Kronecker), utilizando el operador identidad I=[1001]I = \bigl[\begin{smallmatrix}1 &0\\0&1\end{smallmatrix}\bigr] sobre los cúbits donde no se aplica ninguna operación.

Ejemplo 12.2 Consideremos un sistema de dimensión n=2n=2 con estado inicial ψ=01\ket{\psi} = \ket{0 1}. Si aplicamos una operación binaria X=[0110]X = \bigl[\begin{smallmatrix}0 &1\\1&0\end{smallmatrix}\bigr] al primer cúbit del sistema, obtenemos un nuevo estado dado por ϕ=(XI)(01)=(X0)(I1)=11=11,\begin{align*} \ket{\phi} &= (X \otimes I) (\ket{0} \otimes \ket{1})\\ &= (X\ket{0}) \otimes (I\ket{1})\\ &= \ket{1} \otimes \ket{1} = \ket{11}, \end{align*} donde hemos utilizado que X0=[0110][10]=[01]=1.\begin{align*} X\ket{0} = \bigl[\begin{smallmatrix}0 &1\\1&0\end{smallmatrix}\bigr]\bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] = \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr] = \ket{1}. \end{align*}

Estas transformaciones, que se aplican sobre un subconjunto de los cúbits del sistema, se denominan puertas cuánticas, de una forma análoga a las puertas lógicas de los circuitos electrónicos clásicos. En el caso clásico, cualquier función booleana se peude implementar mediante una combinación de puertas NAND, que para las entradas binarias aa y bb presenta una salida f(a,b)=¬(ab)f(a,b) = \neg (a \wedge b). De forma análoga, es posible demostrar que en el caso cuántico, cualquier transformación unitaria UU se puede aproximar mediante la combinación de puertas cuánticas de 1 y 2 cúbits. A continuación, estudiaremos algunas las puertas cuánticas más relevantes:

Ejemplo 12.3 Aplicamos las puertas II, XX y ZZ sobre la base computacional 0=[10]\ket{0}= \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] y 1=[01]\ket{1}= \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr].

  • La puerta II es la tranformación unidad, y no afecta al estado: I0=[1001][10]=[10]=0,I1=[1001][01]=[01]=1.\begin{align*} I \ket{0} &= \bigl[\begin{smallmatrix}1 &0\\0&1\end{smallmatrix}\bigr] \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] = \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] = \ket{0},\\ I \ket{1} &= \bigl[\begin{smallmatrix}1 &0\\0&1\end{smallmatrix}\bigr] \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr] = \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr] = \ket{1}. \end{align*}

  • La puerta XX se corresponde con una negación lógica e intercambia los estados 0\ket{0} y 1\ket{1}: X0=[0110][10]=[01]=1,X1=[0110][01]=[10]=0.\begin{align*} X \ket{0} &= \bigl[\begin{smallmatrix}0 &1\\1&0\end{smallmatrix}\bigr] \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] = \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr] = \ket{1},\\ X \ket{1} &= \bigl[\begin{smallmatrix}0 &1\\1&0\end{smallmatrix}\bigr] \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr] = \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] = \ket{0}. \end{align*}

  • La puerta ZZ cambia la fase del estado 1\ket{1}, pero no la del 0\ket{0}: Z0=[1001][10]=[10]=0,Z1=[1001][01]=[01]=1.\begin{align*} Z \ket{0} &= \bigl[\begin{smallmatrix}1 &0\\0&-1\end{smallmatrix}\bigr] \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] = \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] = \ket{0},\\ Z \ket{1} &= \bigl[\begin{smallmatrix}1 &0\\0&-1\end{smallmatrix}\bigr] \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr] = \bigl[\begin{smallmatrix}0\\-1\end{smallmatrix}\bigr] = -\ket{1}. \end{align*}

Puerta de Hadamard

La puerta de Hadamard es también una puerta de 11 cúbit, y está dada por: H=12[+1+1+11]\begin{align*} H = \frac{1}{\sqrt{2}}\Biggl[\begin{matrix}+1 &+1\\+1&-1\end{matrix}\Biggr] \end{align*}

Ejemplo 12.4 Aplicamos la puerta HH sobre la base computacional 0=[10]\ket{0}= \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] y 1=[01]\ket{1}= \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr]. H0=12[+1+1+11][10]=12[11]=12(0+1),H1=12[+1+1+11][01]=12[+11]=12(01).\begin{align*} H \ket{0} &= \frac{1}{\sqrt{2}} \bigl[\begin{smallmatrix}+1 &+1\\+1&-1\end{smallmatrix}\bigr] \bigl[\begin{smallmatrix}1\\0\end{smallmatrix}\bigr] = \frac{1}{\sqrt{2}} \bigl[\begin{smallmatrix}1\\1\end{smallmatrix}\bigr] = \tfrac{1}{\sqrt{2}} \bigl(\ket{0} + \ket{1}\bigr),\\ H \ket{1} &= \frac{1}{\sqrt{2}} \bigl[\begin{smallmatrix}+1 &+1\\+1&-1\end{smallmatrix}\bigr] \bigl[\begin{smallmatrix}0\\1\end{smallmatrix}\bigr] = \frac{1}{\sqrt{2}} \bigl[\begin{smallmatrix}+1\\-1\end{smallmatrix}\bigr] = \tfrac{1}{\sqrt{2}} \bigl(\ket{0} - \ket{1}\bigr). \end{align*} Teniendo en cuenta que los estados +=12(0+1)\ket{+} = \tfrac{1}{\sqrt{2}} \bigl(\ket{0} + \ket{1}\bigr) y =12(01)\ket{-} = \tfrac{1}{\sqrt{2}} \bigl(\ket{0} - \ket{1}\bigr), concluimos que la puerta de Hadamard realiza una transformación del estado desde la base {0,1}\bigl\{ \ket{0}, \ket{1}\bigr\} a la base {+,}\bigl\{ \ket{+}, \ket{-}\bigr\}.

Ejercicio 12.3 A un cúbit 0\ket{0} se le aplica una puerta HH y una medida en la base computacional:

  1. Obtenga las probabilidades de que el resultado de la medida sea $0$' y de que sea11’.
  2. Implemente este circuito en IBM Quantum. Verifique el resultado anterior con varias ejecuciones del circuito: ¿obtiene exactamente las probabilidades teóricas de obtener 0' y1’? ¿por qué?

Puerta SWAP

La puerta SWAP es una transformación unitaria que se aplica a 22 cúbits, y está dada por:

SWAP=[1000001001000001]\begin{align*} \text{SWAP} &= \left[\begin{smallmatrix}1&0&0&0\\0&0&1&0\\0&1&0&0\\0&0&0&1\end{smallmatrix}\right] \end{align*}

Puerta SWAP.

La puerta SWAP intercambia los 2 cúbits presentes a su entrada. Para ver esto se debe tener en cuenta que, de acuerdo a la notación tensorial, la primera fila/columna de la puerta SWAP se corresponde con el estado de la base 00\ket{00}, la segunda con 01\ket{01}, la tercera con 10\ket{10}, y la última con 11\ket{11}. Así, la puerta SWAP deja inalterados los estados 00\ket{00} y 11\ket{11}, e intercambia los estados 01\ket{01} y 10\ket{10}.

Puerta UU-controlada (controlled-UU)

Para una puerta cuántica (de 11 cúbit) dada por U=[u00u01u10u11],U = \left[\begin{matrix}u_{00}&u_{01}\\u_{10}&u_{11}\end{matrix}\right], la puerta UU-controlada (que se aplica sobre 22 cúbits) se define como CU=[I00U]=[1000010000u00u0100u10u11]\begin{align*} C_U = \left[\begin{smallmatrix}I& 0\\0&U\end{smallmatrix}\right] = \left[\begin{smallmatrix}1&0&0&0\\0&1&0&0\\0&0&u_{00}&u_{01}\\0&0&u_{10}&u_{11}\end{smallmatrix}\right] \end{align*} Esta puerta utiliza el primer cúbit como ``control’’. Así, que si el primer cúbit es igual a 1\ket{1} (está activo) aplica la puerta UU al segundo cúbit. Si el primer cúbit es igual a 0\ket{0} (no está activo), entonces la puerta no hace ninguna operación sobre el segundo.

Puerta CNOT (puerta NOT controlada)

La puerta CNOT es una transformación sobre 22 cúbits, y está dada por:

CNOT=[1000010000010010]\begin{align*} \text{CNOT} &= \Biggl[\begin{smallmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\\0&0&1&0\end{smallmatrix}\Biggr] \end{align*}

Puerta CNOT.

La puerta CNOT es un caso particular de la puerta UU-controlada, en la que la operación unitaria es U=XU=X; CNOTCX\text{CNOT} \equiv C_X. La puerta CNOT aplica una operación NOT en el segundo cúbit, si el primero está activo.

Ejemplo 12.5 Aplicamos la puerta CNOT a la base computacional 00\ket{00}, 01\ket{01}, 10\ket{10} y 11\ket{11}: CNOT00=[1000010000010010][1000]=[1000]=00,CNOT01=[1000010000010010][0100]=[0100]=01,CNOT10=[1000010000010010][0010]=[0001]=11,CNOT11=[1000010000010010][0001]=[0010]=10.\begin{align*} &\text{CNOT} \ket{00} = \left[\begin{smallmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\\0&0&1&0\end{smallmatrix}\right] \left[\begin{smallmatrix}1\\0\\0\\0\end{smallmatrix}\right] = \left[\begin{smallmatrix}1\\0\\0\\0\end{smallmatrix}\right] = \ket{00},\\ &\text{CNOT} \ket{01} = \left[\begin{smallmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\\0&0&1&0\end{smallmatrix}\right] \left[\begin{smallmatrix}0\\1\\0\\0\end{smallmatrix}\right] = \left[\begin{smallmatrix}0\\1\\0\\0\end{smallmatrix}\right] = \ket{01},\\ &\text{CNOT} \ket{10} = \left[\begin{smallmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\\0&0&1&0\end{smallmatrix}\right] \left[\begin{smallmatrix}0\\0\\1\\0\end{smallmatrix}\right] = \left[\begin{smallmatrix}0\\0\\0\\1\end{smallmatrix}\right] = \ket{11},\\ &\text{CNOT} \ket{11} = \left[\begin{smallmatrix}1&0&0&0\\0&1&0&0\\0&0&0&1\\0&0&1&0\end{smallmatrix}\right] \left[\begin{smallmatrix}0\\0\\0\\1\end{smallmatrix}\right] = \left[\begin{smallmatrix}0\\0\\1\\0\end{smallmatrix}\right] = \ket{10}. \end{align*} Se observa que si el primer cúbit es 0\ket{0}, el segundo permanece inalterado. En cambio, si el primer cúbit es 1\ket{1} se aplica una negación al segundo. Para representar esto, a menudo se utiliza la notación: CNOTa,b=a,ab,\begin{align*} &\text{CNOT} \ket{a,b} = \ket{a,a\oplus b}, \end{align*} donde a,b{0,1}a,b\in\{0,1\}, y \oplus hace referencia a la operación binaria XOR (OR exclusivo).

Ejercicio 12.4 Considere el estado incial formado por dos cúbits ψ0=00=00\ket{\psi_0} = \ket{00} = \ket{0} \otimes \ket{0}.

  1. Determine el estado compuesto resultante ψ1\ket{\psi_1} que se obtiene al aplicar un operador HH al primer cúbit de 00\ket{00} (y no aplicar ninguna operación al segundo).

  2. Para el estado del apartado anterior ψ1\ket{\psi_1}, determine el estado compuesto ψ2=CNOTψ1\ket{\psi_2} = \text{CNOT} \ket{\psi_1} y su matriz de densidad asociada δ=ψ2ψ2\delta= \ket{\psi_2}\bra{\psi_2}. ¿Reconoce de qué estado se trata?

  3. Obtenga la probabilidad de obtener cada uno de los cuatro resultados $00$',0101‘, $10$' y1111’ en una medida conjunta (en la base computacional) de los dos cúbits de ψ2\ket{\psi_2}.

12.2 Funciones booleanas

En muchos casos, nos interesará diseñar un circuito cuántico que represente una función booleana. Por ejemplo, consideremos la función de dos entradas a1a_1 y a2{0,1}a_2 \in\{0,1\} cuya salida se corresponde con la operación AND:

a1a2={1, si a1=a2=1,0, en otro caso.\begin{align*} a_1 \wedge a_2 = \begin{cases} 1,& \text{ si }a_1=a_2=1,\\ 0,& \text{ en otro caso.} \end{cases} \end{align*}

Boolean function AND. Un circuito cuántico que realice esta operación necesitaría implementar una transformación unitaria a1a2x1x2=Ua1a2\begin{align*} \ket{a_1 a_2} \rightarrow \ket{x_1 x_2} = U \ket{a_1 a_2} \end{align*} tal que x1=a1a2x_1 = a_1 \wedge a_2 y donde x2x_2 es una salida auxiliar que puede tomar cualquier valor. Aquí, es necesario añadir la salida auxiliar x2x_2 dado que UU se corresponde con una transformación unitaria. Por tanto, UU es una matriz cuadrada y la dimensión del sistema a la salida debe coincidir con la dimensión a su entrada.

Sin embargo, se puede demostrar que no existe ninguna transformación unitaria UU tal que x1=a1a2x_1 = a_1 \wedge a_2. Intuitivamente, se debe a que las matrices unitarias son invertibles, por lo que en una puerta cuántica no se puede perder información. Por tanto cualquier operación realizada debe ser reversible. Dado que la función AND no es reversible, no existe ninguna transformación unitaria UU tal que x1x2=Ua1a2\ket{x_1 x_2} = U \ket{a_1 a_2} con x1=a1a2x_1 = a_1 \wedge a_2.

Implementación cuántica de funciones booleanas

El ejemplo anterior muestra que, para una función booleana arbitraria f:{0,1}n{0,1}mf: \{0,1\}^n \to \{0,1\}^m, la transformación af(a)\begin{align*} \ket{\boldsymbol{a}} \rightarrow \ket{f(\boldsymbol{a})} \end{align*} posiblemente no sea reversible y por tanto no se pueda implementar con un circuito cuántico, incluso añadiendo las salidas auxiliares necesarias para que encajen las dimensiones de la entrada y la salida.

Para salvar este problema, vamos a considerar la siguiente implementación de esta transformación:

Oráculo de una función booleana.

Las entradas a este bloque son los cúbits a\ket{\boldsymbol{a}} y una serie de cúbits auxiliares b\ket{\boldsymbol{b}} de la misma dimensión que la salida de la función f(a)f(\boldsymbol{a}). A la salida, por una parte se replica la entrada a\ket{\boldsymbol{a}} y se calcula un XOR la función de interés bf(a)\ket{\boldsymbol{b} \oplus f(\boldsymbol{a})} con la entrada auxiliar. Por tanto, fijando la entrada auxiliar a b=0\ket{\boldsymbol{b}}=\ket{0}, queda

Oráculo de una función booleana, entrada auxiliar inicializada a 0.

A diferencia de la formulación vista anteriormente, esta operación siempre es reversible y se puede implementar como una función unitaria (por tanto, también como un circuito cuántico). Para ver que esta operación es reversible basta con darse cuenta de que a la salida disponemos de una copia de la entrada a\boldsymbol{a}. Por tanto, para cualquier función booleana ff, siempre podemos calcular f(a)f(\boldsymbol{a}) y deshacer el XOR de las líneas auxiliares.

Ejercicio 12.5 Vamos a implementar una puerta AND como un circuito cuántico: a,b0a,bab\begin{align*} \ket{a,b}\otimes\ket{0} \rightarrow \ket{a,b}\otimes\ket{a \wedge b} \end{align*}

Para ello consideramos la puerta de Toffoli (de 33 cúbits):

TOFF=[1000000001000000001000000001000000001000000001000000000100000010]\begin{align*} \text{TOFF} = \left[\begin{smallmatrix}1&0&0&0&0&0&0&0\\0&1&0&0&0&0&0&0\\0&0&1&0&0&0&0&0\\0&0&0&1&0&0&0&0\\0&0&0&0&1&0&0&0\\0&0&0&0&0&1&0&0\\0&0&0&0&0&0&0&1\\0&0&0&0&0&0&1&0\\\end{smallmatrix}\right] \end{align*}

Puerta de Toffoli.

Esta puerta cuántica recuerda en gran medida a la puerta CNOT ya que se trata de una puerta controlada por los dos primeros cúbits de su entrada.

  1. ¿Puede indicar a partir de la matriz TOFF cual es el estado de los dos primeros cúbits que activa la función NOT en el último?

  2. Obtenga la salida de esta puerta para las entradas 000\ket{000}, 010\ket{010}, 100\ket{100}, y 110\ket{110}.

  3. ¿Se ajusta este resultado a las salidas esperadas para una puerta AND, a,b,ab\ket{a,b,a \wedge b}?

12.3 Paralelismo cuántico

Denominamos paralelismo cuántico a la capacidad de un circuito cuántico de evaluar una función booleana f(a)f(\boldsymbol{a}) para todos los valores de a\boldsymbol{a} de forma simultánea en forma de superposición. Esta es una de las claves principales que permitirá un incremento exponencial de la potencia de cálculo de un ordenador cuántico en relación al número de cúbits del mismo.

En el punto anterior hemos visto que una función booleana ff se puede implementar con una transformación unitaria UfU_f. Así, para una entrada a0\ket{\boldsymbol{a}} \otimes\ket{0} a la salida obtenemos af(a)\ket{\boldsymbol{a}}\otimes\ket{f(\boldsymbol{a})}:

Oráculo de una función booleana, entrada auxiliar inicializada a 0.

Hasta ahora nos hemos restringido a entradas del tipo a\ket{\boldsymbol{a}} donde a{0,1}n\boldsymbol{a}\in \{0,1\}^n. Sin embargo UfU_f es un operador cuántico y por tanto nada nos impide aplicar un estado cuántico arbitrario ψ\ket{\psi} a su entrada:

Oráculo de una función booleana, entrada auxiliar inicializada a psi.

Para determinar φ\ket{\varphi}, descomponemos ψ\ket{\psi} como una superposición de elementos de la base computacional ψ=α1000+α2001++α2n111,\begin{align*} \ket{\psi} = \alpha_1 \ket{0\cdots 00} + \alpha_2 \ket{0\cdots 01} + \cdots + \alpha_{2^n} \ket{1\cdots 11}, \end{align*} y utilizamos que, como hemos visto en el apartado anterior, a=000f(a)=f(000),a=001f(a)=f(001),a=111f(a)=f(111).\begin{align*} \ket{\boldsymbol{a}} = \ket{0\cdots 00} \quad&\Rightarrow\quad \ket{f(\boldsymbol{a})} = \ket{f(0\cdots 00)},\\ \ket{\boldsymbol{a}} = \ket{0\cdots 01} \quad&\Rightarrow\quad \ket{f(\boldsymbol{a})} = \ket{f(0\cdots 01)},\\ &\vdots\\ \ket{\boldsymbol{a}} = \ket{1\cdots 11} \quad&\Rightarrow\quad \ket{f(\boldsymbol{a})} = \ket{f(1\cdots 11)}. \end{align*} Por la propiedad de linealidad de los operadores unitarios obtenemos φ=α1f(000)+α2f(001)++α2nf(111).\begin{align*} \ket{\varphi} = \alpha_1 \ket{f(0\cdots 00)} + \alpha_2 \ket{f(0\cdots 01)} + \cdots + \alpha_{2^n} \ket{f(1\cdots 11)}. \end{align*} Es decir, si a la entrada de un circuito cuántico aplicamos una superposición de estados, a su salida obtendremos la superposición de las correspondientes salidas a esos estados. Este proceso se puede ver en detalle en el siguiente ejemplo.

Ejemplo 12.6 Consideremos el siguiente circuito cuántico:

Superposición cuántica aplicada a una puerta de Toffoli. 1. El estado inicial en este circuito se corresponde con 000=000\ket{000} = \ket{0} \otimes \ket{0} \otimes \ket{0}.

  1. Después de aplicarle los operadores HH a los dos primeros cúbits tenemos el estado intermedio (HHI)(000)=H0H00=12(0+1)12(0+1)0=12(000+010+100+110),\begin{align*} \bigl(H \otimes H \otimes I\bigr)\bigl(\ket{0} \otimes \ket{0} \otimes \ket{0}\bigr) &= H\ket{0} \otimes H\ket{0} \otimes \ket{0}\\ &= \tfrac{1}{\sqrt{2}}\bigl(\ket{0}+\ket{1}\bigr) \otimes \tfrac{1}{\sqrt{2}}\bigl(\ket{0}+\ket{1}\bigr) \otimes \ket{0}\\ &= \tfrac{1}{2}\bigl(\ket{000}+\ket{010}+\ket{100}+\ket{110}\bigr), \end{align*} donde en el segundo paso hemos utilizado que H0=12(0+1)H\ket{0} = \tfrac{1}{\sqrt{2}}\bigl(\ket{0}+\ket{1}\bigr) y en el último paso hemos utilizado la propiedad distributiva del producto tensorial con la suma, (a+b)c=(ac)+(bc)(a+b) \otimes c = (a\otimes c) + (b\otimes c).

  2. Este estado se emplea como entrada de una puerta de Toffoli (que recordemos se corresponde con la función booleana AND de los 2 primeros cúbits). Así, a la salida del circuito obtenemos y=12(0,0,00+0,1,01+1,0,10+1,1,11)=12(000+010+100+111).\begin{align*} \ket{\boldsymbol{y}} &= \tfrac{1}{2}\bigl(\ket{0,0, 0\wedge 0}+\ket{0,1, 0\wedge 1}+\ket{1,0, 1\wedge 0}+\ket{1,1, 1\wedge 1}\bigr)\\ &= \tfrac{1}{2}\bigl(\ket{000}+\ket{010}+\ket{100}+\ket{111}\bigr). \end{align*} Vemos que el último cúbit se corresponde con la operación AND aplicada sobre los dos primeros.

Es importante tener en cuenta que en un circuito cuántico, la salida no se presenta como una serie de salidas definidas, sino que se manifiesta como una superposición de las mismas. Esta superposición no es directamente accesible ya que se corresponde con un estado cuántico y solo se puede observar a través de un proceso de medida.

La clave para aprovechar el paralelismo cuántico pasa entonces por transformar esta superposición en un observable que se pueda medir y que además resuelva la tarea de computación deseada. Existen varios algoritmos que pueden aprovechar el paralelismo cuántico de una manera no trivial, logrando el resultado deseado mediante una medición determinista o con una alta probabilidad. En resumen, el paralelismo cuántico puede ser una herramienta muy útil para la computación, pero solo se puede aprovechar mediante procesos de medida cuidadosamente diseñados.