{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "cc7d159c", "metadata": {}, "source": [ "# Graph States" ] }, { "attachments": {}, "cell_type": "markdown", "id": "a404cf6a", "metadata": {}, "source": [ "## I. Some definitions and properties of graph states" ] }, { "attachments": {}, "cell_type": "markdown", "id": "81150d0f", "metadata": {}, "source": [ "Graph states are specific entangled states that are represented by a graph. They have interesting properties in many fields of quantum computing [[1]](#References), therefore they are points of interest." ] }, { "attachments": {}, "cell_type": "markdown", "id": "ba744e0b", "metadata": {}, "source": [ "### Definition" ] }, { "attachments": {}, "cell_type": "markdown", "id": "3673c194", "metadata": {}, "source": [ "Two definitions of a graph state exist. Since they are equivalent, we will only consider the following:\n", "\n", "Given a graph $G=(V,E)$, with the set of vertices $V$ and the set of edges $E$, the corresponding graph state is defined as:\n", "

\n", "$\\left|G\\right\\rangle = \\prod_{(a,b)\\in E} CZ^{\\{a,b\\}} \\left|+\\right\\rangle^{\\otimes V}$\n", "

\n", "\n", "where $|+\\rangle = \\frac{|0\\rangle + |1\\rangle}{\\sqrt2}$ and $CZ^{\\{a,b\\}}$ is the controlled-Z interaction between the two vertices (corresponding to two qubits) $a$ and $b$. The operators order in the product doesn't matter since CZ gates commute between themselves. We can write the CZ gate with the following matrix :\n", "

\n", "$CZ = \\begin{bmatrix}\n", "1 & 0 & 0 & 0 \\\\\n", "0 & 1 & 0 & 0 \\\\\n", "0 & 0 & 1 & 0 \\\\\n", "0 & 0 & 0 & -1 \\\\\n", "\\end{bmatrix}$\n", "

\n", "\n", "
\n", "\n", "Therefore, we can write the action of a CZ gate as: $CZ^{\\{1,2\\}}|0\\rangle_1 |\\pm\\rangle_2 = |0\\rangle_1 |\\pm\\rangle_2$ and $CZ^{\\{1,2\\}}|1\\rangle_1 |\\pm\\rangle_2 = |1\\rangle_1 |\\mp\\rangle_2$.\n", "\n", "Let’s illustrate this with an example. The associated graph of: $|\\Psi_{graph}\\rangle = CZ^{\\{0,1\\}}\\, CZ^{\\{1,2\\}}\\, CZ^{\\{0,2\\}}\\, CZ^{\\{3,2\\}}|+\\rangle_0 |+\\rangle_1 |+\\rangle_2 |+\\rangle_3$ is the following. The graph is generated as an output later in this notebook. We will now see several ways to create and display these states." ] }, { "attachments": {}, "cell_type": "markdown", "id": "ebe8e04c", "metadata": {}, "source": [ "## II. Generating entangled states with a circuit" ] }, { "attachments": {}, "cell_type": "markdown", "id": "91ceb745", "metadata": {}, "source": [ "We will first use a 3-qubits circuit. We need to implement two CZ gates on it to generate the 3-qubits linear graph state.\n", "\n", "These gates are post-selected CZ gates which have a probability of success of $\\frac{1}{9}$." ] }, { "cell_type": "code", "execution_count": 1, "id": "7a1cbb98", "metadata": {}, "outputs": [], "source": [ "import math\n", "import perceval as pcvl\n", "import networkx as nx\n", "from perceval.utils import StateGenerator, Encoding" ] }, { "attachments": {}, "cell_type": "markdown", "id": "922551ad", "metadata": {}, "source": [ "### Implementation in Perceval" ] }, { "attachments": {}, "cell_type": "markdown", "id": "f21b829c", "metadata": {}, "source": [ "For this circuit, we use path encoded qubits with 3 photons as input." ] }, { "cell_type": "code", "execution_count": 2, "id": "db028030", "metadata": {}, "outputs": [], "source": [ "# Modes number of the circuit\n", "m = 10" ] }, { "cell_type": "code", "execution_count": 3, "id": "f2465169", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Rx\n", "\n", "\n", "Φ=pi/2\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Rx\n", "\n", "\n", "Φ=pi/2\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Rx\n", "\n", "\n", "Φ=pi/2\n", "\n", "POSTPROCESSED CZ\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Θ=1.910633\n", "\n", "\n", "H\n", "\n", "\n", "\n", "\n", "\n", "\n", "Θ=1.910633\n", "\n", "\n", "H\n", "\n", "\n", "\n", "\n", "\n", "\n", "Θ=1.910633\n", "\n", "\n", "H\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "POSTPROCESSED CZ\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Θ=1.910633\n", "\n", "\n", "H\n", "\n", "\n", "\n", "\n", "\n", "\n", "Θ=1.910633\n", "\n", "\n", "H\n", "\n", "\n", "\n", "\n", "\n", "\n", "Θ=1.910633\n", "\n", "\n", "H\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "Φ=pi/2\n", "\n", "\n", "Φ=pi/2\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "0\n", "1\n", "2\n", "3\n", "4\n", "5\n", "6\n", "7\n", "8\n", "9\n", "0\n", "1\n", "2\n", "3\n", "4\n", "5\n", "6\n", "7\n", "8\n", "9\n", "" ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Creation of the full circuit\n", "cz = pcvl.catalog[\"postprocessed cz\"].build_circuit()\n", "\n", "c_graph_lin = pcvl.Circuit(10, name=\"C_Graph\")\\\n", " .add((1, 2), pcvl.BS()).add(1, pcvl.PS(math.pi/2))\\\n", " .add((3, 4), pcvl.BS()).add(3, pcvl.PS(math.pi/2))\\\n", " .add((7, 8), pcvl.BS()).add(7, pcvl.PS(math.pi/2))\\\n", " .add(0, cz, merge=False)\\\n", " .add((3,4,5,6), pcvl.PERM([2, 3, 0, 1]))\\\n", " .add(4, cz, merge=False)\\\n", " .add(8, pcvl.PS(math.pi/2)).add(7, pcvl.PS(math.pi/2))\\\n", " .add((3,4,5,6), pcvl.PERM([2, 3, 0, 1]))\n", "\n", "pcvl.pdisplay(c_graph_lin, recursive=True, render_size=0.6)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "e5ea1345", "metadata": {}, "source": [ "#### Logical states" ] }, { "attachments": {}, "cell_type": "markdown", "id": "4c9781d0", "metadata": {}, "source": [ "Logical states are path encoded on the Fock States.\n", "\n", "Due to post-selection, only few states of the full Fock space are relevant.\n", "\n", "- Mode 0,5,6,9 are auxiliary.\n", "- 1st qubit is path encoded in modes 1 & 2\n", "- 2nd qubit in 3 & 4\n", "- 3rd qubit in 7 & 8" ] }, { "cell_type": "code", "execution_count": 4, "id": "68a7ae69", "metadata": {}, "outputs": [], "source": [ "# Basis for three qubits\n", "states = [\n", " pcvl.BasicState([0,1,0,1,0,0,0,1,0,0]), #|000>\n", " pcvl.BasicState([0,1,0,1,0,0,0,0,1,0]), #|001>\n", " pcvl.BasicState([0,1,0,0,1,0,0,1,0,0]), #|010>\n", " pcvl.BasicState([0,1,0,0,1,0,0,0,1,0]), #|011>\n", " pcvl.BasicState([0,0,1,1,0,0,0,1,0,0]), #|100>\n", " pcvl.BasicState([0,0,1,1,0,0,0,0,1,0]), #|101>\n", " pcvl.BasicState([0,0,1,0,1,0,0,1,0,0]), #|110>\n", " pcvl.BasicState([0,0,1,0,1,0,0,0,1,0]) #|111>\n", "]" ] }, { "attachments": {}, "cell_type": "markdown", "id": "10dc4d3e", "metadata": {}, "source": [ "### Computation of the output state" ] }, { "attachments": {}, "cell_type": "markdown", "id": "06fba24d", "metadata": {}, "source": [ "We will then simulate this circuit using the `SLOS` backend and compute the amplitudes for the output state." ] }, { "cell_type": "code", "execution_count": 5, "id": "96ffbb6e", "metadata": {}, "outputs": [], "source": [ "# Simulator\n", "backend = pcvl.BackendFactory.get_backend(\"SLOS\")\n", "backend.set_circuit(c_graph_lin)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "edbb6115", "metadata": {}, "source": [ "We use the state $|000\\rangle$ as input state." ] }, { "cell_type": "code", "execution_count": 6, "id": "21e83796", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The output state is : 0.118*|0,0,1,0,1,0,0,1,0,0>-0.118*|0,1,0,1,0,0,0,1,0,0>-0.02*|0,1,0,0,1,0,0,0,1,0>+0.118*|0,1,0,1,0,0,0,0,1,0>+0.687*|0,0,1,1,0,0,0,0,1,0>+0.02*|0,1,0,0,1,0,0,1,0,0>-0.687*|0,0,1,1,0,0,0,1,0,0>-0.118*|0,0,1,0,1,0,0,0,1,0>\n" ] } ], "source": [ "# Input state\n", "input_state = pcvl.BasicState([0, 1, 0, 1, 0, 0, 0, 1, 0, 0])\n", "backend.set_input_state(input_state)\n", "\n", "# Output state\n", "output_state = pcvl.StateVector()\n", "for state in states:\n", " ampli = backend.prob_amplitude(state)\n", " output_state += ampli*pcvl.StateVector(state)\n", "\n", "print(\"The output state is :\", output_state)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "4861c742", "metadata": {}, "source": [ "As wanted, we obtain the linear graph states for three qubits which is : $\\frac{1}{\\sqrt 8} (|000\\rangle + |001\\rangle + |010\\rangle - |011\\rangle + |100\\rangle + |101\\rangle - |110\\rangle + |111\\rangle )$.\n", "\n", "This state is also locally equivalent to a $GHZ$ state and we can therefore obtain it by performing local unitary single qubit transformations. To visualize this state using `plot_state_qsphere` from *Qiskit* [[2]](#References) or `plot_schmidt` from *qutip* [[3]](#References), follow the `StatevectorConverter` example from *perceval-interop* [[4]](#References)." ] }, { "attachments": {}, "cell_type": "markdown", "id": "d79d56af", "metadata": {}, "source": [ "## III. Generate a state from a graph" ] }, { "attachments": {}, "cell_type": "markdown", "id": "880a6f36", "metadata": {}, "source": [ "We also developed a tool which takes as input a graph from networkx and provides the associated graph state." ] }, { "cell_type": "code", "execution_count": 7, "id": "ce985ada", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create the graph with networkx\n", "G = nx.Graph()\n", "G.add_nodes_from([2,1,0,3])\n", "\n", "G.add_edge(0,1)\n", "G.add_edge(1,2)\n", "G.add_edge(2,0)\n", "G.add_edge(2,3)\n", "\n", "nx.draw_networkx(G, with_labels=True)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "7a0fcf0e", "metadata": {}, "source": [ "We choose the encoding type we want." ] }, { "cell_type": "code", "execution_count": 8, "id": "53c0bf45", "metadata": {}, "outputs": [], "source": [ "# Set the generator with the dual rail encoding\n", "generator = StateGenerator(Encoding.DUAL_RAIL)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "9b9148b8", "metadata": {}, "source": [ "Then we use the generator to create the graph state:" ] }, { "cell_type": "code", "execution_count": 9, "id": "6cc34dd9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.25*|0,1,1,0,1,0,1,0>+0.25*|1,0,0,1,0,1,0,1>+0.25*|1,0,1,0,1,0,1,0>+0.25*|1,0,0,1,1,0,1,0>-0.25*|0,1,1,0,0,1,1,0>-0.25*|0,1,0,1,1,0,1,0>+0.25*|1,0,1,0,0,1,1,0>-0.25*|1,0,0,1,0,1,1,0>-0.25*|0,1,0,1,0,1,1,0>+0.25*|0,1,1,0,1,0,0,1>+0.25*|1,0,1,0,1,0,0,1>-0.25*|0,1,0,1,1,0,0,1>+0.25*|1,0,0,1,1,0,0,1>+0.25*|0,1,1,0,0,1,0,1>-0.25*|1,0,1,0,0,1,0,1>+0.25*|0,1,0,1,0,1,0,1>\n" ] } ], "source": [ "graph_state = generator.graph_state(G)\n", "print(graph_state)" ] }, { "cell_type": "markdown", "id": "73f10fa51cd8de2d", "metadata": {}, "source": [ "You can use the generated state as an input state in any noiseless simulation" ] }, { "cell_type": "code", "execution_count": 10, "id": "2872df70be78a416", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "
state probability
|1,0,1,1,1,0,0,0> 0.018002
|0,0,0,1,2,1,0,0> 0.015395
|0,0,0,0,0,0,4,0> 0.015104
|0,0,0,0,1,3,0,0> 0.015061
|1,1,0,0,2,0,0,0> 0.014839
|1,0,0,1,0,0,0,2> 0.013904
|0,0,0,0,1,2,0,1> 0.011317
|0,1,0,1,0,0,2,0> 0.011303
|1,0,0,0,0,1,2,0> 0.011015
|1,2,0,0,0,1,0,0> 0.010701
" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p = pcvl.Processor(\"SLOS\", pcvl.Unitary(pcvl.Matrix.random_unitary(8))) # Use a 8x8 random unitary matrix as a circuit\n", "p.min_detected_photons_filter(4)\n", "p.with_input(graph_state)\n", "sampler = pcvl.algorithm.Sampler(p)\n", "pcvl.pdisplay(sampler.probs()['results'], max_v=10)" ] }, { "attachments": {}, "cell_type": "markdown", "id": "96b76153", "metadata": {}, "source": [ "## References" ] }, { "attachments": {}, "cell_type": "markdown", "id": "44ca8b6a", "metadata": {}, "source": [ "[1]\n", "Marc Hein et al. “Entanglement in graph states and its applications”. In: *arXiv preprint\n", "quant-ph/0602096* (2006). https://arxiv.org/abs/quant-ph/0602096\n", "\n", "[2]\n", "https://qiskit.org/documentation/stubs/qiskit.visualization.plot_state_qsphere.html\n", "\n", "[3]\n", "https://nbviewer.org/urls/qutip.org/qutip-tutorials/tutorials-v4/visualization/qubism-and-schmidt-plots.ipynb\n", "\n", "\n", "[4]\n", "https://perceval.quandela.net/interopdocs/\n", "\n" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 5 }