Monedas cuánticas: un módulo sobre superposición e interferencia
Para este módulo de Qiskit en las aulas, los estudiantes deben tener un entorno Python en funcionamiento con los siguientes paquetes instalados:
qiskitv2.1.0 o más recienteqiskit-ibm-runtimev0.40.1 o más recienteqiskit-aerv0.17.0 o más recienteqiskit.visualizationnumpypylatexenc
Para configurar e instalar los paquetes anteriores, consulta la guía Instalar Qiskit. Para ejecutar trabajos en ordenadores cuánticos reales, los estudiantes deberán crear una cuenta en IBM Quantum® siguiendo los pasos de la guía Configure su cuenta IBM Cloud.
Este módulo fue probado y utilizó 47 segundos de tiempo QPU. Esto es sólo una estimación. Su uso real puede variar.
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'Vea el tutorial del módulo de la Dra. Katie McCormick a continuación, o haga clic aquí para verlo en YouTube.
Introducción
En este módulo exploraremos uno de los principios fundamentales de la teoría cuántica: la superposición. En nuestra experiencia cotidiana, los objetos siempre tienen características definidas. Su ubicación, tamaño, forma, color -todo lo que les rodea- está determinado y es seguro, aunque nosotros, los observadores, aún no los hayamos medido. En el mundo cuántico, esto no es necesariamente así. Un objeto cuántico puede estar en algo llamado "superposición" de múltiples estados permitidos clásicamente. Cuando se mide la superposición, ésta "colapsará" aleatoriamente a uno de esos estados.
En cierto modo, medir un estado de superposición es como lanzar una moneda al aire: no hay forma de saber de antemano en qué dirección caerá. Este indeterminismo fundamental es un aspecto incómodo de la mecánica cuántica con el que incluso Einstein tuvo problemas. Es famosa su frase: "Dios no juega a los dados" sobre esta aleatoriedad. Pero, como veremos, Dios juega a los dados y lanza monedas.
Vamos a pensar en el lanzamiento clásico de una moneda como analogía de la medición de un estado de superposición. Y -jugando con una "moneda cuántica" utilizando Qiskit y un qubit en un procesador cuántico IBM® - encontraremos rápidamente los límites de esa analogía.
Moneda clásica
Empecemos con una moneda clásica. Lanza una moneda y saldrá cara arriba o cara abajo, con un 50 % de probabilidades de cada una. Aunque en principio se podría calcular en qué cara caerá la moneda si se conocieran las condiciones iniciales precisas de la moneda y la fuerza/par del lanzamiento, en la práctica no hay forma de saber a priori en qué cara caerá la moneda. Por eso utilizamos el lanzamiento de una moneda como ejemplo canónico de un estado probabilístico clásico, en el que el resultado es esencialmente aleatorio. Podemos escribir el estado de la moneda antes de que caiga para reflejar esta probabilidad del 50/50:
En este caso, los dos términos representan los dos resultados posibles de la tirada, y sus coeficientes representan las probabilidades de cada uno de los resultados. Tenga en cuenta que, normalmente, se utiliza " " (conocido como "ket") para representar un estado cuántico, pero aquí, estamos hablando de un estado probabilístico clásico. Consulte la Lección 1: Sistemas simples en el curso Fundamentos de la información cuántica para obtener más información sobre cómo representamos la información clásica y cuántica.
Si lanzáramos una moneda al aire 1000 veces y anotáramos el número de caras arriba y abajo, obtendríamos algo así:
# import necessary packages:
import numpy as np
import matplotlib.pyplot as plt
import random
nflips = 1000
fliplist = [random.randint(0, 1) for f in range(nflips)]
# bar plots using get_gaussian_probs function
plt.hist(fliplist)
plt.show()Output:
Moneda cuántica
Podemos crear un estado probabilístico similar utilizando un qubit en nuestro ordenador cuántico. Al igual que el lanzamiento de una moneda, un qubit también puede medirse en dos estados posibles: y . Creamos el estado probabilístico de "superposición" comenzando en el estado y aplicando a continuación al qubit algo llamado puerta de Hadamard. Esto la coloca en una superposición igual de y . Obsérvese que, aunque a primera vista este estado de superposición puede parecer y comportarse como la moneda, pronto veremos que es mucho más que eso. El objetivo de este módulo es mostrarte que una superposición no es lo mismo que lanzar una moneda clásica.
Así, puesto que el qubit está en una superposición igual de 0 y 1, cuando midamos el qubit, habrá un 50% de posibilidades de que midamos , un 50% de posibilidades de que midamos . Escribimos este estado de forma un poco diferente al caso probabilístico clásico, por razones que quedarán claras más adelante:
Aquí, las probabilidades de medir cada uno de los dos estados ya no son iguales a los coeficientes, como ocurría en el estado probabilístico clásico anterior. En su lugar, es el cuadrado de los coeficientes lo que nos da las probabilidades, y cada uno de estos coeficientes puede ahora ser complejo, lo que significa que pueden tener tanto partes reales como imaginarias.
A pesar de estas diferencias, el resultado de medir este estado es esencialmente el mismo que lanzar una moneda al aire.
from qiskit import QuantumCircuit
qcoin = QuantumCircuit(1)
qcoin.h(0)
qcoin.measure_all()
qcoin.draw("mpl")Output:
De hecho, aplicar la puerta de Hadamard es como lanzar una moneda al aire. Y al igual que lanzamos la moneda al aire 1000 veces para ver las estadísticas de que la moneda caiga cara arriba o cara abajo, podemos hacer algo parecido en Qiskit con nuestra "moneda cuántica" Podemos utilizar una primitiva de Qiskit llamada Sampler, que repetirá un circuito varias veces para muestrear las estadísticas del estado resultante.
En primer lugar, cargamos el servicio Qiskit Runtime y las primitivas y, a continuación, seleccionamos un backend en el que ejecutar el circuito.
A continuación encontrará un código para guardar sus credenciales la primera vez que las utilice. Asegúrate de borrar esta información del cuaderno después de guardarlo en tu entorno, para que tus credenciales no se compartan accidentalmente cuando compartas el cuaderno. Consulte Configurar su cuenta IBM Cloud e Inicializar el servicio en un entorno no fiable para obtener más orientación.
# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService
# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform',
# instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')
# Load saved credentials
service = QiskitRuntimeService()# Load the Runtime primitive and session
from qiskit_ibm_runtime import (
SamplerV2 as Sampler,
EstimatorV2 as Estimator,
)
# Use the least busy backend
backend = service.least_busy()
print(backend.name)Output:
ibm_kingston
Si no dispone de más tiempo en su cuenta, también puede optar por ejecutarlo en un simulador. Sólo tienes que descomentar el código y ejecutar la celda de abajo para hacerlo:
## Use a local simulator
# from qiskit_aer import AerSimulator
## Generate a simulator that mimics the real quantum system
# backend_sim = AerSimulator.from_backend(backend)
## Import an estimator, this time from qiskit (we will import from Runtime for real hardware)
# from qiskit.primitives import BackendSamplerV2
# sampler_sim = BackendSamplerV2(backend = backend_sim)
# from qiskit.primitives import BackendEstimatorV2
# estimator_sim = BackendEstimatorV2(backend = backend_sim)## Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin)## Execute
# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()## Analysis
from qiskit.visualization import plot_histogram
plot_histogram(counts)Output:
Con 1000 muestras del circuito anterior, tenemos algo que parece básicamente idéntico al histograma clásico de la moneda, hasta cierta fluctuación estadística.
Además de muestrear la estadística de la moneda cuántica, también podemos utilizar otra primitiva de Qiskit llamada Estimator para medir el llamado valor de expectativa de un observable del estado. Para ilustrar en qué consiste este valor de expectativa, utilicemos como ejemplo la moneda clásica. Digamos que utilizas la moneda para apostar: cada vez que lanzas la moneda y sale "cara", ganas un dólar. Pero cada vez que cae "cara abajo", pierdes un dólar. Si quieres saber cuánto dinero se espera obtener en cada tirada (el valor de expectativa del "dinero" observable), entonces calcularías:
Dado que tienes las mismas probabilidades de ganar un dólar que de perderlo, el valor de la expectativa es $0.
De forma similar, con un estado cuántico, podemos calcular el valor de expectativa del observable "Z", donde Z es la matriz de Pauli con valores +1 y -1 asociados a los estados y , respectivamente.
from qiskit.quantum_info import Pauli
qcoin = QuantumCircuit(1)
qcoin.h(0)
# for Estimator, we do not apply the measurement to the circuitOutput:
<qiskit.circuit.instructionset.InstructionSet at 0x136df1ba0>
## Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
obs = Pauli("Z")
qc_isa = pm.run(qcoin)
obs_isa = obs.apply_layout(layout=qc_isa.layout)## Execute
# On real hardware:
estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run([[qc_isa, obs_isa]])
res = job.result()
# On a simulator:
# job = estimator_sim.run([[qc_isa, obs_isa]])
# res=job.result()
print(res[0].data.evs)Output:
-0.014799284701239441
Obtenemos un valor esperado de 0, como era de esperar (hah). Esta es otra forma de confirmar que, efectivamente, hay la misma probabilidad de medir o 0 y 1, y parece comportarse como el lanzamiento de una moneda.
En este punto, la "moneda cuántica" se parece exactamente a la moneda clásica. Pero en la próxima sección haremos algunos experimentos que revelarán las diferencias fundamentales entre ambos.
El quantum revelado: un experimento en tres dimensiones
Hagamos un experimento mental: Supongamos que lanzas una moneda al aire y, en lugar de dejarla caer al suelo, tienes la coordinación de aplaudir cuando pasa entre tus manos y emparedar la moneda entre las palmas. Ahora, en lugar de que la moneda salga cara arriba o cara abajo, sale cara a la izquierda o a la derecha.
Comprueba tu comprensión
¿Cuál es la probabilidad de cada uno de estos resultados, cara a la izquierda o cara a la derecha?
La probabilidad seguirá siendo del 50-50. No debería importar qué dimensión elijamos para medir el resultado del lanzamiento de la moneda.
Esperemos que hayas respondido que la probabilidad de encontrar cara a la izquierda o a la derecha sigue siendo del 50-50. La dimensión a lo largo de la cual se mide el lanzamiento de la moneda no debería afectar a la probabilidad de los resultados.
Pero, ¿en qué cambiarían las cosas para nuestra moneda cuántica? Comprobémoslo.
Podemos hacer nuestra superposición cuántica de la misma forma que la última vez, con una puerta Hadamard. Para medir "cara a la izquierda o a la derecha" en nuestra moneda cuántica, podemos hacer lo que hicimos con la moneda clásica: medir a lo largo de un eje diferente. Nuestras mediciones estándar en el ordenador cuántico se realizan a lo largo del eje vertical, igual que la medición habitual "cara arriba o cara abajo" de la moneda clásica. Pero también podemos preguntar a nuestra moneda cuántica si está cara a la izquierda o a la derecha, o equivalentemente, si está en los estados o , que apuntan a lo largo del eje . Sampler sólo muestras en la base de medida Z, pero podemos utilizar Estimator para obtener el valor de expectativa de X. Los valores de X son +1 y -1 para los estados o , respectivamente.
Comprueba tu comprensión
Si la moneda cuántica se comportara como la moneda clásica en este caso, tendríamos una probabilidad del 50-50 de medir que el estado está en y . ¿Qué valor de expectativa de X esperaríamos que devolviera Estimator , si este fuera el caso?
Cuando aplicamos X al estado , obtenemos el valor y +1 y al estado obtenemos -1, por lo que si tuviéramos una distribución 50-50, obtendríamos un valor de expectativa de 0.
# Step 1: map problem
qcoin_lr = QuantumCircuit(1)
qcoin_lr.h(0)
obs = Pauli("X")
# Step 2: Transpile the circuit
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_lr)
obs_isa = obs.apply_layout(layout=qc_isa.layout)
# Step 3: Run the circuit on a real quantum computer
estimator = Estimator(mode=backend)
pubs = [(qc_isa, obs_isa)]
job = estimator.run([[qc_isa, obs_isa]])
res = job.result()
# Run the job on the Aer simulator with noise model from real backend
# job = estimator_sim.run([[qc_isa,obs_isa]])
# res=job.result()
# Step 4: Return the result in classical form, and analyze.
print(res[0].data.evs)Output:
0.9985207100591716
El valor esperado de X para este estado es 1. Por lo tanto, no hay una probabilidad del 50-50 de medir y .
Comprueba tu comprensión
¿Qué nos dice este valor de expectativa sobre el estado ? ¿Cuáles son las probabilidades de medir y en esta base X?
Dado que el valor de la expectativa es el mismo que el valor de X para el estado , eso significa que tenemos un 100% de probabilidad de medir el estado cuando medimos a lo largo de X.
¿Qué está pasando aquí? Parece que nuestra moneda cuántica puede tener resultados aleatorios y probabilísticos en una dimensión, pero resultados perfectamente predecibles en otra. Sería como lanzar una moneda al aire y garantizar que cada vez que se cogiera, al intercalarla entre dos manos, acabaría con la cara hacia la derecha.
La fase cuántica
La diferencia clave de la moneda cuántica es que tiene otra cualidad que la moneda clásica no tiene. Recuerda que en un estado probabilístico clásico,
cada coeficiente es simplemente un número real positivo que representa la probabilidad de medir un estado concreto. En un estado cuántico,
los coeficientes son complejos, por lo que contienen una parte real y otra imaginaria. Cada coeficiente puede expresarse como un vector bidimensional en el plano complejo, con magnitud y ángulo que forma con el eje real:
Llamamos a la fase. La fase nos dice cómo interferirán dos términos en un estado cuántico, o cómo se sumarán o cancelarán como ondas. Si dos ondas están en fase entre sí, de modo que sus crestas y valles se alinean, se combinarán para formar una onda el doble de alta. A esto lo llamamos interferencia constructiva. Si están desfasadas, es decir, si la cresta de una se alinea con la depresión de la otra y viceversa, interfieren destructivamente y se anulan por completo.
Al igual que las ondas, los estados cuánticos también pueden sumarse de forma constructiva o destructiva. Puede ser más difícil de ver porque, a menudo, no estamos hablando de una onda real en el espacio físico. En el caso de nuestros qubits, la interferencia se produce en abstracto, en el espacio de información de los qubits. Obsérvese también que, dado que sólo la fase relativa entre las dos ondas es importante para el modo en que interferirán -es decir, la diferencia en las fases de los dos coeficientes-, normalmente aplicamos una fase global de a todo el estado, de modo que es puramente real y la fase relativa se captura por completo en .
Para ver cómo la fase puede causar interferencias en nuestra moneda cuántica, intentemos aplicar el Hadamard dos veces en lugar de sólo una. Clásicamente, esto no tendría ningún sentido - si aplicar el Hadamard es equivalente a lanzar una moneda, entonces no se puede lanzar una moneda que ya está lanzando. Pero veamos qué pasa con la moneda cuántica:
qcoin_0 = QuantumCircuit(1)
qcoin_0.h(0)
qcoin_0.h(0)
qcoin_0.measure_all()
qcoin_0.draw("mpl")Output:
Ahora, antes de utilizar Sampler para medir el estado resultante, pensemos en cómo será transformado este qubit por cada puerta. Comienza, como de costumbre, en . Luego, la primera transformación de Hadamard transforma el estado en la superposición, como ya hemos visto:
En este caso, ambos coeficientes son totalmente reales y positivos, lo que significa que la fase es .
A continuación, se aplica el segundo Hadamard a cada trozo del estado de superposición por separado. Ya sabemos cómo transforma Hadamard el estado . Pero, ¿qué pasa con ?
Esto es, de nuevo, una superposición igual de 0 y 1, similar a lanzar una moneda, pero el coeficiente de este estado delante de tiene una fase de para darle el signo negativo.
Comprueba tu comprensión
Calcular el estado resultante tras aplicar el segundo Hadamard. Es decir, calcula: . Obsérvese que es distributivo, por lo que podemos aplicarlo a cada uno de los términos individualmente.
Ahora comprobemos nuestra predicción con Sampler.
## Transpile
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_0)
## Execute
# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()
## Analyze
plot_histogram(counts)Output:
El segundo Hadamard ha anulado al primero, ¡y hemos vuelto al estado 0 en el que empezamos! Esto se debe a que el Hadamard transforma los estados y en estados similares, pero con fases opuestas. Después del segundo Hadamard, vemos que los términos interfieren constructivamente, pero los términos interfieren destructivamente y se anulan entre sí.
Exploremos un poco más: podemos cambiar la fase utilizando una puerta "PHASE". Así que ahora vamos a aplicar un Hadamard para crear la superposición, aplicar un desplazamiento de fase de radianes, a continuación, aplicar el segundo Hadamard:
qcoin_pi = QuantumCircuit(1)
qcoin_pi.h(0)
qcoin_pi.p(np.pi, 0)
qcoin_pi.h(0)
qcoin_pi.measure_all()
qcoin_pi.draw("mpl")Output:
## Transpile
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_pi)
## Execute
# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()
## Analyze
plot_histogram(counts)Output:
Y ahora se mide que el qubit está en el estado 1 en lugar de 0.
Así que, incluso a partir de estos pocos y sencillos experimentos, ya se puede ver la drástica diferencia que esta fase puede suponer en un circuito cuántico. Puede ser sutil y difícil de ver al principio. En nuestro primer experimento, en el que simplemente lanzamos nuestra moneda cuántica con una puerta Hadamard y medimos el resultado del lanzamiento no revelamos nada del efecto de la fase. Sólo cuando profundizamos descubrimos la diferencia que puede marcar una fase. Puede hacer que la misma puerta cuántica tenga literalmente el efecto contrario en un qubit.
Pruébelo usted mismo:
Edita la celda de código de abajo para cambiar la fase de tal manera que el segundo Hadamard cree un estado de superposición con probabilidades del 25% y 75% de encontrar el estado en y , respectivamente. Comprueba tu respuesta con las matemáticas.
qcoin_phase = QuantumCircuit(1)
qcoin_phase.h(0)
# replace "x" below with a phase from 0 to 2*np.pi (this cell won't run if you leave x)
# qcoin_phase.rz(x, 0)
qcoin_phase.h(0)
qcoin_phase.measure_all()
## Transpile
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_phase)
## Execute
# On real hardware:
sampler = Sampler(mode=backend)
pubs = [qc_isa]
job = sampler.run(pubs, shots=1000)
res = job.result()
counts = res[0].data.meas.get_counts()
# or with Aer simulator with noise model from real backend
# job = sampler_sim.run([qc_isa])
# counts=job.result()[0].data.meas.get_counts()
## Analyze
plot_histogram(counts)Output:
Otra analogía (mejor) con monedas utilizando la puerta « »
Ya hemos aprendido que lanzar una moneda al aire es muy distinto de crear un estado de superposición. ¿Hay alguna analogía mejor con una moneda que capte mejor los fenómenos de superposición? Sí. Sí que la hay.
Vamos a hacer otro experimento mental con una moneda. Imagina la moneda sobre la mesa, cara arriba. Para ponerlo boca abajo, basta con darle la vuelta. Es el equivalente computacional de una puerta "NOT".
Digamos que queremos construir una operación que, si se aplica dos veces, sería equivalente a la puerta NOT. Es decir, queremos una "raíz cuadrada de NOT", o . Podemos hacerlo considerando cómo se implementa físicamente la puerta NOT en la moneda: es sólo una rotación de 180 grados alrededor, por ejemplo, del eje x. Así, si giráramos la moneda sólo 90 grados alrededor del eje x, equivaldría a una puerta .
Imaginemos que después de aplicar la puerta , queremos preguntar si la moneda está cara arriba o cara abajo. No es ninguna de las dos cosas, está de pie sobre su borde relativo al eje vertical. Pero ahora, vamos a redefinir nuestra "medición" de la moneda para que sea, en primer lugar, colapsar la moneda a lo largo del eje de medición (aplastándola con la mano para que quede plana) y, en segundo lugar, comprobar si está cara arriba o cara abajo.
Si realizamos esta "medición" en la moneda apoyada sobre su canto, entonces la moneda "colapsará" a cara arriba y a cara abajo con igual probabilidad. Al igual que en el lanzamiento de una moneda, en principio, la dirección en la que cae la moneda puede predecirse basándose en las condiciones iniciales de la moneda y en cómo se aplica exactamente la fuerza de nuestra mano a la moneda para "colapsarla". Pero en la práctica, debería ser difícil predecir qué lado caerá, por lo que es esencialmente aleatorio.
En realidad, podemos medir esta moneda a lo largo de tres ejes diferentes: y . Vemos que el canto de la moneda apunta a lo largo de y , por lo que la medición en esas direcciones requiere "colapsar" la moneda - por lo tanto, a lo largo de esos ejes, habrá azar con probabilidad 50:50 de medir cara arriba y cara abajo. Pero a lo largo del eje , ya está plano, con la cabeza orientada en la dirección -y. Podemos llamarlo "cabezas adelante"
Así, mientras que las mediciones x y z arrojaron resultados aleatorios, la medición y siempre dará el mismo resultado Si recuerdas el experimento de "lanzar una moneda cuántica" de la sección anterior, esto recuerda a cómo se comportaba la moneda cuántica. Se midió para ser 0 o 1 con 50/50 de probabilidad en la dirección z, pero siempre y nunca a lo largo de X. Esto sugiere que tal vez una moneda quieta, en su borde, es una mejor manera de visualizar un estado de superposición de un qubit que una moneda lanzada al aire.
Utilicemos Qiskit para ver si nuestra "moneda cuántica" se comporta igual que nuestra moneda clásica cuando se aplica una puerta . Aplicaremos a un qubit comenzando en , luego utilizaremos Estimator para comprobar el valor de expectativa de los tres observables, X, Y y Z.
qcoin_sx = QuantumCircuit(1)
qcoin_sx.sx(0)
qcoin_sx.draw("mpl")Output:
obs1 = Pauli("X")
obs2 = Pauli("Y")
obs3 = Pauli("Z")
# Step 2: Transpile the circuit
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qcoin_sx)
obs1_isa = obs1.apply_layout(layout=qc_isa.layout)
obs2_isa = obs2.apply_layout(layout=qc_isa.layout)
obs3_isa = obs3.apply_layout(layout=qc_isa.layout)
# Step 3: Run the circuit on a real quantum computer
estimator = Estimator(mode=backend)
pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]])]
job = estimator.run(pubs)
res = job.result()
# Run the job on the Aer simulator with noise model from real backend
# pubs = [(qc_isa, [[obs1_isa], [obs2_isa], [obs3_isa]])]
# job = estimator_sim.run(pubs)
# res=job.result()
# Step 4: Return the result in classical form, and analyze.
print(res[0].data.evs)Output:
[[-0.01234492]
[-1.00388865]
[ 0.00740695]]
Los valores esperados son 0, -1, y 0 para X, Y y Z, respectivamente.
Comprueba tu comprensión
Dados los valores de las expectativas, ¿cuáles son las probabilidades de medir la moneda cuántica cara arriba/cara abajo (o izquierda/derecha o adelante/atrás) para cada uno de los 3 ejes de medición?
Existe una probabilidad del 50/50 de medir cualquiera de los estados a lo largo de X y Z, y el estado siempre se mide en la dirección -y a lo largo de Y.
Este es el mismo resultado que obtuvimos con nuestro experimento mental aplicando una rotación " " de 90 grados a la moneda clásica. De hecho, ahora existe una analogía precisa entre la moneda y el estado del qubit. Podemos visualizar el estado del qubit como un vector que apunta en la dirección de la cara de una moneda, normal a la superficie de la moneda. Así, cara arriba, o el estado en una moneda cuántica, equivale a un vector que apunta directamente hacia arriba; cara abajo, o , apunta directamente hacia abajo. Cualquier superposición igual de y apunta horizontalmente. La fase del estado determina la dirección horizontal exacta - la dirección que señala a lo largo del ecuador es igual a la dirección que señala el coeficiente en el plano complejo.
Ahora, cada puerta que hemos visto en este cuaderno puede visualizarse como una rotación (o serie de rotaciones) de la moneda/vector.
-
NO: 180 grados alrededor del eje x
-
90 grados alrededor del eje x
-
FASE: rotación de alrededor del eje z
-
Hadamard: Este es un poco más complicado. Al principio lo comparamos con lanzar una moneda al aire, haciéndola girar sin control. Pero la Hadamard es en realidad una rotación controlada y determinista de la moneda, como las demás puertas. El Hadamard se realiza girando 90 grados alrededor del eje y y, a continuación, 180 grados alrededor del eje x.
Por tanto, no hay nada aleatorio en un estado de superposición cuántica ni en ninguna de las operaciones estándar que realizamos con el qubit. Cada operación es determinista y reversible. El único momento en que entra en juego el azar es cuando decidimos medir el estado cuántico.
El estado del qubit como vector de Bloch
Este vector que apunta en la dirección de la "cabeza" de la moneda se conoce como "vector de Bloch" Formalmente, un estado qubit arbitrario (aislado) puede representarse mediante un vector que se encuentra en la superficie de una esfera de radio 1 con coordenadas . Escrito en términos de estas coordenadas, el estado del qubit es:
Ahora vamos a comprobar con Qiskit cómo cambia el vector Bloch cuando aplicamos varias puertas a nuestro qubit partiendo del estado .
NO
from qiskit.visualization import plot_bloch_multivector
qnot = QuantumCircuit(1)
qnot.x(0)
plot_bloch_multivector(qnot)Output:
qsqrtnot = QuantumCircuit(1)
qsqrtnot.sx(0)
plot_bloch_multivector(qsqrtnot)Output:
PHASE ( )
qphase = QuantumCircuit(1)
qphase.p(np.pi, 0)
plot_bloch_multivector(qphase)Output:
Hadamard
qhadamard = QuantumCircuit(1)
qhadamard.h(0)
plot_bloch_multivector(qhadamard)Output:
Conclusión: ¿qué es un estado de superposición?
Empezamos este módulo comparando la aleatoriedad de medir un estado de superposición cuántica con el lanzamiento de una moneda. Comparamos la "puerta de Hadamard" que produce una superposición cuántica con el acto de lanzar una moneda al aire. Pero, a través de una serie de experimentos, aprendimos que existen diferencias fundamentales entre el lanzamiento clásico de una moneda y una superposición cuántica.
Hemos aprendido que, en realidad, no hay nada "aleatorio" en un qubit en estado de superposición. Es como una moneda quieta en un espacio tridimensional. De hecho, una moneda que gira libremente en 3 dimensiones es una analogía muy cercana a una forma particular de visualizar el estado cuántico de un qubit, llamada vector de Bloch. Las puertas cuánticas hacen girar esta moneda/vector Bloch de forma determinista y reversible. Sólo cuando medimos el qubit se introduce la aleatoriedad. Comparamos este proceso de medición con aplastar la moneda para que quede plana en la dirección del eje de medición.
Que un estado cuántico esté en superposición es algo que depende del ojo del espectador. Como ya habrás visto antes, podemos elegir libremente nuestro sistema de coordenadas: , y pueden apuntar en tres direcciones ortogonales cualesquiera. Así pues, si tenemos una superposición de 0 y 1 en un sistema de coordenadas, podemos definir un nuevo sistema de coordenadas -o, lo que es lo mismo, una nueva "base de medida"- en el que el estado apunte puramente en la dirección y, por tanto, no se encuentre en un estado de superposición. Por tanto, cuando decimos que un qubit está en superposición, también debemos responder a la pregunta "¿superposición de qué?"
Puede que salga de este módulo con la impresión de que acabamos de eliminar todo el misterio de la mecánica cuántica. Después de todo, uno de los aspectos supuestamente más "extraños", el estado de superposición de un qubit, es en realidad tan simple como un vector tridimensional. Pero hay que tener en cuenta que la moneda sigue siendo sólo una analogía, e incluso el vector de Bloch es sólo una herramienta de visualización para calcular probabilidades de resultados de medidas. No podemos decir qué hace realmente un estado cuántico antes de medirlo. Porque, ¡comprobar eso requiere una medida!
En el módulo "Desigualdad de Bell" analizaremos el enigma de cuál es la "verdadera" naturaleza de un estado cuántico y cómo el fenómeno cuántico del entrelazamiento puede ayudarnos a dilucidarlo.
Preguntas
Los profesores pueden solicitar versiones de estos cuadernos con claves de respuestas y orientaciones sobre su colocación en planes de estudios comunes rellenando esta rápida encuesta sobre cómo se están utilizando los cuadernos.
Conceptos fundamentales:
- Aunque la medición de un qubit en superposición es probabilística, como lanzar una moneda al aire, el propio estado de superposición se comporta de forma diferente a lanzar una moneda al aire.
- La principal diferencia entre una distribución de probabilidad clásica y una superposición es que la superposición tiene coherencia de fase, lo que le permite interferir constructiva o destructivamente.
- El estado de un único qubit aislado puede visualizarse como un punto de la llamada "esfera de Bloch", donde las amplitudes relativas de las componentes y determinan el ángulo polar y las fases relativas entre las dos componentes determinan el ángulo azimutal .
- Todas las puertas cuánticas de un solo qubit pueden verse como rotaciones del vector en esta esfera.
Preguntas de verdadero o falso:
-
V/F Una superposición cuántica es básicamente lo mismo que un suceso probabilístico en física clásica, como lanzar una moneda al aire.
-
T/F La longitud del vector de Bloch que describe el estado de un único qubit aislado es siempre 1.
-
T/F Las puertas cuánticas de un solo qubit no cambian la longitud del vector de Bloch.
Preguntas del moderador:
- Seleccione el vector de Bloch correcto que representa el estado :
-
La esfera de Bloch describe un qubit: (seleccione todo lo que corresponda)
a. Amplitud
b. entrelazamiento con otros qubits
c. fase
d. color
decir, probabilidad de los resultados de la medición
Preguntas para el debate:
-
¿Por qué el estado de un qubit puede visualizarse en la esfera de Bloch, pero no la distribución de probabilidad de lanzar una moneda?
-
¿Por qué el lanzamiento de una moneda al aire no es la mejor analogía de un estado de superposición cuántica? ¿Qué aspecto de las superposiciones no se capta en esta analogía?
Problemas desafiantes:
- Utiliza Qiskit para crear un circuito que transforme el estado al estado