{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Two Qubit Gates" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:26.162937Z", "start_time": "2019-08-22T14:44:25.781597Z" } }, "outputs": [], "source": [ "from qiskit import *\n", "from math import pi\n", "import numpy as np\n", "from qiskit.visualization import plot_bloch_multivector,plot_state_qsphere\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Multi-Qubit Gates\n", "\n", "### Mathematical Preliminaries\n", "\n", "The space of quantum computer grows exponential with the number of qubits. For $n$ qubits the complex vector space has dimensions $d=2^n$. To describe states of a multi-qubit system, the tensor product is used to \"glue together\" operators and basis vectors.\n", "\n", "Let's start by considering a 2-qubit system. Given two operators $A$ and $B$ that each act on one qubit, the joint operator $A \\otimes B$ acting on two qubits is\n", "\n", "$$\\begin{equation}\n", "\tA\\otimes B = \n", "\t\\begin{pmatrix} \n", "\t\tA_{00} \\begin{pmatrix} \n", "\t\t\tB_{00} & B_{01} \\\\\n", "\t\t\tB_{10} & B_{11}\n", "\t\t\\end{pmatrix} & A_{01} \t\\begin{pmatrix} \n", "\t\t\t\tB_{00} & B_{01} \\\\\n", "\t\t\t\tB_{10} & B_{11}\n", "\t\t\t\\end{pmatrix} \\\\\n", "\t\tA_{10} \t\\begin{pmatrix} \n", "\t\t\t\t\tB_{00} & B_{01} \\\\\n", "\t\t\t\t\tB_{10} & B_{11}\n", "\t\t\t\t\\end{pmatrix} & A_{11} \t\\begin{pmatrix} \n", "\t\t\t\t\t\t\tB_{00} & B_{01} \\\\\n", "\t\t\t\t\t\t\tB_{10} & B_{11}\n", "\t\t\t\t\t\t\\end{pmatrix}\n", "\t\\end{pmatrix},\t\t\t\t\t\t\n", "\\end{equation}$$\n", "\n", "where $A_{jk}$ and $B_{lm}$ are the matrix elements of $A$ and $B$, respectively.\n", "\n", "Analogously, the basis vectors for the 2-qubit system are formed using the tensor product of basis vectors for a single qubit:\n", "$$\\begin{equation}\\begin{split}\n", "\t\\left|{00}\\right\\rangle &= \\begin{pmatrix} \n", "\t\t1 \\begin{pmatrix} \n", "\t\t\t1 \\\\\n", "\t\t\t0\n", "\t\t\\end{pmatrix} \\\\\n", "\t\t0 \\begin{pmatrix} \n", "\t\t\t1 \\\\\n", "\t\t\t0 \n", "\t\t\\end{pmatrix}\n", "\t\\end{pmatrix} = \\begin{pmatrix} 1 \\\\ 0 \\\\ 0 \\\\0 \\end{pmatrix}~~~\\left|{01}\\right\\rangle = \\begin{pmatrix} \n", "\t1 \\begin{pmatrix} \n", "\t0 \\\\\n", "\t1\n", "\t\\end{pmatrix} \\\\\n", "\t0 \\begin{pmatrix} \n", "\t0 \\\\\n", "\t1 \n", "\t\\end{pmatrix}\n", "\t\\end{pmatrix} = \\begin{pmatrix}0 \\\\ 1 \\\\ 0 \\\\ 0 \\end{pmatrix}\\end{split}\n", "\\end{equation}$$\n", " \n", "$$\\begin{equation}\\begin{split}\\left|{10}\\right\\rangle = \\begin{pmatrix} \n", "\t0\\begin{pmatrix} \n", "\t1 \\\\\n", "\t0\n", "\t\\end{pmatrix} \\\\\n", "\t1\\begin{pmatrix} \n", "\t1 \\\\\n", "\t0 \n", "\t\\end{pmatrix}\n", "\t\\end{pmatrix} = \\begin{pmatrix} 0 \\\\ 0 \\\\ 1 \\\\ 0 \\end{pmatrix}~~~ \t\\left|{11}\\right\\rangle = \\begin{pmatrix} \n", "\t0 \\begin{pmatrix} \n", "\t0 \\\\\n", "\t1\n", "\t\\end{pmatrix} \\\\\n", "\t1\\begin{pmatrix} \n", "\t0 \\\\\n", "\t1 \n", "\t\\end{pmatrix}\n", "\t\\end{pmatrix} = \\begin{pmatrix} 0 \\\\ 0 \\\\ 0 \\\\1 \\end{pmatrix}\\end{split}\n", "\\end{equation}.$$\n", "\n", "Note we've introduced a shorthand for the tensor product of basis vectors, wherein $\\left|0\\right\\rangle \\otimes \\left|0\\right\\rangle$ is written as $\\left|00\\right\\rangle$. The state of an $n$-qubit system can described using the $n$-fold tensor product of single-qubit basis vectors. Notice that the basis vectors for a 2-qubit system are 4-dimensional; in general, the basis vectors of an $n$-qubit sytsem are $2^{n}$-dimensional, as noted earlier.\n", "\n", "### Basis vector ordering in Qiskit\n", "\n", "Within the physics community, the qubits of a multi-qubit systems are typically ordered with the first qubit on the left-most side of the tensor product and the last qubit on the right-most side. For instance, if the first qubit is in state $\\left|0\\right\\rangle$ and second is in state $\\left|1\\right\\rangle$, their joint state would be $\\left|01\\right\\rangle$. Qiskit uses a slightly different ordering of the qubits, in which the qubits are represented from the most significant bit (MSB) on the left to the least significant bit (LSB) on the right (big-endian). This is similar to bitstring representation on classical computers, and enables easy conversion from bitstrings to integers after measurements are performed. For the example just given, the joint state would be represented as $\\left|10\\right\\rangle$. Importantly, _this change in the representation of multi-qubit states affects the way multi-qubit gates are represented in Qiskit_, as discussed below.\n", "\n", "The representation used in Qiskit enumerates the basis vectors in increasing order of the integers they represent. For instance, the basis vectors for a 2-qubit system would be ordered as $\\left|00\\right\\rangle$, $\\left|01\\right\\rangle$, $\\left|10\\right\\rangle$, and $\\left|11\\right\\rangle$. Thinking of the basis vectors as bit strings, they encode the integers 0,1,2 and 3, respectively.\n", "\n", "\n", "### Controlled operations on qubits\n", "\n", "A common multi-qubit gate involves the application of a gate to one qubit, conditioned on the state of another qubit. For instance, we might want to flip the state of the second qubit when the first qubit is in $\\left|0\\right\\rangle$. Such gates are known as _controlled gates_. The standard multi-qubit gates consist of two-qubit gates and three-qubit gates. The two-qubit gates are:\n", "- controlled Pauli gates\n", "- controlled Hadamard gate\n", "- controlled rotation gates\n", "- controlled phase gate\n", "- controlled u3 gate\n", "- swap gate\n", "\n", "The three-qubit gates are: \n", "- Toffoli gate \n", "- Fredkin gate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Two-qubit gates\n", "\n", "Most of the two-gates are of the controlled type (the SWAP gate being the exception). In general, a controlled two-qubit gate $C_{U}$ acts to apply the single-qubit unitary $U$ to the second qubit when the state of the first qubit is in $\\left|1\\right\\rangle$. Suppose $U$ has a matrix representation\n", "\n", "$$U = \\begin{pmatrix} u_{00} & u_{01} \\\\ u_{10} & u_{11}\\end{pmatrix}.$$\n", "\n", "We can work out the action of $C_{U}$ as follows. Recall that the basis vectors for a two-qubit system are ordered as $\\left|00\\right\\rangle, \\left|01\\right\\rangle, \\left|10\\right\\rangle, \\left|11\\right\\rangle$. Suppose the **control qubit** is **qubit 0** (which, according to Qiskit's convention, is one the _right-hand_ side of the tensor product). If the control qubit is in $\\left|1\\right\\rangle$, $U$ should be applied to the **target** (qubit 1, on the _left-hand_ side of the tensor product). Therefore, under the action of $C_{U}$, the basis vectors are transformed according to\n", "\n", "$$\\begin{align*}\n", "C_{U}: \\underset{\\text{qubit}~1}{\\left|0\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|0\\right\\rangle} &\\rightarrow \\underset{\\text{qubit}~1}{\\left|0\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|0\\right\\rangle}\\\\\n", "C_{U}: \\underset{\\text{qubit}~1}{\\left|0\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|1\\right\\rangle} &\\rightarrow \\underset{\\text{qubit}~1}{U\\left|0\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|1\\right\\rangle}\\\\\n", "C_{U}: \\underset{\\text{qubit}~1}{\\left|1\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|0\\right\\rangle} &\\rightarrow \\underset{\\text{qubit}~1}{\\left|1\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|0\\right\\rangle}\\\\\n", "C_{U}: \\underset{\\text{qubit}~1}{\\left|1\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|1\\right\\rangle} &\\rightarrow \\underset{\\text{qubit}~1}{U\\left|1\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|1\\right\\rangle}\\\\\n", "\\end{align*}.$$\n", "\n", "In matrix form, the action of $C_{U}$ is\n", "\n", "$$\\begin{equation}\n", "\tC_U = \\begin{pmatrix}\n", "\t1 & 0 & 0 & 0 \\\\\n", "\t0 & u_{00} & 0 & u_{01} \\\\\n", "\t0 & 0 & 1 & 0 \\\\\n", "\t0 & u_{10} &0 & u_{11}\n", "\t\t\\end{pmatrix}.\n", "\\end{equation}$$\n", "\n", "To work out these matrix elements, let\n", "\n", "$$C_{(jk), (lm)} = \\left(\\underset{\\text{qubit}~1}{\\left\\langle j \\right|} \\otimes \\underset{\\text{qubit}~0}{\\left\\langle k \\right|}\\right) C_{U} \\left(\\underset{\\text{qubit}~1}{\\left| l \\right\\rangle} \\otimes \\underset{\\text{qubit}~0}{\\left| k \\right\\rangle}\\right),$$\n", "\n", "compute the action of $C_{U}$ (given above), and compute the inner products.\n", "\n", "As shown in the examples below, this operation is implemented in Qiskit as `cU(q[0],q[1])`.\n", "\n", "\n", "If **qubit 1 is the control and qubit 0 is the target**, then the basis vectors are transformed according to\n", "$$\\begin{align*}\n", "C_{U}: \\underset{\\text{qubit}~1}{\\left|0\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|0\\right\\rangle} &\\rightarrow \\underset{\\text{qubit}~1}{\\left|0\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|0\\right\\rangle}\\\\\n", "C_{U}: \\underset{\\text{qubit}~1}{\\left|0\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|1\\right\\rangle} &\\rightarrow \\underset{\\text{qubit}~1}{\\left|0\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|1\\right\\rangle}\\\\\n", "C_{U}: \\underset{\\text{qubit}~1}{\\left|1\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|0\\right\\rangle} &\\rightarrow \\underset{\\text{qubit}~1}{\\left|1\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{U\\left|0\\right\\rangle}\\\\\n", "C_{U}: \\underset{\\text{qubit}~1}{\\left|1\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{\\left|1\\right\\rangle} &\\rightarrow \\underset{\\text{qubit}~1}{\\left|1\\right\\rangle}\\otimes \\underset{\\text{qubit}~0}{U\\left|1\\right\\rangle}\\\\\n", "\\end{align*},$$\n", "\n", "\n", "which implies the matrix form of $C_{U}$ is\n", "$$\\begin{equation}\n", "\tC_U = \\begin{pmatrix}\n", "\t1 & 0 & 0 & 0 \\\\\n", "\t0 & 1 & 0 & 0 \\\\\n", "\t0 & 0 & u_{00} & u_{01} \\\\\n", "\t0 & 0 & u_{10} & u_{11}\n", "\t\t\\end{pmatrix}.\n", "\\end{equation}$$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:28.910884Z", "start_time": "2019-08-22T14:44:28.907821Z" } }, "outputs": [], "source": [ "q = QuantumRegister(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Controlled Pauli Gates\n", "\n", "#### Controlled-X (or, controlled-NOT) gate\n", "The controlled-not gate flips the `target` qubit when the control qubit is in the state $\\left|1\\right\\rangle$. If we take the MSB as the control qubit (e.g. `cx(q[1],q[0])`), then the matrix would look like\n", "\n", "$$\n", "C_X = \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 0 & 1\\\\\n", "0 & 0 & 1 & 0\n", "\\end{pmatrix}. \n", "$$\n", "\n", "However, when the LSB is the control qubit, (e.g. `cx(q[0],q[1])`), this gate is equivalent to the following matrix:\n", "\n", "$$\n", "C_X = \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 0 & 0 & 1\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 1 & 0 & 0\n", "\\end{pmatrix}. \n", "$$\n", "\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:28.926987Z", "start_time": "2019-08-22T14:44:28.912992Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 238.392x144.48 with 1 Axes>" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc = QuantumCircuit(2)\n", "qc.cx(0,1)\n", "qc.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]\n", " [0.+0.j 0.+0.j 0.+0.j 0.-1.j]\n", " [0.+0.j 0.+0.j 1.+0.j 0.+0.j]\n", " [0.+0.j 0.+1.j 0.+0.j 0.+0.j]]\n" ] } ], "source": [ "backend = Aer.get_backend('unitary_simulator')\n", "job = execute(qc, backend)\n", "result = job.result()\n", "print(result.get_unitary(qc, decimals=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Controlled $Y$ gate\n", "\n", "Apply the $Y$ gate to the target qubit if the control qubit is the MSB\n", "\n", "$$\n", "C_Y = \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 0 & -i\\\\\n", "0 & 0 & i & 0\n", "\\end{pmatrix},\n", "$$\n", "\n", "or when the LSB is the control\n", "\n", "$$\n", "C_Y = \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 0 & 0 & -i\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & i & 0 & 0\n", "\\end{pmatrix}.\n", "$$" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:28.959546Z", "start_time": "2019-08-22T14:44:28.952967Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 238.392x144.48 with 1 Axes>" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc = QuantumCircuit(2)\n", "qc.cy(0,1)\n", "qc.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:28.977853Z", "start_time": "2019-08-22T14:44:28.961213Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]\n", " [0.+0.j 0.+0.j 0.+0.j 0.-1.j]\n", " [0.+0.j 0.+0.j 1.+0.j 0.+0.j]\n", " [0.+0.j 0.+1.j 0.+0.j 0.+0.j]]\n" ] } ], "source": [ "backend = Aer.get_backend('unitary_simulator')\n", "job = execute(qc, backend)\n", "result = job.result()\n", "print(result.get_unitary(qc, decimals=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Controlled $Z$ (or, controlled Phase) gate\n", "\n", "Similarly, the controlled Z gate flips the phase of the target qubit if the control qubit is $\\left|1\\right\\rangle$. The matrix looks the same regardless of whether the MSB or LSB is the control qubit:\n", "\n", "$$\n", "C_Z = \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 0 & 0 & -1\n", "\\end{pmatrix}\n", "$$\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:28.986514Z", "start_time": "2019-08-22T14:44:28.979296Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 238.392x144.48 with 1 Axes>" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc = QuantumCircuit(2)\n", "qc.cz(0,1)\n", "qc.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.011687Z", "start_time": "2019-08-22T14:44:28.989792Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1.+0.j 0.+0.j 0.+0.j 0.+0.j]\n", " [ 0.+0.j 1.+0.j 0.+0.j 0.+0.j]\n", " [ 0.+0.j 0.+0.j 1.+0.j 0.+0.j]\n", " [ 0.+0.j 0.+0.j 0.+0.j -1.+0.j]]\n" ] } ], "source": [ "backend = Aer.get_backend('unitary_simulator')\n", "job = execute(qc, backend)\n", "result = job.result()\n", "print(result.get_unitary(qc, decimals=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Controlled Hadamard gate\n", "\n", "Apply $H$ gate to the target qubit if the control qubit is $\\left|1\\right\\rangle$. Below is the case where the control is the LSB qubit.\n", "\n", "$$\n", "C_H = \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & \\frac{1}{\\sqrt{2}} & 0 & \\frac{1}{\\sqrt{2}}\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & \\frac{1}{\\sqrt{2}} & 0& -\\frac{1}{\\sqrt{2}}\n", "\\end{pmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.031076Z", "start_time": "2019-08-22T14:44:29.019750Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 238.392x144.48 with 1 Axes>" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc = QuantumCircuit(2)\n", "qc.ch(0,1)\n", "qc.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.065683Z", "start_time": "2019-08-22T14:44:29.032833Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. -0.j 0. +0.j -0. +0.j 0. +0.j]\n", " [ 0. +0.j 0.707-0.j 0. +0.j 0.707-0.j]\n", " [ 0. -0.j 0. +0.j 1. -0.j 0. +0.j]\n", " [ 0. +0.j 0.707-0.j 0. +0.j -0.707+0.j]]\n" ] } ], "source": [ "backend = Aer.get_backend('unitary_simulator')\n", "job = execute(qc, backend)\n", "result = job.result()\n", "print(result.get_unitary(qc, decimals=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Controlled rotation gates\n", "\n", "#### Controlled rotation around Z-axis\n", "\n", "Perform rotation around Z-axis on the target qubit if the control qubit (here LSB) is $\\left|1\\right\\rangle$.\n", "\n", "$$\n", "C_{Rz}(\\lambda) = \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & e^{-i\\lambda/2} & 0 & 0\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 0 & 0 & e^{i\\lambda/2}\n", "\\end{pmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.075270Z", "start_time": "2019-08-22T14:44:29.068179Z" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMIAAAB7CAYAAAAmJF+MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAACSFJREFUeJzt3X9M1Pcdx/HnHdDjgFHFm2CxaAknlgvHCp0pXVrqNp1plq1ttJsWs2giLdKmVUnmRtEmjWAsW9PMSpa2i2QdZoOGjkayzv660ThbaI2Ounq0KnAtRfAnh2jh7vaH63U3XT3k7r6jvh7JNzGfO7j3Hzzz+XB4d6ZAIBBA5BpnNnoAkf8HCkEEhSACKAQRQCGIAApBBFAIIoBCEAEUggigEEQAhSACKAQRQCGIAApBBFAIIoBCEAEUggigEEQAhSACKAQRQCGIAApBBFAIIoBCEAEUggigEEQAhSACKAQRQCGIAApBBFAIIoBCEAEUggigEEQAhSACKAQRQCHIFYxfgM9HwO83epLoUggT5Pf7qaurw263k5iYSEFBAS6Xi9zcXMrKyoweLyICARg4DO/+Ad76DfytHtrr4eO3Yey80dNFR7zRA0w1q1evpqWlherqaoqKiti7dy/Lly9ncHCQ9evXGz1eRHzUDj3vAqYv18ZG4eg+GHDDrT+F65IMGy8qtCNMQGNjIw0NDbS2tlJZWcnChQupqqqiuLiY8fFxioqKABgYGGDx4sUkJSVRUFDA/v37DZ48fENH/h0BwGU+gfvcSfjwtZiOFBMKYQJqa2tZsmQJJSUlIes5OTkkJCSQn58PQHl5OfPnz+fEiRNUVFSwdOlSfD6fESNPWN9+QnaCyzneDRe8MRknZhRCmDweD11dXSxbtuyS23p7e3E4HFgsFoaHh9m9ezebNm3CarVSVlaGz+dj3759UZvNZDJF7PrUPXrZnSBEABZ/5/6IPm60rnAphDB5PB4AMjIyQtZHR0dxuVzBY1F3dzczZszAZrMF75Ofn8+hQ4diN+wkmE3h/UjEmeOiPElsKYQwffGD7Xa7Q9a3bdtGf38/hYWFAIyMjJCamhpyn9TUVLze6J0lAoFAxC5bluWKRyOAV17fFdHHjdYVLj1rFKbs7GycTic1NTWkpaWRmZlJc3MzbW1tAMEdITk5meHh4ZCvPXv2LCkpKTGf+WrM/hac+fQr7mCC6bMhOS1mI8WEdoQwmc1mmpqacDgclJeXs2rVKmw2GxUVFcTHx+N0OgGw2+0MDQ1x4sSJ4Nd2dXWRl5dn1OgTkjEfvmn/HzeaIN4C8xfFdKSYMAUmsn/IJVauXMmBAwc4ePBgcO2+++4jKyuLrVu38uKLL1JTU0N3dzdxcVPjXO33w7F3oO/9i38/AMAEM+2QcyckTTN0vKjQ0WiSOjs7ue2220LW6uvrKS0tZfr06djtdl566aUpEwGA2QzZxTB3Abzx9MW1Ox4CS7Kxc0WTQpgEr9eL2+1m7dq1Ievp6ens2bPHoKki5z+fGPo6RwAKYVJSUlKmzB/K5Kvpl2URFIIIoBBEAIUgAigEEUAhiAAKQQRQCCKAQhABFIIIoBBEAIUgAigEEUAhiAAKQQRQCCKAQhABFIIIoBBEAIUgAigEEUAhiAAKQQTQWz5eM16rM+Zxv19pzONOlHYEERSCCKAQRAC996n8l588eQPec6cwm+Mwm+PIyypm3bLnmDntRqNHiyrtCBI0dOYTTp7tZ8dj7/PKFi+/33iE0yPHeaFto9GjRZ1CkKDDfR0kJaaSNXM+AKnJM8jJLOTU8IDBk0WfQpCgw30d5M7+NiaTCZ9vnI4P/4LrwB/57i0rjB4t6vQ7ggQd7uug69jb3FM9jdHPvSQmJLFh2QuUFNxv9GhRpx1hgvx+P3V1ddjtdhITEykoKMDlcpGbm0tZWZnR401Kt6eTX67YxctPnqaxqg/b9bPpPf6h0WPFhHaECVq9ejUtLS1UV1dTVFTE3r17Wb58OYODg6xfv97o8a7aJ0MfMTx6Cvvsi58XPSN1FktLNrDz1Woe+N7jmM1mfL5xNj7/A/x+H97RU8SZ49nx2HsGTx4Z2hEmoLGxkYaGBlpbW6msrGThwoVUVVVRXFzM+Ph48LOWN2/eTF5eHmazmebmZoOnDs/hvg6+kZRG+vQ5wbXbHT/m9PAAXcfeBiAuLp6nHnydX6xoZFZaNk/8rMWocSNOIUxAbW0tS5YsoaSkJGQ9JyeHhIQE8vPzgYuftfzMM8+wYMECI8a8Ku6+DnJuuCVk7fpkG3lzb6f94Jcx9588yvaXH+bRpb9l5vSsWI8ZNToahcnj8dDV1cW6desuua23txeHw4HFYgGgtLQUgC1btsR0xsl46Ee/vuz602vbg//uGThEw6ubqLz/d6RYv14ftqwdIUwejweAjIyMkPXR0VFcLlfwWGQEk8l0xSsSNj63mIFTPWzeeQ8b6u9iZPRMRGaL5hUu7QhhstlsALjdbu6+++7g+rZt2+jv76ewsNCo0WJm1+Meo0eIGoUQpuzsbJxOJzU1NaSlpZGZmUlzczNtbW0Ahu4I4bykxKjXI0yVl7voaBQms9lMU1MTDoeD8vJyVq1ahc1mo6Kigvj4eJxOp9EjyiRoR5iAefPm8eabb4asrVy5kptvvhmr1RpcGxsbw+fz4ff7GRsb4/z581gsloid1SXytCNMUmdn5yXHojVr1mC1Wmlvb2fFihVYrVZ6enoMmlDCoRAmwev14na7L/lFeefOnQQCgZBr7ty5xgw5SUNnPmHHnx/jn73v8Oj221m34w7qWy99Cnmq09FoElJSUvD5fEaPEVXvufdQNG8R6dPm8NSDb3BdQiK1jQ9wtP8f3DQr3+jxIkYhSNCBj9/iiYZ7yZ5VwGcnj5KTeQvJidN45N7tWC0pwfvFmeMxm+MMnDTydDSSoPyb7iT3xgX8qvwtnNklPHLvs1wYOxcSwZFPD3JmZIg56XkGThp5CkGC+k8eYVZaNgCDZ/o47R0k+4aC4O1nz51k+8sPs2HZC0aNGDUKQYJ6PvuAORkOfH4fJpOZ99x/pci+CACfb5ytu0pZ88OnSEvNuMJ3mnoUggQdG/iAuekOxsYvcNp7nP0fvc682bcC4DrYhLuvg+d3/5wN9Xdx6NjfDZ42svSWj9eIq/kvFq4Df5r0yzT1lo8y5V0Lr1X+gnYEEbQjiAAKQQRQCCKAQhABFIIIoBBEAIUgAigEEUAhiAAKQQRQCCKAQhABFIIIoBBEAIUgAigEEUAhiAAKQQRQCCIA/AsI7zbz5poALAAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 238.392x144.48 with 1 Axes>" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc = QuantumCircuit(2)\n", "qc.crz(pi/2,0,1)\n", "qc.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.097737Z", "start_time": "2019-08-22T14:44:29.077144Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1. +0.j 0. +0.j 0. +0.j 0. +0.j ]\n", " [0. +0.j 0.707-0.707j 0. +0.j 0. +0.j ]\n", " [0. +0.j 0. +0.j 1. +0.j 0. +0.j ]\n", " [0. +0.j 0. +0.j 0. +0.j 0.707+0.707j]]\n" ] } ], "source": [ "backend = Aer.get_backend('unitary_simulator')\n", "job = execute(qc, backend)\n", "result = job.result()\n", "print(result.get_unitary(qc, decimals=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Controlled phase rotation\n", "\n", "Perform a phase rotation if both qubits are in the $\\left|11\\right\\rangle$ state. The matrix looks the same regardless of whether the MSB or LSB is the control qubit.\n", "\n", "$$\n", "C_{u1}(\\lambda) = \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 0 & 0 & e^{i\\lambda}\n", "\\end{pmatrix}\n", "$$" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.109452Z", "start_time": "2019-08-22T14:44:29.101472Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 238.392x144.48 with 1 Axes>" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc = QuantumCircuit(2)\n", "qc.cu1(pi/2,0,1)\n", "qc.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.137034Z", "start_time": "2019-08-22T14:44:29.111045Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]\n", " [0.+0.j 1.+0.j 0.+0.j 0.+0.j]\n", " [0.+0.j 0.+0.j 1.+0.j 0.+0.j]\n", " [0.+0.j 0.+0.j 0.+0.j 0.+1.j]]\n" ] } ], "source": [ "backend = Aer.get_backend('unitary_simulator')\n", "job = execute(qc, backend)\n", "result = job.result()\n", "print(result.get_unitary(qc, decimals=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Controlled $u3$ rotation\n", "\n", "Perform controlled-$u3$ rotation on the target qubit if the control qubit (here LSB) is $\\left|1\\right\\rangle$. \n", "\n", "$$\n", "C_{u3}(\\theta, \\phi, \\lambda) \\equiv \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & e^{-i(\\phi+\\lambda)/2}\\cos(\\theta/2) & 0 & -e^{-i(\\phi-\\lambda)/2}\\sin(\\theta/2)\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & e^{i(\\phi-\\lambda)/2}\\sin(\\theta/2) & 0 & e^{i(\\phi+\\lambda)/2}\\cos(\\theta/2)\n", "\\end{pmatrix}.\n", "$$" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.151148Z", "start_time": "2019-08-22T14:44:29.138921Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 298.592x144.48 with 1 Axes>" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc = QuantumCircuit(2)\n", "qc.cu3(pi/2, pi/2, pi/2, 0,1)\n", "qc.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.249713Z", "start_time": "2019-08-22T14:44:29.153125Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 1. +0.j 0. +0.j 0. +0.j 0. +0.j ]\n", " [ 0. +0.j 0.707+0.j 0. +0.j -0. -0.707j]\n", " [ 0. +0.j 0. +0.j 1. +0.j 0. +0.j ]\n", " [ 0. +0.j 0. +0.707j 0. +0.j -0.707+0.j ]]\n" ] } ], "source": [ "backend = Aer.get_backend('unitary_simulator')\n", "job = execute(qc, backend)\n", "result = job.result()\n", "print(result.get_unitary(qc, decimals=3))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SWAP gate\n", "\n", "The SWAP gate exchanges the two qubits. It transforms the basis vectors as\n", "\n", "$$\\left|00\\right\\rangle \\rightarrow \\left|00\\right\\rangle~,~\\left|01\\right\\rangle \\rightarrow \\left|10\\right\\rangle~,~\\left|10\\right\\rangle \\rightarrow \\left|01\\right\\rangle~,~\\left|11\\right\\rangle \\rightarrow \\left|11\\right\\rangle,$$\n", "\n", "which gives a matrix representation of the form\n", "\n", "$$\n", "\\mathrm{SWAP} = \n", "\\begin{pmatrix}\n", "1 & 0 & 0 & 0\\\\\n", "0 & 0 & 1 & 0\\\\\n", "0 & 1 & 0 & 0\\\\\n", "0 & 0 & 0 & 1\n", "\\end{pmatrix}.\n", "$$" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.269550Z", "start_time": "2019-08-22T14:44:29.255532Z" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "<Figure size 238.392x144.48 with 1 Axes>" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "qc = QuantumCircuit(2)\n", "qc.swap(0,1)\n", "qc.draw(output='mpl')" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "ExecuteTime": { "end_time": "2019-08-22T14:44:29.287594Z", "start_time": "2019-08-22T14:44:29.272220Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1.+0.j 0.+0.j 0.+0.j 0.+0.j]\n", " [0.+0.j 0.+0.j 1.+0.j 0.+0.j]\n", " [0.+0.j 1.+0.j 0.+0.j 0.+0.j]\n", " [0.+0.j 0.+0.j 0.+0.j 1.+0.j]]\n" ] } ], "source": [ "backend = Aer.get_backend('unitary_simulator')\n", "job = execute(qc, backend)\n", "result = job.result()\n", "print(result.get_unitary(qc, decimals=3))" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }