Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
quantum-kittens
GitHub Repository: quantum-kittens/platypus
Path: blob/main/translations/es/ch-gates/proving-universality.ipynb
4067 views
Kernel: Python 3

Probando la Universalidad

1. Introducción

¿Qué puede hacer cualquier computadora dada? ¿Cuáles son los límites de lo que se considera computable, en general? Estas fueron preguntas abordadas por Alan Turing antes de que tuviéramos una buena idea de qué era una computadora o cómo construir una.

Para hacer esta pregunta de nuestras computadoras clásicas, y específicamente a nuestras computadoras digitales estándar, debemos eliminar todas las pantallas, altavoces y dispositivos de entrada sofisticados. Lo que nos queda es simplemente una máquina que convierte cadenas de bits de entrada en cadenas de bits de salida. Si un dispositivo puede realizar cualquier conversión de este tipo, tomando cualquier conjunto arbitrario de entradas y convirtiéndolas en un conjunto de salidas correspondientes elegido arbitrariamente, lo llamamos universal.

De manera similar, las computadoras cuánticas toman estados de entrada y los convierten en estados de salida. Por lo tanto, podremos definir la universalidad de manera similar. Para ser más precisos, y poder probar cuándo se puede y no se puede lograr la universalidad, es útil utilizar la representación matricial de nuestras compuertas cuánticas. Pero primero necesitaremos repasar algunas técnicas.

2. Diversión con Matrices

2.1 Matrices como productos exteriores

En secciones anteriores hemos calculado muchos productos internos, como 00=1\langle0|0\rangle =1. Estos combinan un bra y un ket para darnos un solo número. También podemos combinarlos de forma que nos den una matriz, simplemente poniéndolos en orden inverso. Esto se llama producto externo y funciona mediante la multiplicación de matrices estándar. Por ejemplo

$$|0\rangle\langle0|= \begin{pmatrix} 1 \\ 0 \end{pmatrix} \begin{pmatrix} 1 & 0 \end{pmatrix} = \begin{pmatrix} 1&0 \\ 0&0 \end{pmatrix},\\ |0\rangle\langle1| = \begin{pmatrix} 1 \\ 0 \end{pmatrix} \begin{pmatrix} 0 & 1 \end{pmatrix} = \begin{pmatrix} 0&1 \\ 0&0 \end{pmatrix},\\ |1\rangle\langle0| = \begin{pmatrix} 0 \\ 1 \end{pmatrix} \begin{pmatrix} 1 & 0 \end{pmatrix} = \begin{pmatrix} 0&0 \\ 1&0 \end{pmatrix},\\ |1\rangle\langle1| = \begin{pmatrix} 0 \\ 1 \end{pmatrix} \begin{pmatrix} 0 & 1 \end{pmatrix} = \begin{pmatrix} 0&0 \\ 0&1 \end{pmatrix}.\\$$

Esto también significa que podemos escribir cualquier matriz puramente en términos de productos externos. En los ejemplos anteriores, construimos las cuatro matrices que cubren cada uno de los elementos individuales en una matriz de un solo qubit, por lo que podemos escribir cualquier otra matriz de un solo qubit en términos de ellas.

M=(m0,0m0,1m1,0m1,1)=m0,000+m0,101+m1,010+m1,111M= \begin{pmatrix} m_{0,0}& m_{0,1} \\ m_{1,0}&m_{1,1} \end{pmatrix} = m_{0,0} |0\rangle\langle0|+ m_{0,1} |0\rangle\langle1|+ m_{1,0} |1\rangle\langle0|+ m_{1,1} |1\rangle\langle1|

Esta propiedad también se extiende a matrices para cualquier número de qubits, nn. Simplemente, usamos los productos externos de las correspondientes cadenas de nn bits.

2.2 Matrices unitarias y Hermitianas

El conjugado Hermitiano MM^\dagger de una matriz MM es la combinación de la transpuesta (reemplazar el elemento inferior izquierdo con el superior derecho, y así sucesivamente) y el conjugado complejo de cada elemento. Dos familias de matrices que son muy importantes para la computación cuántica se definen por su relación con el conjugado Hermitiano. Una es la familia de matrices unitarias, para las cuales

UU=UU=1.U U^\dagger = U^\dagger U = 1.

Esto quiere decir que el conjugado Hermitiano de una unitaria es su inverso: otra unitaria UU^\dagger con el poder de deshacer los efectos de UU. Todas las compuertas en la computación cuántica, con la excepción de las operaciones de medición y restablecimiento, pueden representarse mediante matrices unitarias.

Otra consecuencia de la unitaridad es que conserva el producto interno entre dos estados arbitrarios. Específicamente, toma dos estados ψ0\left| \psi_0 \right\rangle y ψ1\left| \psi_1 \right\rangle. El producto interno de estos es ψ0ψ1\left\langle \psi_0 | \psi_1 \right\rangle. Si aplicamos la misma unitaria UU a ambos, el producto interno de los estados resultantes es exactamente el mismo,

(ψ0U)(Uψ1)=ψ0UUψ1=ψ0ψ1.\left( \left\langle \psi_0 \right| U^\dagger \right) \left( U \left| \psi_1 \right\rangle \right) = \left\langle \psi_0 \right|U^\dagger U\left| \psi_1 \right\rangle = \left\langle \psi_0 | \psi_1 \right\rangle.

Esta propiedad nos proporciona una forma útil de pensar en estas compuertas. Significa que para cualquier conjunto de estados ψj{ \left| \psi_j \right\rangle } que proporcionen una base ortonormal para nuestro sistema, el conjunto de estados ϕj=Uψj{ \left| \phi_j \right\rangle = U \left| \psi_j \right\rangle } también será una base ortonormal. Entonces, se puede pensar en la unitaria como una rotación entre estas bases y, en consecuencia, se puede escribir como

U=jϕjψj.U = \sum_j \left| \phi_j \right\rangle \left\langle \psi_j \right|.

Esta es esencialmente la versión cuántica de las 'tablas de verdad' que describen la acción de las compuertas Booleanas clásicas.

La otra familia importante de matrices son las matrices Hermitianas. Estas son aquellas que no se ven afectadas por el conjugado Hermitiano.

H=H.H = H^\dagger.

Las matrices XX, YY, ZZ y HH son ejemplos de matrices Hermitianas que ya has visto (casualmente, también son todas unitarias, ya que son sus propias inversas).

Todas las matrices unitarias y las matrices Hermitianas tienen la propiedad de ser diagonalizables. Esto significa que se pueden escribir en la forma

M=jλjhjhj,M = \sum_j \lambda_j |h_j\rangle\langle h_j|,

donde λj\lambda_j son los valores propios de la matriz y hj|h_j\rangle son los estados propios correspondientes.

Para las unitarias, aplicar la condición UU=1U U^\dagger=1 en esta forma diagonal implica que λjλj=1\lambda_j \lambda_j^* = 1. Por lo tanto, los valores propios son siempre números complejos de magnitud 1, por lo que se pueden expresar como eihje^{ih_j} para algún valor real hjh_j. Para las matrices Hermitianas, la condición H=HH = H^\dagger implica λj=λj\lambda_j = \lambda_j^* y, debido a eso, todos los valores propios son reales.

Por lo tanto, estos dos tipos de matrices difieren solo en que una debe tener números reales para los valores propios y la otra debe tener exponenciales complejas de números reales. Esto significa que, para cada unidad, podemos definir una matriz Hermitiana correspondiente. Para esto, simplemente reutilizamos los mismos estados propios y usamos hjh_j de cada eihje^{ih_j} como el valor propio correspondiente.

De manera similar, para cada matriz Hermitiana existe una unitaria. Simplemente, reutilizamos los mismos estados propios y exponenciamos hjh_j para crear los valores propios eihje^{ih_j}. Esto se puede expresar como

U=eiHU = e^{iH}

Aquí hemos usado la definición estándar de cómo exponenciar una matriz, que tiene exactamente las propiedades que requerimos: preservar los estados propios y exponenciar los valores propios.

2.3 Descomposición de Pauli

Como vimos anteriormente, es posible escribir matrices enteramente en términos de productos externos.

M=(m0,0m0,1m1,0m1,1)=m0,000+m0,101+m1,010+m1,111M= \begin{pmatrix} m_{0,0}&m_{0,1} \\ m_{1,0}&m_{1,1} \end{pmatrix} = m_{0,0} |0\rangle\langle0|+ m_{0,1} |0\rangle\langle1|+ m_{1,0} |1\rangle\langle0|+ m_{1,1} |1\rangle\langle1|

Ahora veremos que también es posible escribirlos completamente en términos de operadores de Pauli. Para esto, la clave a tener en cuenta es que

1+Z2=12[(1001)+(1001)]=00,1Z2=12[(1001)(1001)]=11\frac{1+Z}{2} = \frac{1}{2}\left[ \begin{pmatrix} 1&0 \\0&1 \end{pmatrix}+\begin{pmatrix} 1&0 \\0&-1 \end{pmatrix}\right] = |0\rangle\langle0|,\\\frac{1-Z}{2} = \frac{1}{2}\left[ \begin{pmatrix} 1&0 \\0&1 \end{pmatrix}-\begin{pmatrix} 1&0 \\0&-1 \end{pmatrix}\right] = |1\rangle\langle1|

Esto muestra que 00|0\rangle\langle0| y 11|1\rangle\langle1| pueden expresarse usando la matriz identidad y ZZ. Ahora, usando la propiedad de que X0=1X|0\rangle = |1\rangle, también podemos producir

01=00X=12(1+Z) X=X+iY2,10=X00=X 12(1+Z)=XiY2.|0\rangle\langle1| = |0\rangle\langle0|X = \frac{1}{2}(1+Z)~X = \frac{X+iY}{2},\\ |1\rangle\langle0| = X|0\rangle\langle0| = X~\frac{1}{2}(1+Z) = \frac{X-iY}{2}.

Como tenemos todos los productos externos, ahora podemos usar esto para escribir la matriz en términos de matrices de Pauli:

M=m0,0+m1,12 1 + m0,1+m1,02 X + im0,1m1,02 Y + m0,0m1,12 Z.M = \frac{m_{0,0}+m_{1,1}}{2}~1~+~\frac{m_{0,1}+m_{1,0}}{2}~X~+~i\frac{m_{0,1}-m_{1,0}}{2}~Y~+~\frac{m_{0,0}-m_{1,1}}{2}~Z.

Este ejemplo fue para una matriz general de un solo qubit, pero el resultado correspondiente también es válido para matrices para cualquier número de qubits. Partimos simplemente de la observación de que

(1+Z2)(1+Z2)(1+Z2)=000000,\left(\frac{1+Z}{2}\right)\otimes\left(\frac{1+Z}{2}\right)\otimes\ldots\otimes\left(\frac{1+Z}{2}\right) = |00\ldots0\rangle\langle00\ldots0|,

y puedes entonces proceder de la misma manera que arriba. Al final se puede demostrar que cualquier matriz se puede expresar en términos de productos tensoriales de matrices de Pauli:

M=Pn1,,P01,X,Y,ZCPn1,P0  Pn1Pn2P0.M = \sum_{P_{n-1},\ldots,P_0 \in {1,X,Y,Z}} C_{P_{n-1}\ldots,P_0}~~P_{n-1} \otimes P_{n-2}\otimes\ldots\otimes P_0.

Para las matrices Hermitianas, ten en cuenta que los coeficientes CPn1,P0C_{P_{n-1}\ldots,P_0} aquí serán todos reales.

3. Definición de Universalidad

Así como cada compuerta cuántica puede representarse mediante una unitaria, también podemos describir un cálculo cuántico completo mediante una operación unitaria (muy grande). El efecto de esto es rotar el estado de entrada al estado de salida.

Un posible caso especial de esto es que los estados de entrada y salida describan cadenas de bits expresadas en forma cuántica. El mapeo de cada entrada xx a su salida f(x)f(x) podría describirse mediante algún cálculo clásico (reversible). Por lo tanto, cualquier cálculo de este tipo podría expresarse como unitario.

U=jf(x)x.U = \sum_j \left| f(x) \right\rangle \left\langle x \right|.

Si pudiéramos implementar cualquier unitaria posible, significaría que podríamos lograr la universalidad en el sentido de las computadoras digitales estándar.

Otro caso especial es que los estados de entrada y salida podrían describir un sistema físico, y el cálculo que realizamos es para simular la dinámica de ese sistema. Este es un problema importante que no es práctico para las computadoras clásicas, pero es una aplicación natural de las computadoras cuánticas. La evolución temporal del sistema en este caso corresponde a la unitaria que aplicamos, y la matriz Hermitiana asociada es el Hamiltoniano del sistema. Por lo tanto, lograr cualquier unitaria correspondería a simular cualquier evolución temporal y diseñar los efectos de cualquier Hamiltoniano.

Combinando estos conocimientos, podemos definir qué significa que las computadoras cuánticas sean universales. Es simplemente la capacidad de lograr cualquier unitaria deseada en cualquier número arbitrario de qubits. Si tenemos esto, sabemos que podemos reproducir cualquier cosa que pueda hacer una computadora digital, simular cualquier sistema cuántico y hacer todo lo demás que es posible para una computadora cuántica.

4. Conjuntos de Compuertas Básicas

Si podemos o no construir cualquier unitaria a partir de un conjunto de compuertas básicas, depende en gran medida de las compuertas básicas a las que tengamos acceso. Para cada realización posible de computación cuántica tolerante a fallas, hay un conjunto de operaciones cuánticas que son más sencillas de realizar. A menudo, estas consisten en compuertas de uno y dos qubits, la mayoría de las cuales corresponden al conjunto de las llamadas compuertas de Clifford. Este es un conjunto de operaciones muy importante, que hace mucho del trabajo pesado en cualquier algoritmo cuántico.

4.1 Compuertas de Clifford

Para entender las compuertas de Clifford, comencemos con un ejemplo que ya has visto muchas veces: la Hadamard.

H=+0 + 1=0+ + 1.H = |+\rangle\langle0|~+~ |-\rangle\langle1| = |0\rangle\langle+|~+~ |1\rangle\langle-|.

Esta compuerta se expresa arriba usando productos externos, como se describe arriba. Cuando se expresa de esta forma, su famoso efecto se vuelve obvio: toma 0|0\rangle y lo rota a +|+\rangle. Más generalmente, podemos decir que rota los estados básicos de la medición en z, 0,1{ |0\rangle,|1\rangle }, a los estados básicos de la medición en x, +,{ |+\rangle,|-\rangle }, y viceversa.

De esta forma, el efecto de la Hadamard es mover información alrededor de un qubit. Intercambia cualquier información a la que antes se accedía mediante una medición en x con aquella a la que se accedía mediante una medición en z.

La Hadamard se puede combinar con otras compuertas para realizar diferentes operaciones, por ejemplo:

HXH=Z,HZH=X.H X H = Z,\\ H Z H = X.

Al aplicar una Hadamard antes y después de una XX, hacemos que la acción que se aplicó previamente a los estados de la base z se transfiera a los estados de la base x. El efecto combinado es entonces idéntico al de una ZZ. Del mismo modo, podemos crear una XX a partir de Hadamards y una ZZ.

Se puede ver un comportamiento similar para la compuerta SS y su conjugado Hermitiano,

SXS=Y,SYS=X,SZS=Z.S X S^{\dagger} = Y,\\ S Y S^{\dagger} = -X,\\ S Z S^{\dagger} = Z.

Esto tiene un efecto similar a la Hadamard, excepto que intercambia XX y YY en lugar de XX y ZZ. En combinación con la Hadamard, podríamos hacer una compuerta compuesta que cambie la información de y con z.

Esta propiedad de transformar Paulis en otros Paulis es la característica definitoria de las compuertas de Clifford. Explícitamente, para el caso de un solo qubit: si UU es una Clifford y PP es una Pauli, UPUU P U^{\dagger} también será una Pauli. Para las compuertas Hermitianas, como la Hadamard, simplemente podemos usar UPUU P U.

Otros ejemplos de compuertas de Clifford de un solo qubit son las propias Paulis. Estas no transforman la Pauli sobre la que actúan. En su lugar, simplemente asignan una fase de 1-1 a las dos con las que trabajan. Por ejemplo,

ZXZ=X,ZYZ=Y,ZZZ=    Z.Z X Z = -X,\\ Z Y Z = -Y,\\ Z Z Z= ~~~~Z.

Es posible que hayas notado que también surgió una fase similar en el efecto de la compuerta SS. Al combinar esto con una Pauli, podríamos crear una compuerta compuesta que cancelaría esta fase e intercambiaría XX y YY de una manera más similar al intercambio de la Hadamard de XX y ZZ.

Para las compuertas de Clifford de múltiples qubits, la propiedad que las define es que transforman los productos tensoriales de Paulis en otros productos tensoriales de Paulis. Por ejemplo, la compuerta de Clifford de dos qubits más destacada es la CNOT. La propiedad de esto, que haremos uso en este capítulo es

CXj,k (X1) CXj,k=XX.{ CX}*{j,k}~ (X \otimes 1)~{ CX}*{j,k} = X \otimes X.

Esto efectivamente 'copia' una XX del qubit de control al objetivo.

El proceso de intercalar una matriz entre una unitaria y su conjugada Hermitiana se conoce como conjugación por esa unitaria. Este proceso transforma los estados propios de la matriz, pero deja los valores propios sin cambios. La razón por la que la conjugación de Cliffords puede transformarse entre Paulis es que todos los Paulis comparten el mismo conjunto de valores propios.

4.2 Compuertas No Clifford

Las compuertas de Clifford son muy importantes, pero no son poderosas por sí solas. Para hacer cualquier cálculo cuántico, necesitamos compuertas que no sean Cliffords. Tres ejemplos importantes son las rotaciones arbitrarias alrededor de los tres ejes del qubit, Rx(θ)R_x(\theta), Ry(θ)R_y(\theta) y Rz(θ)R_z(\theta).

Centrémonos en Rx(θ)R_x(\theta). Como vimos anteriormente, cualquier unitaria se puede expresar en forma exponencial utilizando una matriz Hermitiana. Para esta compuerta, encontramos

Rx(θ)=eiθ2X.R_x(\theta) = e^{i \frac{\theta}{2} X}.

La última sección también nos mostró que la unitaria y su matriz Hermitiana correspondiente tienen los mismos estados propios. En esta sección, hemos visto que la conjugación por una unitaria transforma los estados propios y deja los valores propios sin cambios. Con esto en mente, se puede demostrar que

URx(θ)U=eiθ2 UXU.U R_x(\theta)U^\dagger = e^{i \frac{\theta}{2} ~U X U^\dagger}.

Al conjugar esta rotación por una Clifford, podemos transformarla en la misma rotación alrededor de otro eje. Entonces, incluso si no tuviéramos una forma directa de realizar Ry(θ)R_y(\theta) y Rz(θ)R_z(\theta), podríamos hacerlo con Rx(θ)R_x(\theta) combinado con las compuertas de Clifford. Esta técnica de aumentar el poder de las compuertas que no son de Clifford combinándolas con las compuertas de Clifford es una a la que le damos un gran uso en la computación cuántica.

4.3 Expansión del Conjunto de Compuertas

Como otro ejemplo de combinación de Rx(θ)R_x(\theta) con Cliffords, conjuguémosla con un CNOT.

CXj,k (Rx(θ)1) CXj,k=CXj,k eiθ2 (X1) CXj,k=eiθ2 CXj,k (X1) CXj,k=eiθ2 XXCX_{j,k} ~(R_x(\theta) \otimes 1)~ CX_{j,k} = CX_{j,k} ~ e^{i \frac{\theta}{2} ~ (X\otimes 1)}~ CX_{j,k} = e^{i \frac{\theta}{2} ~CX_{j,k} ~ (X\otimes 1)~ CX_{j,k}} = e^{i \frac{\theta}{2} ~ X\otimes X}

Esto transforma nuestra simple rotación de un solo qubit en una compuerta de dos qubits mucho más poderosa. Esto no es solo equivalente a realizar la misma rotación de forma independiente en ambos qubits. En cambio, es una compuerta capaz de generar y manipular estados entrelazados.

No necesitamos detenernos allí. Podemos usar el mismo truco para extender la operación a cualquier número de qubits. Todo lo que se necesita son más conjugaciones por parte del CNOT para seguir copiando las XX en nuevos qubits.

Además, podemos usar Cliffords de un solo qubit para transformar la Pauli en diferentes qubits. Por ejemplo, en nuestro ejemplo de dos qubits, podríamos conjugar SS en el qubit de la derecha para convertir la XXde ahí en YY:

(IS) eiθ2 XX (IS)=eiθ2 XY.\left( I \otimes S \right) ~e^{i \frac{\theta}{2} ~ X\otimes X}~\left( I \otimes S^\dagger \right) = e^{i \frac{\theta}{2} ~ X\otimes Y}.

Con estas técnicas, podemos realizar operaciones entrelazadas complejas que actúen sobre cualquier número arbitrario de qubits, de la forma

U=eiθ2 Pn1Pn2...P0,   PjI,X,Y,Z.U = e^{i\frac{\theta}{2} ~ P_{n-1}\otimes P_{n-2}\otimes...\otimes P_0}, ~~~ P_j \in {I,X,Y,Z}.

Todo esto demuestra que la combinación de las compuertas de Clifford de uno y dos qubits con rotaciones alrededor del eje x nos brinda un poderoso conjunto de posibilidades. Lo que queda por demostrar es que podemos usarlos para hacer cualquier cosa.

5. Probando la Universalidad

En cuanto a las computadoras clásicas, necesitaremos dividir este gran trabajo en partes manejables. Tendremos que encontrar un conjunto de compuertas básicas que nos permitan lograr esto. Como veremos, las compuertas de uno y dos qubits de la última sección son suficientes para la tarea.

Supongamos que deseamos implementar la unitaria

U=ei(aX+bZ),U = e^{i(aX + bZ)},

pero las únicas compuertas que tenemos son Rx(θ)=eiθ2XR_x(\theta) = e^{i \frac{\theta}{2} X} y Rz(θ)=eiθ2ZR_z(\theta) = e^{i \frac{\theta}{2} Z}. La mejor manera de resolver este problema sería usar ángulos de Euler. Pero consideremos en su lugar un método diferente.

La matriz Hermitiana en la exponencial para UU es simplemente la suma de las de las rotaciones Rx(θ)R_x(\theta) y Rz(θ)R_z(\theta). Esto sugiere un enfoque ingenuo para resolver nuestro problema: podríamos aplicar Rz(2b)=eibZR_z(2b) = e^{i bZ} seguido de Rx(2a)=eiaXR_x(2a) = e^{i a X}. Desafortunadamente, debido a que estamos exponenciando matrices que no conmutan, este enfoque no funcionará.

eiaXeibZei(aX+bZ)e^{i a X} e^{i b Z} \neq e^{i(aX + bZ)}

Sin embargo, podríamos usar la siguiente versión modificada:

U=limn (eiaX/neibZ/n)n.U = \lim_{n\rightarrow\infty} ~ \left(e^{iaX/n}e^{ibZ/n}\right)^n.

Aquí dividimos UU en nn porciones pequeñas. Para cada rebanada, es una buena aproximación decir que

eiaX/neibZ/n=ei(aX+bZ)/ne^{iaX/n}e^{ibZ/n} = e^{i(aX + bZ)/n}

El error en esta aproximación escala como 1/n21/n^2. Cuando combinamos las nn porciones, obtenemos una aproximación de nuestra unitaria objetivo cuyo error escala como 1/n1/n. Entonces, simplemente aumentando el número de rebanadas, podemos acercarnos a UU tanto como necesitemos. También son posibles otros métodos para crear la secuencia para obtener versiones aún más precisas de nuestra unitaria objetivo.

El poder de este método es que puede usarse en casos más complejos que para un solo qubit. Por ejemplo, considera la unitaria

U=ei(aXXX+bZZZ).U = e^{i(aX\otimes X\otimes X + bZ\otimes Z\otimes Z)}.

Sabemos cómo crear la unitaria eiθ2XXXe^{i\frac{\theta}{2} X\otimes X\otimes X} a partir de un solo qubit Rx(θ)R_x(\theta) y dos NOT controlados.

qc.cx(0,2) qc.cx(0,1) qc.rx(theta,0) qc.cx(0,1) qc.cx(0,2)

Con algunos Hadamards, podemos hacer lo mismo para eiθ2ZZZe^{i\frac{\theta}{2} Z\otimes Z\otimes Z}.

qc.h(0) qc.h(1) qc.h(2) qc.cx(0,2) qc.cx(0,1) qc.rx(theta,0) qc.cx(0,1) qc.cx(0,2) qc.h(2) qc.h(1) qc.h(0)

Esto nos da la capacidad de reproducir una pequeña porción de nuestra nueva UU de tres qubits:

eiaXXX/neibZZZ/n=ei(aXXX+bZZZ)/n.e^{iaX\otimes X\otimes X/n}e^{ibZ\otimes Z\otimes Z/n} = e^{i(aX\otimes X\otimes X + bZ\otimes Z\otimes Z)/n}.

Como antes, podemos combinar las rebanadas para obtener una aproximación arbitrariamente precisa de UU.

Este método continúa funcionando a medida que aumentamos la cantidad de qubits y también la cantidad de términos que necesitan simulación. Se debe tener cuidado para garantizar que la aproximación siga siendo precisa, pero esto se puede hacer de manera que requiera recursos razonables. Agregar términos adicionales para simular, o aumentar la precisión deseada, solo requiere que la complejidad del método aumente polinómicamente.

Los métodos de esta forma pueden reproducir cualquier unitaria U=eiHU = e^{iH} para la cual HH se puede expresar como una suma de productos tensoriales de Paulis. Ya que hemos mostrado previamente que todas las matrices pueden expresarse de esta manera, esto es suficiente para demostrar que podemos reproducir todas las unitarias. Aunque otros métodos pueden ser mejores en la práctica, el concepto principal que se desprende de este capítulo es que ciertamente hay una manera de reproducir todas las unitarias multi-qubit usando solo las operaciones básicas que se encuentran en Qiskit. ¡Se puede lograr la universalidad cuántica!

Este conjunto de compuertas no es el único que puede alcanzar la universalidad. Por ejemplo, se puede demostrar que solo Hadamard y Toffoli son suficientes para la universalidad. También se han considerado muchos otros conjuntos de compuertas y se ha demostrado que son universales, cada uno motivado por diferentes rutas para lograr que las compuertas sean tolerantes a fallos.

Todo lo que hemos discutido en este libro sigue el modelo de circuito de computación. Sin embargo, el modelo de circuito no es el único modelo universal de computación cuántica. Existen otras formas de computación cuántica, como la computación cuántica adiabática o la computación cuántica basada en mediciones. El hecho de que sean universales significa que se ha demostrado que existe un mapeo en tiempo polinomial y recursos del modelo de circuito a estos otros modelos de computación. Estos otros modelos a menudo aprovechan otras propiedades mecánicas cuánticas para realizar su cálculo. Si bien existen estas otras maneras de computación cuántica, es importante tener en cuenta que los beneficios de cada una se refieren solo a problemas físicos y de hardware. Dado que un modelo universal de computación cuántica puede realizar cualquier algoritmo cuántico, solamente necesitamos apegarnos al modelo de circuito y podemos ignorar otros modelos universales para nuestra discusión.

Existen otras formas de computación cuántica que no son universales, pero se pueden emplear a aplicaciones específicas. Por ejemplo, el recocido (annealing) cuántico puede ser útil para problemas de optimización y muestreo. El recocido es el proceso de calentar un metal a una temperatura alta y luego dejar que se enfríe lentamente. Este proceso hace que el metal fundido fluya sobre la superficie de la pieza de metal y se redistribuya; cambiando muchas propiedades del metal en cuestión. El recocido cuántico es análogo al proceso físico de recocido en algún sentido. Implica codificar problemas en una especie de paisaje energético y luego dejar que un estado cuántico explore el paisaje. Mientras que las ondas normales pueden quedar atrapadas en valles que son más bajos que su entorno (mínimos locales), los efectos cuánticos aumentan la velocidad a la que los estados cuánticos encuentran el verdadero punto más bajo en el paisaje (mínimos globales).

import qiskit.tools.jupyter %qiskit_version_table