Categorías
Quantum

Cuatro gatos

Vamos a probar fortuna ahora con un circuito mucho más interesante, que a la larga utilizaremos con cierta frecuencia. Este es el circuito:

Las compuertas $H$, naturalmente, corresponden a transformadas de Hadamard aplicadas a qubits individuales.

SuperHadamard

A modo de recordatorio, esta es la definición de la matriz de Hadamard:

$$H = \frac{1}{\sqrt2} \pmatrix{
1&1\cr 1&-1
}$$El coeficiente $\frac{1}{\sqrt2}$ se incluye para que el determinante de la matriz sea la unidad.

Cuando la transformada de Hadamard se aplica a un qubit que está en el estado inicial $\vert0\rangle$, lo lleva al estado $\vert+\rangle$ de la base de Hadamard, que se expresa en la base computacional como $\frac{1}{\sqrt2}(\vert0\rangle + \vert1\rangle)$. Este es un estado superpuesto, un gato de Schrödinger, que cuando se mide, va a alternar entre ceros y unos con la misma probabilidad. Si nos ponemos solemnes, podríamos decir que acabamos de implementar un generador aleatorio de valores binarios.

¿Qué pasa si tengo dos qubits y le aplico Hadamard a cada uno de ellos? Ya sabemos que para tener una respuesta exacta tenemos que multiplicar tensorialmente dos matrices de Hadamard. Este es el cálculo:

$$\eqalign{
H \otimes H &= \frac{1}{2} \pmatrix{1&1\cr 1&-1} \otimes \pmatrix{1&1\cr 1&-1}\cr
&= \frac{1}{2}\pmatrix{1&1&1&1\cr 1&-1&1&-1\cr 1&1&-1&-1\cr 1&-1&-1&1 }
}$$Ahora queremos saber qué pasa si aplicamos esta matriz al estado inicial del circuito, $\vert00\rangle$:

$$(H\otimes H)\vert00\rangle = \frac{1}{2}\pmatrix{1&1&1&1\cr 1&-1&1&-1\cr 1&1&-1&-1\cr 1&-1&-1&1 } \pmatrix{1\cr0\cr0\cr0} = \frac{1}{2} \pmatrix{1\cr1\cr1\cr1}
$$Vamos a entender mejor el resultado si lo representamos en notación de Dirac:
$$\frac{1}{2}\vert0\rangle + \frac{1}{2}\vert1\rangle + \frac{1}{2}\vert2\rangle + \frac{1}{2}\vert3\rangle
$$Esta es una superposición uniforme de los cuatro vectores de la base de dos qubits. Es decir: un gato de Schrödinger simultáneamente en cuatro estados. También podemos interpretarlo como una superposición uniforme de todos los números enteros del cero al tres.

Si aplicamos una medición a este estado, el resultado puede ser cualquiera de los números del cero al tres, con la misma probabilidad para cada uno de ellos (un cuarto). De vuelta a la solemnidad: hemos programado un generador aleatorio que escupe números del $0$ al $3$.

Los goces de la linealidad

Imaginemos que hemos diseñado un circuito multiqubits, que recibe un número entero de entrada y que hace algún cálculo mágico y genera un valor entero muy interesante por el otro extremo. No voy a complicar la fiesta ahora recordando que ese circuito debe implementar una transformación unitaria. Si lo tuviésemos en cuenta, tendríamos que introducir qubits adicionales para mantener la reversibilidad del circuito. Pero vamos a olvidarnos ahora de ese problema, y aceptemos que tenemos un algoritmo mágico que transforma un número en otro número más interesante.

Supongamos ahora que, en vez de pasarle un número al algoritmo, le pasamos de golpe una superposición uniforme de todos los números representables en el número de qubits de los que disponemos. ¿Qué calculará el algoritmo? Como el «algoritmo» es una matriz, es decir, una transformación lineal, lo que obtendremos es una superposición uniforme de todos los resultados. Es como si hubiésemos aplicado el algoritmo en paralelo a todos los números enteros que podemos representar en nuestro ordenador:

$$A\times \sum_i { \alpha_i \hat{e}_i } = \sum_i { \alpha_i (A\times \hat{e}_i) }
$$Esta propiedad se conoce como paralelismo cuántico, y no es tan útil como parece a primera vista. No lo es porque, cuando midamos, colapsaremos el estado en un único vector propio, y perderemos toda esa información. De todos modos, pronto veremos cómo sacar partido de esta situación.

Algebra lineal, nivel Dios

Termino esta entrada con una nota técnica sobre álgebra lineal, que nos va a ser muy útil para obtener el grado de ninja. A todos nos han contado, en un momento u otro de nuestras vidas, que el mundo está lleno de vectores que pastan por los prados y de matrices cuya obsesión en la vida es transformar cada vector que se le ponga a tiro:

$$Ax$$Vamos a plantearnos esta relación desde otro punto de vista. ¿Y si realmente es el vector quien está actuando sobre la matriz para generar otro vector? Podemos hacerlo, siempre que consideremos que una matriz es una colección de columnas, en vez de una colección de filas, que es la forma más habitual de verlas. Observe cómo un vector parasita a una matriz y genera un vector combinando linealmente las columnas de la misma:

$$\pmatrix{a_1&b_1&c_1\cr a_2&b_2&c_2\cr a_3&b_3&c_3} \pmatrix{x_1\cr x_2\cr x_3} = x_1\pmatrix{a_1\cr a_2\cr a_3} + x_2\pmatrix{b_1\cr b_2\cr b_3} + x_3\pmatrix{c_1\cr c_2\cr c_3}
$$Esta intuición nos sirve, si estamos implementando una librería de matrices con aceleración por hardware, para representar las matrices como vectores de columnas. Lo he probado en C++, usando funciones intrínsecas y, efectivamente, es más eficiente implementar la multiplicación de matrices por vectores usando SIMD como una combinación lineal de las columnas de la matriz. De hecho, el convenio de FORTRAN siempre ha sido almacenar las matrices por columnas, no por filas.

Pero no es esto lo que quiero mostrarle exactamente. Imaginemos que el vector $x$ pertenece a la base. En ese caso, uno de sus componentes será un $1$, y el resto, $0$. Veamos cómo transformaría nuestra matriz de Hadamard de $4\times4$ el estado $\vert10\rangle$:

$$(H\otimes H)\vert10\rangle = \frac{1}{2}\pmatrix{1&1&1&1\cr 1&-1&1&-1\cr 1&1&-1&-1\cr 1&-1&-1&1 } \pmatrix{0\cr0\cr1\cr0} = \frac{1}{2} \pmatrix{1\cr1\cr-1\cr-1}
$$Si observamos bien, vemos que lo que ha hecho el vector es seleccionar directamente la tercera columna de la matriz. ¿Por qué? Pues porque $\vert10\rangle$ es el tercer vector de la base: dos ceros, un uno y otro cero. Una combinación lineal de las columnas, en este caso, va directamente a por la tercera columna.

Esto tiene una segunda consecuencia: ya hemos visto que en un ordenador cuántico, el vector de estado siempre se inicializa con ceros: $\vert000\cdots0\rangle$. Este es el primer vector de la base computacional: un $1$ en el primer componente, seguido de un montón de ceros. ¿Qué le va a hacer este astuto vector a una inocente matriz? ¡Pues seleccionar la primera columna!

Esto es un truco muy útil. Si tenemos una matriz de $2^N\times2^N$ que representa a todo un circuito, en realidad sólo necesitamos las $2^N$ celdas de la primera columna, porque sabemos a ciencia cierta cómo funciona la inicialización del ordenador cuántico.

Categorías
Quantum

Transformaciones unitarias

Un algoritmo cuántico funciona partiendo de un estado inicial en el que todos los qubits están en el estado $\vert 0\rangle$. A partir de ese punto, el estado se transforma mediante matrices, que se implementan físicamente como circuitos lógicos. El objetivo del algoritmo es llevar el estado cuántico a determinado valor. Entonces se realiza una medición.

La «explicación» anterior no «explica» mucho en este momento, pero necesitaba incluirla para saber en qué parte nos encontramos, y hacia dónde vamos. En esta entrada comenzaremos a ver las transformaciones más sencillas que afectan al estado cuántico: aquellas que solamente afectan un qubit cada vez.

Rotaciones complejas

Sabemos que el estado cuántico es un vector complejo. En el caso de un solo qubit, el vector tiene dos componentes. Veremos más adelante que, para $N$ qubits, tendremos $2^N$ componentes. Es fácil ver que, si queremos transformar estos vectores, necesitamos matrices complejas. Lo importante es qué tipo de matrices nos valen: necesitamos matrices unitarias, que son el equivalente de las rotaciones (matrices ortogonales) en un espacio vectorial complejo.

Matemáticamente, si tenemos una matriz compleja $U$, y llamamos $U^*$ a su transpuesta conjugada (cambiamos filas y columnas e invertimos el signo de las partes imaginarias), entonces la matriz es unitaria si se cumple:
$$UU^* = I$$donde $I$ es la matriz identidad. Es decir: toda matriz unitaria tiene una inversa (que es su transpuesta conjugada, en concreto). Este es un detalle importante: un estado cuántico regido por la ecuación de Schrödinger es simétrico respecto al paso del tiempo. Toda transformación cuántica que no implique una medición tiene que ser reversible.

Una propiedad interesante que tienen las matrices unitarias es que preservan el producto escalar entre dos vectores arbitrarios:

$$\langle U\phi\vert U\psi\rangle = \langle\phi\vert\psi\rangle$$Como el producto escalar es proporcional al ángulo entre dos vectores (ángulos complejos, en este caso), tenemos entonces que las matrices unitarias respetan el ángulo entre vectores. La experiencia en tres dimensiones reales nos dice que las rotaciones, precisamente, son las transformaciones que respetan los ángulos. En particular, si se preserva el producto escalar, también se preservará la longitud de los vectores transformados:

$$\vert\vert U\psi\vert\vert = \vert\vert\psi\vert\vert$$

Matrices de Pauli

Ahora tenemos que aprendernos un pequeño repertorio de matrices que actúan sobre un qubit. Las tres primeras matrices que veremos se conocen como matrices de Pauli, y la forma más fácil de recordarlas es utilizar la esfera de Bloch como recurso mnemotécnico:

Hay tres ejes espaciales en esta representación, y a cada uno de ellos le corresponde una matriz: $X$, $Y$ y $Z$. Cada una de ellas representa una rotación de 180 grados alrededor del eje correspondiente. Ojo: estoy hablando de rotaciones en el espacio de la esfera de Bloch, no en el espacio vectorial complejo.

Por ejemplo, la matriz $X$ gira 180 grados el estado cuántico alrededor del eje $X$. Como da la casualidad de que nuestra base computacional está alineada según el eje $Z$, esta transformación transforma el polo norte, el estado $\vert 0\rangle$, en el polo sur $\vert 1\rangle$ y viceversa. En el espacio vectorial complejo, esto equivale a intercambiar los dos componentes complejos, por lo que no nos debe extrañar que la matriz $X$ se escriba de esta manera en la base computacional:

$$X=\pmatrix{0&1\cr 1&0}$$Machaquemos esta información para estar seguro de entenderla. Imaginemos que el estado cuántico en un momento dado es, en la notación de Dirac:

$$\alpha\vert 0\rangle + \beta\vert 1\rangle$$Si le aplicamos la matriz $X$ a este vector, obtenemos un estado con los componentes intercambiados:

$$\beta\vert 0\rangle + \alpha\vert 1\rangle$$Ahora repitamos el cálculo, pero usando directamente la notación matricial:

$$\pmatrix{0&1\cr 1&0} \times \pmatrix{\alpha\cr\beta} = \pmatrix{\beta\cr\alpha}$$Son dos maneras equivalentes de expresar la misma operación.

¿Qué operación clásica convierte los ceros en unos y viceversa? La negación lógica, por supuesto. Podemos entonces considerar que $X$ es la negación dentro de nuestro repertorio de operaciones cuánticas.

Hemos elegido como negación la rotación alrededor del eje $X$, pero podríamos haber elegido también la rotación alrededor de $Y$. Pero no lo hicimos, porque la representación de $Y$ en la base computacional es un poco más complicada:

$$Y=\pmatrix{0&-i\cr i&0}$$Observe que yo no le estoy explicando que la rotación alrededor del eje $Y$ en el espacio de Bloch se corresponde realmente a la matriz que estoy presentando. No es difícil de demostrar, pero para abreviar, se lo dejo de momento a su cargo. Lo que ahora nos interesa es si de verdad esta forma tan rara con números imaginarios es realmente una negación. En realidad, es equivalente solamente cuando se trata de transformar los polos. Pero cualquier otro vector dará un vector con una fase rotada. Simplemente, vamos a preferir $X$ como forma estándar de negación.

La tercera matriz de Pauli es, naturalmente, la matriz $Z$:

$$Z=\pmatrix{1&0\cr 0&-1}$$Obviamente, si aplicamos una rotación de 180 grados alrededor del eje $Z$ a uno de los polos, nos quedaremos como al principio.

La transformación de Hadamard

Las tres matrices de Pauli sólo nos permiten, de momento, movernos de un polo al otro. ¿Qué tal si quisiéramos mover el estado cuántico al ecuador de la esfera de Bloch? Para eso necesitaremos una de las transformaciones más populares en computación cuántica: la transformación de Hadamard, o de Walsh-Hadamard.

$$H=\frac{1}{\sqrt{2}}\pmatrix{1&1\cr 1&-1}$$Veamos qué efecto tiene esta transformación sobre los vectores de la base computacional:

$$\eqalign{
\frac{1}{\sqrt{2}}\pmatrix{1&1\cr 1&-1}\times\pmatrix{1\cr 0} =& \frac{1}{\sqrt{2}}\pmatrix{1\cr 1} \cr
\frac{1}{\sqrt{2}}\pmatrix{1&1\cr 1&-1}\times\pmatrix{0\cr -1} =& \frac{1}{\sqrt{2}}\pmatrix{1\cr -1}}
$$Utilizando la notación de Dirac:

$$\eqalign{
H\vert 0\rangle =& \frac{1}{\sqrt{2}}(\vert0 \rangle + \vert1 \rangle)\cr
H\vert 1\rangle =& \frac{1}{\sqrt{2}}(\vert0 \rangle – \vert1 \rangle)
}$$O, si recordamos la definición de la base de Hadamard:

$$\eqalign{
H\vert 0\rangle =& \vert+ \rangle\cr
H\vert 1\rangle =& \vert- \rangle
}$$Es decir: la transformación de Hadamard mueve los polos a puntos situados en el ecuador de la esfera de Bloch y alineados con el eje $X$.

Como ejercicio, puede comprobar qué ocurre cuando se le aplica la matriz $X$ a los vectores de la base de Hadamard. No olvide la existencia del fenómeno de la equivalencia de fase: si multiplica los dos componentes por un vector unitario, el estado cuántico que se obtiene es indistinguible del original.

¿Unitarias o hermitianas?

Las cuatro matrices que hemos visto comparten una característica que, aunque no tiene mayor importancia, puede provocar confusión. Las hemos presentado aquí porque son matrices unitarias. Por ejemplo, se cumple que:

$$X^* X = I$$Pero al mismo tiempo, ¡las cuatro matrices son hermitianas o auto-adjuntas! Esto es:

$$X^* = X$$… y, por lo tanto:

$$XX = I$$Recuerde que los operadores hermitianos, en Mecánica Cuántica, se utilizan para definir observables, al ser operadores con valores propios siempre reales. Esto tiene alguna importancia en Física. Pero en Computación Cuántica casi siempre utilizaremos la base computacional, y la coincidencia no tiene mayor consecuencia. Sólo la menciono para no confundir el concepto de operador unitario con el de operador hermitiano.

Categorías
Quantum

La esfera de Bloch

Hemos quedado en que el estado de un qubit necesita dos números complejos para representarse. Pero cada número complejo tiene una parte real y otra imaginaria, por lo que en total tenemos cuatro valores reales para cada qubit. ¿Son imprescindibles todo? Parece que no, porque ya conocemos la condición de normalización: $\alpha\alpha^* +\beta\beta^*=1$. Con esta condición, podríamos utilizar solamente tres valores reales, y deducir el cuarto a partir de la normalización.

Equivalencia de fase

En realidad, el estado de un qubit aislado puede representarse con solamente dos números reales. Insisto:

  • El estado de un qubit aislado puede representarse con dos números reales.

Pongo el énfasis en el aislamiento del qubit: cuando tengamos sistemas de más de un qubit, tendremos que volver a la representación con tres valores reales, por culpa del entrelazamiento. Pero en lo que sigue, asumiremos que estamos tratando con un solo qubit suficientemente aislado del resto del universo.

¿De dónde sale la redundancia adicional? Pues del mismo hecho de que estamos tratando en realidad con lo que los matemáticos llaman un espacio proyectivo. A la Naturaleza no le interesan los vectores complejos individuales, sino clases de equivalencia dentro de ese espacio vectorial. Una de esas clases de equivalencia viene dada por la posibilidad de multiplicar un vector complejo por una «fase global». La fase recibe ese nombre de la representación de un número complejo en coordenadas polares:
$$x + iy \equiv \rho\cos\theta + i\rho\sin\theta
$$Haciendo uso de la fórmula de Euler, podemos simplificar la identidad anterior de esta manera:
$$x + iy \equiv \rho e^{i\theta}
$$Al radio $\rho$ se le llama, entre muchos otros nombres, la magnitud, módulo o valor absoluto del número complejo. Al ángulo $\theta$ se le conoce como fase o argumento. Nos quedaremos con «fase».

La idea de la equivalencia de fase es que podemos multiplicar cualquier estado cuántico por una cantidad de la forma $e^{i\phi}$ sin que la multiplicación tenga consecuencias observables. Supongamos que tenemos un estado $\pmatrix{\alpha\cr\beta}$. Si las amplitudes están normalizadas, al realizar una medición tendremos una probabilidad $\alpha\alpha^* $ de medir el estado $\vert 0\rangle$, y $\beta\beta^* $ de medir $\vert 0\rangle$. Si sustituimos $\alpha$ por $\alpha e^{i\phi}$ la primera probabilidad será $\alpha e^{i\phi}(\alpha e^{i\phi})^* $, es decir, $\alpha\alpha^* e^{i\phi}e^{-i\phi}$.

Puede que no vea a la primera, si no ha usado números recientemente, por qué uno de los exponentes cambia su signo. Recuerde que estamos calculando la conjugada de la fase, y que la conjugada sólo cambia el signo de la parte imaginaria. Como la parte imaginaria, según la fórmula de Euler, es $i$ multiplicada por un seno, al invertir el signo del ángulo, invertimos la parte imaginaria. La parte real es un coseno, por lo que el cambio de signo no le afecta. Al final, encontraremos que $\alpha\alpha^* e^{i\phi}e^{-i\phi}$ es igual a $\alpha\alpha^* $, ¡que es exactamente la probabilidad antes de la multiplicación por una fase!

Coordenadas polares

Para aprovechar esta equivalencia, vamos a describir explícitamente un estado con sus amplitudes en coordenadas polares:
$$
\pmatrix{\alpha\cr\beta} = \pmatrix{\vert\alpha\vert e^{i\phi_\alpha}\cr\vert\beta\vert e^{i\phi_\beta}}
$$¿Qué tal si multiplicamos ambas amplitudes por la fase inversa a la fase original de $\alpha$, es decir, por $e^{-i\phi_\alpha}$?
$$
\pmatrix{\alpha\cr\beta} \cong \pmatrix{\vert\alpha\vert\cr\vert\beta\vert e^{i(\phi_\beta – \phi_\alpha)}} =
\pmatrix{\vert\alpha\vert\cr\vert\beta\vert e^{i\phi}}
$$Con esta multiplicación, hemos conseguido que la primera amplitud sea directamente un número real, aunque la segunda amplitud siga siendo un complejo. Pero sabemos, además, que las amplitudes están normalizadas. Por lo tanto, podemos permitirnos sustituir $\vert\alpha\vert$ por $\cos\frac{\theta}{2}$ y $\vert\beta\vert$ por $\sqrt{1 – \vert\alpha\vert^2}$… es decir, por $\sin\frac{\theta}{2}$. He elegido usar $\frac{\theta}{2}$ en vez de $\theta$ directamente por motivos geométricos que veremos enseguida. Con todo esto, hemos conseguido representar el estado de cualquier qubit aislado de la siguiente manera:
$$
\cos\frac{\theta}{2}\vert 0\rangle + e^{i\phi}\sin\frac{\theta}{2}\vert 1\rangle
$$Es decir, para representar un qubit sólo necesitaremos dos valores reales, $\theta$ y $\phi$, que podemos interpretar como dos ángulos dentro de los siguientes rangos:
$$
\eqalign{
\theta\in& [0, \pi]\cr
\phi\in& [0, 2\pi]
}
$$Si recuerda algo de geometría analítica, estos dos ángulos más un radio forman un sistema de coordenadas polares en el espacio tridimensional.

La esfera de Bloch

Podemos, por lo tanto, representar visualmente el estado cuántico de un qubit aislado como un punto dentro de una esfera de radio unitario, como en la siguiente imagen:

En esta representación, la coordenada $\theta$ es la latitud, relativa al polo norte (no al ecuador), y $\phi$ es la longitud, tomando como punto de partida el eje $X$. Hay un problema con las coordenadas polares, en general, que también aparece aquí: la longitud en el polo norte y en el polo sur no está definida. Eso no es un problema, en la práctica.

¿Dónde caen los dos vectores de la base computacional? Pues resulta que $\vert 0\rangle$ es el punto $\lbrace\theta=0, \phi=0\rbrace$, precisamente el polo norte, y $\vert 1\rangle$ es $\lbrace\theta=\pi, \phi=0\rbrace$, el polo sur. He puesto que $\phi$ es cero en estos dos puntos, pero da igual lo que pongamos.

¿Recordáis que en la entrada sobre mediciones, llamamos $M_Z$ al operador de medición de la base computacional? Ahora ya puedo explicar de dónde sale la $Z$: la base computacional se representa como puntos antípodas orientados a lo largo del eje $Z$. En general, cualquier par de puntos antípodas sobre la esfera corresponden a vectores de una posible base. Esto es: serían siempre vectores de longitud unitaria perpendiculares entre sí.

Cabe preguntarse entonces si los puntos antípodas orientados a lo largo del eje $X$ y del eje $Y$ tienen alguna aplicación, o al menos, algún nombre especial. Y sí, tienen ambas cosas:
$$
\eqalign{
\vert+\rangle =& \lbrace\theta=\frac{\pi}{2}, \phi=0\rbrace\quad\text{eje X} \cr
\vert-\rangle =& \lbrace\theta=\frac{\pi}{2}, \phi=\pi\rbrace \cr
\vert i\rangle =& \lbrace\theta=\frac{\pi}{2}, \phi=\frac{\pi}{2}\rbrace\quad\text{eje Y} \cr
\vert-i\rangle =& \lbrace\theta=\frac{\pi}{2}, \phi=\frac{3\pi}{2}\rbrace}
$$En especial, la base orientada a lo largo del eje $X$ en la esfera de Bloch se conoce como base de Hadamard, y es muy importante en los algoritmos cuánticos. En la base computacional, los vectores de la base de Hadamard son:
$$
\eqalign{
\vert+\rangle =& \frac{1}{\sqrt{2}}(\vert 0\rangle + \vert 1\rangle) \cr
\vert-\rangle =& \frac{1}{\sqrt{2}}(\vert 0\rangle – \vert 1\rangle)
}
$$