Informatique quantique
De la physique quantique à la programmation quantique en Q#
Avant-propos
Partie 1 : La physique quantique
Chapitre 1
De la théorie classique à la physique quantique
1. Du classique au quantique15
1.1 Lumière et sauts d'énergie15
1.2 Lumière et matière, même combat16
2. L'atome17
3. La classification périodique des éléments18
4. La lumière19
4.1 Lumière, onde-corpuscule19
4.2 Le photon20
Chapitre 2
Modèle de Bohr et quantification de l'énergie
1. Pourquoi le modèle de Bohr ?21
1.1 Introduction21
1.2 Spectre électromagnétique et raies spectrales22
1.3 Postulat de Bohr23
2. Modèle de Bohr24
2.1 Précisions concernant les orbites24
2.2 Modèle de Bohr et nombres quantiques25
2.2.1 Premier nombre quantique n25
2.2.2 Second nombre quantique l25
2.2.3 Troisième nombre quantique m25
2.2.4 Quatrième nombre quantique s26
2.3 Nombres quantiques et représentation de l'état de l'électron26
Chapitre 3
L'état quantique
1. Vers une définition de l'état quantique29
1.1 Le principe d'incertitude d'Heisenberg29
1.2 La mesure quantique29
1.3 Un monde probabiliste30
1.4 L'approche systémique31
2. L'état quantique et les mathématiques31
2.1 Rapide retour sur les vecteurs31
2.2 Rapide retour sur le calcul matriciel33
2.3 La notation bra-ket35
3. Fonction d'onde37
3.1 La mise en évidence graphique37
3.2 La fonction d'onde continue38
Chapitre 4
La superposition quantique
1. Introduction à la superposition quantique39
1.1 En partant de l'état quantique39
1.2 Outils mathématiques39
1.2.1 Premier exemple avec le spin de l'électron40
1.2.2 Rapide retour sur les nombres complexes40
1.2.3 Calcul relatif à la probabilité41
1.3 Second exemple : le « dé quantique »42
2. Interprétation de la superposition quantique42
2.1 Interprétation du « dé quantique »42
2.2 Le paradoxe du chat de Schrödinger43
2.2.1 Mise en équation43
2.3 Le congrès Solvay de 192744
2.4 Théorie d'Everett45
3. Vérification de la superposition quantique46
Chapitre 5
L'intrication quantique
1. Première approche de l'intrication quantique47
1.1 Propos introductif47
1.2 Mise en évidence48
2. Le paradoxe EPR49
2.1 Explications du paradoxe EPR49
2.2 Interprétations du paradoxe EPR50
3. La théorie de Bell50
3.1 Explication de la théorie de Bell50
3.2 Intérêt des inégalités de Bell dans le champ expérimental51
3.3 « Dieu joue aux dés » (?) ou l'expérience d'Aspect51
Partie 2 : L'information quantique
Chapitre 6
Le bit quantique
1. Vers le bit quantique53
1.1 Du bit au bit quantique53
1.2 Sphère de Bloch54
1.3 Résumé du cycle de vie d'un qubit56
2. Définition vectorielle du bit quantique57
2.1 Exemple à un qubit57
2.2 Exemple à deux qubits57
Chapitre 7
La porte quantique
1. Comparaison avec l'informatique quantique59
1.1 Introduction59
1.2 Exemple de la porte logique NOT60
1.3 Exemple de la porte logique XOR61
2. Les portes quantiques à un qubit en entrée62
2.1 Introduction62
2.2 Porte de Hadamard (H)63
2.2.1 Utilisation de la porte de Hadamard64
2.3 Porte de Pauli-X (NOT)65
2.3.1 Utilisation de la porte de Pauli-X66
2.4 Portes de Pauli-Y et de Pauli-Z66
2.4.1 Considérations sur la porte de Pauli-Y67
2.4.2 Considérations sur la porte de Pauli-Z67
2.5 Racine carrée de la porte NOT68
2.6 Porte de changement de phase68
3. Les portes quantiques à deux qubits en entrée69
3.1 Introduction69
3.2 Oirte cNOT (cX)69
3.3 Porte SWAP (S)71
3.3.1 Présentation et description71
3.32 Conception de la porte SWAT à base de la porte cNOT72
4. Les portes quantiques à trois qubits en entrée72
4.1 Porte TOF (CCNOT)72
4.2 Porte Fredkin (CSWAP)74
4.3 La mesure dans les schémas quantiques75
Chapitre 8
Définition des circuits quantiques
1. Introduction77
2. Produit tensoriel78
2.1 Montage en série78
2.2 Produit de Kronecker79
2.3 Montage en parallèle80
3. Les états de Bell81
3.1 Explications81
3.2 Initialisation82
3.3 Application de la porte de Hadamard82
3.4 Application de la porte CNOT82
3.5 Résultat et interprétation83
4. Téléportation quantique84
4.1 Explications84
4.2 Scénario de téléportation84
4.3 Schéma quantique de téléportation85
4.4 Interprétation85
5. Classification des problèmes à résoudre et complexité86
5.1 L'informatique classique face à l'informatique quantique86
5.1.1 Complexité des problèmes à résoudre86
5.1.2 Parallélisation quantique ou la puissance du registre quantique86
6. Typologie des problèmes88
6.1 Contexte88
6.2 La complexité88
6.2.1 Première approche88
6.2.2 Complexité de l'algorithme par dichotomie89
6.2.3 Complexité d'un algorithme appliqué au problème du voyageur de commerce90
6.3 Catégorisation des problèmes93
6.3.1 Les classes P et NP93
6.3.2 Inclusions ?93
6.3.3 Les classes Exptime et Nexptime94
6.3.4 La classe NP-Complet94
7. Vers la suprématie quantique ?95
7.1 Introduction95
7.2 L'algorithme quantique de Shor96
Chapitre 9
Construire un ordinateur quantique
1. Introduction97
2. Architecture de l'ordinateur quantique98
2.1 Premiers éléments98
2.2 Bit quantique logique et bit quantique physique99
3. Le bit quantique physique en pratique99
3.1 Approche générale99
3.2 Pistes de réalisation100
4. Détails de quelques pistes de réalisation101
4.1 La pite de la résonance magnétique nucléaire101
4.1.1 Explication du phénomène101
4.1.2 RMN et ordinateur quantique101
4.2 La piste « Josephson »101
4.2.1 L'effet Josephson101
4.2.2 Bit quantique à supraconducteurs102
5. Un bref état des lieux102
5.1 Typologie des acteurs102
5.2 Un état des lieux, acteur par acteur103
5.2.1 D-Wave Systems103
5.2.2 Rigetti Computing104
5.2.3 Fujitsu105
5.2.4 Atos105
5.2.5 Google105
5.2.6 Intel105
5.2.7 IBM106
5.2.8 Microsoft106
Partie 3 : Le développement quantique avec Q#
Chapitre 10
Quantum Development Kit et son installation
1. Présentation générale107
1.1 Annonce de la sortie107
1.2 Composition du kit quantique de Microsoft108
2. Installation du Microsoft Quantum Development Kit109
2.1 Environnements de développements ciblés109
2.2 Installation avec Microsoft Visual Studio109
2.2.1 Installation de Microsoft Visual Studio110
2.2.2 Installation du Microsoft Quantum Development Kit111
2.3 Installation avec Visual Studio Code111
2.3.1 Installation de Visual Studio Code111
2.3.2 Installation du .NET Core SDK112
2.3.3 Installation annexe relative à C# (facultative)112
2.3.4 Installation de Microsoft Quantum Development Kit115
2.3.5 Configuration relative à la ligne de commande115
2.4 Test de la validité de l'installation116
2.4.1 Test avec Microsoft Visual Studio117
2.4.2 Test avec Visual Studio Code118
2.5 Examen du projet de test de téléportation120
2.5.1 Le projet de téléportation120
2.5.2 Le fichier TeleportationSample.qs122
Chapitre 11
Le langage Q# et son utilisation
1. Présentation du langage Q#127
1.1 Introduction127
1.2 Un langage évolutif127
1.3 Un langage multiparadigme128
2. Éléments relatifs aux signes de ponctuation128
2.1 Contexte128
2.2 Nomenclature relative aux signes de ponctuation129
3. Les types en Q#129
3.1 Les types primitifs du langage129
4. Les structures de données131
4.1 Introduction131
4.2 Le tableau131
4.3 Le tuple132
4.3.1 Le cas particulier du tuple singleton132
5. Considérations sur les types et les structures de données en Q#133
5.1 Définir ses propres types en Q#133
5.2 Les types encapsulés en Q#134
5.2.1 Introduction du mot-clé let134
5.2.2 Utiliser les types encapsulés134
5.2.3 Opérateur de désencapsulation135
6. Opérations et fonctions Q#136
6.1 Distinction entre opération et fonction en Q#136
6.2 Utiliser des « callables » dans des « callables »136
6.3 L'opération en Q#137
6.3.1 Première approche137
6.3.2 Un exemple avec tuple non vide en sortie138
6.3.3 Les mots-clés adjoint et controlled139
6.4 La fonction en Q#140
6.5 Conditions, boucles, etc140
6.5.1 Condition if...elif140
6.5.2 Boucle for141
6.5.3 Boucle repeat...until141
7. Les variables en Q#142
7.1 Le mot-clé let et l'immutabilité142
7.2 Les mots-clés mutable et set142
8. Manipuler des bits quantiques en Q#143
8.1 Utiliser un registre de bits quantiques143
8.2 Première approche des portes quantiques en Q#143
8.2.1 Les primitives en Q#143
8.2.2 Une primitive particulière, la mesure145
8.3 Inventaire des primitives en Q#145
8.3.1 Opération Assert145
8.3.2 Opération AssertProb146
8.3.3 Opération CNOT146
8.3.4 Opération CCNOT147
8.3.5 Opération Exp148
8.3.6 Opération ExpFrac148
8.3.7 Opération H149
8.3.8 Opération I149
8.3.9 Opération M149
8.3.10 Opération Measure150
8.3.11 Opération MultiX150
8.3.12 Opération R151
8.3.13 Opération R1152
8.3.14 Opération R1Frac153
8.3.15 Opération RFac153
8.3.16 Opération Rx153
8.3.17 Opération Ry154
8.3.18 Opération Rz154
8.3.19 Opération Random155
8.3.20 Opération Reset155
8.3.21 Opération ResetAll155
8.3.22 Opération S156
8.3.23 Opérations SWAP156
8.3.24 Opération T157
8.3.25 Opération X157
8.3.26 Opération Y158
8.3.27 Opération Z158
9. Tester son code quantique et le déboguer158
9.1 Les tests unitaires en Q#158
9.1.1 Contexte158
9.1.2 Création d'un projet de tests avec Microsoft Visual Studio159
9.1.3 Création d'un projet de tests avec Visual Studio Code159
9.1.4 Écrire des tests unitaires159
9.1.5 Exécuter des tests unitaires160
9.2 Déboguer un code quantique Q#162
9.2.1 Les outils des environnements de développement162
9.2.2 Utiliser les messages162
9.2.3 Utiliser les logs163
9.2.4 Utiliser les assertions163
9.2.5 Les fonctions de dump164
10. Inventaire des espaces de noms quantiques166
10.1 Contexte166
10.2 L'espace de noms Microsoft. Quantum.Core166
10.3 Les espaces Microsoft.Extensions.*167
10.3.1 Microsoft.Extensions.Bitwise167
10.3.2 Microsoft.Extensions.Convert168
10.3.3 Microsoft.Extensions.Diagnostics168
10.3.4 Microsoft.Extensions.Math168
10.3.5 Microsoft.Extensions.Testing169
10.4 L'espace Microsoft.Quantum.Primitive169
10.5 L'espace Microsoft.Quantum.Canon170
11. C# en pilotage du simulateur quantique170
Chapitre 12
Simuler des programmes quantiques en Q#
1. Contexte175
2. Exemple appliqué : les états de Bell175
2.1 Contexte175
2.2 Les états de Bell176
2.3 Création d'un projet quantique177
2.3.1 Création d'un projet quantique avec Microsoft Visual Studio177
2.3.2 Création d'un projet quantique avec Visual Studio Code177
2.4 Programmation du fichier Q#178
2.4.1 Renommage du fichier178
2.4.2 Codage du fichier Q#178
2.5 Programmation du fichier de pilotage C#182
2.5.1 Code automatiquement généré182
2.6 Exécuter le programme quantique184
2.6.1. Exécuter le programme quantique avec Microsoft Visual Studio184
2.6.2. Exécuter le programme quantique avec Visual Studio Code184
2.7 Simuler la superposition quantique185
2.8 Simuler les états de Bell avec l'intrication quantique188
3. Plus loin dans le développement Q#192
3.1 Différentes situations de mesures en Q#192
3.1.1 Contexte192
3.1.2 Le projet quantique de mesure192
3.1.3 Le pilote C#193
3.1.4 Le code quantique Q# de la mesure d'un bit quantique195
3.1.5 Le code quantique Q# de la mesure d'un registre de bits quantiques196
3.1.6 Le code quantique Q# de la mesure dans la base de Bell197
3.2 Algorithme quantique de Deutsch-Jozsa199
3.2.1 Contexte199
3.2.2 L'algorithme quantique200
3.2.3 Le pilote C#200
3.2.4 Le code quantique Q#202
4. Simulateur quantique : en local ou dans le cloud ?204
4.1 Contexte204
4.2 Simulateur distant avec Azure205
Chapitre 13
Histoire de la physique quantique
1. Contexte207
2. Histoire chronologique : le XIXe siècle208
2.1 De 1800 aux années 1860208
2.2 Années 1870208
2.3 Années 1880209
2.4 Années 1890209
3. Histoire chronologique : le XXe siècle210
3.1 Années 1900210
3.2 Années 1910211
3.3 Années 1920211
3.3.1 Année 1922211
3.3.2 Année 1923212
3.3.3 Année 1925212
3.3.4 Année 1926212
3.3.5 Année 1927213
3.3.6 Année 1928213
3.3.7 Année 1929214
3.4 Années 1930214
3.5 Années 1940215
3.6 Années 1950215
3.7 Années 1960215
3.8 Années 1970216
3.9 Années 1980216
3.10 Années 1990217
4. Histoire chronologique : le XXIe siècle218
4.1 Années 2000218
4.2 Années 2010218
Chapitre 14
Glossaire de la physique quantique
1. Contexte219
2. Glossaire alphabétique220
Index231