Moedas Quânticas — um módulo sobre superposição e interferência
Para este módulo do Qiskit in Classrooms, os alunos devem ter um ambiente Python em funcionamento com os seguintes pacotes instalados:
qiskitv2.1.0 ou mais recenteqiskit-ibm-runtimev0.40.1 ou mais recenteqiskit-aerv0.17.0 ou mais recenteqiskit.visualizationnumpypylatexenc
Para configurar e instalar os pacotes acima, consulte o guia Instalar o Qiskit. Para executar trabalhos em computadores quânticos reais, os alunos precisarão configurar uma conta no IBM Quantum® seguindo as etapas do guia Configurar sua conta IBM Cloud.
Esse módulo foi testado e usou 47 segundos de tempo de QPU. Essa é apenas uma estimativa. Seu uso real pode 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'Assista ao passo a passo do módulo pela Dra. Katie McCormick abaixo, ou clique aqui para assisti-lo em YouTube.
Introdução
Neste módulo, exploraremos um dos princípios fundamentais no coração da teoria quântica: a superposição. Em nossa experiência cotidiana, os objetos sempre têm características definidas. Sua localização, tamanho, forma, cor - tudo a seu respeito - é determinado e certo, mesmo que nós, observadores, ainda não os tenhamos medido. No mundo quântico, esse não é necessariamente o caso. Um objeto quântico pode estar em algo chamado "superposição" de vários estados classicamente permitidos. Quando a superposição for medida, ela entrará em "colapso" aleatório para um desses estados.
De certa forma, medir um estado de superposição é como jogar uma moeda: não há como saber com antecedência em que direção ela cairá. Esse indeterminismo fundamental é um aspecto incômodo da mecânica quântica, com o qual até mesmo Einstein teve problemas. Ele disse a famosa frase: "Deus não joga dados" sobre essa aleatoriedade. Mas, como veremos, Deus de fato joga dados - e joga moedas.
Vamos pensar em um lançamento de moeda clássico como uma analogia à medição de um estado de superposição. E, ao brincar com uma "moeda quântica" usando o Qiskit e um qubit em um processador quântico IBM®, descobriremos rapidamente os limites dessa analogia.
Moeda clássica
Vamos começar com uma moeda clássica. Jogue uma moeda e ela cairá com a cabeça para cima ou para baixo, com 50 % de chance de cada. Embora, em princípio, seja possível calcular em qual lado a moeda cairá se forem conhecidas as condições iniciais precisas da moeda e a força/torque do lançamento, na prática, não há como saber a priori em qual lado a moeda cairá. É por isso que usamos o lançamento de moeda como um exemplo canônico de um estado probabilístico clássico, em que o resultado é essencialmente aleatório. Podemos escrever o estado da moeda antes de ela cair para refletir essa probabilidade de 50/50:
Aqui, os dois termos representam os dois resultados possíveis do flip, e seus coeficientes representam as probabilidades de cada um dos resultados. Observe que, normalmente, o " " (conhecido como "ket") é usado para representar um estado quântico, mas, aqui, estamos falando de um estado probabilístico clássico. Consulte a Lição 1: Sistemas únicos no curso Noções básicas de informação quântica para saber mais sobre como representamos as informações clássicas e quânticas.
Se jogássemos uma moeda 1000 vezes e registrássemos o número de caras para cima e para baixo, obteríamos algo assim:
# 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:
Moeda quântica
Podemos criar um estado probabilístico semelhante usando um qubit em nosso computador quântico. Assim como o lançamento de uma moeda, um qubit também pode ser medido em dois estados possíveis: e . Criamos o estado probabilístico de "superposição" iniciando no estado e, em seguida, aplicando algo chamado porta Hadamard ao qubit. Isso a coloca em uma superposição igual de e . Observe que, embora esse estado de superposição possa parecer e se comportar como a moeda à primeira vista, logo veremos que há muito mais do que isso. O objetivo deste módulo é mostrar a você que uma superposição não é o mesmo que um lançamento clássico de moeda.
Portanto, como o qubit está em uma superposição igual de 0 e 1, quando medirmos o qubit, haverá 50% de chance de medirmos , 50% de chance de medirmos . Escrevemos esse estado de forma um pouco diferente do caso probabilístico clássico, por motivos que ficarão claros mais adiante:
Aqui, as probabilidades de medir cada um dos dois estados não são mais iguais aos coeficientes, como era o caso no estado probabilístico clássico acima. Em vez disso, é o quadrado dos coeficientes que nos dá as probabilidades, e cada um desses coeficientes agora pode ser complexo, o que significa que eles podem ter partes reais e imaginárias.
No entanto, apesar dessas diferenças, o resultado da medição desse estado é essencialmente o mesmo que jogar uma moeda.
from qiskit import QuantumCircuit
qcoin = QuantumCircuit(1)
qcoin.h(0)
qcoin.measure_all()
qcoin.draw("mpl")Output:
Assim, de fato, aplicar a porta Hadamard é o análogo de jogar uma moeda. E, assim como jogamos a moeda 1000 vezes para observar as estatísticas da moeda que cai com a cabeça para cima ou para baixo, podemos fazer algo semelhante no Qiskit com nossa "moeda quântica" Podemos usar uma primitiva do Qiskit chamada Sampler, que repetirá um circuito várias vezes para obter uma amostra das estatísticas do estado resultante.
Primeiro, carregamos o serviço e as primitivas do Qiskit Runtime e, em seguida, selecionamos um backend no qual executar o circuito.
Há um código abaixo para salvar suas credenciais na primeira utilização. Certifique-se de excluir essas informações do notebook depois de salvá-lo em seu ambiente, para que suas credenciais não sejam compartilhadas acidentalmente quando você compartilhar o notebook. Consulte Configurar sua conta IBM Cloud e Inicializar o serviço em um ambiente não confiável para obter mais orientações.
# 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
Se não tiver mais tempo disponível em sua conta, você também pode optar por executar isso em um simulador. Basta descomentar o código e executar a célula abaixo para fazer isso:
## 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:
Com 1.000 amostras do circuito acima, temos algo que parece basicamente idêntico ao histograma clássico de moedas, com algumas flutuações estatísticas.
Além de amostrar as estatísticas da moeda quântica, também podemos usar outro primitivo do Qiskit chamado Estimator para medir o chamado valor de expectativa de um observável do estado. Para ilustrar o que é esse valor de expectativa, vamos usar a moeda clássica como exemplo. Digamos que você esteja usando a moeda para apostar: toda vez que lançar a moeda e ela der cara, você ganha um dólar. Mas toda vez que ela cai de cabeça para baixo, você perde um dólar. Se você quiser saber quanto dinheiro espera receber a cada flip (o valor esperado do "dinheiro" observável), então você calcularia:
Como é igualmente provável que você ganhe um dólar e perca um dólar, o valor da expectativa é $0.
Da mesma forma, com um estado quântico, podemos calcular o valor de expectativa do observável "Z", em que Z é a matriz de Pauli com valores +1 e -1 associados aos estados e , 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
Obtemos um valor de expectativa de 0, como esperado (hah). Essa é outra maneira de confirmar que, de fato, há uma probabilidade igual de medir ou 0 e 1, e parece se comportar como um lançamento de moeda.
Nesse ponto, a "moeda quântica" se parece exatamente com a moeda clássica. Mas, na próxima seção, faremos alguns experimentos que revelarão as diferenças fundamentais entre os dois.
O quantum revelado: um experimento em três dimensões
Vamos fazer um experimento mental: Digamos que você jogue uma moeda no ar e, em vez de deixá-la cair no chão, você tenha a coordenação de bater palmas quando ela passa entre suas mãos e prenda a moeda entre as palmas. Agora, em vez de a moeda ser cara para cima ou para baixo, ela é cara para a esquerda ou para a direita.
Verifique sua compreensão
Qual é a probabilidade de cada um desses resultados, cara para a esquerda ou cara para a direita?
A probabilidade ainda será de 50-50. Não importa qual dimensão escolhemos para medir o resultado do lançamento da moeda.
Esperamos que você tenha respondido que a probabilidade de encontrar a cara à esquerda ou à direita ainda é de 50-50. A dimensão ao longo da qual o lançamento da moeda é medido não deve afetar a probabilidade dos resultados.
Mas como as coisas seriam diferentes para nossa moeda quântica? Vamos verificar.
Podemos criar nossa superposição quântica da mesma forma que fizemos da última vez, com uma porta Hadamard. Para medir "cara para a esquerda ou para a direita" em nossa moeda quântica, podemos fazer o mesmo que fizemos com a moeda clássica: medir ao longo de um eixo diferente. Nossas medições padrão no computador quântico estão ao longo do eixo vertical, assim como a medição usual de "cara para cima ou para baixo" da moeda clássica. Mas também podemos perguntar à nossa moeda quântica se ela é cara para a esquerda ou para a direita ou, de forma equivalente, se ela está nos estados ou , que estão apontando ao longo do eixo . Sampler apenas amostras na base de medição Z, mas podemos usar Estimator para obter o valor esperado de X. Os valores de X são +1 e -1 para os estados ou , respectivamente.
Verifique sua compreensão
Se a moeda quântica se comportasse como a moeda clássica nesse caso, teríamos uma probabilidade de 50% de medir o estado em e . Que valor de expectativa de X esperaríamos que Estimator retornasse, se esse fosse o caso?
Quando aplicamos X ao estado , obtemos o valor e +1 e ao estado obtemos -1, portanto, se tivéssemos uma distribuição 50-50, obteríamos um 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
O valor esperado de X para esse estado é 1. Portanto, não há uma probabilidade de 50-50 de medir e .
Verifique sua compreensão
O que esse valor de expectativa nos diz sobre o estado ? Quais são as probabilidades de medir e nessa base X?
Como o valor da expectativa é o mesmo que o valor de X para o estado , isso significa que temos 100% de probabilidade de medir o estado quando medimos ao longo de X.
O que Está Acontecendo Aqui? Parece que nossa moeda quântica pode ter resultados aleatórios e probabilísticos em uma dimensão, mas resultados perfeitamente previsíveis em outra. Isso seria como jogar uma moeda e garantir que toda vez que ela fosse apanhada, colocando-a entre as duas mãos, ela acabaria com a cabeça voltada para a direita.
A fase quântica
A principal diferença da moeda quântica é que ela tem outra qualidade que a moeda clássica não tem. Lembre-se de que em um estado probabilístico clássico,
cada coeficiente é simplesmente um número real e positivo que representa a probabilidade de medir um determinado estado. Em um estado quântico,
os coeficientes são complexos, portanto, contêm uma parte real e uma imaginária. Cada coeficiente pode ser expresso como um vetor bidimensional no plano complexo, com a magnitude e o ângulo que faz com o eixo real:
Chamamos de fase. A fase nos diz como dois termos em um estado quântico interferirão, ou como eles se somarão ou se cancelarão como ondas. Se duas ondas estiverem em fase uma com a outra, de modo que suas cristas e vales se alinhem, elas se combinarão para formar uma onda duas vezes mais alta. Chamamos isso de interferência construtiva. Se estiverem fora de fase, ou seja, a crista de um se alinha com o vale do outro e vice-versa, eles interferem de forma destrutiva e se cancelam completamente.
Assim como as ondas, os estados quânticos também podem se somar de forma construtiva ou destrutiva. Pode ser mais difícil de ver porque, muitas vezes, não estamos falando de uma onda real no espaço físico. No caso de nossos qubits, a interferência ocorre no espaço abstrato de informações dos qubits. Observe também que, como somente a fase relativa entre as duas ondas é importante para a forma como elas interferirão, ou seja, a diferença nas fases dos dois coeficientes, normalmente aplicamos uma fase global de a todo o estado para que seja puramente real e a fase relativa seja totalmente capturada em .
Para ver como a fase pode causar interferência em nossa moeda quântica, vamos tentar aplicar o Hadamard duas vezes em vez de apenas uma. Classicamente, isso não faria sentido - se aplicar o Hadamard é equivalente a jogar uma moeda, então não é possível jogar uma moeda que já está sendo jogada. Mas vamos ver o que acontece com a moeda quântica:
qcoin_0 = QuantumCircuit(1)
qcoin_0.h(0)
qcoin_0.h(0)
qcoin_0.measure_all()
qcoin_0.draw("mpl")Output:
Agora, antes de usarmos o site Sampler para medir o estado resultante, vamos pensar em como esse qubit será transformado por cada porta. Ele começa, como de costume, em . Em seguida, a primeira transformação de Hadamard transforma o estado em uma superposição, como já vimos:
Nesse caso, os dois coeficientes são totalmente reais e positivos, o que significa que a fase é .
O segundo Hadamard é então aplicado a cada parte do estado de superposição separadamente. Já sabemos como o Hadamard transforma o estado . Mas e quanto ao ?
Essa é, novamente, uma superposição igual de 0 e 1, semelhante a jogar uma moeda, mas o coeficiente desse estado na frente de tem uma fase de para dar a ele o sinal negativo.
Verifique sua compreensão
Calcule o estado resultante após a aplicação do segundo Hadamard. Ou seja, calcule: . Observe que é distributivo, portanto, podemos aplicá-lo a cada um dos termos individualmente.
Agora vamos verificar nossa previsão com 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:
O segundo Hadamard cancelou o primeiro, e voltamos ao estado 0 onde começamos! Isso ocorre porque o Hadamard transforma os estados e em estados semelhantes, mas com fases opostas. Após o segundo Hadamard, vemos que os termos interferem de forma construtiva, mas os termos interferem de forma destrutiva e se cancelam mutuamente.
Vamos explorar mais: podemos alterar a fase usando uma porta "PHASE". Então, agora vamos aplicar um Hadamard para criar a sobreposição, aplicar uma mudança de fase de radianos e, em seguida, aplicar o 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:
E agora o qubit é medido para estar no estado 1 em vez de 0.
Portanto, mesmo com esses poucos e simples experimentos, já é possível ver a diferença drástica que essa fase pode fazer em um circuito quântico. Pode ser sutil e difícil de ver no início. Em nosso primeiro experimento, no qual simplesmente jogamos nossa moeda quântica com uma porta Hadamard e medimos o resultado do lançamento, não revelamos nada sobre o efeito da fase. Foi somente quando nos aprofundamos que descobrimos a diferença que uma fase pode fazer. Isso pode fazer com que a mesma porta quântica tenha literalmente o efeito oposto em um qubit.
Experimente você mesmo:
Edite a célula de código abaixo para alterar a fase de modo que o segundo Hadamard crie um estado de superposição com probabilidades de 25% e 75% de encontrar o estado em e , respectivamente. Verifique sua resposta com a matemática.
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:
Outra analogia (melhor) com moedas usando o portão
Até agora, aprendemos que o ato de jogar uma moeda é bem diferente de criar um estado de superposição. Existe uma analogia melhor que poderíamos fazer com uma moeda que capte mais os fenômenos do tipo superposição? Sim. Sim, existe.
Vamos fazer outro experimento mental com uma moeda. Imagine a moeda sobre a mesa, com a cabeça para cima. Para que ele fique com a cabeça para baixo, basta virá-lo. Esse é o equivalente computacional de uma porta "NOT".
Digamos que queremos construir uma operação que, se aplicada duas vezes, seria equivalente à porta NOT. Ou seja, queremos uma "raiz quadrada de NOT", ou . Podemos fazer isso considerando como a porta NOT é implementada fisicamente na moeda: é apenas uma rotação de 180 graus em torno, por exemplo, do eixo x. Portanto, se girássemos a moeda apenas 90 graus em torno do eixo x, ela seria equivalente a uma porta .
Imagine que, depois de aplicar a porta , queremos perguntar se a moeda é cara ou coroa. Não é nem um nem outro - ele está em sua borda em relação ao eixo vertical. Mas agora, vamos redefinir nossa "medição" da moeda como sendo, primeiro, o colapso da moeda ao longo do eixo de medição (esmagando-a com a mão para que ela fique plana) e, segundo, verificar se ela está com a cara para cima ou para baixo.
Se realizarmos essa "medição" na moeda que está em sua borda, a moeda "cairá" em cara para cima e cara para baixo com a mesma probabilidade. Assim como no lançamento de uma moeda, em princípio, a direção em que a moeda cai pode ser prevista com base nas condições iniciais da moeda e em como exatamente a força de nossa mão é aplicada à moeda para "derrubá-la". Mas, na prática, deve ser difícil prever o lado que ficará para cima, portanto, é essencialmente aleatório.
Na verdade, podemos medir essa moeda ao longo de três eixos diferentes: , , e . Vemos que a borda da moeda está apontando ao longo de e , de modo que a medição nessas direções requer o "colapso" da moeda - portanto, ao longo desses eixos, haverá uma probabilidade aleatória de 50:50 de medir a cara para cima e para baixo. Mas ao longo do eixo , ele já está plano, com a cabeça voltada para a direção -y. Podemos chamar isso de "cabeça para frente"
Portanto, enquanto as medições x e z produziram resultados aleatórios, a medição y sempre produzirá o mesmo resultado! Se você se lembrar do experimento "quantum coin flip" da seção anterior, isso é uma reminiscência de como a moeda quântica se comportou. Foi medido como 0 ou 1 com probabilidade de 50/50 na direção z, mas sempre e nunca ao longo de X. Isso sugere que talvez uma moeda parada, em sua borda, seja uma maneira melhor de visualizar um estado de superposição de um qubit do que uma moeda girando descontroladamente no ar.
Vamos usar o Qiskit para ver se nossa "moeda quântica" se comporta da mesma forma que nossa moeda clássica quando uma porta é aplicada. Aplicaremos o a um qubit começando em e, em seguida, usaremos o Estimator para verificar o valor de expectativa dos três observáveis, X, Y e 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]]
Os valores de expectativa são 0, -1, e 0 para X, Y e Z, respectivamente.
Verifique sua compreensão
Considerando os valores de expectativa, quais são as probabilidades de medir a moeda quântica como sendo cara para cima/para baixo (ou esquerda/direita ou frente/trás) para cada um dos três eixos de medição?
Há uma probabilidade de 50/50 de medir qualquer um dos estados ao longo de X e Z, e o estado é sempre medido na direção -y ao longo de Y.
Esse é o mesmo resultado que obtivemos com nosso experimento de pensamento aplicando uma rotação de 90 graus " " na moeda clássica. De fato, agora há uma analogia precisa entre a moeda e o estado do qubit. Podemos visualizar o estado do qubit como um vetor que aponta na direção da cara em uma moeda, normal à superfície da moeda. Portanto, cara para cima, ou o estado em uma moeda quântica, é equivalente a um vetor apontando diretamente para cima; cara para baixo, ou , está apontando diretamente para baixo. Qualquer superposição igual de e aponta horizontalmente. A fase do estado determina a direção horizontal exata - a direção que ele aponta ao longo do equador é igual à direção que o coeficiente aponta no plano complexo.
Agora, cada porta que vimos neste caderno pode ser visualizada como uma rotação (ou série de rotações) da moeda/vetor.
-
NÃO: 180 graus em torno do eixo x
-
: 90 graus em torno do eixo x
-
FASE: rotação do site em torno do eixo z
-
Hadamard: Este é um pouco mais complicado. Inicialmente, comparamos isso ao ato de jogar uma moeda, fazendo-a girar incontrolavelmente no ar. Mas o Hadamard é, na verdade, uma rotação controlada e determinística da moeda, como as outras portas. O Hadamard é realizado girando 90 graus em torno do eixo y e, em seguida, 180 graus em torno do eixo x.
Portanto, não há nada de aleatório em um estado de superposição quântica ou em qualquer uma das operações padrão que realizamos no qubit. Toda operação é determinística e reversível. O único momento em que a aleatoriedade entra em jogo é quando decidimos medir o estado quântico.
O estado do qubit como um vetor de Bloch
Esse vetor que aponta na direção da "cabeça" da moeda é conhecido como "vetor de Bloch" Formalmente, um estado de qubit arbitrário (isolado) pode ser representado por um vetor que se encontra na superfície de uma esfera de raio 1 com coordenadas . Escrito em termos dessas coordenadas, o estado do qubit é:
Agora, vamos verificar com o Qiskit como o vetor Bloch muda quando aplicamos várias portas ao nosso qubit, começando pelo estado .
NÃO
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:
Conclusão - então, o que é um estado de superposição?
Iniciamos este módulo comparando a aleatoriedade da medição de um estado de superposição quântica com o lançamento de uma moeda. Comparamos a "porta Hadamard", que produz uma superposição quântica, ao ato de jogar uma moeda. Mas, por meio de uma série de experimentos, aprendemos que há diferenças fundamentais entre o lançamento clássico de uma moeda e uma superposição quântica.
Aprendemos que, na verdade, não há nada de "aleatório" em um qubit em um estado de superposição. É como uma moeda parada em um espaço tridimensional. De fato, uma moeda livre para girar em 3 dimensões é uma analogia muito próxima de uma maneira específica de visualizar o estado quântico de um qubit, chamado de vetor de Bloch. As portas quânticas giram esse vetor de moeda/Bloch de forma determinística e reversível. É somente quando medimos o qubit que qualquer aleatoriedade é introduzida. Comparamos esse processo de medição com o esmagamento da moeda para que ela fique plana na direção do eixo de medição.
O fato de um estado quântico estar ou não em uma superposição está realmente nos olhos de quem vê. Como você provavelmente já viu antes, temos liberdade para escolher nosso sistema de coordenadas - , e podem apontar ao longo de quaisquer três direções ortogonais. Portanto, se tivermos uma superposição de 0 e 1 em um sistema de coordenadas, podemos definir um novo sistema de coordenadas - ou, de forma equivalente, uma nova "base de medição" - no qual o estado está apontando puramente na direção e, portanto, não em um estado de superposição. Portanto, quando dizemos que um qubit está em uma superposição, também precisamos responder à pergunta: "superposição de quê?"
Você pode sair deste módulo com a impressão de que acabamos de remover todo o mistério da mecânica quântica. Afinal, um dos aspectos supostamente mais "estranhos", o estado de superposição de um qubit, é na verdade tão simples quanto um vetor tridimensional. Mas lembre-se de que a moeda ainda é apenas uma analogia, e mesmo o vetor de Bloch é apenas uma ferramenta de visualização para calcular as probabilidades dos resultados das medições. Não podemos dizer o que um estado quântico está realmente fazendo antes de ser medido. Porque, para verificar isso, é necessário fazer uma medição!
Discutiremos esse enigma sobre qual é a natureza "verdadeira" de um estado quântico e como o fenômeno quântico do entrelaçamento pode nos ajudar a elucidar isso no módulo Desigualdade de Bell.
Perguntas
Os instrutores podem solicitar versões desses cadernos com chaves de resposta e orientação sobre a colocação em currículos comuns preenchendo esta pesquisa rápida sobre como os cadernos estão sendo usados.
Conceitos críticos:
- Embora a medição de um qubit em uma superposição seja probabilística, como jogar uma moeda, o próprio estado de superposição se comporta de forma diferente de jogar uma moeda.
- A principal diferença entre uma distribuição de probabilidade clássica e uma superposição é que a superposição tem coerência de fase, o que permite que ela interfira de forma construtiva ou destrutiva.
- O estado de um único qubit isolado pode ser visualizado como um ponto na chamada "esfera de Bloch", onde as amplitudes relativas dos componentes e determinam o ângulo polar e as fases relativas entre os dois componentes determinam o ângulo azimutal .
- Todas as portas quânticas de um único qubit podem ser vistas como rotações do vetor nessa esfera.
Questões verdadeiro/falso:
-
T/F Uma superposição quântica é basicamente o mesmo que um evento probabilístico na física clássica, como jogar uma moeda.
-
T/F O comprimento do vetor de Bloch que descreve o estado de um único qubit isolado é sempre 1.
-
T/F As portas quânticas de um único qubit não alteram o comprimento do vetor de Bloch.
Perguntas do MC:
- Selecione o vetor de Bloch correto que representa o estado :
-
A esfera de Bloch descreve um qubit: (selecione todas as opções aplicáveis)
a. amplitude
b. emaranhamento com outros qubits
c. fase
d. cor
e. probabilidade de resultados de medição
Questões para discussão:
-
Por que o estado de um qubit pode ser visualizado na esfera de Bloch, mas a distribuição de probabilidade de um lançamento de moeda não pode?
-
Por que o lançamento de uma moeda no ar não é a melhor analogia para um estado de superposição quântica? Que aspecto das superposições não é capturado nessa analogia?
Problemas desafiadores:
- Use o Qiskit para criar um circuito que transforme o estado para o estado