Pular para o conteúdo principal

O experimento de Stern-Gerlach usando computadores quânticos

Para este módulo do Qiskit in Classrooms, os estudantes precisam ter um ambiente Python funcionando com os seguintes pacotes instalados:

  • qiskit v2.1.0 ou mais recente
  • qiskit-ibm-runtime v0.40.1 ou mais recente
  • qiskit-aer v0.17.0 ou mais recente
  • qiskit.visualization
  • numpy
  • pylatexenc

Para configurar e instalar os pacotes acima, consulte o guia Instalar o Qiskit. Para executar jobs em computadores quânticos reais, os estudantes precisarão criar uma conta no IBM Quantum® seguindo os passos do guia Configure sua conta IBM Cloud.

Este módulo foi testado e utilizou 2 segundos de tempo de QPU. Isso é apenas uma estimativa. Seu uso real pode variar.

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# 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 com a Dra. Katie McCormick abaixo, ou clique aqui para assistir no YouTube.


Contexto histórico

No início do século XX, as evidências de comportamento quantizado em escalas atômicas estavam se acumulando. Muitas interpretações bem-sucedidas de dados — como a explicação de Max Planck para a catástrofe ultravioleta — e experimentos como o de Otto Stern e Walther Gerlach foram fundamentais para convencer o mundo de que um sistema de mecânica quântica era necessário e que certos fenômenos físicos são quantizados. No caso do experimento de Stern-Gerlach (concebido por Stern em 1921 e realizado por Stern e Gerlach em 1922), o objetivo era verificar a quantização do momento angular em átomos.

Por volta dessa mesma época, um modelo prevalente para o átomo era o modelo de Bohr-Sommerfeld, uma extensão do modelo de Bohr que, como este, previa a existência de elétrons em órbitas quantizadas específicas, semelhantes a planetas orbitando o sol.

Diagrama do modelo de Bohr-Sommerfeld. Um ponto central representa o núcleo do átomo. Círculos ou elipses ao redor desse ponto representam os orbitais atômicos, muito semelhantes às órbitas planetárias ao redor do sol. As órbitas de maior energia estão mais afastadas do núcleo.

Embora, em última análise, esse tratamento se mostrasse insuficiente para explicar o comportamento quântico-mecânico do átomo, ele previa de forma geral muitos fenômenos observados, como as linhas espectrais discretas dos átomos. As órbitas quantizadas de elétrons com energias específicas correspondem a valores quantizados de momento angular. É esse momento angular orbital que Stern e Gerlach buscavam observar em seu experimento, embora o experimento se aplique a qualquer tipo de momento angular quantizado, incluindo o spin. Você pode ouvir frequentemente que o experimento de Stern-Gerlach é aplicado a spins. O foco do experimento original era no momento angular orbital simplesmente porque George Uhlenbeck e Samuel Goudsmit só teorizariam a existência do spin em 1925.

Independentemente do tipo de momento angular, uma carga com momento angular possui um momento magnético. No tratamento clássico do movimento orbital, esperaríamos que uma partícula de carga qq, massa mm e momento angular L\vec{L} tivesse um momento magnético μ\mu dado por

μ=q2mL\vec{\mu} = \frac{q}{2m}\vec{L}

Acontece que quase a mesma fórmula vale para o momento angular quântico-mecânico, com a ressalva de se adicionar uma razão numérica relacionada ao tipo de momento angular, chamada de fator-g gg. Ao combinar diferentes tipos de momento angular, ou ao generalizar para um tipo arbitrário, frequentemente se usa J\vec{J} no lugar de L\vec{L}, de modo que escrevemos:

μ=gq2mJ\vec{\mu} = \frac{gq}{2m}\vec{J}

Para objetos clássicos, g=1g=1. Para elétrons, g2g\approx 2, e existem muitos valores para vários núcleos e partículas subatômicas. O ponto principal aqui é que momento angular quantizado significa momento magnético quantizado!

Esse momento magnético experimentará um torque em um campo magnético:

τ=μ×B\vec{\tau}=\vec{\mu}\times \vec{B}

E experimentará uma força em um campo magnético com gradiente não nulo:

F=(μB)\vec{F} = \nabla(\vec{\mu}\cdot\vec{B})

Muitas vezes consideraremos a expressão acima componente por componente, portanto pode ser conveniente pensar na sua componente zz:

Fz=μzdBzdzF_z = \mu_z \frac{dB_z}{dz}

Combinando as expressões, podemos obter

Fz=gq2mdBzdzJzF_z = \frac{gq}{2m} \frac{dB_z}{dz} J_z

Stern e Gerlach não sabiam sobre o fator gg, mas mesmo com ele na expressão, temos uma força igual a várias constantes conhecidas ou mensuráveis vezes um momento angular. Assim, usando um campo magnético com um gradiente conhecido e medindo a deflexão de uma partícula ao passar pelo campo, devemos obter informações sobre o momento angular. Essa é a essência do experimento de Stern-Gerlach.

Átomos de prata viajando por um campo magnético inomogêneo e sendo defletidos para cima ou para baixo dependendo do seu spin. Classicamente, esperaríamos uma distribuição contínua na tela, mas no experimento vemos dois pontos distintos.

Fig. Experimento de Stern-Gerlach[1]: Átomos de prata viajando por um campo magnético inomogêneo e sendo defletidos para cima ou para baixo dependendo do seu spin. Classicamente, esperaríamos uma distribuição contínua na tela, mas no experimento vemos dois pontos distintos.

Átomos de prata neutros foram aquecidos em um forno. À medida que um feixe de átomos de prata saía do forno, colimadores de feixe eram usados para selecionar apenas os átomos que viajavam próximos ao centro do campo magnético inomogêneo. Claro, alguns átomos se desviam um pouco para a esquerda ou para a direita e experimentam um gradiente mais fraco do campo, ou nenhum gradiente. Por isso, não nos preocupamos demasiadamente com o comportamento de átomos muito à esquerda ou à direita. Estamos interessados no que acontece com os átomos que percorrem o centro do canal, onde o gradiente do campo magnético produzirá uma força que deflite os átomos apenas na direção zz.

O que esperaríamos classicamente?

Como esses átomos se comportariam se fossem exatamente como grandes ímãs clássicos? Você pode fazer o experimento. Imagine atirar pequenos ímãs de neodímio próximos a um grande ímã poderoso. A orientação dos pequenos ímãs é aleatória. Mas ao passarem pelo grande ímã, eles rapidamente se reorientam para se alinhar com o campo e são atraídos pelo grande ímã. A grande maioria dos pequenos ímãs é defletida em direção ao grande ímã. O observador mais atento pode questionar: "E a conservação de energia?"

De fato, um momento magnético em um campo magnético externo tem uma energia potencial associada a ele:

U=μB=μBcos(θ)U = -\vec{\mu}\cdot \vec{B} = -\mu B \cos(\theta)

Portanto, se um momento magnético rotacionasse no campo magnético externo, haveria uma variação de energia dada por:

ΔU=UfUi=μB(cos(θf)cos(θi)).\Delta U = U_f - U_i = -\mu B (\cos(\theta_f) - \cos(\theta_i)).

No caso especial de um pequeno ímã perfeitamente anti-alinhado com o campo externo que vira e se alinha com ele, isso corresponderia a uma diminuição na energia potencial:

ΔU=UfUi=μB(cos(0)cos(π))=2μB.\Delta U = U_f - U_i = -\mu B (\cos(0) - \cos(\pi)) = -2\mu B.

Então, para onde vai essa energia? Um ímã clássico como um pequeno ímã de neodímio de geladeira tem muitas partículas e pode dissipar praticamente qualquer quantidade de energia como calor. Os ângulos inicial e final entre o momento magnético e o campo magnético externo poderiam ser quaisquer valores, e pelo menos a orientação inicial seria aleatória. Portanto, uma quantidade diferente de energia seria dissipada como calor para cada pequeno ímã. Mas classicamente isso não é problema, pois um conjunto de partículas clássicas pode dissipar qualquer quantidade de energia como calor.

O que esperaríamos ao aplicar o pensamento clássico às escalas atômicas?

No mínimo, isso não é o mesmo para ímãs de escala atômica, porque há menos partículas em jogo, menos graus de liberdade pelos quais a energia pode ser dissipada. As propostas da mecânica quântica inicial sugeriram ainda que a energia que pode ser absorvida por uma partícula individual, como o elétron, seria quantizada, significando que um elétron só poderia absorver algumas quantidades específicas de energia. Como as orientações iniciais aleatórias exigiriam a dissipação de quantidades aleatórias de energia, isso não deveria ser possível para um sistema com níveis de energia quantizados. O excesso de energia não poderia ser dissipado como calor. O que aconteceria então?

Teste seu entendimento

Leia as perguntas abaixo, pense nas suas respostas e clique nos triângulos para revelar as soluções.

Explique o que você acha que aconteceria em uma situação como a descrita acima. Ou seja, você tem um ímã atomicamente pequeno que não pode dissipar nenhuma energia como calor. Assim, qualquer energia potencial magnética inicial deve permanecer no sistema. No entanto, um torque é aplicado por um campo magnético externo, que tenta girar o pequeno ímã para alinhá-lo com o campo externo. O que acontece?

Resposta:

O pequeno momento magnético giraria em direção ao alinhamento com o campo externo. Mas quando momentaneamente se alinhasse, teria energia cinética rotacional que o manteria girando além do campo e de volta ao desalinhamento. Esse comportamento pode ser visto até mesmo em grandes ímãs clássicos. Mas nesses sistemas clássicos, a oscilação do pequeno momento magnético eventualmente cessa à medida que a energia é dissipada como calor. Mas em um sistema sem esse mecanismo dissipativo, a oscilação deveria continuar indefinidamente.

Dado o comportamento esperado na resposta acima, que distribuição de partículas magnéticas você esperaria ver na tela?

Resposta:

Uma distribuição suave desde alguma deflexão máxima em direção ao lado mais forte do campo magnético (as partículas que por acaso começaram alinhadas com o campo externo) até alguma deflexão máxima em direção ao lado mais fraco do campo (as partículas que começaram anti-alinhadas com o campo externo), e todas as deflexões intermediárias, correspondendo a todas as orientações iniciais entre esses extremos.

Diagrama de um feixe de partículas passando por um ímã. Elas são defletidas em diferentes graus ao longo da direção do campo magnético. Assim, quando atingem uma tela distante, formam uma linha.

O que a mecânica quântica preveria?

Talvez a mais estranha de todas as possibilidades seja a seguinte: e se o momento angular do elétron fosse quantizado, mas também sua projeção em algum eixo fosse quantizada? A quantização do momento angular como uma magnitude é interessante, mas alguém poderia tentar argumentar através da intuição clássica, da forma como as órbitas planetárias se estabeleceram em trajetórias fixas que não se cruzam, tendo apenas certos momentos angulares permitidos. Mas e se esse vetor de momento angular só pudesse apontar exatamente ao longo de zz ou exatamente oposto a zz, mas não ter nenhuma outra componente ao longo de zz? E se então, ao ser medido ao longo de uma direção diferente, o vetor só pudesse apontar inteiramente ao longo de xx ou inteiramente oposto a xx, e nada entre esses extremos? Isso seria estranho de uma forma que confunde toda a intuição clássica.

Teste seu entendimento

Leia a pergunta abaixo, pense na sua resposta e clique no triângulo para revelar a solução.

Que tipo de distribuição de partículas em uma tela você esperaria encontrar nesse último caso, em que a projeção do momento angular ao longo da direção do campo é quantizada? Sinta-se à vontade para considerar apenas as partículas que passam perfeitamente pelo centro do dispositivo, ou incluir aquelas que se desviam levemente do centro para onde o gradiente é mais fraco. Apenas seja explícito.

Resposta:

As partículas no centro do dispositivo experimentariam um único campo inomogêneo e todas seriam medidas com uma de duas orientações para seus momentos magnéticos. Portanto, seriam defletidas ao máximo com o gradiente ou ao máximo contra o gradiente, e nada entre esses extremos. Claro, para os lados, onde o gradiente é mais fraco, a deflexão seria menor. Em posições laterais muito grandes, elas podem estar completamente fora do gradiente, e poderia haver apenas uma única região de partículas não defletidas.

Diagrama de um feixe de partículas sendo defletidas para cima ou para baixo, atingindo um de dois pontos na tela, sem partículas entre esses dois máximos

Como os qubits nos ajudarão a testar isso?

A maioria dos computadores quânticos usa "qubits" — os análogos quânticos dos bits clássicos. Mais especificamente, eles são projetados para ser sistemas de dois níveis, análogos aos estados "ligado"/"desligado" dos bits clássicos. Existem paradigmas de computação quântica que fazem uso de sistemas de três níveis (os chamados "qutrits") ou sistemas de muitos níveis (chamados de "qudits"). Mas a maior parte do trabalho é concentrada em qubits. Em particular, os computadores quânticos da IBM® usam o que são chamados de qubits transmon de frequência fixa. Esses são bem diferentes do momento angular orbital ou de spin de átomos. Mas, assim como o spin de um elétron, os qubits da IBM® são sistemas quântico-mecânicos que podem interagir com a luz e sobre os quais medições podem ser feitas. Na verdade, frequentemente encontramos analogias entre os estados do spin quântico-mecânico e os estados computacionais de um qubit. Por exemplo, frequentemente vemos o estado de "spin para cima" associado ao estado computacional 0, e o "spin para baixo" associado ao estado computacional 1:

0|\uparrow\rangle \sim |0\rangle 1|\downarrow \rangle \sim |1\rangle

Podemos usar essas semelhanças para observar comportamento quântico-mecânico em computadores quânticos da IBM que imita o comportamento quântico-mecânico do momento angular orbital ou de spin em átomos. Faremos observações semelhantes usando combinações lineares desses estados que nos permitem estender a discussão para o momento angular em qualquer direção.

Primeiro experimento: Uma única medição

Neste primeiro experimento e ao longo do módulo, usaremos uma estrutura para computação quântica conhecida como "padrões Qiskit", que divide os fluxos de trabalho nas seguintes etapas:

  • Etapa 1: Mapear entradas clássicas para um problema quântico
  • Etapa 2: Otimizar o problema para execução quântica
  • Etapa 3: Executar usando Qiskit Runtime Primitives
  • Etapa 4: Pós-processamento e análise clássica

Em geral seguiremos essas etapas, embora nem sempre as rotulemos explicitamente.

Etapa 1: Mapear entradas clássicas para um problema quântico

Aqui, as entradas clássicas são orientações de um spin antes da medição em um dispositivo de Stern-Gerlach. Não se preocupe muito com a natureza exata do estado quântico antes da medição. Esse é o assunto de um módulo diferente do Qiskit Classrooms, sobre o teorema de Bell.

Note que os computadores quânticos da IBM medem estados ao longo do eixo zz. Portanto, este primeiro experimento será muito semelhante ao experimento de Stern-Gerlach com o gradiente do campo magnético ao longo de zz. Veremos como alterar o sistema para medir ao longo de direções diferentes mais adiante.

Vamos começar criando o análogo de um estado de spin, ou seja, alguma mistura de |\uparrow\rangle e |\downarrow\rangle ou equivalentemente de 0|0\rangle e 1|1\rangle. Propusemos alguns valores iniciais, mas sinta-se à vontade para experimentar outros valores ou até mesmo valores aleatórios.

import random
from numpy import pi
import numpy as np

# Use these lines to choose your own arbitrary state vector and normalize it.
# a = 2
# b = (1+1j)
# norm = np.sqrt(a*np.conjugate(a)+b*np.conjugate(b))
# a = a/norm
# b = b/norm
# print(a,b)

# Use these lines if you would rather look at at random spin orientations.
a = random.random()
b = random.random()
norm = np.sqrt(a * np.conjugate(a) + b * np.conjugate(b))
a = a / norm
b = b / norm
print(a, b)
0.7032089086145691 0.7109832845047109

Agora usaremos os ângulos acima como parâmetros em um circuito quântico. Estamos considerando apenas uma partícula por vez, então usaremos apenas um qubit em nosso circuito e precisaremos de apenas um registrador clássico.

from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit, Parameter

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the quantum state
qc.initialize([a, b])
qc.measure(0, 0)
qc.draw("mpl")

Output of the previous code cell

Etapa 2: Otimizar o problema para execução quântica

Para executar nosso experimento em um computador quântico real, precisamos carregar o Qiskit Runtime Service e selecionar um computador quântico (ou um "backend"). Abaixo, simplesmente selecionamos o computador quântico menos ocupado disponível para nós.

Há código abaixo para salvar suas credenciais no primeiro uso. Certifique-se de deletar essa informação do notebook após salvá-la em seu ambiente, para que suas credenciais não sejam acidentalmente compartilhadas quando você compartilhar o notebook. Consulte Configure sua conta IBM Cloud e Inicialize o serviço em um ambiente não confiável para 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')

# Syntax for specifying a channel and instance (if you need to change from the default set above)
# service = QiskitRuntimeService(channel='<channel name here>', instance="<your instance name here>")

# Load saved credentials
service = QiskitRuntimeService()
# Load the Runtime primitive and session
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler

# Use the least busy backend, specify options as needed
# backend = service.least_busy(operational=True, simulator=False, min_num_qubits = 127)
backend = service.least_busy()
print(backend.name)
ibm_sherbrooke

Agora devemos transpilar o circuito, o que significa que devemos mapear nosso circuito nas portas básicas disponíveis no computador quântico escolhido e otimizar nosso circuito para execução nesse computador quântico.

# Transpile the circuit and optimize for running on the quantum computer selected
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
qc_ibm = pm.run(qc)

Etapa 3: Executar usando Qiskit Runtime Primitives

Agora queremos executar isso em um computador quântico real. Toda a sintaxe necessária para isso está no bloco de código abaixo. Se você esgotou seu tempo alocado em computadores quânticos reais, ou se estiver sem conexão com a internet, você pode descomentar o próximo bloco de código, que executará o código em um simulador local.

# Specify that we want to use only a single shot, to represent a single measurement of a spin in a SG device.
num_shots = 1

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# from qiskit_ibm_runtime import Batch,
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

Use o código abaixo se não for possível executar o experimento em um computador quântico real.

# This uses a local simulator
# from qiskit_aer import AerSimulator

# This generates a simulator that mimics the real quantum system
# backend_sim = AerSimulator.from_backend(backend)

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend = backend_sim)

# num_shots = 1

# This runs the job
# dist = sampler.run([qc_ibm], shots = num_shots).result()

# This selects measurement counts for the 0th circuit, which in this case is the only circuit
# counts=dist[0].data.c.get_counts()

Etapa 4: Pós-processamento e análise clássica

Para este experimento muito simples, a análise clássica consiste apenas em visualizar o resultado experimental.

from qiskit.visualization import plot_histogram

print("counts = ", counts)
plot_histogram(counts)
counts =  {'0': 1}

Output of the previous code cell

Fizemos uma medição e obtivemos "0". Isso não é surpresa para nós. Sabemos que estamos usando um computador quântico composto de qubits e estamos muito acostumados com bits clássicos retornando 0 ou 1. Mas tenha em mente: este é o análogo de computação quântica dos experimentos feitos com partículas com momentos magnéticos. Se tivéssemos esperado uma distribuição uniforme entre 0 e +1, poderíamos de fato ter ficado surpresos ao obter um extremo em nossa primeira medição. É essa surpreendente quantização dos resultados no experimento de Stern-Gerlach que nos levou a uma melhor compreensão da natureza, e que por sua vez nos ajudou a eventualmente construir computadores quânticos.

Vamos ver o que acontece quando fazemos um conjunto de medições.

Segundo experimento: Medindo muitas partículas

Para coletar estatísticas de várias medições desse tipo, não precisamos repetir as etapas 1 e 2. Podemos simplesmente aumentar o número de shots no nosso experimento. Fique à vontade para ajustar o número de shots na instância da etapa 3 abaixo.

from qiskit_ibm_runtime import Session, SamplerV2 as Sampler

num_shots = 100

# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()

# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()

Como antes, se você não conseguir executar em um computador quântico real, descomente o bloco acima do primeiro experimento e simplesmente altere num_shots = 1 para num_shots = 100 ou mais.

plot_histogram(counts)

Output of the previous code cell

Vemos que às vezes medimos 0 e às vezes medimos 1. Note que nunca medimos nada diferente disso! Você pode alterar o número de shots e perceber que a probabilidade de medir 0 ou 1 parece ser bastante consistente entre execuções diferentes com números diferentes de shots. Portanto, algo na preparação do estado parece estar determinando a probabilidade dos resultados da medição, embora qualquer medição individual possa produzir 0 ou 1.

Terceiro experimento: Spins aleatórios em um forno

No experimento de Stern-Gerlach, os pesquisadores não podiam especificar o ângulo com o qual um vetor de momento angular emergiria do forno. As orientações eram aleatórias (ou algo ainda mais misterioso! Veja o módulo Qiskit Classroom sobre o teorema de Bell). Um análogo razoável daquele experimento seria inicializar aleatoriamente os estados do nosso qubit e realizar medições muitas vezes.

Etapa 1: Mapear as entradas clássicas para um problema quântico

O circuito que queremos construir é o mesmo de antes. A única diferença é que, desta vez, construiremos o circuito usando portas com parâmetros livres θ\theta e ϕ\phi. Valores numéricos para esses parâmetros serão atribuídos a cada nova execução.

# from qiskit.circuit import QuantumCircuit, Parameter

theta = Parameter("θ")
phi = Parameter("$\phi$")

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add rotation gates for rotating the state of qubit 0 to random orientations
qc.rx(theta, 0)
qc.rz(phi, 0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

Executar um circuito quântico com apenas um único shot e fazê-lo para muitas configurações aleatórias é um fluxo de trabalho incomum para um computador quântico. Isso certamente pode ser feito, mas para simplificar, usaremos um simulador local aqui.

# This uses a local simulator
from qiskit_aer import AerSimulator

# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
from qiskit.primitives import BackendSamplerV2

# This generates a simulator that mimics the real quantum system
backend_sim = AerSimulator.from_backend(backend)
sampler_sim = BackendSamplerV2(backend=backend_sim)

# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend=backend)
# A list to store the accumulated probabilities of the two possible measurement outcomes.
probslist = {"0": 0.0, "1": 0.0}

# Choose how many "particles"/measurements
measurements = 100
num_shots = 1

for i in range(measurements):
# Assign a random orientation for each measurement
phi = random.random() * 2 * pi
theta = random.random() * 2 * pi

angles = [phi, theta]
circuit = qc.assign_parameters(angles)
qc_ibm = pm.run(circuit)

# Run the circuit
# job = sampler.run([circuit],num_shots = 1)
dist = sampler_sim.run([qc_ibm], shots=num_shots).result()

# Update the list of probabilities
zeroterm = dist[0].data.c.get_counts().get("0") or 0
oneterm = dist[0].data.c.get_counts().get("1") or 0
probslist.update({"0": probslist.get("0") + zeroterm})
probslist.update({"1": probslist.get("1") + oneterm})

probslist.update({"0": probslist.get("0") / measurements})
probslist.update({"1": probslist.get("1") / measurements})
# print(probslist)
plot_histogram(probslist)

Output of the previous code cell

Assim, vemos que o estado inicial aleatório dos qubits (correspondendo a orientações aleatórias do momento angular em um experimento de Stern-Gerlach) produz números semelhantes de estados 0 e 1 (como números semelhantes de estados de spin para cima e spin para baixo). É exatamente isso que o experimento original de Stern-Gerlach demonstrou.

Quarto experimento: Medições repetidas

Quando um qubit começa em um estado aleatório, vemos que há uma chance de aproximadamente 50-50 de medir um extremo ou o outro. Mas o que acontece com o estado do qubit (ou com o momento angular da partícula) após a medição? Para responder a isso, precisaremos definir um circuito que nos permita fazer várias medições do mesmo qubit. Vamos definir um circuito que possamos usar para investigar isso. Queremos permitir a possibilidade de medir os estados 0|0\rangle e 1|1\rangle, portanto precisamos de algo para rotacionar o estado inicial do qubit a partir do estado padrão 0|0\rangle. Neste caso, usaremos uma porta Hadamard HH, pois H0=12(0+1)H|0\rangle = \frac{1}{\sqrt{2}}(|0\rangle+|1\rangle). Note que, por padrão, ambas as medições serão ao longo de zz.

from qiskit import QuantumCircuit

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Initialize the qubit to be a mixture of 0 and 1 states.
qc.h(0)

# Add a first measurement
qc.measure(0, 0)
qc.barrier()

# Add a second measurement
qc.measure(0, 1)

qc.draw("mpl")

qc_ibm = pm.run(qc)
# Step 3: Run the job

num_shots = 1000
dist = sampler.run([qc_ibm], shots=num_shots).result()
# To run on a simulator, uncomment the line below and comment out the line above.
# dist = sampler_sim.run([qc_ibm], shots=num_shots).result()
counts = dist[0].data.c.get_counts()
print(counts)
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)

Output of the previous code cell

Na figura acima, os bins são rotulados como "00", "01" e assim por diante. Aqui, esses números se referem a "2º resultado, 1º resultado". Portanto, "00" significa que ambas as medições produziram o estado 0|0\rangle, e "01" significa que a primeira medição produziu 1|1\rangle e a segunda produziu 0|0\rangle. A grande maioria dos qubits foi medida no estado 0|0\rangle duas vezes, ou medida como 1|1\rangle duas vezes. Foi muito raro que qubits fossem medidos em um estado e depois no outro, e os poucos casos em que isso ocorreu (~1%) se devem a ruído. Nesse caso, esse ruído foi simulado de acordo com o comportamento do sistema quântico real. Essa correlação observada entre medições sucessivas também é observada em medições do tipo Stern-Gerlach de partículas com momento angular de spin. Se uma partícula é medida como "spin para cima", uma medição subsequente logo depois produzirá novamente "spin para cima" (exceto por uma pequena variação devida ao ruído).

Isso pode parecer trivial. Afinal, se um qubit é medido em um estado e eu o meço novamente, rapidamente, por que não estaria ainda nesse estado? Mas se realmente nos fixarmos nessa sutileza, ela pode nos ajudar a escolher algumas ferramentas matemáticas para descrever esse fenômeno.

Análise dos experimentos até agora

Vamos reunir algumas observações dos nossos experimentos até agora:

  • A medição de um sistema mecânico quântico produzirá apenas um de um conjunto de "valores permitidos". Para sistemas de dois níveis, como qubits ou partículas de spin-1/2, uma medição produzirá apenas um dos resultados binários.
  • Quando inicializamos aleatoriamente o estado do nosso sistema binário (como partículas de spin-1/2 emergindo de um forno), qualquer um dos resultados binários de medição é possível.
  • Uma vez que uma medição é feita e o estado do sistema é conhecido, repetir a medição do mesmo observável físico não muda o estado! Ou seja, se obtivermos o estado 0 uma vez, ao medir novamente ele ainda estará no estado 0 (exceto por um pequeno ruído no sistema de ~0,1% a 1%).

Note explicitamente que ainda não abordamos a natureza probabilística da mecânica quântica, nem dissemos nada sobre o "colapso" do estado para um autoestado. Usando apenas as observações acima, pode ser tentador buscar uma operação matemática OO que deixe algum conjunto especial de estados mecânicos quânticos ψ|\psi\rangle inalterado, exceto talvez por uma constante: Oψ=cψO|\psi\rangle = c|\psi \rangle, já que medir ao longo de zz duas vezes produz o mesmo resultado. Em última análise, essa busca falhará em descrever todos os comportamentos que veremos. Mas ela pode descrever algumas coisas, então vamos segui-la um pouco mais.

Existe tal operação. A operação de uma matriz sobre alguns vetores os modifica, e a operação de uma matriz sobre outros vetores (autovetores) deixa o vetor inalterado, exceto por uma constante. Tome como exemplo a matriz MM e o vetor v|v\rangle onde

M=(1221)M= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}

e

v=(11)|v\rangle = \begin{pmatrix} 1\\1 \end{pmatrix}

Note que

Mv=(1221)(11)=(11+2121+11)=(33)=3v.M|v\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\1 \end{pmatrix} = \begin{pmatrix} 1*1+2*1\\2*1+1*1 \end{pmatrix} = \begin{pmatrix} 3\\3 \end{pmatrix} = 3|v\rangle.

Mas para outros vetores, digamos v=(12)|v'\rangle = \begin{pmatrix} 1\\2\end{pmatrix}, temos

Mv=(1221)(12)=(11+2221+12)=(54)cv.M|v'\rangle= \begin{pmatrix} 1 & 2 \\ 2 & 1\end{pmatrix}\begin{pmatrix} 1\\2 \end{pmatrix} = \begin{pmatrix} 1*1+2*2\\2*1+1*2 \end{pmatrix} = \begin{pmatrix} 5\\4 \end{pmatrix} \neq c|v'\rangle.

Poderíamos tentar descrever o spin de uma partícula usando uma matriz, e poderíamos tentar descrever os estados das partículas após a medição usando um vetor, chamado de "vetor de estado". Não é nada óbvio quais valores deveriam estar em tal matriz ou vetor de estado, mas a única propriedade que temos das medições até agora que poderíamos usar para rotular os estados seria a probabilidade de medir 0 ou 1 ("spin para cima" ou "spin para baixo" no contexto de partículas de spin-1/2). Devemos considerar que as entradas nos vetores de estado devem estar relacionadas a essa probabilidade (exatamente a probabilidade, "amplitude de probabilidade" — ou seja, elevamos a entrada ao quadrado para obter a probabilidade, e assim por diante). Mas neste ponto, não temos certeza se as entradas nessas matrizes devem ser estritamente reais, complexas ou outra coisa. Para nos precavermos, vamos tentar desenvolver um framework no qual os vetores e matrizes satisfaçam o seguinte:

  • Os operadores matriciais devem estar conectados ao experimento tanto quanto possível. Por exemplo, poderíamos associar os autovalores de uma matriz de spin com as projeções de spin observadas experimentalmente.
  • Os vetores de estado devem estar conectados à probabilidade da seguinte forma: se uma partícula está no vetor de estado A|A\rangle, a probabilidade de que uma medição subsequente encontre a partícula no estado B|B\rangle é PABAB2P_{AB}\equiv |\langle A| B \rangle|^2.

Isso nos dá uma enorme liberdade para desenvolver nossas primeiras matrizes. Por exemplo, poderíamos ingenuamente tentar

0(10).|0\rangle \sim |\uparrow\rangle \sim \begin{pmatrix} 1 \\0 \end{pmatrix}.

Aqui, 0|0\rangle \sim |\uparrow\rangle significa que existem estados em computadores quânticos e em sistemas de spin-1/2 que são muito similares e frequentemente mapeados entre si. Obviamente não são exatamente a mesma coisa, pois se referem a sistemas diferentes. Mas a álgebra que descreve esses sistemas de dois estados poderia obedecer às mesmas regras (spoiler: elas obedecem!). Note que essa escolha aleatória já tem um atributo interessante. Note que

P00=002=(10)(10)2=12=1.P_{00} = |\langle 0| 0 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} 1 \\ 0\end{pmatrix}\vert ^2 = |1|^2 = 1.

Ou seja, se uma partícula já está no estado 0|0\rangle, a probabilidade de que uma medição subsequente também produza 0|0\rangle é 1 (excluindo efeitos de ruído). Isso é excelente, pois já vimos que uma vez que um estado está no estado 0 ou "spin para cima", ele permanece lá em medições subsequentes. A probabilidade acima deveria de fato ser 100%.

Verifique seu entendimento

Leia as perguntas abaixo, pense nas suas respostas e clique nos triângulos para revelar as soluções.

Por que

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

é uma escolha melhor do que, digamos,

0=(20)?|0\rangle = \begin{pmatrix} 2 \\0 \end{pmatrix}?

Resposta:

Nossa tentativa de associar a probabilidade de uma medição com o quadrado do produto interno significa que precisamos que a magnitude de cada vetor seja 1. Ou seja, vv2=1|\langle v|v\rangle|^2 = 1 para todo v|v\rangle, pois a probabilidade de algo no estado v|v\rangle estar no estado v|v\rangle é 100%. Isso é conhecido como a "condição de normalização".

Por que

0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}

é uma escolha melhor do que, digamos,

0=(01)?|0\rangle = \begin{pmatrix} 0 \\1 \end{pmatrix}?

Resposta:

Não é. Não há razão pela qual precisamos escolher inicialmente 0=(10)|0\rangle = \begin{pmatrix} 1 \\0 \end{pmatrix}. Na verdade, é uma convenção. No entanto, uma vez que fazemos essa escolha, ela impõe certas restrições nas escolhas subsequentes. Veja abaixo.

Lembre-se de que nos experimentos acima, descobrimos que um qubit inicialmente no estado 0|0\rangle permanecia nesse estado em medições subsequentes. O mesmo vale para 1|1\rangle. Isso significa que um qubit que está em 0|0\rangle tem probabilidade zero de ser medido no estado 1|1\rangle (excluindo os efeitos do ruído). Nossa conexão exigida entre produtos internos e probabilidades de medições nos diz então que

P01=P10=0.P_{01} = P_{10}=0.

Sem perda de generalidade, podemos escrever o vetor de estado 1=(ab)|1\rangle = \begin{pmatrix} a \\ b \end{pmatrix}. Então podemos escrever

P01=012=(10)(ab)2=a2=0.P_{01} = |\langle 0| 1 \rangle|^2 = \vert \begin{pmatrix} 1 & 0\end{pmatrix} \begin{pmatrix} a \\ b\end{pmatrix}\vert ^2 = |a|^2 = 0.

A exigência de que P11=1P_{11} = 1, a chamada "condição de normalização", nos diz que b2=1|b|^2=1. Isso por si só realmente nos limita apenas a b=eiϕb=e^{i\phi} para ϕR\phi \in \mathbb{R}. Acontece que existem outras razões para escolher b=1b=1 que estão além desta introdução ao tema. Por ora, basta que b=1b=1 é uma solução aceitável.

Chegamos bem longe em nossa análise. Escolher uma forma para nossos vetores de estado nos permite construir uma matriz que descreve algo sobre os fenômenos físicos em questão. Em particular, como o experimento original de Stern-Gerlach mediu uma separação de trajetórias baseada nas componentes do momento angular de spin ao longo do eixo zz, gostaríamos de um operador que descreva exatamente isso: SzS_z. Outra conexão chave com o experimento é que, a partir da quantidade de deflexão, do tempo de viagem e da intensidade do campo magnético conhecido, podemos determinar a magnitude da componente zz do spin. Embora isso exija muitas suposições sobre a precisão da configuração experimental, aqui simplesmente reiteraremos que as componentes zz medidas do momento angular de spin são ±/2\pm \hbar/2.

Portanto, estamos buscando uma matriz com autovalores reais (satisfeita por matrizes Hermitianas) com autovalores correspondentes a essas componentes de spin observadas experimentalmente. Sem perda de generalidade, podemos escrever Sz=(s11s12s21s22)S_z = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}, e podemos exigir:

Sz=(s11s12s21s22)(10)=(s11s21)=!2(10)s11=/2,s21=0S_z |\uparrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}1 \\0\end{pmatrix} = \begin{pmatrix} s_{11} \\ s_{21} \end{pmatrix} \overset{!}{=} \frac{\hbar}{2} \begin{pmatrix}1 \\0\end{pmatrix} \rightarrow s_{11} = \hbar/2,s_{21}=0 Sz=(s11s12s21s22)(01)=(s12s22)=!2(01)s12=0,s22=/2S_z |\downarrow\rangle = \begin{pmatrix} s_{11} & s_{12} \\ s_{21} & s_{22}\end{pmatrix}\begin{pmatrix}0 \\1\end{pmatrix} = \begin{pmatrix} s_{12} \\ s_{22} \end{pmatrix} \overset{!}{=} -\frac{\hbar}{2} \begin{pmatrix}0 \\1\end{pmatrix} \rightarrow s_{12} = 0, s_{22}=-\hbar/2

Combinando e fatorando o fator global de /2\hbar/2, temos

Sz=2(1001).S_z = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

Este é o conhecido operador spin-z encontrado em todos os livros de mecânica quântica. Muitas vezes o vemos sem o /2\hbar/2; nesse caso, é o operador "Pauli-z", tipicamente denotado σz\sigma_z:

σz=(1001).\sigma_z = \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix}.

Isso é útil, pois esse operador de Pauli (e matrizes relacionadas) pode descrever muitos sistemas físicos envolvendo dois níveis ou dois resultados possíveis de medição, incluindo estados de qubits transmon em um computador quântico.

Antes de passarmos a outros operadores e estados relacionados a este, devemos abordar um fato que muitas pessoas entendem errado. A ação de um operador não é o mesmo que uma medição. Em certo sentido, você poderia dizer: "É claro que não! Uma ocorre no papel como parte de um cálculo matemático, e a outra ocorre em um laboratório sobre sistemas físicos." Sim, isso é verdade, mas é mais do que isso. Fazer uma medição da componente zz do spin sempre produzirá um estado "spin para cima" ou "spin para baixo", independentemente do estado inicial do sistema. Vimos isso com os análogos de computação quântica 0|0\rangle e 1|1\rangle. Inicializamos estados em centenas de orientações aleatórias, e as medições sempre produziram 0|0\rangle ou 1|1\rangle. Isso é conhecido como a medição "colapsando o estado" para um autoestado. Isso não acontece quando você aplica uma matriz a um estado. Tente as perguntas abaixo para explorar isso.

Verifique seu entendimento

Leia a(s) pergunta(s) abaixo, pense na sua resposta e clique no triângulo para revelar a solução.

Suponha que você começa com uma partícula em um estado de spin

ψ=(3/52/5).|\psi\rangle = \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}.

(a) O que você obtém se aplicar o operador SzS_z a esse vetor de estado? (b) O que você obtém se fizer uma única medição da componente zz do spin dessa partícula? (c) O que você obtém se preparar muitas partículas idênticas a esse estado e realizar milhares de medições da componente zz do spin?

Respostas:

(a) Você obtém

Szψ=2(1001)(3/52/5)S_z |\psi\rangle = \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & -1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}=2(3/52/5).= \frac{\hbar}{2} \begin{pmatrix}\sqrt{3/5} \\ -\sqrt{2/5}\end{pmatrix}.

É só isso. Não há resultado experimental. Você apenas aplica a matriz ao vetor e obtém um vetor ligeiramente diferente, que agora tem um sinal "-" novo, e não tem mais magnitude 1, pois tem um pré-fator /2\hbar/2.

(b) Você obterá |\uparrow\rangle ou |\downarrow\rangle. Isso corresponde a observar uma projeção do spin no eixo zz de /2\hbar/2 ou /2-\hbar/2, respectivamente. Podemos também determinar a probabilidade de cada resultado, pois

Pψ=ψ2=(10)(3/52/5)2=3/52=35P_{\uparrow\psi}=|\langle \uparrow|\psi\rangle|^2 = \vert \begin{pmatrix}1 & 0\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{3/5}|^2 = \frac{3}{5}Pψ=ψ2=(01)(3/52/5)2=2/52=25P_{\downarrow\psi}=|\langle \downarrow|\psi\rangle|^2 = \vert \begin{pmatrix}0 & 1\end{pmatrix} \begin{pmatrix}\sqrt{3/5} \\ \sqrt{2/5}\end{pmatrix}\vert^2 = |\sqrt{2/5}|^2 = \frac{2}{5}

Portanto, embora o estado spin para cima seja 20% mais provável, qualquer resultado é possível, e obteremos apenas um desses dois estados.

(c) Aproximadamente 60% das medições produzirão partículas com spin para cima, e aproximadamente 40% das medições produzirão partículas com spin para baixo, de acordo com as probabilidades de medição calculadas na parte (b).

Verifique as respostas das partes (b) e (c) da pergunta anterior usando a analogia entre estados de spin para cima de um átomo e estados de qubit:

0.|\uparrow\rangle\sim|0\rangle.

Programe circuitos quânticos para criar o estado inicial desejado e, em seguida, use hardware real ou um simulador para verificar os resultados de uma única medição e a partir de um conjunto de centenas ou até milhares de medições.

Resposta:

#Use the backend sampler for part (b) because it allows us to use a single shot.
from qiskit_aer import AerSimulator
backend_sim = AerSimulator.from_backend(backend)
from qiskit.primitives import BackendSampler
sampler = BackendSampler(backend = backend_sim)

#Create a quantum circuit to initialize the state.
import math
psi = [math.sqrt(3/5),math.sqrt(2/5)]
qc = QuantumCircuit(1,1)
qc.initialize(psi, [0])

#Add measurement to the circuit
qc.measure(0,0)
qc.draw('mpl')

#Set num_shots =1 for part (b) and num_shots = 1000 or more for part (c).
num_shots = 1000

#Run the job and print the result. You should obtain only 0 or 1 in part (b) for a single shot.
#You should obtain a probability distribution with approximately 60% 0 and 40% 1 in part (c)

dist = sampler.run([qc_ibm], shots = num_shots).result()
counts=dist[0].data.c.get_counts()
print(counts)

#You should obtain {0: 599, 1: 401} or something equivalently close to the 60%-40% distribution predicted.

Quinto experimento: Medindo diferentes observáveis

Até agora, fizemos medições apenas ao longo do eixo z. Em um experimento de Stern-Gerlach, se quiséssemos medir ao longo do eixo x, por exemplo, bastaria orientar o campo magnético não-homogêneo na direção do eixo xx e observar as deflexões ao longo de xx na tela. Os computadores quânticos da IBM, porém, são projetados para realizar medições em apenas um eixo (zz). Para medir um estado ao longo de xx, é necessário realizar uma "mudança de base". Isso significa que precisamos realizar uma operação que leve os estados ao longo de xx na esfera de Bloch para zz, e vice-versa. Existem algumas formas de implementar isso, mas a abordagem preferida é a porta Hadamard:

H=12(1111)H=\frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}

Verifique seu entendimento

Leia a(s) pergunta(s) abaixo, pense na sua resposta e clique no triângulo para revelar a solução.

Mostre que H0=+xH|0\rangle = |+\rangle_x e que H+x=0H|+\rangle_x = |0\rangle

Resposta:

H0=12(1111)(10)=12(11)=+xH|0\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}1 \\ 0\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = |+\rangle_xH+x=1(2)(1111)12(11)=12(20)=(10)=0H|+\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}2 \\ 0\end{pmatrix} = \begin{pmatrix}1 \\ 0\end{pmatrix} = |0\rangle

Mostre que H1=xH|1\rangle = |-\rangle_x e que Hx=1H|-\rangle_x = |1\rangle

Resposta:

H1=12(1111)(01)=12(11)=xH|1\rangle = \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\begin{pmatrix}0 \\ 1\end{pmatrix} = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = |-\rangle_xHx=1(2)(1111)12(11)=12(02)=(01)=1H|-\rangle_x = \frac{1}{\sqrt(2)}\begin{pmatrix}1 & 1 \\ 1 & -1\end{pmatrix}\frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} = \frac{1}{2}\begin{pmatrix}0 \\ 2\end{pmatrix} = \begin{pmatrix}0 \\ 1\end{pmatrix} = |1\rangle
# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add a hadamard gate to rotate into the x-basis
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

Este circuito rotaciona nosso sistema de forma que as medições (ao longo de zz) nos forneçam informações sobre as características em xx anteriores à rotação. Já sabemos que o computador quântico inicializa os estados em 0|0\rangle, o que corresponde a |\uparrow\rangle. Vamos ver o que acontece quando medimos a projeção do spin ao longo de xx para um estado inicialmente em |\uparrow\rangle. Mostramos esse passo em um simulador para encorajar você a explorar as estatísticas de outros circuitos com diferentes inicializações.

from qiskit.primitives import StatevectorSampler as Sampler

sampler_sv = Sampler()

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'1': 4977, '0': 5023}

Isso nos mostra que, para um qubit inicialmente em 0|0\rangle (ou equivalentemente, um spin em |\uparrow\rangle), a probabilidade de medir uma projeção ao longo de +x+x ou x-x é aproximadamente 50-50. De certa forma, isso faz todo sentido. Afinal, se algo estivesse apontando na direção z, não teria nenhuma preferência particular por ±x\pm x. Poderíamos esperar o mesmo se começarmos com o estado 1|1\rangle (ou |\downarrow\rangle). Vamos verificar:

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)

# Add a NOT gate and hadamard gate. Measure.
qc.x(0)
qc.h(0)
qc.measure(0, 0)

qc.draw("mpl")

Output of the previous code cell

job = sampler_sv.run([qc], shots=10000)
print(job.result()[0].data.c.get_counts())
{'0': 4935, '1': 5065}

Sim! Novamente, encontramos uma probabilidade de 50-50 de medir projeções ao longo de ±x\pm x. Por analogia com as medições ao longo de zz, podemos suspeitar ainda que uma partícula que colapsa para um estado definitivamente ao longo de +x+x tenha probabilidade zero de ser medida posteriormente ao longo de x-x. Vamos verificar:

from qiskit import QuantumCircuit

# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)

# Rotate into x-basis using a Hadamard gate, then make two measurements in succession
qc.h(0)
qc.measure(0, 0)
qc.barrier()
qc.measure(0, 1)

qc.draw("mpl")

Output of the previous code cell

job = sampler_sv.run([qc])
print(job.result()[0].data.c.get_counts())
plot_histogram(job.result()[0].data.c.get_counts())
{'00': 504, '11': 520}

Output of the previous code cell

Como esperado, obtemos resultados em que a projeção está ao longo de +x+x e, posteriormente, novamente ao longo de +x+x; e também resultados em que a projeção está inicialmente ao longo de x-x e, mais tarde, novamente ao longo de x-x. Não observamos casos em que a projeção muda de +x+x para x-x ou vice-versa. Podemos reunir nossas observações e utilizá-las para desenvolver mais operadores na forma matricial e mais vetores de estado.

Sabemos que:

  • Estados com projeções definidas ao longo de +z+z ou z-z têm 50% de chance de serem encontrados com projeção ao longo de +x+x e 50% de chance de terem projeção ao longo de x-x.
  • Estados com projeção definida ao longo de +x+x têm probabilidade zero de serem encontrados posteriormente com projeção ao longo de x-x, e vice-versa.

Podemos usar esses resultados para construir estados com projeção definida e positiva ao longo de xx (que chamamos de +x|+x\rangle), e aqueles com projeção definida e negativa ao longo de xx (que chamamos de x|-x\rangle). A partir desses estados, podemos construir a matriz correspondente a SxS_x, exatamente como fizemos para SzS_z. Deixamos esses pontos como exercícios para o(a) estudante. Da mesma forma, é possível construir experimentos realizando medições ao longo do eixo yy, determinar os vetores para +y|+y\rangle e y|-y\rangle, e por fim obter uma expressão para SyS_y.

Reunindo todos esses vetores e matrizes, temos

+x=12(11)x=12(11)Sx=2(0110)+y=12(1i)y=12(1i)Sy=2(0ii0)+z=(10)z=(01)Sz=2(1001)\begin{aligned} |+x\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ 1\end{pmatrix} & \: & |-x\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix} & \: &S_x &=& \frac{\hbar}{2} \begin{pmatrix} 0 & 1 \\ 1 & 0\end{pmatrix}\\ |+y\rangle &= \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ i\end{pmatrix} & \: & |-y\rangle &=& \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -i\end{pmatrix} & \: &S_y &=& \frac{\hbar}{2} \begin{pmatrix} 0 & -i \\ i & 0\end{pmatrix}\\ |+z\rangle &= \begin{pmatrix}1 \\ 0\end{pmatrix} & \: &|-z\rangle &=& \begin{pmatrix}0 \\ 1\end{pmatrix} & \: &S_z &=& \frac{\hbar}{2} \begin{pmatrix} 1 & 0 \\ 0 & 1\end{pmatrix}\\ \end{aligned}

Questões

Os(as) instrutores(as) podem solicitar versões destes notebooks com gabarito e orientações sobre a inserção em currículos comuns preenchendo esta pesquisa rápida sobre como os notebooks estão sendo utilizados.

Conceitos fundamentais:

  • Para uma partícula de spin-1/2, uma medição da projeção do spin em algum eixo só pode produzir um de dois resultados, geralmente chamados de "para cima" e "para baixo".
  • Qubits só podem ser medidos em um de dois estados, frequentemente referidos como 0|0\rangle e 1|1\rangle.
  • Podemos modelar o experimento de Stern-Gerlach em partículas de spin-1/2 usando qubits em um computador quântico.
  • Medições repetidas do mesmo observável físico da mesma partícula/qubit produzirão o mesmo resultado (a menos que o sistema seja perturbado por ruído).
  • Podemos usar os resultados do experimento de Stern-Gerlach ou dos experimentos análogos com computadores quânticos para derivar um sistema de vetores de estado e operadores matriciais que descrevem o spin quântico-mecânico.

Questões V/F:

  1. V/F Partindo de observações experimentais, a única escolha válida de vetor para representar |\uparrow\rangle é (10)\begin{pmatrix}1 \\ 0\end{pmatrix}
  2. V/F Se =(10)|\uparrow\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix}, a única escolha para |\downarrow\rangle é (01)\begin{pmatrix}0 \\ 1\end{pmatrix} (a menos de uma fase global).
  3. V/F Uma partícula medida no estado 0|0\rangle continuará a ser encontrada no estado 0|0\rangle em medições subsequentes ao longo de zz.
  4. V/F Uma partícula medida no estado 0|0\rangle continuará a ser encontrada no estado 0|0\rangle em medições subsequentes ao longo de xx.
  5. V/F Uma partícula medida no estado 0|0\rangle sempre será encontrada no estado +x|+\rangle_x em medições subsequentes ao longo de xx.

Questões de múltipla escolha:

  1. Uma partícula inicialmente em |\uparrow\rangle tem qual probabilidade de ser medida no estado +x|+x\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  2. Uma partícula inicialmente em |\uparrow\rangle tem qual probabilidade de ser medida no estado |\downarrow\rangle?

    • a. 0%
    • b. 25%
    • c. 50%
    • d. 71%
    • e. 100%
  3. O estado |\uparrow\rangle de uma partícula de spin-1/2 é mais comumente associado a qual estado de computação quântica?

    • a. +|+\rangle
    • b. |-\rangle
    • c. 0|0\rangle
    • d. 1|1\rangle
    • e. Nenhuma das alternativas acima

Questões para discussão:

  1. Três amigos estão discutindo medições e operadores quânticos. O Amigo A diz: "Fazer uma medição ao longo de zz e atuar com o operador σz\sigma_z são a mesma coisa." O Amigo B diz: "Bem, são procedimentos diferentes, mas têm o mesmo resultado." O Amigo C diz: "São completamente diferentes; eles até têm efeitos diferentes na maioria dos estados." Com quem você concorda e por quê?

Problemas de resposta dissertativa:

  1. Dadas as observações experimentais e a sintaxe proposta:

P+x=(10)(ab)2=a2=12P_{\uparrow+x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} P+x=(01)(ab)2=b2=12P_{\downarrow+x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

mostre que, a menos de uma fase global,

+x=12(1eiα)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ e^{i\alpha}\end{pmatrix}

Escolha α=0\alpha = 0 para obter o resultado padrão.

  1. Dadas as observações experimentais e a sintaxe proposta:

Px=(10)(ab)2=a2=12P_{\uparrow-x}=\vert \begin{pmatrix}1 & 0\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |a|^2 =\frac{1}{2} Px=(01)(ab)2=b2=12P_{\downarrow-x}=\vert \begin{pmatrix}0 & 1\end{pmatrix}\begin{pmatrix}a \\ b\end{pmatrix}\vert^2 = |b|^2 =\frac{1}{2}

E usando o resultado do problema-desafio 3:

P+xx=12(11)(cd)2=12c+d2=0P_{+x-x}=\vert \frac{1}{\sqrt{2}}\begin{pmatrix}1 & 1\end{pmatrix}\begin{pmatrix}c \\ d\end{pmatrix}\vert^2 = \frac{1}{2}|c+d|^2 =0

mostre que, a menos de uma fase global,

+x=12(11)|+\rangle_x = \frac{1}{\sqrt{2}}\begin{pmatrix}1 \\ -1\end{pmatrix}

Agradecimentos

[1] By Tatoute - Own work, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=34095239