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.