Aller au contenu principal

Les pièces quantiques — un module sur la superposition et l'interférence

Pour ce module Qiskit en classe, les étudiants doivent disposer d'un environnement Python fonctionnel avec les packages suivants installés :

  • qiskit v2.1.0 ou plus récent
  • qiskit-ibm-runtime v0.40.1 ou plus récent
  • qiskit-aer v0.17.0 ou plus récent
  • qiskit.visualization
  • numpy
  • pylatexenc

Pour configurer et installer les packages ci-dessus, consulte le guide Installer Qiskit. Pour exécuter des jobs sur de vrais ordinateurs quantiques, les étudiants devront créer un compte IBM Quantum® en suivant les étapes du guide Configurer ton compte IBM Cloud.

Ce module a été testé et a utilisé 47 secondes de temps QPU. Il s'agit d'une estimation uniquement. Ton utilisation réelle peut varier.

# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit 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'

Regarde la présentation du module par Dr. Katie McCormick ci-dessous, ou clique ici pour la visionner sur YouTube.


Introduction

Dans ce module, nous allons explorer l'un des principes fondamentaux au cœur de la théorie quantique : la superposition. Dans notre expérience quotidienne, les objets ont toujours des caractéristiques définies. Leur emplacement, taille, forme, couleur — tout ce qui les concerne — est déterminé et certain, même si nous, les observateurs, ne les avons pas encore mesurés. Dans le monde quantique, ce n'est pas nécessairement le cas. Un objet quantique peut se trouver dans ce qu'on appelle une « superposition » de plusieurs états classiquement autorisés. Lorsque la superposition est mesurée, elle « s'effondre » aléatoirement vers l'un de ces états.

D'une certaine façon, mesurer un état de superposition ressemble à lancer une pièce de monnaie : il n'y a aucun moyen de savoir à l'avance de quel côté elle tombera. Cet indéterminisme fondamental est un aspect inconfortable de la mécanique quantique, même Einstein avait du mal à l'accepter. Il a dit avec célèbre : « Dieu ne joue pas aux dés » à propos de ce caractère aléatoire. Mais, comme nous allons le voir, Dieu joue effectivement aux dés — et lance des pièces.

Nous allons penser à un lancer de pièce classique comme une analogie à la mesure d'un état de superposition. Et — en jouant avec une « pièce quantique » grâce à Qiskit et un qubit sur un processeur quantique IBM® — nous allons rapidement trouver les limites de cette analogie.

La pièce classique

Commençons par une pièce classique. Lance une pièce, et elle tombera soit face vers le haut soit face vers le bas, avec 50 ~% de chance de chaque côté. Bien qu'en principe, on pourrait calculer de quel côté la pièce tombera si on connaissait les conditions initiales précises de la pièce et la force/le couple du lancer, en pratique, il n'y a aucun moyen de savoir a priori de quel côté elle tombera. C'est pourquoi nous utilisons le lancer de pièce comme exemple canonique d'un état probabiliste classique, où le résultat est essentiellement aléatoire. Nous pouvons écrire l'état de la pièce avant qu'elle n'atterrisse pour refléter cette probabilité 50/50 :

S(coin)=12up+12downS(coin) = \frac{1}{2}|up\rangle + \frac{1}{2}|down\rangle

Ici, les deux termes représentent les deux résultats possibles du lancer, et leurs coefficients représentent les probabilités de chacun des résultats. Note que généralement, le « |\rangle » (connu sous le nom de « ket ») est utilisé pour représenter un état quantique, mais ici, nous parlons d'un état probabiliste classique. Consulte la Leçon 1 : Systèmes uniques dans le cours Bases de l'information quantique pour en savoir plus sur la façon dont nous représentons l'information classique et quantique.

Si on lançait une pièce 1000 fois et qu'on notait le nombre de fois où elle tombe face ou pile, on obtiendrait quelque chose comme ça :

# 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 of the previous code cell

La pièce quantique

Nous pouvons créer un état probabiliste similaire en utilisant un qubit sur notre ordinateur quantique. Comme le lancer de pièce, un qubit peut également être mesuré dans deux états possibles : 0|0\rangle et 1|1\rangle. Nous créons l'état probabiliste de « superposition » en partant de l'état 0|0\rangle, puis en appliquant ce qu'on appelle une porte Hadamard au qubit. Cela le place dans une superposition égale de 0|0\rangle et 1|1\rangle. Note que bien que cet état de superposition puisse ressembler et se comporter comme la pièce au premier abord, nous allons vite voir qu'il y a bien plus que cela. L'objectif de ce module est de te montrer qu'une superposition n'est pas la même chose qu'un lancer de pièce classique.

Donc, puisque le qubit est dans une superposition égale de 0 et 1, quand nous mesurons le qubit, il y aura 50% de chance de mesurer 0|0\rangle, 50% de chance de mesurer 1|1\rangle. Nous écrivons cet état un peu différemment du cas probabiliste classique, pour des raisons qui deviendront claires plus tard :

ψ=120+121|\psi\rangle = \frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle

Ici, les probabilités de mesurer chacun des deux états ne sont plus égales aux coefficients, comme c'était le cas dans l'état probabiliste classique ci-dessus. C'est plutôt le carré des coefficients qui nous donne les probabilités, et chacun de ces coefficients peut maintenant être complexe, ce qui signifie qu'ils peuvent avoir des parties réelles et imaginaires.

Malgré ces différences, le résultat de la mesure de cet état est essentiellement le même que lancer une pièce.

from qiskit import QuantumCircuit

qcoin = QuantumCircuit(1)
qcoin.h(0)
qcoin.measure_all()

qcoin.draw("mpl")

Output of the previous code cell

Ainsi, en pratique, appliquer la porte Hadamard est l'analogue du lancer d'une pièce. Et tout comme nous avons lancé la pièce 1000 fois pour observer les statistiques du côté où elle tombe, nous pouvons faire quelque chose de similaire sur Qiskit avec notre « pièce quantique ». Nous pouvons utiliser une primitive Qiskit appelée Sampler, qui répétera un circuit plusieurs fois pour échantillonner les statistiques de l'état résultant.

Premièrement, nous chargeons le service Qiskit Runtime et les primitives, puis nous sélectionnons un backend sur lequel exécuter le circuit.

Il y a du code ci-dessous pour sauvegarder tes identifiants lors de la première utilisation. Assure-toi de supprimer ces informations du notebook après les avoir sauvegardées dans ton environnement, afin que tes identifiants ne soient pas accidentellement partagés lorsque tu partages le notebook. Consulte Configurer ton compte IBM Cloud et Initialiser le service dans un environnement non fiable pour plus de conseils.

# 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)
ibm_kingston

Si tu n'as plus de temps disponible sur ton compte, tu peux aussi choisir de l'exécuter sur un simulateur. Il te suffit de décommenter le code et d'exécuter la cellule ci-dessous pour le faire :

## 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 of the previous code cell

Avec 1000 échantillons du circuit ci-dessus, nous obtenons quelque chose qui ressemble fondamentalement à l'histogramme de la pièce classique, aux fluctuations statistiques près.

En plus d'échantillonner les statistiques de la pièce quantique, nous pouvons aussi utiliser une autre primitive Qiskit appelée Estimator pour mesurer ce qu'on appelle la valeur espérée d'une observable de l'état. Pour illustrer ce qu'est cette valeur espérée, utilisons la pièce classique comme exemple. Suppose que tu utilises la pièce pour jouer : chaque fois que tu lances la pièce et qu'elle tombe « face », tu gagnes un dollar. Mais chaque fois qu'elle tombe « pile », tu perds un dollar. Si tu veux savoir combien d'argent tu t'attends à obtenir à chaque lancer (la valeur espérée de l'observable « argent »), tu calcules :

E(money)=12(+1 dollar)+12(1 dollar)=0 dollarsE(money) = \frac{1}{2} (+ \text{1 dollar}) + \frac{1}{2} (- \text{1 dollar}) = \text{0 dollars}

Puisque tu as autant de chances de gagner un dollar que d'en perdre un, la valeur espérée est $0.

De même, avec un état quantique, nous pouvons calculer la valeur espérée de l'observable « Z », où Z est la matrice de Pauli avec les valeurs +1 et -1 associées aux états 0|0\rangle et 1|1\rangle, respectivement.

ψZψ=120Z0+121Z1=12(+1)+12(1)=0\langle \psi|Z|\psi \rangle = \frac{1}{2} \langle 0 | Z | 0 \rangle + \frac{1}{2} \langle 1 | Z | 1 \rangle = \frac{1}{2} (+1) + \frac{1}{2}(-1) = 0
from qiskit.quantum_info import Pauli

qcoin = QuantumCircuit(1)
qcoin.h(0)

# for Estimator, we do not apply the measurement to the circuit
<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)
-0.014799284701239441

Nous obtenons une valeur espérée de 0, comme prévu (hah). C'est une autre façon de confirmer qu'il y a effectivement une probabilité égale de mesurer 0 et 1, et que l'état se comporte comme un lancer de pièce.

À ce stade, la « pièce quantique » ressemble exactement à la pièce classique. Mais dans la prochaine section, nous allons faire des expériences qui révéleront les différences fondamentales entre les deux.

La révélation quantique : une expérience en trois dimensions

Faisons une expérience de pensée : suppose que tu lances une pièce en l'air, et plutôt que de la laisser tomber au sol, tu as la coordination pour taper dans tes mains au moment où elle passe entre elles et coincer la pièce entre tes paumes. Maintenant, au lieu que la pièce soit soit face vers le haut soit face vers le bas, elle est face à gauche ou à droite.

Vérifie ta compréhension

Lis la/les question(s) ci-dessous, réfléchis à ta réponse, puis clique sur le triangle pour révéler la solution.

Quelle est la probabilité de chacun de ces résultats, face à gauche ou face à droite ?

Réponse :

La probabilité sera toujours de 50-50. La dimension selon laquelle nous choisissons de mesurer le résultat du lancer de pièce ne devrait pas avoir d'importance.

Normalement, tu auras répondu que la probabilité de trouver la face à gauche ou à droite est toujours de 50-50. La dimension selon laquelle le lancer de pièce est mesuré ne devrait pas affecter la probabilité des résultats.

Mais comment les choses se présenteraient-elles différemment pour notre pièce quantique ? Vérifions.

Nous pouvons créer notre superposition quantique de la même façon que la dernière fois, avec une porte Hadamard. Pour mesurer « face à gauche ou à droite » sur notre pièce quantique, nous pouvons faire ce que nous avons fait avec la pièce classique : mesurer selon un axe différent. Nos mesures standard sur l'ordinateur quantique se font selon l'axe vertical, tout comme la mesure habituelle « face vers le haut ou vers le bas » de la pièce classique. Mais nous pouvons aussi demander à notre pièce quantique si elle est face à gauche ou à droite, ou de manière équivalente, si elle est dans les états +|+\rangle ou |-\rangle, qui pointent le long de l'axe xx. Sampler n'échantillonne que dans la base de mesure Z, mais nous pouvons utiliser Estimator pour nous donner la valeur espérée de X. Les valeurs de X sont +1 et -1 pour les états +|+\rangle ou |-\rangle, respectivement.

Vérifie ta compréhension

Lis la question ci-dessous, réfléchis à ta réponse, puis clique sur le triangle pour révéler la solution.

Si la pièce quantique se comportait comme la pièce classique dans ce cas, nous aurions une probabilité de 50-50 de mesurer l'état dans +|+\rangle et |-\rangle. Quelle valeur espérée de X s'attendrait-on à ce que Estimator retourne, si c'était le cas ?

Réponse :

Lorsque nous appliquons X à l'état +|+\rangle, nous obtenons la valeur +1, et à l'état |-\rangle nous obtenons -1, donc si nous avions une distribution 50-50, nous obtiendrions une valeur espérée 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)
0.9985207100591716

La valeur espérée de X pour cet état est 1. Donc, il n'y a pas une probabilité de 50-50 de mesurer +|+\rangle et |-\rangle.

Vérifie ta compréhension

Lis la/les question(s) ci-dessous, réfléchis à ta réponse, puis clique sur le triangle pour révéler la solution.

Que nous dit cette valeur espérée sur l'état ψ|\psi\rangle ? Quelles sont les probabilités de mesurer +|+\rangle et |-\rangle dans cette base X ?

Réponse :

Puisque la valeur espérée est la même que la valeur de X pour l'état +|+\rangle, cela signifie que nous avons 100% de probabilité de mesurer l'état +|+\rangle quand nous mesurons selon X.

Que se passe-t-il ici ? Il semble que notre pièce quantique puisse avoir des résultats aléatoires et probabilistes selon une dimension, mais des résultats parfaitement prévisibles selon une autre. Ce serait comme lancer une pièce et garantir que chaque fois qu'elle serait attrapée en la coinçant entre deux mains, elle se retrouverait avec la face tournée vers la droite.

La phase quantique

La différence clé de la pièce quantique est qu'elle possède une autre qualité que la pièce classique n'a pas. Rappelle-toi que dans un état probabiliste classique,

S(coin)=c1up+c2downS(coin) = c_1|up\rangle + c_2|down\rangle

chaque coefficient est simplement un nombre réel et positif qui représente la probabilité de mesurer un état particulier. Dans un état quantique,

ψ=c10+c21|\psi\rangle = c_1 |0\rangle + c_2 |1\rangle

les coefficients sont complexes, donc ils contiennent une partie réelle et une partie imaginaire. Chaque coefficient cic_i peut être exprimé comme un vecteur bidimensionnel dans le plan complexe, avec une magnitude ci|c_i| et l'angle ϕi\phi_i qu'il fait avec l'axe réel :

ci=cieiϕi.c_i = |c_i| e^{i \phi_i}.

Un cercle dans un plan complexe. L&#39;état quantique est représenté par une flèche de longueur 1 qui peut pivoter pour pointer vers n&#39;importe quel point du cercle. La composante horizontale de la flèche est son amplitude réelle, et la verticale est son amplitude complexe.

Nous appelons ϕi\phi_i la phase. La phase nous indique comment deux termes dans un état quantique vont interférer, ou comment ils vont s'additionner ou s'annuler comme des ondes. Si deux ondes sont en phase l'une avec l'autre, de sorte que leurs crêtes et leurs creux s'alignent, elles se combineront pour former une onde deux fois plus haute. Nous appelons cela une interférence constructive. Si elles sont déphasées, ce qui signifie qu'une crête d'une onde s'aligne avec un creux de l'autre, et vice-versa, elles interfèrent de manière destructive et s'annulent complètement.

Comme les ondes, les états quantiques peuvent également s'additionner de manière constructive ou destructive. Cela peut être plus difficile à voir car souvent, nous ne parlons pas d'une véritable onde dans l'espace physique. Dans le cas de nos qubits, l'interférence se produit dans l'espace abstrait d'information des qubits. Note aussi que puisque seule la phase relative entre les deux ondes importe pour la façon dont elles vont interférer — c'est-à-dire la différence de phases Δϕ=ϕ2ϕ1\Delta \phi = \phi_2 - \phi_1 des deux coefficients — nous appliquons généralement une phase globale de ϕ1-\phi_1 à l'ensemble de l'état de sorte que c1c_1 soit purement réel et que la phase relative soit entièrement capturée dans c2c_2.

Pour voir comment la phase peut provoquer des interférences dans notre pièce quantique, essayons d'appliquer le Hadamard deux fois plutôt qu'une seule. Classiquement, cela n'aurait aucun sens — si appliquer le Hadamard équivaut à lancer une pièce, alors on ne peut pas lancer une pièce qui est déjà en train de tourner. Mais voyons ce qui arrive à la pièce quantique :

qcoin_0 = QuantumCircuit(1)
qcoin_0.h(0)
qcoin_0.h(0)
qcoin_0.measure_all()

qcoin_0.draw("mpl")

Output of the previous code cell

Maintenant, avant d'utiliser Sampler pour mesurer l'état résultant, réfléchissons à la façon dont ce qubit sera transformé par chaque porte. Il commence, comme d'habitude, dans 0|0\rangle. Ensuite, le premier Hadamard transforme l'état en superposition, comme nous l'avons déjà vu :

H0=120+121.H|0\rangle = \frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle.

Dans ce cas, les deux coefficients sont entièrement réels et positifs, ce qui signifie que la phase est ϕ=0\phi=0.

Le second Hadamard est ensuite appliqué à chaque partie de l'état de superposition séparément. Nous savons déjà comment le Hadamard transforme l'état 0|0\rangle. Mais qu'en est-il de 1|1\rangle ?

H1=120121H|1\rangle = \frac{1}{\sqrt{2}} |0\rangle - \frac{1}{\sqrt{2}} |1\rangle

C'est, encore une fois, une superposition égale de 0 et 1, similaire au lancer d'une pièce, mais ce coefficient devant 1|1\rangle a une phase de ϕ=π\phi = \pi qui lui donne le signe négatif.

Vérifie ta compréhension

Lis la question ci-dessous, réfléchis à ta réponse, puis clique sur le triangle pour révéler la solution.

Calcule l'état résultant après avoir appliqué le second Hadamard. C'est-à-dire, calcule : H(120+121)H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle). Note que HH est distributif, donc nous pouvons l'appliquer à chacun des termes individuellement.

Réponse :

H(120+121)=12H0+12H1=12[(0+1)+(01)]=0H(\frac{1}{\sqrt{2}} |0\rangle + \frac{1}{\sqrt{2}} |1\rangle) = \frac{1}{\sqrt{2}} H|0\rangle + \frac{1}{\sqrt{2}} H|1\rangle = \frac{1}{2} [(|0\rangle + |1\rangle) + (|0\rangle - |1\rangle)] = |0\rangle

Maintenant, vérifions notre prédiction avec 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 of the previous code cell

Le second Hadamard a annulé le premier, et nous sommes retournés à l'état 0 où nous avions commencé ! C'est parce que le Hadamard transforme à la fois les états 0|0\rangle et 1|1\rangle en états similaires, mais avec des phases opposées. Après le second Hadamard, nous voyons que les termes 0|0\rangle interfèrent de manière constructive, mais les termes 1|1\rangle interfèrent de manière destructive et s'annulent.

Explorons davantage : nous pouvons changer la phase en utilisant une porte « PHASE ». Appliquons maintenant un Hadamard pour créer la superposition, appliquons un déphasage de π\pi radians, puis appliquons le second 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 of the previous code cell

## 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 of the previous code cell

Et maintenant le qubit est mesuré dans l'état 1 plutôt que 0.

Donc, même à partir de ces quelques expériences simples, tu peux déjà voir la différence drastique que cette phase peut faire sur un circuit quantique. Cela peut être subtil et difficile à voir au premier abord. Dans notre première expérience, où nous avons simplement lancé notre pièce quantique avec une porte Hadamard et mesuré le résultat du lancer, rien n'a révélé l'effet de la phase. C'est seulement quand nous avons creusé davantage que nous avons découvert la différence qu'une phase peut faire. Elle peut faire que la même porte quantique ait littéralement l'effet opposé sur un qubit.

Essaie toi-même :

Modifie la cellule de code ci-dessous pour changer la phase de façon à ce que le second Hadamard crée un état de superposition avec des probabilités de 25% et 75% de trouver l'état dans 0|0\rangle et 1|1\rangle, respectivement. Vérifie ta réponse par le calcul.

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 of the previous code cell

Une autre analogie (meilleure) avec la pièce en utilisant la porte NOT\sqrt{\text{NOT}}

Nous avons maintenant appris que l'acte de lancer une pièce est assez différent de la création d'un état de superposition. Y a-t-il une meilleure analogie avec une pièce qui capture davantage les phénomènes de type superposition ? Oui. Oui, il y en a une.

Nous allons faire une autre expérience de pensée avec une pièce. Imagine la pièce posée sur la table, face vers le haut. Pour la mettre face vers le bas, on peut simplement la retourner. C'est l'équivalent computationnel d'une porte « NOT ».

Supposons que nous voulions construire une opération qui, appliquée deux fois, serait équivalente à la porte NOT. C'est-à-dire que nous voulons une « racine carrée de NOT », ou NOT\sqrt{\text{NOT}}. Nous pouvons y parvenir en considérant comment la porte NOT est physiquement implémentée sur la pièce : c'est simplement une rotation de 180 degrés autour, par exemple, de l'axe x. Donc, si nous faisions pivoter la pièce de seulement 90 degrés autour de l'axe x, ce serait équivalent à une porte NOT\sqrt{\text{NOT}}.

Imagine qu'après avoir appliqué la porte NOT\sqrt{\text{NOT}}, nous voulions demander si la pièce est face vers le haut ou face vers le bas. Elle n'est ni l'un ni l'autre — elle se tient sur son bord par rapport à l'axe vertical. Mais maintenant, redéfinissons notre « mesure » de la pièce comme suit : premièrement, faire tomber la pièce selon l'axe de mesure (en l'aplatissant avec ta main de sorte qu'elle soit à plat), et deuxièmement, vérifier si elle est face vers le haut ou face vers le bas.

Si nous effectuons cette « mesure » sur la pièce debout sur son bord, alors la pièce « s'effondrera » vers le haut ou vers le bas avec une probabilité égale. Comme pour le lancer de pièce, en principe, la direction dans laquelle la pièce tombe peut être prédite en fonction des conditions initiales de la pièce et de la façon dont la force de notre main est appliquée pour la faire « s'effondrer ». Mais en pratique, il devrait être difficile de prédire de quel côté elle atterrira, donc c'est essentiellement aléatoire.

Nous pouvons en fait mesurer cette pièce selon trois axes différents : xx, yy et zz. Nous voyons que le bord de la pièce pointe selon xx et zz, donc la mesure dans ces directions nécessite de « faire tomber » la pièce — par conséquent, selon ces axes, il y aura un résultat aléatoire avec une probabilité de 50:50 de mesurer la face vers le haut et vers le bas. Mais selon l'axe yy, elle est déjà à plat, avec sa face tournée dans la direction -y. Nous pouvons appeler cela « face en avant ».

Ainsi, alors que les mesures selon x et z donnaient des résultats aléatoires, la mesure selon y donnera toujours le même résultat ! Si tu te souviens de l'expérience du « lancer de pièce quantique » de la section précédente, c'est similaire à la façon dont la pièce quantique s'est comportée. Elle était mesurée dans 0 ou 1 avec une probabilité de 50/50 dans la direction z, mais toujours +|+\rangle et jamais |-\rangle le long de X. Ceci suggère qu'une pièce immobile, sur son bord, est peut-être une meilleure façon de visualiser un état de superposition d'un qubit qu'une pièce qui tourne frénétiquement dans l'air.

Utilisons Qiskit pour voir si notre « pièce quantique » se comporte de la même façon que notre pièce classique lorsqu'une porte NOT\sqrt{\text{NOT}} est appliquée. Nous allons appliquer NOT\sqrt{\text{NOT}} à un qubit partant de 0|0\rangle, puis utiliser Estimator pour vérifier la valeur espérée des trois observables X, Y et Z.

qcoin_sx = QuantumCircuit(1)
qcoin_sx.sx(0)

qcoin_sx.draw("mpl")

Output of the previous code cell

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)
[[-0.01234492]
[-1.00388865]
[ 0.00740695]]

Les valeurs espérées sont 0, -1 et 0 pour X, Y et Z, respectivement.

Vérifie ta compréhension

Lis la question ci-dessous, réfléchis à ta réponse, puis clique sur le triangle pour révéler la solution.

Compte tenu des valeurs espérées, quelles sont les probabilités de mesurer la pièce quantique face vers le haut/bas (ou gauche/droite ou avant/arrière) pour chacun des 3 axes de mesure ?

Réponse :

Il y a une probabilité de 50/50 de mesurer l'un ou l'autre état selon X et Z, et l'état est toujours mesuré dans la direction -y selon Y.

C'est le même résultat que celui obtenu avec notre expérience de pensée en appliquant une rotation de 90 degrés « NOT\sqrt{\text{NOT}} » sur la pièce classique. En fait, il existe maintenant une analogie précise entre la pièce et l'état du qubit. Nous pouvons visualiser l'état du qubit comme un vecteur pointant dans la direction de la face d'une pièce, perpendiculaire à la surface de la pièce. Donc, face vers le haut, ou l'état 0|0\rangle sur une pièce quantique, est équivalent à un vecteur pointant droit vers le haut ; face vers le bas, ou 1|1\rangle, pointe droit vers le bas. Toute superposition égale de 0|0\rangle et 1|1\rangle pointe horizontalement. La phase de l'état détermine la direction horizontale exacte — la direction vers laquelle il pointe le long de l'équateur est égale à la direction vers laquelle le coefficient c2c_2 pointe dans le plan complexe.

Maintenant, chaque porte que nous avons vue dans ce notebook peut être visualisée comme une rotation (ou une série de rotations) de la pièce/vecteur.

  • NOT : 180 degrés autour de l'axe x

  • NOT\sqrt{\text{NOT}} : 90 degrés autour de l'axe x

  • PHASE : rotation de ϕ\phi autour de l'axe z

  • Hadamard : Celui-ci est un peu plus délicat. Nous l'avions initialement comparé à lancer une pièce, faisant tourner la pièce de manière incontrôlable dans l'air. Mais le Hadamard est en réalité une rotation contrôlée et déterministe de la pièce, comme les autres portes. Le Hadamard est effectué en faisant pivoter de 90 degrés autour de l'axe y, puis de 180 degrés autour de l'axe x.

Donc, il n'y a rien d'aléatoire dans un état de superposition quantique ou dans l'une des opérations standard que nous effectuons sur le qubit. Chaque opération est déterministe et réversible. Le seul moment où l'aléatoire entre en jeu, c'est quand nous décidons de mesurer l'état quantique.

L'état du qubit comme vecteur de Bloch

Ce vecteur qui pointe dans la direction de la « face » de la pièce est connu sous le nom de « vecteur de Bloch ». Formellement, un état de qubit arbitraire (isolé) peut être représenté par un vecteur qui se trouve à la surface d'une sphère de rayon 1 avec des coordonnées (r,θ,ϕ)(r, \theta, \phi). Écrit en termes de ces coordonnées, l'état du qubit est :

ψ=cosθ20+eiϕsinθ21|\psi\rangle = \cos{\frac{\theta}{2}} |0\rangle + e^{i \phi} \sin{\frac{\theta}{2}} |1\rangle

Un diagramme de la sphère de Bloch. L&#39;état quantique est un vecteur en trois dimensions. Puisqu&#39;il peut pointer dans n&#39;importe quelle direction, l&#39;état quantique peut être spécifié en utilisant les angles polaires thêta et phi pour localiser un point sur une surface sphérique.

Vérifions maintenant avec Qiskit comment le vecteur de Bloch change lorsque nous appliquons diverses portes à notre qubit en partant de l'état 0|0\rangle.

NOT

from qiskit.visualization import plot_bloch_multivector

qnot = QuantumCircuit(1)
qnot.x(0)

plot_bloch_multivector(qnot)

Output of the previous code cell

NOT\sqrt{\text{NOT}}

qsqrtnot = QuantumCircuit(1)
qsqrtnot.sx(0)

plot_bloch_multivector(qsqrtnot)

Output of the previous code cell

PHASE (ϕ=π\phi = \pi)

qphase = QuantumCircuit(1)
qphase.p(np.pi, 0)

plot_bloch_multivector(qphase)

Output of the previous code cell

Hadamard

qhadamard = QuantumCircuit(1)
qhadamard.h(0)

plot_bloch_multivector(qhadamard)

Output of the previous code cell

Conclusion — qu'est-ce qu'un état de superposition vraiment ?

Nous avons commencé ce module en comparant l'aléatoire de la mesure d'un état de superposition quantique à un lancer de pièce. Nous avons comparé la « porte Hadamard » qui produit une superposition quantique à l'acte de lancer une pièce. Mais, à travers une série d'expériences, nous avons appris qu'il existe des différences fondamentales entre un lancer de pièce classique et une superposition quantique.

Nous avons appris qu'il n'y a en réalité rien d'« aléatoire » dans un qubit dans un état de superposition. C'est comme une pièce immobile dans l'espace tridimensionnel. En fait, une pièce libre de pivoter dans 3 dimensions est une analogie très proche d'une façon particulière de visualiser l'état quantique d'un qubit, appelée le vecteur de Bloch. Les portes quantiques font pivoter cette pièce/vecteur de Bloch de manière déterministe et réversible. C'est uniquement quand nous mesurons le qubit que l'aléatoire est introduit. Nous avons comparé ce processus de mesure à aplatir la pièce de sorte qu'elle soit à plat dans la direction de l'axe de mesure.

Qu'un état quantique soit même dans une superposition dépend vraiment du point de vue de l'observateur. Comme tu l'as probablement rencontré auparavant, nous sommes libres de choisir notre système de coordonnées — xx, yy et zz peuvent pointer selon n'importe quelles trois directions orthogonales. Donc, si nous avons une superposition de 0 et 1 dans un système de coordonnées, nous pouvons définir un nouveau système de coordonnées — ou de manière équivalente, une nouvelle « base de mesure » — dans lequel l'état pointe purement dans la direction +z+z, et donc n'est pas dans un état de superposition. Donc, quand nous disons qu'un qubit est dans une superposition, nous devons aussi répondre à la question : « superposition de quoi ? »

Tu peux quitter ce module avec l'impression que nous venons d'éliminer tout le mystère de la mécanique quantique. Après tout, l'un des aspects supposément les plus « étranges », l'état de superposition d'un qubit, est en réalité aussi simple qu'un vecteur tridimensionnel. Mais garde à l'esprit que la pièce n'est encore qu'une analogie, et même le vecteur de Bloch n'est qu'un outil de visualisation pour calculer les probabilités des résultats de mesure. Nous ne pouvons pas dire ce qu'un état quantique fait vraiment avant d'être mesuré. Parce que vérifier cela nécessite une mesure !

Nous discuterons de cette énigme de ce qu'est la « vraie » nature d'un état quantique, et de comment le phénomène quantique de l'intrication peut nous aider à l'élucider, dans le module sur l'inégalité de Bell.

Questions

Les enseignants peuvent demander des versions de ces notebooks avec des corrigés et des conseils sur leur placement dans les curricula courants en remplissant ce court sondage sur la façon dont les notebooks sont utilisés.

Concepts fondamentaux :

  • Bien que la mesure d'un qubit dans une superposition soit probabiliste, comme lancer une pièce, l'état de superposition lui-même se comporte différemment d'une pièce qui tourne.
  • Une différence principale entre une distribution de probabilité classique et une superposition est que la superposition a une cohérence de phase, ce qui lui permet d'interférer de manière constructive ou destructive.
  • L'état d'un qubit unique et isolé peut être visualisé comme un point sur la « sphère de Bloch », où les amplitudes relatives des composantes 0|0\rangle et 1|1\rangle déterminent l'angle polaire θ\theta et les phases relatives entre les deux composantes déterminent l'angle azimutal ϕ\phi.
  • Toutes les portes quantiques à un qubit peuvent être vues comme des rotations du vecteur sur cette sphère.

Questions V/F :

  1. V/F Une superposition quantique est fondamentalement la même chose qu'un événement probabiliste en physique classique, comme lancer une pièce.

  2. V/F La longueur du vecteur de Bloch décrivant l'état d'un qubit unique et isolé est toujours 1.

  3. V/F Les portes quantiques à un qubit ne changent pas la longueur du vecteur de Bloch.

Questions à choix multiples :

  1. Sélectionne le vecteur de Bloch correct qui représente l'état Ψ=130+eiπ/4231|\Psi\rangle = \sqrt{\frac{1}{3}}|0\rangle + e^{i \pi / 4} \sqrt{\frac{2}{3}}|1\rangle :

Quatre sphères de Bloch sont affichées. Le vecteur pointe presque le long de +x dans l&#39;option a, à mi-chemin entre +x et +y et légèrement en dessous du plan xy dans l&#39;option b, entre +x et -y, et légèrement au-dessus du plan xy dans l&#39;option c, et le long de -x dans l&#39;option d.

  1. La sphère de Bloch décrit : (sélectionne tout ce qui s'applique)

    a. l'amplitude

    b. l'intrication avec d'autres qubits

    c. la phase

    d. la couleur

    e. la probabilité des résultats de mesure

Questions de discussion :

  1. Pourquoi l'état d'un qubit peut-il être visualisé sur la sphère de Bloch, mais pas la distribution de probabilité d'un lancer de pièce ?

  2. Pourquoi une pièce qui tourne dans l'air n'est-elle pas la meilleure analogie pour un état de superposition quantique ? Quel aspect des superpositions n'est pas capturé dans cette analogie ?

Problèmes de défi :

  1. Utilise Qiskit pour créer un circuit qui transforme l'état 0|0\rangle en l'état 320+12ei5π61\frac{\sqrt{3}}{2}|0\rangle + \frac{1}{2}e^{i \frac{5\pi}{6}}|1\rangle