{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "tags": [ "thebelab-init" ] }, "outputs": [], "source": [ "# importing Qiskit\n", "from qiskit_aer import AerSimulator\n", "from qiskit import QuantumCircuit, transpile, assemble\n", "\n", "# import basic plot tools\n", "from qiskit.tools.visualization import plot_histogram" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Creating some basic quantum circuits in Qiskit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To get you warmed up, let's create some basic circuits in Qiskit. Implement the following circuits:" ] }, { "attachments": { "circuit1.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:**![circuit1.png](attachment:circuit1.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "circuit1 = QuantumCircuit(4,0)\n", "\n", "# Your answer here:\n", "...\n", "\n", "circuit1.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Answer (Click me!)\n", "\n", "```python\n", "circuit1 = QuantumCircuit(4,0)\n", "\n", "# Your answer here:\n", "for qubit in range(3):\n", " circuit1.cx(qubit, 3)\n", "\n", "circuit1.draw()\n", "```\n", "
" ] }, { "attachments": { "circuit2.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:**![circuit2.png](attachment:circuit2.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "circuit2 = QuantumCircuit(3)\n", "\n", "# Your circuit here:\n", "...\n", "\n", "circuit2.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Answer (Click me!)\n", "\n", "```python\n", "circuit2 = QuantumCircuit(3)\n", "\n", "# Your circuit here:\n", "circuit2.h(2)\n", "circuit2.cx(1, 2)\n", "circuit2.cx(0, 2)\n", "circuit2.h(1)\n", "circuit2.cx(0, 1)\n", "circuit2.h(0)\n", "\n", "circuit2.draw()\n", "```\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** Now, add a measurement to all of the qubits of `circuit2`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Your circuit here:\n", "...\n", "\n", "circuit2.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Answer (Click me!)\n", "\n", "```python\n", "# Your circuit here:\n", "circuit2.measure_all()\n", "\n", "circuit2.draw()\n", "```\n", "
" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove_cell" ] }, "source": [ "# Simon's Algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "[*This section is a modified version of the Jupyter notebook available at https://qiskit.org/textbook/content/ch-algorithms/simon.ipynb. Changes are due to Robert I. Booth.*]\n", "\n", "In this section, we first introduce the Simon problem, and classical and quantum algorithms to solve it. We then implement the quantum algorithm using Qiskit, and run on a simulator." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. Introduction \n", "\n", "Simon's algorithm, first introduced in Reference [1], was the first quantum algorithm to show an exponential speed-up versus the best classical algorithm in solving a specific problem. This inspired the quantum algorithms based on the quantum Fourier transform, which is used in the most famous quantum algorithm: Shor's factoring algorithm.\n", "\n", "### 1a. Simon's Problem \n", "\n", "We are given an unknown blackbox function $f$, which is guaranteed to be either one-to-one ($1:1$) or two-to-one ($2:1$), where one-to-one and two-to-one functions have the following properties:\n", "\n", "- **one-to-one**: maps exactly one unique output for every input. An example with a function that takes 4 inputs is:\n", "\n", "$$f(1) \\rightarrow 1, \\quad f(2) \\rightarrow 2, \\quad f(3) \\rightarrow 3, \\quad f(4) \\rightarrow 4$$\n", "\n", "- **two-to-one**: maps exactly two inputs to every unique output. An example with a function that takes 4 inputs is:\n", "\n", "$$f(1) \\rightarrow 1, \\quad f(2) \\rightarrow 2, \\quad f(3) \\rightarrow 1, \\quad f(4) \\rightarrow 2$$\n", "\n", "This two-to-one mapping is according to a hidden bitstring, $b$, where:\n", "\n", "$$\n", "\\textrm{given }x_1,x_2: \\quad f(x_1) = f(x_2) \\\\\n", "\\textrm{it is guaranteed }: \\quad x_1 \\oplus x_2 = b\n", "$$\n", "\n", "Given this blackbox $f$, how quickly can we determine if $f$ is one-to-one or two-to-one? Then, if $f$ turns out to be two-to-one, how quickly can we determine $b$? As it turns out, both cases boil down to the same problem of finding $b$, where a bitstring of $b={000...}$ represents the one-to-one $f$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1b. Simon's Algorithm \n", "\n", "#### Classical Solution\n", "\n", "Classically, if we want to know what $b$ is with 100% certainty for a given $f$, we have to check up to $2^{n−1}+1$ inputs, where n is the number of bits in the input. This means checking just over half of all the possible inputs until we find two cases of the same output. Much like the Deutsch-Jozsa problem, if we get lucky, we could solve the problem with our first two tries. But if we happen to get an $f$ that is one-to-one, or get _really_ unlucky with an $f$ that’s two-to-one, then we’re stuck with the full $2^{n−1}+1$.\n", "There are known algorithms that have a lower bound of $\\Omega(2^{n/2})$ (see Reference 2 below), but generally speaking the complexity grows exponentially with n." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Quantum Solution\n", "\n", "The quantum circuit that implements Simon's algorithm is shown below.\n", "\n", "![image1](images/simon_steps.png)\n", "\n", "Where the query function, $\\text{Q}_f$ acts on two quantum registers as:\n", "\n", "\n", "$$ \\lvert x \\rangle \\lvert a \\rangle \\rightarrow \\lvert x \\rangle \\lvert a \\oplus f(x) \\rangle $$\n", "\n", "In the specific case that the second register is in the state $|0\\rangle = |00\\dots0\\rangle$ we have:\n", "\n", "$$ \\lvert x \\rangle \\lvert 0 \\rangle \\rightarrow \\lvert x \\rangle \\lvert f(x) \\rangle $$\n", "\n", "The algorithm involves the following steps.\n", "
    \n", "
  1. Two $n$-qubit input registers are initialized to the zero state: \n", " \n", "\n", "$$\\lvert \\psi_1 \\rangle = \\lvert 0 \\rangle^{\\otimes n} \\lvert 0 \\rangle^{\\otimes n} $$\n", "\n", "
  2. \n", " \n", "
  3. Apply a Hadamard transform to the first register:\n", " \n", "\n", "$$\\lvert \\psi_2 \\rangle = \\frac{1}{\\sqrt{2^n}} \\sum_{x \\in \\{0,1\\}^{n} } \\lvert x \\rangle\\lvert 0 \\rangle^{\\otimes n} $$\n", "\n", " \n", "
  4. \n", " \n", "
  5. Apply the query function $\\text{Q}_f$: \n", " \n", "\n", "$$ \\lvert \\psi_3 \\rangle = \\frac{1}{\\sqrt{2^n}} \\sum_{x \\in \\{0,1\\}^{n} } \\lvert x \\rangle \\lvert f(x) \\rangle $$\n", "\n", " \n", "
  6. \n", " \n", "
  7. Measure the second register. A certain value of $f(x)$ will be observed. Because of the setting of the problem, the observed value $f(x)$ could correspond to two possible inputs: $x$ and $y = x \\oplus b $. Therefore the first register becomes:\n", " \n", "\n", "$$\\lvert \\psi_4 \\rangle = \\frac{1}{\\sqrt{2}} \\left( \\lvert x \\rangle + \\lvert y \\rangle \\right)$$\n", "\n", "\n", " where we omitted the second register since it has been measured. \n", "
  8. \n", " \n", "
  9. Apply Hadamard on the first register:\n", " \n", "\n", "$$ \\lvert \\psi_5 \\rangle = \\frac{1}{\\sqrt{2^{n+1}}} \\sum_{z \\in \\{0,1\\}^{n} } \\left[ (-1)^{x \\cdot z} + (-1)^{y \\cdot z} \\right] \\lvert z \\rangle $$\n", "\n", "\n", "
  10. \n", " \n", "
  11. Measuring the first register will give an output only if:\n", " \n", "\n", "$$ (-1)^{x \\cdot z} = (-1)^{y \\cdot z} $$\n", "\n", "\n", " which means:\n", " $$ x \\cdot z = y \\cdot z \\\\\n", " x \\cdot z = \\left( x \\oplus b \\right) \\cdot z \\\\\n", " x \\cdot z = x \\cdot z \\oplus b \\cdot z \\\\\n", " b \\cdot z = 0 \\text{ (mod 2)} $$\n", " \n", " A string $z$ will be measured, whose inner product with $b = 0$. Thus, repeating the algorithm $\\approx n$ times, we will be able to obtain $n$ different values of $z$ and the following system of equation can be written:\n", " \n", " \n", "\n", "$$ \\begin{cases} b \\cdot z_1 = 0 \\\\ b \\cdot z_2 = 0 \\\\ \\quad \\vdots \\\\ b \\cdot z_n = 0 \\end{cases}$$\n", "\n", "\n", " \n", " From which $b$ can be determined, for example by Gaussian elimination.\n", "
  12. \n", "
\n", "\n", "So, in this particular problem the quantum algorithm performs exponentially fewer steps than the classical one. Once again, it might be difficult to envision an application of this algorithm (although it inspired the most famous algorithm created by Shor) but it represents the first proof that there can be an exponential speed-up in solving a specific problem by using a quantum computer rather than a classical one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. Example \n", "\n", "Let's see the example of Simon's algorithm for 2 qubits with the secret string $b=11$, so that $f(x) = f(y)$ if $y = x \\oplus b$. The quantum circuit to solve the problem is:\n", "\n", "![image2](images/simon_example.png)\n", "\n", "
    \n", "
  1. Two $2$-qubit input registers are initialized to the zero state:\n", " \n", "\n", "$$\\lvert \\psi_1 \\rangle = \\lvert 0 0 \\rangle_1 \\lvert 0 0 \\rangle_2 $$\n", "\n", "
  2. \n", " \n", "
  3. Apply Hadamard gates to the qubits in the first register:\n", " \n", "\n", "$$\\lvert \\psi_2 \\rangle = \\frac{1}{2} \\left( \\lvert 0 0 \\rangle_1 + \\lvert 0 1 \\rangle_1 + \\lvert 1 0 \\rangle_1 + \\lvert 1 1 \\rangle_1 \\right) \\lvert 0 0 \\rangle_2 $$\n", "\n", "
  4. \n", " \n", "
  5. For the string $b=11$, the query function can be implemented as $\\text{Q}_f = CX_{1_a 2_a}CX_{1_a 2_b}CX_{1_b 2_a}CX_{1_b 2_b}$ (as seen in the circuit diagram above):\n", " \n", "$$\n", "\\begin{aligned}\n", "\\lvert \\psi_3 \\rangle = \\frac{1}{2} ( \\; \n", " & \\lvert 0 0 \\rangle_1 \\; \\lvert 0\\oplus 0 \\oplus 0, & 0 \\oplus 0 \\oplus 0 \\rangle_2 &\\\\[5pt]\n", "+ & \\lvert 0 1 \\rangle_1 \\; \\lvert 0\\oplus 0 \\oplus 1, & 0 \\oplus 0 \\oplus 1 \\rangle_2 &\\\\[6pt]\n", "+ & \\lvert 1 0 \\rangle_1 \\; \\lvert 0\\oplus 1 \\oplus 0, & 0 \\oplus 1 \\oplus 0 \\rangle_2 &\\\\[6pt]\n", "+ & \\lvert 1 1 \\rangle_1 \\; \\lvert 0\\oplus 1 \\oplus 1, & 0 \\oplus 1 \\oplus 1 \\rangle_2 & \\; )\\\\\n", "\\end{aligned}\n", "$$\n", " \n", "Thus: \n", "\n", "$$ \n", "\\begin{aligned} \n", "\\lvert \\psi_3 \\rangle = \\frac{1}{2} ( \\quad\n", "& \\lvert 0 0 \\rangle_1 \\lvert 0 0 \\rangle_2 & \\\\[6pt]\n", "+ & \\lvert 0 1 \\rangle_1 \\lvert 1 1 \\rangle_2 & \\\\[6pt]\n", "+ & \\lvert 1 0 \\rangle_1 \\lvert 1 1 \\rangle_2 & \\\\[6pt]\n", "+ & \\lvert 1 1 \\rangle_1 \\lvert 0 0 \\rangle_2 & \\; )\\\\\n", "\\end{aligned}\n", "$$ \n", "
  6. \n", " \n", "
  7. We measure the second register. With $50\\%$ probability we will see either $\\lvert 0 0 \\rangle_2$ or $\\lvert 1 1 \\rangle_2$. For the sake of the example, let us assume that we see $\\lvert 1 1 \\rangle_2$. The state of the system is then\n", " \n", "\n", "$$ \\lvert \\psi_4 \\rangle = \\frac{1}{\\sqrt{2}} \\left( \\lvert 0 1 \\rangle_1 + \\lvert 1 0 \\rangle_1 \\right) $$\n", "\n", "\n", " \n", " where we omitted the second register since it has been measured.\n", " \n", "
  8. \n", " \n", " \n", " \n", "
  9. Apply Hadamard on the first register\n", " $$ \\lvert \\psi_5 \\rangle = \\frac{1}{2\\sqrt{2}} \\left[ \\left( \\lvert 0 \\rangle + \\lvert 1 \\rangle \\right) \\otimes \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right) + \\left( \\lvert 0 \\rangle - \\lvert 1 \\rangle \\right) \\otimes \\left( \\lvert 0 \\rangle + \\lvert 1 \\rangle \\right) \\right] \\\\\n", " = \\frac{1}{2\\sqrt{2}} \\left[ \\lvert 0 0 \\rangle - \\lvert 0 1 \\rangle + \\lvert 1 0 \\rangle - \\lvert 1 1 \\rangle + \\lvert 0 0 \\rangle + \\lvert 0 1 \\rangle - \\lvert 1 0 \\rangle - \\lvert 1 1 \\rangle \\right] \\\\\n", " = \\frac{1}{\\sqrt{2}} \\left( \\lvert 0 0 \\rangle - \\lvert 1 1 \\rangle \\right)$$\n", " \n", "
  10. \n", " \n", "
  11. Measuring the first register will give either $\\lvert 0 0 \\rangle$ or $\\lvert 1 1 \\rangle$ with equal probability. \n", "
  12. \n", "
  13. \n", " If we see $\\lvert 1 1 \\rangle$, then: \n", " \n", "\n", "$$ b \\cdot 11 = 0 $$\n", "\n", "which tells us that $b \\neq 01$ or $10$, and the two remaining potential solutions are $b = 00$ or $b = 11$. Note that $b = 00$ will always be a trivial solution to our simultaneous equations. If we repeat steps 1-6 many times, we would only measure $|00\\rangle$ or $|11\\rangle$ as\n", "\n", "$$ b \\cdot 11 = 0 $$\n", "$$ b \\cdot 00 = 0 $$\n", " \n", "are the only equations that satisfy $b=11$. We can verify $b=11$ by picking a random input ($x_i$) and checking $f(x_i) = f(x_i \\oplus b)$. For example:\n", "\n", "$$ 01 \\oplus b = 10 $$\n", "$$ f(01) = f(10) = 11$$\n", "\n", "
  14. \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. Exercise: Implement Simon's algorithm in Qiskit \n", "\n", "Let's now implement Simon's algorithm for an example with $3$-qubits and $b=110$. IBM provides a implementation of the oracle for Simon's algorithm, which we will use in this exercise. In the following exercise, we'll write out own implementation of the oracle." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:** See if you can implement Simon's algorithm, up to the measurement and ignoring the resolution of the linear equations at the end. If you get stuck, there are hints below as well as a solution to compare yours to.\n", "\n", "First, we should instantiate a QuantumCircuit on $2 \\times 3 = 6$ qubits and $3$ bits:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from qiskit_textbook.tools import simon_oracle\n", "\n", "b = '110'\n", "\n", "n = len(b)\n", "simon_circuit = QuantumCircuit(n*2, n)\n", "\n", "# Your implementation of Simon's algorithm:\n", "...\n", "\n", "simon_circuit.draw()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Remember, in Qiskit, measurements are only allowed at the end of the quantum circuit. In the case of Simon's algorithm, we actually do not care about the output of the second register, and will only measure the first register (the first n qubits)." ] }, { "attachments": { "my_simon_circuit.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Hint (Click me!) \n", "\n", "The final circuit should look something like this, where the circuit between the barriers is the oracle implemented by `simon_oracle`:\n", "\n", "![my_simon_circuit.png](attachment:my_simon_circuit.png)\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Even more of a hint (Click me!) \n", "\n", "Here is an outline of the structure of the circuit:\n", "```python\n", "b = '110'\n", "\n", "n = len(b)\n", "simon_circuit = QuantumCircuit(n*2, n)\n", "\n", "# Apply Hadamard gates before querying the oracle\n", "... \n", " \n", "# Apply the oracle\n", "...\n", "\n", "# Apply Hadamard gates to the input register\n", "...\n", "\n", "# Measure first n qubits\n", "...\n", "\n", "simon_circuit.draw()\n", "```\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Answer (Click me!)\n", "\n", "```python\n", "b = '110'\n", "\n", "n = len(b)\n", "simon_circuit = QuantumCircuit(n*2, n)\n", "\n", "# Apply Hadamard gates before querying the oracle\n", "simon_circuit.h(range(n)) \n", " \n", "# Apply the oracle, surrounded by barriers for visual separation`\n", "simon_circuit.barrier()\n", "simon_circuit = simon_circuit.compose(simon_oracle(b))\n", "simon_circuit.barrier()\n", "\n", "# Apply Hadamard gates to the input register\n", "simon_circuit.h(range(n))\n", "\n", "# Measure qubits\n", "simon_circuit.measure(range(n), range(n))\n", "simon_circuit.draw()\n", "```\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Experiment with Simulators \n", "\n", "We can run the above circuit on the simulator. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# use local simulator\n", "simulator = AerSimulator()\n", "simon_circuit.measure_all()\n", "simon_circuit = transpile(simon_circuit, simulator)\n", "result = simulator.run(simon_circuit).result()\n", "counts = result.get_counts(simon_circuit)\n", "from qiskit.tools.visualization import plot_histogram\n", "plot_histogram(counts)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we know $b$ already, we can verify these results do satisfy $b\\cdot z = 0 \\pmod{2}$:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Calculate the dot product of the results\n", "def bdotz(b, z):\n", " accum = 0\n", " for i in range(len(b)):\n", " accum += int(b[i]) * int(z[i])\n", " return (accum % 2)\n", "\n", "for z in counts:\n", " print( '{}.{} = {} (mod 2)'.format(b, z, bdotz(b,z)) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using these results, we can recover the value of $b = 110$ by solving this set of simultaneous equations. For example, say we first measured `001`, this tells us:\n", "\n", "$$\n", "\\require{cancel}\n", "\\begin{aligned}\n", "b \\cdot 001 &= 0 \\\\\n", "(b_2 \\cdot 0) + (b_1 \\cdot 0) + (b_0 \\cdot 1) & = 0 \\\\\n", "(\\cancel{b_2 \\cdot 0}) + (\\cancel{b_1 \\cdot 0}) + (b_0 \\cdot 1) & = 0 \\\\\n", "b_0 & = 0\\\\\n", "\\end{aligned}\n", "$$\n", "\n", "If we next measured `111`, we have:\n", "\n", "$$\n", "\\require{cancel}\n", "\\begin{aligned}\n", "b \\cdot 111 &= 0 \\\\\n", "(b_2 \\cdot 1) + (b_1 \\cdot 1) + (\\cancel{0 \\cdot 1}) & = 0 \\\\\n", "(b_2 \\cdot 1) + (b_1 \\cdot 1) & = 0 \\\\\n", "\\end{aligned}\n", "$$\n", "\n", "Which tells us either:\n", "\n", "$$ b_2 = b_1 = 0, \\quad b = 000 $$\n", "\n", "or \n", "\n", "$$ b_2 = b_1 = 1, \\quad b = 110 $$\n", "\n", "Of which $b = 110$ is the non-trivial solution to our simultaneous equations. We can solve these problems in general using [Gaussian elimination](https://mathworld.wolfram.com/GaussianElimination.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. Oracle \n", "\n", "To implement the oracle, we need to discuss the Simon query function or oracle in more detail.\n", "\n", "The Simon algorithm deals with finding a hidden bitstring $b \\in \\{0,1\\}^n$ from an oracle $f_b$ that satisfies $f_b(x) = f_b(y)$ if and only if $y = x \\oplus b$ for all $x \\in \\{0,1\\}^n$. Here, the $\\oplus$ is the bitwise XOR operation. Thus, if $b = 0\\ldots 0$, i.e., the all-zero bitstring, then $f_b$ is a 1-to-1 (or, permutation) function. Otherwise, if $b \\neq 0\\ldots 0$, then $f_b$ is a 2-to-1 function. \n", "\n", "In the algorithm, the oracle receives $|x\\rangle|0\\rangle$ as input. With regards to a predetermined $b$, the oracle writes its output to the second register so that it transforms the input to $|x\\rangle|f_b(x)\\rangle$ such that $f(x) = f(x\\oplus b)$ for all $x \\in \\{0,1\\}^n$. \n", "\n", "Such a blackbox function can be realized by the following procedures.\n", "\n", "- Copy the content of the first register to the second register.\n", "$$\n", "|x\\rangle|0\\rangle \\rightarrow |x\\rangle|x\\rangle\n", "$$\n", "\n", "- **(Creating 1-to-1 or 2-to-1 mapping)** If $b$ is not all-zero, then there is the least index $j$ so that $b_j = 1$. If $x_j = 0$, then XOR the second register with $b$. Otherwise, do not change the second register.\n", "$$\n", "|x\\rangle|x\\rangle \\rightarrow |x\\rangle|x \\oplus b\\rangle~\\mbox{if}~x_j = 0~\\mbox{for the least index j}\n", "$$\n", "\n", "- **(Creating random permutation)** Randomly permute and flip the qubits of the second register.\n", "$$\n", "|x\\rangle|y\\rangle \\rightarrow |x\\rangle|f_b(y)\\rangle\n", "$$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise:**\n", "\n", "1. Ignoring the random permutation, implement a function that returns a Simon oracle for a given bitstring:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def my_simon_oracle(b):\n", " n = len(b)\n", " qc = QuantumCircuit(n*2)\n", " \n", " # Your implementation below:\n", " ...\n", " \n", " return qc " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The copy operation can be implemented with controlled-X gates: CX|x>|0> = |x>|x>" ] }, { "attachments": { "my_simon_oracle.png": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdUAAAF+CAIAAABbABeNAAAgAElEQVR4nO3deUBUVd8H8HvunZ1hGUAYEAkNXEpRlHIpTXJJ5RG31CzN3E1R3xLN5+lxSVPTSuNRezQBySUjS800TXMp1/RJzcC9BDJQQZBlhoGZuff9wwxQ8TAzMPcOfD//cefOOT/OnPndM+cuhwiCwAAAgNOxYgcAAFBPIf8CAIgD+RcAQBzIvwAA4kD+BQAQB/IvAIA4kH8BAMSB/AsAIA7kXwAAcSD/AgCIA/kXAEAczs6/wp0zn858sWOYn1ahUOsaPhn16rtfXzE6OQgAAAkgznz+jlD4w6wu0e+fI6E9Xhr4bGNN0ZWDX6T88Idbt+UHd01tqXBaHLYz51z+NaOQr+JV1jMkPMxX5tSIAGqXS/d5lwleoONzjq0YF9Xcz00hd2vQ9LkxK3/K/m6CnuUem/pDWTXe/jfz2XmtFUTd7t8/Ff1ddO53E8NkxKPn6gzrA/ubvnrJjTCM4vlV1x980amsf6yMesThQdlzzQ1e3AgBapZL93mXCZ4+/2BOWzaw19SE/7Fd3lie+MkHUzobE4cOXvJzgcAolDYNWS2nN29OM7v3nv7mU9p724hP97cmd5QX/bBpa0ZVBysAgDqJOgY37P3w/aPFXtEJe1NGNWQZhmFGDO8yObL3EYEQwpLq1yTknP453SJv1+lpz4rvYhu27/AYe+TcybMmprGm8lsIy3Ecx7EssaEeAADXQMu/5rP7D+UKmphhAxreGyoTr6jRQ5quXXzFtpqs2dezrAyrbxjACjfW9AyZ+H2pavCWO18MDAgK4ISM7D9v84ym0nBcOWBTgXmTbbXcIxiyL6ffNlPmtnlTiUWlpo3iWfcAN3qNpTm/Xb1ZQptMLzGWqDVqamFEIAKpieCF0hKTQq2mHL8IQwQiMAgewf/Flfu884Mnan3o475Kep0PosxPFG7spyJc2IwT5opb89f3VTGypjN/Mlf1vgeVHXmzCUe0L28zCXz26u5KhmFUg7eYBD57dQ8lI2+/5JLFjvmTKms7GNuIo/7znHcjOb2JlD1Xn1lBm04yn3unDb0sogpW0Mfy8rAO+poKXh6sq0ZRgR1CETyD4P/m0n3e+cG3fTfNvuxFGf8KRmOJIBC1RlVps0qlsnlKgGg0aiJYTCYLQ9yfGjVvwXMW2RNPyhjBVGISGKLW0IYKNpG1GpfwVTcj5ehmKSoq1bq7USpm/Vp7nEmhVMiGDF3+Zfgd2iR2YVGhh7sHZSfCcgxvpR2ZqxW8YCg0KD20tJ85hGMZK0+rEcHfVfeDd+k+7/zgWa8nGtl3JS+lexCVWkUYwWiolMmEgjsF1C5zPy4wuCFHLv/5R5aVCWv78qy2f203X8+4biVujYJ9a/JaZOIT3rNfeE2Vxl8/Q63QvVnXmGY1VSGAyFy6z7tM8LScpwkO8eP4rEtXCivk29LUM2lmW2siPk91aMpZ0n48llcxdVuv/nj4Oq9q16mdXdMnAACuipZ/5RFRnXWk5NCGlGvWvzZZMz6L35It2DxbIGs1bMRTKsPeD5ccvnMvA1uvb5n/37NW3+jRAwIfCKV02yuecplM02N1FtZoBoA6h3r9mXvv6dPabZ+zP657n4vj+jbX5J37et0+XXQPz/X7ba2Laz55xZwdPd5e1rvt6SGDujRR56ft+WLr/3IbDk5+f4j/Q/K5wFutVivL84LAMKJegsbKVW5ublVN1ytVclwgB3WMS/d5lwm+GufoLNkH3x/5bJivRi5383+i5/99diHvq2FaYuP1D3fxRee/mDPs2Wb+7kqFWhfU+oUJyw9cr+IuOunc/wYAUPPse/5D6dZhPi9+2XDG0bQlT0viLmoAAJfj6DUHQv6GAZ4qGrXf6J2lNRIvAEBd4ejolehGbCsYUSOhAADUK3j+OgCAOJz6/F8AAPgbxr8AAOJA/rWd5czK4f3HJ1200ncFqBNcus9LOHjkX9vxOee+//bghXw8MB7qC5fu8xIOHvkXAEAcyL8AAOJA/gUAEAfyLwCAOJB/AQDEgfwLACAO5F8AAHEg/wIAiAP5FwBAHMi/AADiQP4FABAH8i8AgDiQfwEAxIH8CwAgDuRfAABxIP8CAIgD+RcAQBzIvwAA4kD+BQAQB/IvAIA4kH8BAMSB/Gs7y7XzBdZbv/xmETsQACdx6T4v4eCRf20na9zci3VvrJeJHQiAk7h0n5dw8Mi/dpApWIZVSPDTBKglLt3npRs88i8AgDiQfwEAxCFS/jVd2fByEzmraL/kklWcCAAARObMORHBYsi7kZ565LutG9ckH74p8IITK6/HzDmXf80o5Kt4lfUMCQ/zleLcGEBdV53xr5B7fOX451v4a5UKrV+zrmNXnbyxd2IAJwuZ9qPZhqpKt7+qb9CoZdQrs7cX9/ho67xOctobtg7TsoQou338Z1XJA+j4m19M7PhUlTrFbr2NAyGAGOjjHnPasoG9ZhwRWgx6Y3lMC23BhT2JQwfrfAsEJkipsKmqlq8sXR0d3Kbzc5HBWpKT+IXdQQMA1AHU/GvY++H7R4u9ohP2poxqyDIMw4wY3mVyZO8jAiGEJTZUxYVFvx52749qjbgIy3Ecx7EssaUeAACXQMu/5rP7D+UKmphhAxrem6ogXlGjhzRdu/hKbcemHLCpwLzJvvcKhuzL6bfNlDTPm0osKjVlFM/fvnLq8m2h/BBgvXjBKBjO70pKuMr9vZGogp5sHaSlHShKjCVqjZqyE8MQgQikJoJnWPcAN2p1TGnOb1dvltAOis4OXigtMSnUakqbEoYIRKAe0RH8XXW/zzs/eKLWhz7uq6Ts9VDCoxVu7KciXNiME+aKW/PX91UxsqYzfzJX9T4a/lZCLyUjf/q9ixZ7i3iksoOxjTjqP895N6JNQjMMIw/WVaOowA6h9LKIKlhBH8vLwzroayp4Zc/VZ1ZEPaLHKnuuuWE+904bKQbv0i2P4O+qD8G3fTfNvjxGGf8KRmOJIBC1RlVps0qlkviUgKzVuISvuhkph1NLUVGp1t2N8q8I2sciWwaUf1bmI7OeHravT8qJhRVPIZqyUs9lFtNOFBYWFXq4e1B2IizH8FbamKh6wbN+rT3OpFCKYkOGLv8y/I7UghcMhQalh5b2G41wLGOlXkyD4O+qB33e6cGzXk80su9KXkr3ICq1ijCC0VApkwkFdwokfvEY8Qnv2S+8dsou89awDKfx1uv1FQ+gen1I29qp0DH89TO0XYh7s64xzZwRDLgmF+vzlUk4eFrW1gSH+HF81qUrhRXybWnqmTRbrjwDAIAH0PKvPCKqs46UHNqQcu3ejWrWjM/it2QLtT//ULrtFU+5TKbpsTpL2oNtAAA7UK8/c+89fVq77XP2x3Xvc3Fc3+aavHNfr9uni+7huX6/jVXxWYeSPv/fvUlGw8lrVoa/cThpGdeAMAzDNeo2dkiEe6WsLvBWq9XK8rwgMIy055uljJWr3NzcqjrXoFTJ0bQAoqDff6GM+OeOnapZsz/ZlTj3IPEOe2bYol1zlPOD19talfXajkUzl1+r9LyHzF1LZ+5iGIZhFF1XvDj4vvwLNYENHP9t3nixowCAB1Tnvn9O3zUu+XBchS2lWwXbZwTkzyz73bLMhjcoB24u5jfbXA8AgEtw9PlnQv6GAZ4qGrXf6J2lNRIvAEBd4ehzr4huxLaCETUSCgBAvYLnrwMAiMO+8S9mZgEAHIXxr+0sV1PzrXnnM11y5Q7LmZXD+49PuuiSwYNYXLvPSzd45F/byYKaaGV+LRvTn/EhQXzOue+/PXghH0+0Bxu4dJ+XcPDIv3aQKViGk+Ry1gC1w6X7vHSDR/4FABAH8i8AgDiQfwEAxIH8CwAgDuRfAABxIP8CAIgD+RcAQBzIvwAA4kD+BQAQB/IvAIA4kH8BAMSB/AsAIA7kXwAAcSD/AgCIA/kXAEAcyL8AAOJA/gUAEAfyLwCAOJB/AQDEgfwLACAO5F/bWa6dL7De+uU3i9iB2MOlgwexuHS3kXDwyL+2kzVu7sW6N9ZLcT1VKpcOHsTi0t1GwsEj/9pBpmAZVpLLWVeDSwcPYnHpbiPd4JF/AQDEgfwLACAOZ+dfy61ja/6vf/vH/bRKucrdr0lknwkf7L5mcnIUAADic+qcCP/nl2O6vLIhXRnafcjkV0M0hvQTO7YkzPxu+4GPD++Y0FSK8zMgMnPO5V8zCvkqXmU9Q8LDfNFxwEVVp+sKucdX/evtVV+f/D2f8WwcGTN16bthSRG9E5SxB67Ed5FXu66Sgwunb7rGRc7Zf2DeU9q72+a9PrfLMwv2Llp5dPR/nruvqNKtw3xe/Nwgf37V7/smNcRMSX3E3/xiYsfYg2VVvKzsuSZjz3h/4tSYAGoKPf+a05YN7DXjiNBi0BvLY1poCy7sSRw6WOdbIDBBSoUtVQmFfEj08Jd9B8dGav/eqGndt2fjRT+nZ2QaGcbT9vgBAFwVNf8a9n74/tFir+iEvSmj7o5BRwzvMjmy9xGBEMLaMvAg/j1mftzjvo3CrV9++dMqa9zyCbeHvIPlOI7jWJZggAMAdQ4t/5rP7j+UK2hihg34ewKAeEWNHtJ07eIrjtdedjlx0uw9Br8Bb0+KeDAS5YBNBeZN9pUsGLIvp982C4/eizeVWFRqyiiev33l1OXbQvkhwHrxglEwnN+VlHCV+3sjUQU92TpISztQlBhL1Bo1ZSeGIQIRSL0PnmHdAx5yWL5fac5vV2+WUCp0evBCaYlJoVZT2pQwRCACI7XgXbrbOD94otaHPu6rpOz1UMKjFW7spyJc2IwT5opb89f3VTGypjN/Mlf1Pjr+zqnl/wiSs57t3/4hj7e/nIcrOxjbiKP+85x3o2pMX8uDddUoKrBDKL0sogpW0Mfy8rAOegTPMIyy5+ozK6Ie8XVT9lxzw3zunTZSDN6lWx7B31XN4Nu+m2axK09Rxr+C0VgiCEStUVXarFKpHJoSEArPrn192BufZwQOWrEj4fUIjxqfX5C1GpfwVTcj5XBqKSoq1bq7UWoXtI9Ftgwo/6zMR2Y9PWxfn5QTCztV+ABNWannMourOlF/T2FRoYe7B2UnwnIMb6WNiepB8Kxfa48zKZSi2JChy78MvyO14AVDoUHpoaX9wCQcy1h5Wo3oNndJNHjW64lG9l0fQOkeRKVWEUYwGiplMqHgTgG1y1Sp5OKGyS9O+vR3/aCPflgT+5SuVuZ2iU94z37htVEyw5R5a1iG03jr9fqKB1C9PqRt7VRYk1wseP76GdouxL1Z15hmzgimHnOxblOZhIOnZW1NcIgfx2ddulJYId+Wpp5JM9tVnXDn+KLoLqM2Fj635MBPKVNqKfkCALgAWv6VR0R11pGSQxtSrln/2mTN+Cx+S7ZgR+Y0/frRoL6zj7gP2/DjtrgO3rQSSre94imXyTQ9VmfZPdgGAJAq6vVn7r2nT2u3fc7+uO59Lo7r21yTd+7rdft00T081++3sSrLuQ9H/+tgnvyJHqF/fBn/QaXXiCZ80ISeIffNmgu81Wq1sjwvCAyDkXK9xMpVbm5uVZ0oUark6Bfguuj3Xygj/rljp2rW7E92Jc49SLzDnhm2aNcc5fzg9bZWVXr+dKpJEJi0z+fN+Py+19gGY1uOfSD/Qr3HBo7/Nm+82FEA1I7q3H/M6bvGJR+Oq7CldKtg+4yA20tflbxkyxuUAzcX85ttrgcAwCU4+lQFIX/DAE8Vjdpv9M7SGokXAKCucPTRUUQ3YlvBiBoJBQCgXsFTxQAAxGHf+BczswAAjsL413aWq6n51rzzmVb6rtLj2sGfWTm8//ikiy4ZvEtz7W4j3eCRf20nC2qilfm1bOySV8u5dPB8zrnvvz14IZ920z7UNJfuNhIOHvnXDjIFy3CSXM66Glw6eBCLS3cb6QaP/AsAIA7kXwAAcSD/AgCIA/kXAEAcyL8AAOJA/gUAEAfyLwCAOJB/AQDEgfwLACAO5F8AAHEg/wIAiAP5FwBAHMi/AADiQP4FABAH8i8AgDiQfwEAxIH8CwAgDuRfAABxIP8CAIgD+RcAQBzIv7azXDtfYL31y28WsQOxB4IHO7h0y0s4eORf28kaN/di3RvrpbieKhWCBzu4dMtLOHjkXzvIFCzDSnI562pA8GAHl2556QaP/AsAIA7kXwAAcTg7/xouf714zAsRIT5uCrnSzSc4/PlX/r3xbL7g5DAAAETn1DmRouPzevRecLK0Yaf+w994wk9RknVu71dbFr26/ZvUPUff66x1ZiwAtc6cc/nXjEK+ildZz5DwMF8pzkqCs1Tn0xdyj6/619urvj75ez7j2TgyZurSd8OSInonKGMPXInvIq9uVXzG+reXnjSETd5z/D/ddOTuxvkzPu4THvv9J2sPzOsco6r8htKtw3xe/Nwgf37V7/smNcRMCbgY/uYXEzvGHiyr4mVlzzUZe8b7E6fGBJJCz7/mtGUDe804IrQY9MbymBbaggt7EocO1vkWCEyQUmFLVcR3wMrD7Qq1Ye115V1O5v94iJYQswzDAACoZ6hpz7D3w/ePFntFJ+xNGXV3DDpieJfJkb2PCIQQ1pZjN3ELfKJd4L2/BGtJXvrZ/RsXz1p/y7fbsje7qx7yDpbjOI5jWYIxAgDUObT8az67/1CuoIkZNuDvCQDiFTV6SNO1i6/YW6eQmxQdNGZ3KcMQt5CoUfE//HPUM4EPGUorB2wqMG+ysw5D9uX022bKeT3eVGJRqSmjeP72lVOXbwvlhwDrxQtGwXB+V1LCVe7vjUQV9GTrIC3tQFFiLFFr1JSdGIYIRCAI3pWDZ1j3ADdqdUxpzm9Xb5bQzj+j5f+KS5rBE7U+9HFfJWWvhxIerXBjPxXhwmacMFfcmr++r4qRNZ35k7mq9z1S8Yk106dOHvdK3w4hHpzct+1ra04X8naVVKWyg7GNOOo/z3k3qsb0tTxYV42iAjuE0ssiqmAFfSwvD+ugR/CMiwev7Ln6zIqoR+QKZc81N8zn3mkjxeBduuWdH3zbd9MsduUpyvhXMBpLBIGoNZVnB1QqlSNTAm7tx3/QnmEYhrHmHntvaMyc1/9R5nN246AGNTfNIGs1LuGrbkbK4dRSVFSqdXejVCtoH4tsGVD+WZmPzHp62L4+KScWdqrwAZqyUs9lFld1rvuewqJCD3cPyk6E5RjeShsTIfi/SDR41q+1x5kUSlFsyNDlX4bfkVzwLt3yTg+e9XqikX3XB1DyL1GpVYQRjIZKmUwouFPA23XJrmCx8DJZ+cGJ8+00893Xkjsv277huzsDh+tqLAETn/Ce/cJrqrTKyrw1LMNpvPV6fcUDqF4f0rZ2KqxJCN55+OtnaLsQ92ZdY5o5IxjHuFjLVybh4GlZWxMc4sfxWZeuFFbIt6WpZ9LMttbE/7n2H94qTficnys/hoiwLGEEa1mZ1dYSAQBcGS3/yiOiOutIyaENKdfu5UdrxmfxW7IFW4eqrL5zl6bEcinp3Q2/lV8Rac3a8fGW33n5Ex2femDwW7rtFU+5TKbpsToL98cBQJ1Dvf7Mvff0ae22z9kf173PxXF9m2vyzn29bp8uuofn+v02VsU1n/yf2Tt6zfl63FMRWwb0jgx2K83+Ze/WXb/kKlv93/uxLR+cMhd4q9VqZXleEBgGl6CBq2HlKjc3t6rO8ihVcnTqeo5+24My4p87dqpmzf5kV+Lcg8Q77Jlhi3bNUc4PXm97ZW5Pv73vVJsVS1alfL9j9ff5pTJ3/eNtX5o9fub0Ia080BWhjmEDx3+bN17sKEDCqnPbGafvGpd8OK7CltKtgp0zAurHo2d+Ej2zWvsqB24u5jfbVw8AgNQ5+lQFIX/DAE8Vjdpv9M7SGokXAKCucPSxC0Q3YlvBiBoJBQCgXsFTxQAAxGHf+BczswAAjsL413b8jUwDX5R5k3broiRZrqbmW/POZ7rk3S6uHfyZlcP7j0+66JLBo8/XDuRf27G+ejXrpvdxybaTBTXRyvxaNqY/oESCXDp4Pufc998evJDvkikMfb52uGR7ik26y1lXg0zBMhyCB9ugz9cK5F8AAHEg/wIAiAP5FwBAHMi/AADiQP4FABAH8i8AgDiQfwEAxCHFa+JqhWDIupyed9+C9LzJZFGpKMtZC6UlJoVaXf58YvO1PAtjvn0tLdW3vPkIQwQiMJTHcgpGg0ntpq78rGOi0Yc18aUtZw5gI/R5yas3+dd8dN5zvdfed/+kzP8x9mZGWRVvuUcerOMz8++/eXHz6IiKT8DgAjs0zjlxlbIsHlEFyUzX79tJ3n5J6tGZTSV4dw64NPR5yas3+ZdhGIYN6L9oxchm5R+6xWA0azTqRy+9IRgKDUoPLa2lCMcyVtqq0PydO8WeXhXW+jAdfm/kClrcAPZCn5e0epV/iVtol5j+Hataj0sMxcZPWSZb7CigzkKflzScfwMAEAfyLwCAOJB/AQDEgfwLACAO5F8AAHEg/wIAiAP5FwBAHMi/AADiQP4FABBHvcm/lqtpBdZbv2ZIbA1q04VLZmvmr7ectiiu5dr5AuutX36zOKvCmoTgbasRfZ5hGEl3m3qTf1lfvZpoA7wl9g/L/P04ogt0d1pYssbNvVj3xnqXvPEcwdsEff6vCqXbbSQYUu1gvXwUrMbX/dHPHXE6mbeOZU0+aifW6OoLiSP46kKfv1ejZLuNxA6NAAD1BvIvAIA4RMy/wq3tr4XIWaLs/NE1p03F24f/c/OQQI7zjU5IrxxpWerSZ91ZeZMxO3MpT0EFcCno884gWv61Zm6YOHFDhsUlPkK24UurVo8MLtgzK3Zdhd5YlhY/ccGxsmaTE5dF+0pskg3AIejzzlCd/CvkHl85/vkW/lqlQuvXrOvYVSdv7J0YwMlCpv1IWXqkSuaLH4/+v+/8R47s+IgloEq3DtOyhCi7ffyn6ONj0qDvsoTXmxbtfit2XcbdaMxp8RPnH7dGzExeGOWJngh1Dfp87aPnX3PasoG9pib8j+3yxvLETz6Y0tmYOHTwkp8LBEahtHP9vJLT7732r/+1nLdhbiepnZutGvHqtjgpLty4e1ZscgbPmNPiJy44RjrOXffv9m5ixwZQG9Dnaxv1mgzD3g/fP1rsFZ2wN2VUQ5ZhGGbE8C6TI3sfEQghrB3ZUyj8cfbIxde6rjjxZitV4iN3JSzHcRzHskQaWdqt45zk2Yeenf1W7Cf6ZzfNPy7rFp80PVwpdlgAtQZ9vlbR8q/57P5DuYImZtiAhveGysQravSQpmsXX7GnPiH32+mjVhYO+mzt6MYcc/OR+yoHbCowb7KnFobh/zyyec/FkvLZZev5SyWOzzUrW8clLT7QcVpszG7Bt++6hNeb1sBFhXzOqS+TEvzKjzGs5+NtWjSg/bjgTSUWlZqyF3/7yqnLt4Xysq0XLxgFw/ldSQlXy9dkJKqgJ1sHaWlHuRJjiVpDv2yTCEQgtEUZEfzd6moweKEw4+cL2Rb0eae3PFHrQx/3teugJDxa4cZ+KsKFzThhrrg1f31fFSNrOvMnc1XvezjrH5teDFQ1n/p9Pi8IgsDfWNNTySieXf671bZy6Er3jG3wwNwKFxp3rMzRkk2/zI9UEoZou8ZfsfHff4iiTf1VD3wmiiefCaCvzM15N6rGqoryYF01igrsEEovi6iCFfQfIvKwDnoEz4gRfGjkg7e6oc9XVVRNtnzbd9MsdrUF5VAmGI0lgkDUmsoNplKp7JgSsFxZM3bqnsC3Dizu5lXbEwqKqA/TshZYy4/+5h9mtBtxwuFyjScXjlp8Wt4svFH6j7PHfPT8vriWdk6Cl5O3nX3om0lNKnx1ijPPpmWZKEMXS1FRqdbdjdKSgvaxyJYB5R3NfGTW08P29Uk5sbBThd5nyko9l1lMO8tZWFTo4e5B2YmwHMNbacMuBP+XGgye1Qa3ahlYYayGPn9X7be81xON7LuSjJJ/iUqtIoxgNBgrNoxQcKeAt/WHTekvH7z21pGQ2O0jA/KuX89jGIYRcu+YBEYou3Pj+nWFm0+gj7rm0rLCo4F/xWYr06kdvtZOKDj09qglZ5VRH23f2unzbl3mzx21qOsP8yI1DpYr1/r66yuNu/S9Qh0ssypl3hqW4TTeer2+4tFfrw9pW0s11iAEb1uN6PMMw0i629A+H01wiB/HZ126Ulgh35amnkmz9cozPvvQt/8rMvz8Xo8mje4JjnjrxzLGfPKdTo81Ch39VaGtwTuXkPtt3JiVF91fWPLJpGYe7WYlzu7Ann7vtTk/FrrENcwANkOfr2W0/CuPiOqsIyWHNqRcu/cUO2vGZ/FbsgUbh6qsf78l276pbMeG2Ag5I3tibMKOb7bOjrr/kpbSba94ymUyTY/VWeJ/2nz2likT1qV79/1g9dgmHMMwyvDpCfM7Ky/Ej56x57b48QHUNPT5Wkc9lenee/q0dtvn7I/r3ufiuL7NNXnnvl63Txfdw3P9fttqUod07BNSeZNwM2sly7DeTz4f/Y/GDzkSCLzVarWyPC8IDCPqJWjW9OQJsV9k+w3auOrV4HuRyltMWbtod/upieOndD+5cXAAnqUBdQj6vBPQ208Z8c8dO5e+2k52OnHumzMXp1xrvWhXQoy3BJ9lXGvMF1eOmb4rL3DYihUvNazYYrKwiWuW9tJlpcRO/FRqT7kGcAD6vFNU51I+Tt81LvlwXIUtpVuFmvj1QfzHf2caX+XLyoGbi/nNNVCPo+TNp+3Pn/bQl7jGY3fljHVyPAC1DX3eKRz9/SDkbxjgqaJR+43eWVoj8QIA1BWO3spCdCO2FYyokVAAAOoVzJ8DAIjDvvGvZGZmAQBcVr0Z/1pv/GHkCzJzRH+ScGXm61kWPiejwGkXU/I3Mg18UeZNibVD9ViupuZb885nuuRpd+cHjz5/l4S7jRTXBK0VnK+/itXqdRI74Mj8G3CsNZD6GKYaw/rq1ayb3kdi7VA9sqAmWtn1lqxV0mUAABsjSURBVI3pT1eRIOcHjz7/V4XS7TYS+2hqkUzBMpzk1qAmcjlhZHIn9gzprsVdDdL8EKvJ+cFLs7nE6fPSaweGqU/5FwBAWpB/AQDEgfwLACAO5F8AAHEg/wIAiAP5FwBAHMi/AADikOI1cbVGKMv9PS3Vvfx/5k0mi0pFWUxQKC0xKdS0pekIQwQiMJR7egSjwaR2q1CW8XpRNW4DEgxZl9PzzJX3tC9487U8C2O+fS0t1be8HewMnmEYhmj0YU18HV6PEWqJy/b5+qFe5V8+M3l4RHKFDTL/x9ibGWWUt8mDdXxmPuXmRS6wQ+OcE1cpy+IRVZDMdP2+neTtKQEw5qPznuu99r57hh0JfvPoiIqP73Ao+CWpR2c2leCtRcAwLtzn64d6k39lbSYlb+1z3/rWFoPRrNFQDvOCodCg9NDSWopwLGOlrQrN37lT7OnlUblC1rtlQ3r+YgP6L1oxsln5juIHbzr83sgVtLhBNC7f5+u+epN/Wb82vfq1ETsKBxC30C4x/TvK6Xs6TbHxU5bJFjsKqIrL9/m6D+ffAADEgfwLACAO5F8AAHEg/wIAiAP5FwBAHMi/AADiQP4FABAH8i8AgDiQfwEAxIH86wosV9MKrLd+zZDYAtqmC5fM1sxfbzltfXPLtfMF1lu//GZxVoU1yaWDd2kSbnnkX1fA+urVRBvgLbFPS+bvxxFdoLvTwpI1bu7FujfWu+Rd8y4dvEuTcMtLMCR4AOvlo2A1vu6U5wE6m8xbx7ImH7UTa1SwDCvJhcSrwaWDd2nSbXmJjagAAOoN5F8AAHE4Nf+atr3szpIHcQ0nHaA9EBrsxf+5eUggx/lGJ6RXPlFWlrr0WXdW3mTMzlysRwAgAmfOiQiFt/PMgqzZ4LfHPq2t+AJxbxMqxcmZuoFt+NKq1ftODfp0Vuy67jvGhPx1yC1Li5+44FhZs6mJy6J9JTaxDFA/VCftCbnHV/3r7VVfn/w9n/FsHBkzdem7YUkRvROUsQeuxHep/gPB+fzcPJ4o2wx9K25Qdc7ZlG4d5vPi5wb586t+3zepIWZK7EYa9F2W8PrxPqveil3XfceYx1iGMafFT5x/3Brxr+SFUZ7IvgCioOdfc9qygb1mHBFaDHpjeUwLbcGFPYlDB+t8CwQmSGnbsot8Xm4+z/r4N5AxjLno5o07Vo2Pv48Gy5DUPuLVbXFS3OFu782KTe7+9ejAC/ETFxwjHRet+3d7N7FjA6i3qPnXsPfD948We0Un7E0ZdXcMOmJ4l8mRvY8IhBDWppGTkHc7j2c8ftv0WoeXt53KKuEFIvNo0uWVt5YsHBupe0hRhOU4juNYlmCE5jC3jnOSZx96dvZbsZ/on900/7isW3zS9HCl2GEB1GO0/Gs+u/9QrqCJGTbg7wkA4hU1ekjTtYuv2FpXSV6eUbDmf/eVbtDYhePD9VzexQMbVn+2ekLUqT/2HpzfUXvf/soBmwrMm2yt5S7BkH05/baZtjSgqcSiUjtxLW6mxFii1tAmX4TCjJ8vZFvKy7Kev1Ti+CkyZeu4pMUHOk6Ljdkt+PZdl/B60xqYdOdzTn2ZlOBX3jqs5+NtWjSg/TKqVsvzt6+cunxbKC/bevGCUTCc35WUcLX8VxNRBT3ZOkhLO0RXq+UZhghEIDXRbVw6eOf3eZdueaLWhz7ua9dYRni0wo39VIQLm3HCXHFr/vq+KkbWdOZP5qre9zCGi3vWr0v+4uj1svJtpVdW9/Flifq5+N+stpRFU3YwthF9YoPzblSN6Wt5sK4aRQV2CKWXRVTBCvpYXh4a+eCtblxo3LEy+j/+aKZf5kcqCUO0XeOv2PTZPVTRpv6qB4JXPPlMgOu2fFgHPYJnEPw91Qy+7btpFru+QpQRkGA0lggCUWsqf89UKpUdUwKaZi+MaHbfNkXoa9OHvPvdf08eOFY0tYmnzWVWRdZqXMJX3YyUw6mlqKhU6+7mvLW4mcKiQg93D8pOrDa4VcvACgdd8w8z2o04QXkXnfHkwlGLT8ubhTdK/3H2mI+e3xfX0rYZ/IeQt5196JtJTSocLoozz6ZlmWqi5RlB+1hky4Dyb4n5yKynh+3rk3JiYacKXx1TVuq5zGLaQyiq1fKE5RjeSvsQ637wzu/zLt3yrNcTjey7PoDSwkSlVhFGMBoqZTKh4E4BtdWrHUEDfx9WyCkuMghMzZ2JJz7hPfuF11RpYivTqR2+/EMoOPT2qCVnlVEfbd/a6fNuXebPHbWo6w/zIjUOlivX+vrrKw1d9L1CHSyzKmXeGpbhNN56vb7i0EWvD2lbSzXWIJcO3qVJuOVpX2tNcIgfx2ddulJYId+Wpp5JM9tak5D/U9LcN2MX7b5ZKXMLhWnn0i2sZ0hjH5xkqz1C7rdxY1ZedH9hySeTmnm0m5U4uwN7+r3X5vxYiFsvAMRCy7/yiKjOOlJyaEPKtXsPP7RmfBa/JVuwNVsSN/7C5v98PO+Nd/bm/P2d53P2zV24s5BtNHDosw9MX5due8VTLpNpeqzOQpJwCJ+9ZcqEdenefT9YPbYJxzCMMnx6wvzOygvxo2fsuY3GBRAH9Qy4e+/p09ptn7M/rnufi+P6Ntfknft63T5ddA/P9fttrErRYeZHE3a9+N/V/dqcGTC4x5O+wq1f9365/dQNeaspq+d3v//qB4ZhBN5qtVpZnhcEhsHo2F7W9OQJsV9k+w3auOrV4HsHXHmLKWsX7W4/NXH8lO4nNw4OwO0tAE5H/9opI/65Y+fSV9vJTifOfXPm4pRrrRftSojxtuNZxqRBnxVHDq97q1+T/EPrls6b9/76o8YWL8374uSRj3o1QHqtJeaLK8dM35UXOGzFipcq3UQoC5u4ZmkvXVZK7MRPpfZkd4B6oTpXgHL6rnHJh+MqbCndKtj3o5X1bjdyccrIxdXaWTlwczG/2a564G/y5tP250976Etc47G7csY6OR4AuMfRn51C/oYBnioatd/onaU1Ei8AQF3h6B1QRDdiW8GIGgkFAKBewWkXAABx2Df+xcwsAICjMP4FABAHlp1wBVxIz9gZoa0DJfaoZEXz/tNnFD2lc9768426T5oR9GQ1nqwkQay2SafuXVv4YsjjbBJueQmGBA+wpu9d+f7aH7MkdpVu2cXtH76/8VQ+7RkmNcbyx/cfv796/x8Sa4fq4e9cPrz/+LUip7UW/EXCLY/8CwAgDuRfAABxIP8CAIgD+RcAQBzIvwAA4kD+BQAQB/IvAIA4kH8BAMSB+99chVCW+3taqnv5B8abTBaVirKAsVBaYlKo1ZSn2xOGCERgKM90FowGk9qtQlnG60XVeAy0YMi6nJ5nrrynfcGbr+VZGPPta2mpvuXtYGfwDMMwRKMPa+Lr8BrQAHZC/nUVfGby8IjkChtk/o+xNzPKKG+TB+v4zHzKDWNcYIfGOSeuUtZUJaogmen6fTvJ21MCYMxH5z3Xe+3NyjcfORL85tERFZ/95FDwS1KPzmzqkrczQ12A/OsKZG0mJW/tY6o8xLMYjGaNhjK0FQyFBqWHlvYxE45lrDxlCMnfuVPs6eVRuULWu2VDev5iA/ovWjGyWfmO4gdvOvzeyBW0uAFqFfKvK2D92vTq10bsKBxA3EK7xPTvKBc7jgqKjZ+yTLbYUUD9hvNvAADiQP4FABAH8i8AgDiQfwEAxIH8CwAgDuRfAABxIP8CAIgD+RcAQBzIvwAA4kD+hVpmuZpWYL31a4bEFi02Xbhktmb+est5izdfO19gvfXLbxZnVQh/kXDLI/9CLWN99WqiDfCWWFeT+ftxRBfo7rSwZI2be7HujfW45d/ZJNzyEgwJ6hbWy0fBanzdKc/AdDaZt45lTT5qJ9aoYBlWgW+c80m35SU2KAEAqDeQfwEAxOH8/Gu5dfS/U/u2C/F1UyrcGjz+9IDp607nV2MZBaiP+D83DwnkON/ohPTKJ8rKUpc+687Km4zZmYvOA67KyfnXmpHyWseoyWvPuT332sw5s6cObF544KMxUdGLz5icGwi4BrbhS6tWjwwu2DMrdl2FDFyWFj9xwbGyZpMTl0X7SmxiGaDaqpN/hdzjK8c/38Jfq1Ro/Zp1Hbvq5I29EwM4Wci0HymLvtyH/3PTtNjN2S3jvjv7w6cfzH179uI1u07tWTZh8FPMnzcfvA6odOswLUuIstvHfzrtIiGQGtKg77KE15sW7X4rdl3G3X5gToufOP+4NWJm8sIoT2RfcF30c4LmtGUDe804IrQY9MbymBbaggt7EocO1vkWCEyQ0raVC61XN328Oy/g1Q1zu+gIw5sKC80qD/eO0/7b0d7ooT4gXt0WJ8Ud7vberNjk7l+PDrwQP3HBMdJx0bp/t3cTOzYAR1DHv4a9H75/tNgrOn5vyoJJI15+NXbBpgOftMo4UyIQQlhbBh/C7cMHfzFrOj7X8MA7QyID3DReOk83XZPnxn18Iu/hU3iE5TiO41iWYJBTv7l1nJM8u4Np91uxn3y7bOL847Jui5OmhyvFDgvAMbTxr/ns/kO5giZm2ICG91I18YoaPaTp2sVXbKzK8vul38xEfuGDfq9Z2r4+O3l2EJN1IuU/KxJju5/J/v7Qgg7a+96gHLCpwLzJxlr+IhiyL6ffNtMWZTSVWFRqJy7hzpQYS9Qa+jWnRCACcc3ghcKMny9kW8rLsp6/VOL4KTJl67ikxQc6TouN2S349l2X8HrTGrick8859WVSgl9567Cej7dp0YD2s65aLc/fvnLq8m2hvGzrxQtGwXB+V1LC1fJ1SIkq6MnWQVra+KLud5saDN75LU/U+tDHfe0aDgiPVrixn4pwYTNOmCtuzV/fV8XIms78yVzV+x6idO94PcsQZfiMwwX8vY38za3Dgzji1uO/mVYbyqIqOxjbiL4sL+fdqBpLQsqDddUoKrBDKL0sogpW0Mfy8rAOetcNPjTywVvduNC4Y2WOfqamX+ZHKglDtF3jr9jS8R6uaFN/1QPBK558JsB1W96lu41LB9/23TSLXb2QMogQjMYSQSBqTeWuqlKpbJ8SIDK5jDDydiMndCpfBpz4/WPsgIabVx4/dNI0sZHG1jKrJGs1LuGrbkbK4dRSVFSqdXdz3iroTGFRoYe7B60olmN4K60oiQbPaoNbtQysMGIw/zCj3YgTlHfRGU8uHLX4tLxZeKP0H2eP+ej5fXEtbTv98BDytrMPfTOpSYXDRXHm2bQsU010G0bQPhbZMqD8K24+MuvpYfv6pJxY2KnC996UlXous5h2frnud5saDN75Lc96PdHIvivJKC1MVGoVYQSjoVImEwruFFBb/QGsvqGeZW6xbOVjE+vTwJsVbhYXmQRGU2PzvMQnvGe/8JoqDRxQplM7fJWjUHDo7VFLziqjPtq+tdPn3brMnztqUdcf5kU6esCWa3399ZXGXfpeoQ6WWZUybw3LcBpvvV5fcdyl14e0raUa4S4Jtzztm6EJDvHj+KxLVwor5NvS1DNptl15xjAMwzVp/7Q/Z047euJOxdxt+v3qdSurC6JPxUA9JeR+Gzdm5UX3F5Z8MqmZR7tZibM7sKffe23Oj4W49QJcGi3/yiOiOutIyaENKdfuPT/QmvFZ/JZswfZsqXz2tVeby+7sWDD3+9v3vjgl5z7+cPttEviPfu0f+DVZuu0VT7lMpumxOgvfs/qLz94yZcK6dO++H6we24RjGEYZPj1hfmflhfjRM/bcRs8AF0Y9iezee/q0dtvn7I/r3ufiuL7NNXnnvl63Txfdw3P9fpsrU0S+tWbW930WrurXLu3ll7s9Lr/x09aN36SZQoYnznvB/cH9Bd5qtVpZnhcEhsHouF6ypidPiP0i22/QxlWvBt8bLchbTFm7aHf7qYnjp3Q/uXFwAJ5iAq6J3nOVEf/csXPpq+1kpxPnvjlzccq11ot2JcR42/UsY+LxzDv7jn32dkzQ9W9WLJi7dONprsOE+H1Hk15siK8QPMh8ceWY6bvyAoetWPFSpS4iC5u4ZmkvXVZK7MRPpfZkd4Dqqs5FlJy+a1zy4bgKW0q3Cvb+7iMeTw5d8PnQBdXYVTlwczG/2c56oC6QN5+2P3/aQ1/iGo/dlTPWyfEA1ChHh51C/oYBnioatd/onaU1Ei8AQF3h6E1ERDdiW8GIGgkFAKBewbQrAIA47Bv/YmYWAMBRUlyTDuoU640/jHxBZo7EnuFsvp5l4XMzCpx2ATF/I9PAF2U+5EHXULsk3PLIv1DLOF9/FavV6yQ21SXzb8Cx1kDn3XXJ+urVrJveR2LtUA9IuOUlGBLUMTIFy3CSW/2byOWEkcnpD8qqMdJdBb2uk27LI/8CAIgD+RcAQBzIvwAA4kD+BQAQB/IvAIA4kH8BAMSB/AsAIA4pXhMHdY5Qlvt7Wqp7eW/jTSaLSuXEVdAFo8GkdqtQlvF6UTVufRMMWZfT88yV97QvePO1PAtjvn0tLdW3vB3sDJ5hGIZo9GFNfB1eg1Sq6knLO7yON8AjlX43zv+Bn1ky/8eq0X9rdCHxoAd3krdfcunR64a7dPAurX60PMa/UMtkbSYlb+1z35ruFoPRrNFQhrY1uQo6f+dOsaeXR+UKWe+WDenfVDag/6IVI5uV7yh+8KbD741cQYvb9dX9lkf+hVrG+rXp1a+N2FE4gLiFdonp35E+WHKeYuOnLJMtdhS1ru63PM6/AQCIA/kXAEAcyL8AAOJA/gUAEAfyLwCAOJB/AQDEgfwLACAO5F8AAHEg/wIAiAP5F6BqlqtpBdZbv2ZYxQ6kMtOFS2Zr5q+3JLiiek2pHy2P/AtQNdZXrybaAG+JfU9k/n4c0QW6SyysmlQ/Wh7PfwCoGuvlo2A1vu6UZ2A6m8xbx7ImH7XYcdSi+tHyEju6AADUG8i/AADicGL+NZ+Y2VRGHk7RfskliU20AziI/3PzkECO841OSK98uqYsdemz7qy8yZidudVYgwNs5jIt78T5X+6xf7y11C//vhOH1uu7l684xIeESG2iHcBBbMOXVq3ed2rQp7Ni13XfMSbkrx5elhY/ccGxsmZTE5dF+0pserOOcJ2Wr8YaGXzOsRXjopr7uSnkbg2aPjdm5U/Z303Qs9xjU38oc3D5jbIL8d10Mv2gjX9YH3zR9NVLboRhFM+vuv6QVwFqX+l34/zloXHH7O7ofP73U5orWJ/ohPS7nbgsdemzWlbd9t8niu0Pq2hTf1U9WH+o7rc8fdBpTls2sNfUhP+xXd5YnvjJB1M6GxOHDl7yc4HAKJQOLkFnTvto7NuHFP2XrRgWhNEv1EXEq9vipLhw4+5ZsckZPGNOi5+44BjpOHfdv9u7iR1b3eYSLU+dfzDs/fD9o8Ve0Ql7U0Y1ZBmGYUYM7zI5svcRgRDCOjKGt1xaNXnBcfkLaz4cGvDw7EtYjuM4jmWJNH4rANjBreOc5NmHnp39Vuwn+mc3zT8u6xafND1cKXZY9YD0W56Wf81n9x/KFTQxwwY0vJcjiVfU6CFN1y6+4lDFwo2UtxcdLouYt2hkcBVjX+WATQXmTXYWb8i+nH7bTFtdz1RiUamduAo6U2IsUWvoFw8SgQgEwTs9eKEw4+cL2ZbysqznL5U4fqJG2TouafGBjtNiY3YLvn3XJbzetAbOu/A5p75MSvArbx3W8/E2LRrQfpOi5R32QMtz/h1e/EdLuy5VpsxPFG7spyJc2IwT5opb89f3VTGypjN/Mlf1PpqSY3HNZKz/8G15vL1FPFLZwdhG1ViD2rtRNdb2q9HlrIMV9E9JHtZBj+AZMYIPjXzwPDDnyCzkPaZf5kcqCUO0XeOv2P2t+VvRpv6qB4JXPPlMAFpelJbv+MFV+05RUY4GgtFYIghEralcp0qlcmhKQMjZ+kHSFabFrGnRutqZWpC1GpfwVTcj5QBqKSoq1bq7OW85a6awqNDD3YNWFMsxvJVWFIK/V2PNBc9qg1u1DKwwVjP/MKPdiBOUd9EZTy4ctfi0vFl4o/QfZ4/56Pl9cS0dPHfCMPK2sw99M6lJhaRVnHk2Lcvkmn3epVueKDx87TuBRWlholKrCCMYDZUymVBwp4Da6o/A/7ElcXe+LGLGiIjaWlqa+IT37BdeS4VDvVGmUzt8ZlgoOPT2qCVnlVEfbd/a6fNuXebPHbWo6w/zIjUOlivX+vrrK/3W0PcKdbBM6XCtlrcX7V/UBIf4cXzWpSuFFfJtaeqZNLP9dfLZu746ZpK16h8TVhP/AoCECbnfxo1ZedH9hSWfTGrm0W5W4uwO7On3XpvzY6EkbgCow1yh5Wn5Vx4R1VlHSg5tSLl27/40a8Zn8VuyBfvnDYoP7z9Zyjbs3IWSfku3veIpl8k0PVZnSafBAGzAZ2+ZMmFdunffD1aPbcIxDKMMn54wv7PyQvzoGXtuo1vXHtdoeeoQ37339GntNMX747r3mbp45cfx8yf26LpQHt3D0+4qLZfPnTcJsuYtm9GmlwTearVarTwvSKW5AGxgTU+eEPtFtt+gj1a9+vdVPvIWU9Yu6uZ+LXH8lC+z6/ADfEXlKi1Pn2JRRvxzx86lr7aTnU6c++bMxSnXWi/alRDjbbG7Sj7nZg5PVL4NPHBVL9Rh5osrx0zflRc4bMWKlxpW/KLJwiauWdpLl5USO/FTqT1fvE5wnZavztVwnL5rXPLhuApbSrc6MCJV9E7MsSZWY0flwM3F/Ga76wEQlbz5tP350x76Etd47K6csU6Op/5wnZZ39BSjkL9hgKeKRu03emdpjcQLAFBXOHo3CNGN2FYwokZCAQCoV/DYGwAAcdg3/sXMLACAo7D+JkDVrDf+MPIFmTnSuFrpb+brWRY+N6OgDl+XWT9aHvkXoGqcr7+K1ep1Epunk/k34FhroLYOX8FZP1peYv8dgLTIFCzDKaQ2TCFyOWFk8jp9+369aHnkXwAAcSD/AgCIA/kXAEAcyL8AAOJA/gUAEAfyLwCAOJB/AQDEIbXL6wCkRijL/T0t1b38q8KbTBaVyolLuAtGg0ntVqEs4/WiOnzr29/qfssj/wI8Gp+ZPDwiucIGmf9j7M2MMsrb5ME6PjOf8pBvLrBD45wTVymrKRJVkMx0/b6d5O0pAbi+ut/yRMDaPgBV4W+d3Xs8/b413S0Go1mjoQywanIJd/7OnWJPr/vWi2G9W3brEupGKd9l1Y+WR/4FABAHzr8BAIgD+RcAQBzIvwAA4kD+BQAQB/IvAIA4kH8BAMSB/AsAIA7kXwAAcSD/AgCIA/kXAEAcyL8AAOJA/gUAEAfyLwCAOJB/AQDE8f+WHYLHgrOyGQAAAABJRU5ErkJggg==" } }, "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Hint (Click me!) \n", "\n", "The final circuit should look something like this for `b = '1001'`:\n", " \n", "![my_simon_oracle.png](attachment:my_simon_oracle.png)\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Answer (Click me!)\n", "\n", "```python\n", "def my_simon_oracle(b):\n", " n = len(b)\n", " qc = QuantumCircuit(n*2)\n", " \n", " b = b[::-1] # reverse b for easy iteration\n", " # Do copy; |x>|0> -> |x>|x>\n", " for q in range(n):\n", " qc.cx(q, q+n)\n", " if '1' not in b: \n", " return qc # 1:1 mapping, so just exit\n", " i = b.find('1') # index of first non-zero bit in b\n", " # Do |x> -> |s.x> on condition that q_i is 1\n", " for q in range(n):\n", " if b[q] == '1':\n", " qc.cx(i, (q)+n)\n", " \n", " return qc \n", "```\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. Test your general Simon oracle with the secret bitstring $b=1001$, on a simulator and device. Are the results what you expect? Explain why." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "b = '1001'\n", "\n", "n = len(b)\n", "simon_circuit = QuantumCircuit(n*2, n)\n", "\n", "# Apply Hadamard gates before querying the oracle\n", "simon_circuit.h(range(n)) \n", "\n", "# Apply the oracle, surrounded by barriers for visual separation`\n", "simon_circuit.barrier()\n", "simon_circuit = simon_circuit.compose(my_simon_oracle(b))\n", "simon_circuit.barrier()\n", "\n", "# Apply Hadamard gates to the input register\n", "simon_circuit.h(range(n))\n", "\n", "# Measure qubits\n", "simon_circuit.measure(range(n), range(n))\n", "simon_circuit.draw()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# use local simulator\n", "simulator = AerSimulator()\n", "simon_circuit.measure_all()\n", "simon_circuit = transpile(simon_circuit, simulator)\n", "result = simulator.run(simon_circuit).result()\n", "counts = result.get_counts(simon_circuit)\n", "from qiskit.tools.visualization import plot_histogram\n", "plot_histogram(counts)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Calculate the dot product of the results\n", "for z in counts:\n", " print( '{}.{} = {} (mod 2)'.format(b, z, bdotz(b,z)) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. References \n", "\n", "1. Daniel R. Simon (1997) \"On the Power of Quantum Computation\" SIAM Journal on Computing, 26(5), 1474–1483, [doi:10.1137/S0097539796298637](https://doi.org/10.1137/S0097539796298637)\n", "2. Guangya Cai and Daowen Qiu. Optimal separation in exact query complexities for Simon's problem. Journal of Computer and System Sciences 97: 83-93, 2018, [https://doi.org/10.1016/j.jcss.2018.05.001](https://doi.org/10.1016/j.jcss.2018.05.001)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.6" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "00874a1987cd43f58b7625ed15828477": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "040a448cb3b24ba9862fa428147a71e6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_b4b1408dfb854c46bba0465ec514f0e6", "placeholder": "​", "style": "IPY_MODEL_00874a1987cd43f58b7625ed15828477", "value": "

Circuit Properties

" } }, "0d70a66814754205821e54b978af8b94": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "95px" } }, "29f68651133f4012bb54be1910add9df": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ButtonModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ButtonView", "button_style": "primary", "description": "Clear", "disabled": false, "icon": "", "layout": "IPY_MODEL_5e9850de07df4d609971e24682e55d34", "style": "IPY_MODEL_913d10e338564c0faba761fe91786d03", "tooltip": "" } }, "2f8c8016b9b1421cab75d1bf5f93574a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_6447f57aa77c48d7a9cb7277dc0dbaf4", "IPY_MODEL_94e4252e54994d93a859253d157a1ed3", "IPY_MODEL_2f90c46f1de440f893786fd35b4d6f48", "IPY_MODEL_e052bcb495c4414fa9458a5ee969960e", "IPY_MODEL_6948553c7e854e8796a64642fd34be00" ], "layout": "IPY_MODEL_f0c15d9fe016410fb8ba8c082d0cf55a" } }, "2f90c46f1de440f893786fd35b4d6f48": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_0d70a66814754205821e54b978af8b94", "placeholder": "​", "style": "IPY_MODEL_a98e399696f747eeac9885a6ff2a1618", "value": "
Status
" } }, "4dcbb22dd2ff44c0b40ccf03e1b0bbc7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": "\n \". . . . right \"\n ", "grid_template_columns": "20% 20% 20% 20% 20%", "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "100%" } }, "5596dae4eb93454bacb32ca4cedb3ee3": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "190px" } }, "5e9850de07df4d609971e24682e55d34": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": "right", "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": "0px 0px 0px 0px", "right": null, "top": null, "visibility": null, "width": "70px" } }, "6447f57aa77c48d7a9cb7277dc0dbaf4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_5596dae4eb93454bacb32ca4cedb3ee3", "placeholder": "​", "style": "IPY_MODEL_81cecbe52e4c47628ad07b06ed66ed33", "value": "
Job ID
" } }, "68e07bbf8ed046ba9114d04e9774ff25": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "6948553c7e854e8796a64642fd34be00": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_68e07bbf8ed046ba9114d04e9774ff25", "placeholder": "​", "style": "IPY_MODEL_919859a129d9457ea4dfd3bea297e60a", "value": "
Message
" } }, "7688f1d8bb144929964600224cb02b76": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "145px" } }, "81cecbe52e4c47628ad07b06ed66ed33": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "850d09f2ac0740bca7662a487e1bd315": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "8be25dbf609446d9b397f351c2da3e58": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "70px" } }, "913d10e338564c0faba761fe91786d03": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ButtonStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "button_color": null, "font_weight": "" } }, "919859a129d9457ea4dfd3bea297e60a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "94e4252e54994d93a859253d157a1ed3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_7688f1d8bb144929964600224cb02b76", "placeholder": "​", "style": "IPY_MODEL_850d09f2ac0740bca7662a487e1bd315", "value": "
Backend
" } }, "a98e399696f747eeac9885a6ff2a1618": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "b4b1408dfb854c46bba0465ec514f0e6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": "0px 0px 10px 0px", "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c0094faeb20d48f68e9005b04b66bb89": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "c884d3dbf1cd4ea8be2f02bb6961d7bc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "GridBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "GridBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "GridBoxView", "box_style": "", "children": [ "IPY_MODEL_29f68651133f4012bb54be1910add9df" ], "layout": "IPY_MODEL_4dcbb22dd2ff44c0b40ccf03e1b0bbc7" } }, "e052bcb495c4414fa9458a5ee969960e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_8be25dbf609446d9b397f351c2da3e58", "placeholder": "​", "style": "IPY_MODEL_c0094faeb20d48f68e9005b04b66bb89", "value": "
Queue
" } }, "f0c15d9fe016410fb8ba8c082d0cf55a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": "0px 0px 0px 37px", "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": "600px" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 2 }