Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

L’intrication et l’état de Bell

Après cette leçon: Je peux construire un état de Bell avec H et CNOT et expliquer pourquoi il est intriqué.

Leçon de 60 min1 commandeLab simulateur quantique : qubits, portes et mesure dans JupyterLab

Qu’est-ce que l’intrication quantique ?

L’intrication est un lien entre deux qubits : leurs résultats de mesure sont liés, même si chacun pris seul est un tirage au hasard. L’état de Bell en est l’exemple le plus simple.

Après cette leçon, vous saurez construire cet état avec deux portes et expliquer pourquoi on ne peut pas le décrire qubit par qubit.

À la fin de cette leçon

Remarque

Je peux construire un état de Bell avec H et CNOT et expliquer pourquoi il est intriqué.

Mots clés

MotCe que ça veut dire
Produit tensoriella façon d’assembler deux états en un état de plus de qubits
CNOTune porte à deux qubits : le contrôle décide si l’autre est inversé
État produitun état de deux qubits qu’on peut séparer en un état par qubit
Intricationun lien qui empêche de séparer les qubits
État de Bellun état intriqué de deux qubits, 00 ou 11 à parts égales

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Deux qubits demandent quatre amplitudes

Deux bits peuvent former 00, 01, 10 ou 11. Deux qubits ont donc quatre amplitudes, rangées dans cet ordre : [00, 01, 10, 11]. Le qubit 0 est le bit de gauche.

Pour assembler un qubit a et un qubit b, on forme le produit tensoriel : chaque amplitude de a multiplie chaque amplitude de b.

Exemple travaillé : deux qubits assemblés

RésultatAmplitude de aAmplitude de bProduit
000,610,6
010,600
100,810,8
110,800

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Assembler deux qubits

Code: python
# Deux qubits : les quatre amplitudes de 00, 01, 10 et 11.
def produit_tensoriel(a, b):
    resultat = []
    for x in a:
        for y in b:
            resultat.append(x * y)
    return resultat

print(produit_tensoriel([0.6, 0.8], [1, 0]))
# Changez [1, 0] en [0, 1], puis relancez.
# Quelles amplitudes sont non nulles ?

Que fait la porte CNOT ?

La porte CNOT agit sur deux qubits. Le premier est le contrôle, le second la cible. Si le contrôle vaut 1, la cible est inversée, comme avec X. Sinon, rien ne bouge.

Sur les quatre amplitudes, CNOT échange simplement celles de 10 et de 11. Celles de 00 et de 01 restent en place.

Ce que fait CNOT sur les quatre résultats

AvantAprèsPourquoi
0000le contrôle vaut 0
0101le contrôle vaut 0
1011le contrôle vaut 1, la cible est inversée
1110le contrôle vaut 1, la cible est inversée

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

H puis CNOT fabrique un état de Bell

Partez de deux qubits dans |00>. La porte H sur le qubit 0 donne [0.707, 0, 0.707, 0]. Puis CNOT échange les amplitudes de 10 et de 11 : [0.707, 0, 0, 0.707].

C’est l’état de Bell. Seuls 00 et 11 ont une chance, 0,5 chacun : les deux qubits donnent toujours le même résultat.

Ce que le script va afficher

Le script bell.py applique H puis CNOT, puis mesure 1000 fois. Ses lignes sont en anglais : after H on qubit 0 veut dire « après H sur le qubit 0 ». after CNOT, a Bell state veut dire « après CNOT, un état de Bell ».

La notation 0.707|00> + 0.707|11> se lit : amplitude 0,707 pour 00 et pour 11. 1000 shots, seed 1 veut dire « 1000 tirages, graine 1 ».

Construire un état de Bell et le mesurer

Commande
docker exec jupyter python3 steps/bell.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Un état intriqué ne se sépare pas

Un état produit s’écrit a puis b. Pour lui, les quatre amplitudes e0, e1, e2, e3 vérifient e0 * e3 = e1 * e2. Vérifiez sur le tableau précédent : 0,6 fois 0 vaut 0 fois 0,8.

Pour l’état de Bell, 0,707 fois 0,707 vaut 0,5, et 0 fois 0 vaut 0. L’égalité est fausse : aucun a et aucun b ne le produisent. L’état est intriqué.

Construire l’état de Bell en Python

Code: python
# H sur le qubit 0, puis CNOT : un état de Bell.
R = 0.5 ** 0.5

def produit_tensoriel(a, b):
    resultat = []
    for x in a:
        for y in b:
            resultat.append(x * y)
    return resultat

def cnot(etat):
    # Le contrôle est le qubit 0 : il échange les amplitudes de 10 et de 11.
    return [etat[0], etat[1], etat[3], etat[2]]

def arrondir(etat):
    resultat = []
    for a in etat:
        resultat.append(round(a, 3))
    return resultat

apres_h = produit_tensoriel([R, R], [1, 0])
bell = cnot(apres_h)
print("après H :", arrondir(apres_h))
print("après CNOT :", arrondir(bell))
# Les amplitudes de 01 et de 10 sont nulles dans l'état de Bell.

Tester si un état est un produit

Code: python
# Un état est un produit s'il s'écrit a puis b : alors e[0]*e[3] = e[1]*e[2].
R = 0.5 ** 0.5

def ecart(e):
    return round(e[0] * e[3] - e[1] * e[2], 3)

produit = [0.6, 0.0, 0.8, 0.0]
bell = [R, 0.0, 0.0, R]
print("écart du produit :", ecart(produit))
print("écart de l'état de Bell :", ecart(bell))
# Un écart de 0 veut dire : état produit. Sinon : intriqué.

Une erreur fréquente

Attention

Beaucoup pensent que l’intrication permet d’envoyer un message instantané. Non : chaque qubit seul reste un tirage à 50 %. Le lien n’apparaît qu’en comparant les deux listes de résultats, ce qui demande un échange ordinaire.

Pour aller plus loin

Dans un carnet du labo, construisez bell = CNOT @ apply(H, zero(2), 0), puis mesurez-le avec measure(bell, 1000, seed=2). Les comptes changent-ils beaucoup ?

Appliquez maintenant X au qubit 0 de bell avec apply(X, bell, 0). Quels résultats apparaissent à présent, 00 et 11 ou 01 et 10 ?

À propos de ce labo et de sa source: Lab simulateur quantique : qubits, portes et mesure dans JupyterLab

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.