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] y ∣1⟩=[01] 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⟩,
donde α y β son números complejos tales que ∣α∣2+∣β∣2=1.
La matriz de densidad de probabilidad para este estado puro es ρ=∣ψ⟩⟨ψ∣, pero por claridad nos referiremos al estado cuántico simplemente como ∣ψ⟩.
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⟩
Resaltar que el estado ∣ψ1ψ2⋯ψn⟩ se corresponde a un estado puro que comprende los n cúbits del sistema.
Ejemplo 12.1 Consideremos un ordenador cuántico de 3 cúbits con un estado interno inicial
∣010⟩. Utilizando el producto tensorial, tenemos que este estado se corresponde con el vector:
∣010⟩=∣0⟩⊗∣1⟩⊗∣0⟩=[10]⊗[01]⊗[10]=[0100]T⊗[10]=[00100000]T
Se puede ver que para representar el estado interno de un ordenador de n=3 cúbits es necesario utilizar un vector de longitud 2n=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=32 cúbits ya será necesario un vector de longitud 2n≈4⋅109, y para el ordenador de n=53 cúbits empleado por Google en el hito de la supremeacía cuántica 2n≈9⋅1015.
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 n cúbits, la base computacional se corresponde a los 2n vectores ortogonales
∣0⋯000⟩,∣0⋯001⟩,∣0⋯010⟩,∣0⋯011⟩,…,∣1⋯111⟩.
Utilizando las propiedades del producto tensorial es posible representar cualquier estado interno del sistema en la base computacional.
Por ejemplo, consideremos el estado ∣+0⟩.
Utilizando que
∣+⟩=21[+1+1]=21(∣0⟩+∣1⟩)
obtenemos
∣+0⟩=∣+⟩⊗∣0⟩=21(∣0⟩+∣1⟩)⊗∣0⟩=21(∣0⟩⊗∣0⟩+∣1⟩⊗∣0⟩)=21∣00⟩+21∣10⟩.
Vemos que ∣+0⟩ es una combinación lineal de los vectores ∣00⟩ y ∣10⟩ de la base computacional correspondiente.
Ejercicio 12.1 Represente el estado ∣01+⟩ en la base computacional {∣000⟩,∣001⟩,…,∣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} donde Π0=∣0⟩⟨0∣ y Π1=∣1⟩⟨1∣.
Así, para el estado
∣ψ⟩=α∣0⟩+β∣1⟩,
la probabilidad de medir cada uno de los dos posibles observables está dada por:
Pr{‘0’}Pr{‘1’}=Tr[Π0∣ψ⟩⟨ψ∣]=⟨0⟩ψ⟨ψ⟩0=∣α∣2,=Tr[Π1∣ψ⟩⟨ψ∣]=⟨1⟩ψ⟨ψ⟩1=∣β∣2.
Para un sistema compuesto, la medida también se realiza con respecto al POVM correspondiente a la base computacional, que está dado por
{Π0⋅00,Π0⋅01,…,Π1⋅11},
donde Πi1⋅in=∣i1⋯in⟩⟨i1⋯in∣.
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=2 con estado interno
∣ϕ⟩=a∣00⟩+b∣01⟩+c∣10⟩+d∣11⟩.
Operaciones y puertas cuánticas
La evolución del estado interno de un ordenador cuántico es unitaria. Para un estado puro ∣ψ⟩ (posiblemente compuesto por n cúbits) y una matriz unitaria U (de dimensión 2n×2n) se tiene que el nuevo estado del sistema tras aplicar la operación U está dado por
∣ϕ⟩=U∣ψ⟩dondeUUH=UHU=I.
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] sobre los cúbits donde no se aplica ninguna operación.
Ejemplo 12.2 Consideremos un sistema de dimensión n=2 con estado inicial ∣ψ⟩=∣01⟩. Si aplicamos una operación binaria X=[0110] al primer cúbit del sistema, obtenemos un nuevo estado dado por
∣ϕ⟩=(X⊗I)(∣0⟩⊗∣1⟩)=(X∣0⟩)⊗(I∣1⟩)=∣1⟩⊗∣1⟩=∣11⟩,
donde hemos utilizado que
X∣0⟩=[0110][10]=[01]=∣1⟩.
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 a y b presenta una salida f(a,b)=¬(a∧b).
De forma análoga, es posible demostrar que en el caso cuántico, cualquier transformación unitaria U 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 I, X y Z sobre la base computacional ∣0⟩=[10] y ∣1⟩=[01].
La puerta I es la tranformación unidad, y no afecta al estado:
I∣0⟩I∣1⟩=[1001][10]=[10]=∣0⟩,=[1001][01]=[01]=∣1⟩.
La puerta X se corresponde con una negación lógica e intercambia los estados ∣0⟩ y ∣1⟩:
X∣0⟩X∣1⟩=[0110][10]=[01]=∣1⟩,=[0110][01]=[10]=∣0⟩.
La puerta Z cambia la fase del estado ∣1⟩, pero no la del ∣0⟩:
Z∣0⟩Z∣1⟩=[100−1][10]=[10]=∣0⟩,=[100−1][01]=[0−1]=−∣1⟩.
Puerta de Hadamard
La puerta de Hadamard es también una puerta de 1 cúbit, y está dada por:
H=21[+1+1+1−1]
Ejemplo 12.4 Aplicamos la puerta H sobre la base computacional ∣0⟩=[10] y ∣1⟩=[01].
H∣0⟩H∣1⟩=21[+1+1+1−1][10]=21[11]=21(∣0⟩+∣1⟩),=21[+1+1+1−1][01]=21[+1−1]=21(∣0⟩−∣1⟩).
Teniendo en cuenta que los estados ∣+⟩=21(∣0⟩+∣1⟩) y ∣−⟩=21(∣0⟩−∣1⟩), concluimos que la puerta de Hadamard realiza una transformación del estado desde la base {∣0⟩,∣1⟩} a la base {∣+⟩,∣−⟩}.
Ejercicio 12.3 A un cúbit ∣0⟩ se le aplica una puerta H y una medida en la base computacional:
Obtenga las probabilidades de que el resultado de la medida sea $0$' y de que sea1’.
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 2 cúbits, y está dada por:
SWAP=[1000001001000001]
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⟩, la segunda con ∣01⟩, la tercera con ∣10⟩, y la última con ∣11⟩. Así, la puerta SWAP deja inalterados los estados ∣00⟩ y ∣11⟩, e intercambia los estados ∣01⟩ y ∣10⟩.
Puerta U-controlada (controlled-U)
Para una puerta cuántica (de 1 cúbit) dada por
U=[u00u10u01u11],
la puerta U-controlada (que se aplica sobre 2 cúbits) se define como
CU=[I00U]=[1000010000u00u1000u01u11]
Esta puerta utiliza el primer cúbit como ``control’’. Así, que si el primer cúbit es igual a ∣1⟩ (está activo) aplica la puerta U al segundo cúbit. Si el primer cúbit es igual a ∣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 2 cúbits, y está dada por:
CNOT=[1000010000010010]
La puerta CNOT es un caso particular de la puerta U-controlada, en la que la operación unitaria es U=X; CNOT≡CX. 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⟩, ∣01⟩, ∣10⟩ y ∣11⟩:
CNOT∣00⟩=[1000010000010010][1000]=[1000]=∣00⟩,CNOT∣01⟩=[1000010000010010][0100]=[0100]=∣01⟩,CNOT∣10⟩=[1000010000010010][0010]=[0001]=∣11⟩,CNOT∣11⟩=[1000010000010010][0001]=[0010]=∣10⟩.
Se observa que si el primer cúbit es ∣0⟩, el segundo permanece inalterado.
En cambio, si el primer cúbit es ∣1⟩ se aplica una negación al segundo.
Para representar esto, a menudo se utiliza la notación:
CNOT∣a,b⟩=∣a,a⊕b⟩,
donde a,b∈{0,1}, y ⊕ hace referencia a la operación binaria XOR (OR exclusivo).
Ejercicio 12.4 Considere el estado incial formado por dos cúbits ∣ψ0⟩=∣00⟩=∣0⟩⊗∣0⟩.
Determine el estado compuesto resultante ∣ψ1⟩ que se obtiene al aplicar un operador H al primer cúbit de ∣00⟩ (y no aplicar ninguna operación al segundo).
Para el estado del apartado anterior ∣ψ1⟩, determine el estado compuesto ∣ψ2⟩=CNOT∣ψ1⟩ y su matriz de densidad asociada δ=∣ψ2⟩⟨ψ2∣. ¿Reconoce de qué estado se trata?
Obtenga la probabilidad de obtener cada uno de los cuatro resultados $00$',01‘, $10$' y11’ en una medida conjunta (en la base computacional) de los dos cúbits de ∣ψ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 a1 y a2∈{0,1} cuya salida se corresponde con la operación AND:
a1∧a2={1,0, si a1=a2=1, en otro caso.
Un circuito cuántico que realice esta operación necesitaría implementar una transformación unitaria
∣a1a2⟩→∣x1x2⟩=U∣a1a2⟩
tal que x1=a1∧a2 y donde x2 es una salida auxiliar que puede tomar cualquier valor. Aquí, es necesario añadir la salida auxiliar x2 dado que U se corresponde con una transformación unitaria. Por tanto, U 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 U tal que x1=a1∧a2. 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 U tal que ∣x1x2⟩=U∣a1a2⟩ con x1=a1∧a2.
Implementación cuántica de funciones booleanas
El ejemplo anterior muestra que, para una función booleana arbitraria f:{0,1}n→{0,1}m, la transformación
∣a⟩→∣f(a)⟩
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:
Las entradas a este bloque son los cúbits ∣a⟩ y una serie de cúbits auxiliares ∣b⟩ de la misma dimensión que la salida de la función f(a). A la salida, por una parte se replica la entrada ∣a⟩ y se calcula un XOR la función de interés ∣b⊕f(a)⟩ con la entrada auxiliar.
Por tanto, fijando la entrada auxiliar a ∣b⟩=∣0⟩, queda
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. Por tanto, para cualquier función booleana f, siempre podemos calcular f(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,b⟩⊗∣0⟩→∣a,b⟩⊗∣a∧b⟩
Para ello consideramos la puerta de Toffoli (de 3 cúbits):
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.
¿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?
Obtenga la salida de esta puerta para las entradas ∣000⟩, ∣010⟩, ∣100⟩, y ∣110⟩.
¿Se ajusta este resultado a las salidas esperadas para una puerta AND, ∣a,b,a∧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) para todos los valores de 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 f se puede implementar con una transformación unitaria Uf. Así, para una entrada ∣a⟩⊗∣0⟩ a la salida obtenemos ∣a⟩⊗∣f(a)⟩:
Hasta ahora nos hemos restringido a entradas del tipo ∣a⟩ donde a∈{0,1}n. Sin embargo Uf es un operador cuántico y por tanto nada nos impide aplicar un estado cuántico arbitrario ∣ψ⟩ a su entrada:
Para determinar ∣φ⟩, descomponemos ∣ψ⟩
como una superposición de elementos de la base computacional
∣ψ⟩=α1∣0⋯00⟩+α2∣0⋯01⟩+⋯+α2n∣1⋯11⟩,
y utilizamos que, como hemos visto en el apartado anterior,
∣a⟩=∣0⋯00⟩∣a⟩=∣0⋯01⟩∣a⟩=∣1⋯11⟩⇒∣f(a)⟩=∣f(0⋯00)⟩,⇒∣f(a)⟩=∣f(0⋯01)⟩,⋮⇒∣f(a)⟩=∣f(1⋯11)⟩.
Por la propiedad de linealidad de los operadores unitarios obtenemos
∣φ⟩=α1∣f(0⋯00)⟩+α2∣f(0⋯01)⟩+⋯+α2n∣f(1⋯11)⟩.
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:
1. El estado inicial en este circuito se corresponde con
∣000⟩=∣0⟩⊗∣0⟩⊗∣0⟩.
Después de aplicarle los operadores H a los dos primeros cúbits tenemos el estado intermedio
(H⊗H⊗I)(∣0⟩⊗∣0⟩⊗∣0⟩)=H∣0⟩⊗H∣0⟩⊗∣0⟩=21(∣0⟩+∣1⟩)⊗21(∣0⟩+∣1⟩)⊗∣0⟩=21(∣000⟩+∣010⟩+∣100⟩+∣110⟩),
donde en el segundo paso hemos utilizado que
H∣0⟩=21(∣0⟩+∣1⟩) y en el último paso hemos utilizado la propiedad distributiva del producto tensorial con la suma, (a+b)⊗c=(a⊗c)+(b⊗c).
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⟩=21(∣0,0,0∧0⟩+∣0,1,0∧1⟩+∣1,0,1∧0⟩+∣1,1,1∧1⟩)=21(∣000⟩+∣010⟩+∣100⟩+∣111⟩).
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.