{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Bernstein Vazirani algorithm" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We first create an oracle embedding the secret number 14; we can do this in two equivalent ways:\n", "- using `secret_oracle()` function\n", "- writing the oracle from scratch in python" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qlasskit import qlassf, Qint\n", "\n", "\n", "@qlassf\n", "def oracle(x: Qint[4]) -> bool:\n", " s = Qint4(14)\n", " return (x[0] & s[0]) ^ (x[1] & s[1]) ^ (x[2] & s[2]) ^ (x[3] & s[3])\n", "\n", "\n", "oracle.export(\"qiskit\").draw(\"mpl\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qlasskit.algorithms import secret_oracle\n", "\n", "oracle = secret_oracle(4, 14)\n", "oracle.export(\"qiskit\").draw(\"mpl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can use `BernsteinVazirani` to discover the secret embedded in the oracle." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qlasskit.algorithms import BernsteinVazirani\n", "\n", "q_algo = BernsteinVazirani(oracle)\n", "qc = q_algo.export(\"qiskit\")\n", "qc.draw(\"mpl\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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PqiOHTtq/PjxGjhwoLp27aqgoCC5XC7OHAKoEqIQALzQmDFjtHjxYgUGBmrKlCnavn27Vq5cqc8//1zLly9Xx44dFRkZqR9//FHh4eEKCgqSxKVkAFXH5WMA8FLr16/XU089pQkTJmj69Ok6e/assrOztXbtWq1fv17ffvutzGazOnTooKFDh6pjx47q37+/goOD63rpAOohohAAvFhKSoreeOMNrVixQr/85S/ldDplMpl0+PBhdejQQVFRUbpy5YrOnj0rSdq1a5e6du1ax6sGUB9x+RgAvNiMGTO0f/9+TZ06Vffee6/atGkjSdqyZYtcLpcmTZqkRx99VGvXrtWmTZsIQgBVxplCAPBSTqdTZrNZx44dU1JSkjp37qzPPvtMknT//ffrwoULWrNmjdq3by+Hw6GioiL5+/vX8aoB1Fd8fwEAeCmz2SyXy6XY2FhNnTpVK1as0DvvvKMff/xRu3btUr9+/XT33XdLknx9fQlCALeFy8cA4MXcTxOPHj1ae/fu1bx585SVlSWz2ax+/frJYrEYZxQB4Hbwf0UAwMu57/KZOXOm2rRpo3/+85/q3bu37rvvPkl8DQ2A6sE9hQDghW7+Emr366+//lorVqxQTEyMXnjhhTpcIYCGhigEAC9w5coVnThxQq1atarQvYGFhYXy8/OTVDIgAaAquHwMAF7gvffe08iRIzV37lxt3LhRp06dUnFxscccl8uloqIiuVwu+fn56ezZsyoqKiIIAVQLzhQCgBeIjIzUqVOnZLFYFBISop49eyopKUn333+/WrdurdDQUI/5BQUFeu2113Tu3DktXLiQB00A3DaePgaAOnb48GHZbDb16NFDTz/9tL788ktt27ZNa9euVatWrZSYmKgBAwaoc+fOuuuuu9S4cWMdOHBACxYsUGJiIkEIoFoQhQBQxw4fPqyrV68qKSlJL7/8sh555BEdOnRI27Zt04YNG/T5559r6dKl6tChg/r166fBgwcrMzNTdrtdycnJdb18AA0El48BoI6tWLFCw4YN06effqphw4YZ4w6HQz/88IP27t2rf/3rX8rKytK3334rX19f477C8+fP1+HKATQkRCEA1DGXy6XvvvtOd9xxh2JjY0t9mrigoECHDx/WoUOHlJqaqi+//FLjx4/XX//61zpaNYCGhigEAC9WWiBOmDBB8+fP1+7du9W5c+c6WhmAhoYoBIB6wP1TdsePH9djjz2mCxcu6MSJE3W9LAANCI+sAUA94H7C+OTJk3I4HHrppZfqeEUAGhrOFAJAPeJyuZSbm6umTZsqICCgrpcDoAEhCgEAAMDlYwAAABCFAAAAEFEIAAAAEYUAAAAQUQgAAAARhQAAABBRCAAAABGFAAAAEFEIAAAASf8PSUulZO9VulMAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qiskit import QuantumCircuit\n", "from qiskit.visualization import plot_histogram\n", "from qiskit_aer import AerSimulator\n", "\n", "qc.measure_all()\n", "simulator = AerSimulator()\n", "result = simulator.run(qc).result()\n", "counts = result.get_counts(qc)\n", "\n", "counts_readable = q_algo.decode_counts(counts)\n", "plot_histogram(counts_readable)" ] } ], "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.10.13" } }, "nbformat": 4, "nbformat_minor": 4 }