{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Programmation Quantique (suite)\n",
"\n",
"### Nicolas Ollinger et Ioan Todinca\n",
"\n",
"\n",
"#### M2 info, S9 2024/2025"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"## Circuits quantiques ?\n",
"\n",
"Les ordinateurs quantiques d'aujourd'hui (ou plutôt de demain ?) s'utilisent comme des _coprocesseurs_ : on y fait subir une transformation unitaire à un registre de qubits initialement tous à zéro avant d'effectuer des mesures sur son état.\n",
"\n",
"Les transformations unitaires sont codées sous forme de circuits et la programmation quantique ressemble à de la programmation assembleur.\n",
"\n",
"La programmation quantique propose une nouvelle forme de parallélisme."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"\n",
"### Hello qiskit"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from qiskit import QuantumCircuit, transpile\n",
"from qiskit.providers.basic_provider import BasicProvider\n",
"from qiskit_aer import UnitarySimulator\n",
"from qiskit.visualization import plot_histogram\n",
"import qiskit.quantum_info as qi\n",
"from math import sqrt\n",
"import numpy as np\n",
"\n",
"# Un simulateur de circuit complet\n",
"sim = BasicProvider().get_backend('basic_simulator')\n",
"\n",
"# Un simulateur calculant la matrice de transformation\n",
"usim = UnitarySimulator()\n",
"\n",
"# Afficher un circuit\n",
"def draw_circ(circ): display(circ.draw(output='mpl'))\n",
" \n",
"# Calculer la matrice d'un circuit\n",
"def mat_circ(circ): return usim.run(circ).result().get_unitary()\n",
"\n",
"def show(circ):\n",
" draw_circ(circ)\n",
" display(mat_circ(circ).draw('latex'))"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "slide"
}
},
"source": [
"# Circuits quantiques"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Circuits quantiques\n",
"\n",
"Un circuit quantique est composé d'un nombre constant de **fils** qui représentent des états quantiques d'un système discret fini. Les **fils** sont les **qubits**.\n",
"\n",
"Des **portes quantiques** permettent d'effectuer des opérations sur ces états jusqu'à obtenir un état final.\n",
"\n",
"Seules des **mesures** de ces états permettent d'obtenir une information (partielle) en sortie.\n",
"\n",
"Les **qubits** sont tous initialisés à la valeur $\\left|0\\right>$."
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"### Représentations et calculs\n",
"\n",
"Pour raisonner sur ces objets circuits et les **transformations unitaires** qu'ils réalisent, plusieurs outils sont à notre disposition :\n",
" - la représentation matricielle des circuits (de dimension $2^n$ pour $n$ qubits !) ;\n",
" - le calcul avec la notation de Dirac $\\left<\\phi\\middle|\\psi\\right>$ ;\n",
" - les outils graphiques du ZX-calcul !"
]
},
{
"cell_type": "markdown",
"metadata": {
"slideshow": {
"slide_type": "subslide"
}
},
"source": [
"