[Measurements] Create workbook for part II tasks (#305)

Co-authored-by: Martin Roetteler <martinro@microsoft.com>
This commit is contained in:
Markus Buchberger 2020-04-02 09:34:20 +02:00 коммит произвёл GitHub
Родитель 9f4f919781
Коммит 3e6633f967
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 444 добавлений и 7 удалений

Просмотреть файл

@ -561,7 +561,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Task 2.1*. $|0\\rangle$ or $|+\\rangle$?\n",
"### <a name=\"task-21\"></a>Task 2.1*. $|0\\rangle$ or $|+\\rangle$?\n",
"\n",
"**Input:** A qubit which is guaranteed to be in either the $|0\\rangle$ or the $|+\\rangle$ state.\n",
"\n",
@ -569,7 +569,7 @@
"\n",
"In this task your solution will be called multiple times, with one of the states picked with equal probability every time. You have to get overall accuracy of at least 80%.\n",
"\n",
"This task is an example of quantum hypothesis testing, or state discrimination with minimum error."
"> This task is an example of quantum hypothesis testing, or state discrimination with minimum error."
]
},
{
@ -589,7 +589,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Task 2.2**. $|0\\rangle$, $|+\\rangle$ or inconclusive?\n",
"*Can't come up with a solution? See the explained solution in the [Measurements Workbook](./Workbook_Measurements_Part2.ipynb#task-21).*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### <a name=\"task-22\"></a>Task 2.2**. $|0\\rangle$, $|+\\rangle$ or inconclusive?\n",
"\n",
"**Input:** A qubit which is guaranteed to be in either the $|0\\rangle$ or the $|+\\rangle$ state.\n",
"\n",
@ -609,11 +616,11 @@
"\n",
"The state of the qubit at the end of the operation does not matter.\n",
"\n",
"This task is an example of unambiguous state discrimination.\n",
"> This task is an example of unambiguous state discrimination.\n",
"\n",
"<br/>\n",
"<details>\n",
" <summary>Need a hint? Click here</summary>\n",
" <summary><b>Need a hint? Click here</b></summary>\n",
" You can use extra qubit(s) is your solution.\n",
"</details>"
]
@ -635,7 +642,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Task 2.3**. Peres/Wooters game\n",
"*Can't come up with a solution? See the explained solution in the [Measurements Workbook](./Workbook_Measurements_Part2.ipynb#task-22).*"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### <a name=\"peres-wooters-game\"></a>Task 2.3**. Peres/Wooters game\n",
"\n",
"**Input:** A qubit which is guaranteed to be in one of the three states:\n",
"\n",
@ -668,6 +682,13 @@
" // ...\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"*Can't come up with a solution? See the explained solution in the [Measurements Workbook](./Workbook_Measurements_Part2.ipynb#peres-wooters-game).*"
]
}
],
"metadata": {
@ -680,7 +701,7 @@
"file_extension": ".qs",
"mimetype": "text/x-qsharp",
"name": "qsharp",
"version": "0.4"
"version": "0.10"
}
},
"nbformat": 4,

Просмотреть файл

@ -0,0 +1,416 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Measurements Kata Workbook, Part 2\n",
"\n",
"The [Measurements Kata Workbook, Part 1]() is still work in progress and will include the solutions of the tasks from Part I. This workbook continues the explanations for the tasks in Part II."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To begin, first prepare this notebook for execution (if you skip the first step, you'll get \"Syntax does not match any known patterns\" error when you try to execute Q# code in the next cells; if you skip the second step, you'll get \"Invalid test name\" error):"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"%package Microsoft.Quantum.Katas::0.11.2003.3107"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> The package versions in the output of the cell above should always match. If you are running the Notebooks locally and the versions do not match, please install the IQ# version that matches the version of the `Microsoft.Quantum.Katas` package.\n",
"> <details>\n",
"> <summary><u>How to install the right IQ# version</u></summary>\n",
"> For example, if the version of `Microsoft.Quantum.Katas` package above is 0.1.2.3, the installation steps are as follows:\n",
">\n",
"> 1. Stop the kernel.\n",
"> 2. Uninstall the existing version of IQ#:\n",
"> dotnet tool uninstall microsoft.quantum.iqsharp -g\n",
"> 3. Install the matching version:\n",
"> dotnet tool install microsoft.quantum.iqsharp -g --version 0.1.2.3\n",
"> 4. Reinstall the kernel:\n",
"> dotnet iqsharp install\n",
"> 5. Restart the Notebook.\n",
"> </details>\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": false
},
"outputs": [],
"source": [
"%workspace reload"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Part II*. Discriminating Nonorthogonal States"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### <a name=\"task-21\"></a>Task 2.1*. $|0\\rangle$ or $|+\\rangle$?\n",
"\n",
"**Input:** A qubit which is guaranteed to be in either the $|0\\rangle$ or the $|+\\rangle$ state.\n",
"\n",
"**Output:** `true` if the qubit was in the $|0\\rangle$ state, or `false` if it was in the $|+\\rangle$ state. The state of the qubit at the end of the operation does not matter.\n",
"\n",
"In this task your solution will be called multiple times, with one of the states picked with equal probability every time. You have to get overall accuracy of at least 80%.\n",
"\n",
"> This task is an example of quantum hypothesis testing, or state discrimination with minimum error."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Solution\n",
"\n",
"Let ${|E_a\\rangle, |E_b\\rangle}$ be a measurement with two outcomes $a$ and $b$, which we identify with the answers, i.e., outcome \"a\" means we answer \"state was |0\\rangle\" and outcome \"b\" means we answer \"state was |+\\rangle\". Then we define\n",
"\n",
"* $P(a|0)$ = probability to observe first outcome given that the state was $|0\\rangle$\n",
"* $P(b|0)$ = probability to observe second outcome given that the state was $|0\\rangle$\n",
"* $P(a|+)$ = probability to observe first outcome given that the state was $|+\\rangle$\n",
"* $P(b|+)$ = probability to observe second outcome given that the state was $|+\\rangle$\n",
"\n",
"The task is to maximize the probability to be correct on a single shot experiment, which is the same as to minimize the probability to be wrong on a single shot. \n",
"\n",
"Since the task promises uniform prior distribution of the inputs $|0\\rangle$ and $|+\\rangle$, i.e., $P(+) = P(0) = \\frac{1}{2}$, we get the following expression for the probability of giving a correct answer:\n",
"\n",
"$$P_{correct} = P(0) P(a|0) + P(+) P(b|+) = \\frac{1}{2} (P(a|0) + P(b|+))$$\n",
"\n",
"We can represent our measurement as a von Neumann measurement of the following form:\n",
"\n",
"$$|E_a\\rangle = R_y(2\\alpha) \\begin{bmatrix} 1\\\\0\\end{bmatrix} = \\begin{bmatrix}\\cos(\\alpha) \\\\ \\sin(\\alpha)\\end{bmatrix}, |E_b\\rangle = R_y(2\\alpha) \\begin{bmatrix} 0\\\\1\\end{bmatrix} = \\begin{bmatrix}-\\sin(\\alpha) \\\\ \\cos(\\alpha)\\end{bmatrix}$$\n",
"\n",
"<img src=\"./img/Task201_Rotation.png\" width=\"70%\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Using this representation, we can express our probabilities as follows:\n",
"\n",
"$$P(a|0) = |\\langle E_a|0\\rangle|^2 = \\cos^2(\\alpha)$$\n",
"\n",
"$$P(b|+) = |\\langle E_b|+\\rangle|^2 = \\frac{1}{2} - \\cos(\\alpha) \\sin(\\alpha)$$\n",
"\n",
"$$P_{correct} = \\frac{1}{2} (\\frac{1}{2} + \\cos^2(\\alpha) - \\cos(\\alpha) \\sin(\\alpha))$$\n",
"\n",
"Maximizing this for $\\alpha$, we get max $P_{success} = \\frac{1}{2} (1 + \\frac{1}{\\sqrt{2}}) = 0.8535...$, which is attained for $\\alpha = -\\pi/8$.\n",
"\n",
"This means that $|E_a\\rangle$ and $|E_b\\rangle$ are the result of rotating $|0\\rangle$ and $|1\\rangle$, respectively, by $-\\pi/8$. If we rotate the whole system by $-\\alpha = \\pi/8$, we will get $|E_a\\rangle=|0\\rangle$ and $|E_b\\rangle=|1\\rangle$, and a measurement in the computational basis will give us the correct result with a probability of 85%.\n",
"\n",
"> In Q#, rotating the input state by some angle $\\theta$ can be done by applying $Ry$ gate with angle parameter $2\\theta$."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%kata T201_IsQubitZeroOrPlus_Test\n",
"\n",
"open Microsoft.Quantum.Math;\n",
"\n",
"operation IsQubitPlusOrZero (q : Qubit) : Bool {\n",
" Ry(0.25 * PI(), q);\n",
" return M(q) == Zero;\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Return to task 2.1 of the Measurements kata.](./Measurements.ipynb#task-21)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### <a name=\"task-22\"></a>Task 2.2**. $|0\\rangle$, $|+\\rangle$ or inconclusive?\n",
"\n",
"**Input:** A qubit which is guaranteed to be in either the $|0\\rangle$ or the $|+\\rangle$ state.\n",
"\n",
"**Output:** \n",
"\n",
"* 0 if the qubit was in the $|0\\rangle$ state, \n",
"* 1 if it was in the $|+\\rangle$ state,\n",
"* -1 if you can't decide, i.e., an \"inconclusive\" result. \n",
"\n",
"Your solution:\n",
"\n",
"* should never give 0 or 1 answer incorrectly (i.e., identify $|0\\rangle$ as 1 or $|+\\rangle$ as 0),\n",
"* will be called multiple times, with one of the states picked with equal probability every time,\n",
"* may give an inconclusive (-1) answer in at most 80% of all the cases,\n",
"* must correctly identify the $|0\\rangle$ state as 0 in at least 10% of all the cases,\n",
"* must correctly identify the $|1\\rangle$ state as 1 in at least 10% of all the cases.\n",
"\n",
"The state of the qubit at the end of the operation does not matter.\n",
"\n",
"> This task is an example of unambiguous state discrimination.\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Solution\n",
"\n",
"A simple strategy that gives an inconclusive result with probability 0.75 and never errs in case it yields a conclusive result can be obtained from randomizing the choice of measurement basis between the computational basis (std) and the Hadamard basis (had).\n",
"\n",
"Notice that when measured in the standard basis, the state $|0\\rangle$ will always lead to the outcome \"0\", and the state $|+\\rangle$ will lead to outcomes \"0\" and \"1\" with probability $\\frac12$ each. This means that if we measure \"1\", we can with certainty conclude that the state was $|+\\rangle$.\n",
"\n",
"A similar argument applies to the scenario where we measure in the Hadamard basis, where $|0\\rangle$ can lead to both \"+\" and \"-\" outcomes, and $|+\\rangle$ always leads to \"+\". Then if we measured \"-\", we can with certainty conclude that the state was $|0\\rangle$.\n",
"\n",
"This leads to the following scenarios (shown are the conditional probabilities\n",
"of the resulting answers in each of the above scenarios).\n",
"\n",
"\n",
" State | Basis | P(0) | P(1) | P(-1)\n",
"-------------|-------|-----------|-----------|----------\n",
" $|0\\rangle$ | std | $0$ | $0$ | $1$\n",
" $|+\\rangle$ | std | $0$ | $\\frac12$ | $\\frac12$\n",
" $|0\\rangle$ | had | $\\frac12$ | $0$ | $\\frac12$\n",
" $|+\\rangle$ | had | $0$ | $0$ | $1$\n",
"\n",
"> The easiest way to implement the measurement in the Hadamard basis in Q# is to apply an H gate followed by a regular measurement in computational basis."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%kata T202_IsQubitZeroOrPlusSimpleUSD_Test\n",
"\n",
"open Microsoft.Quantum.Math;\n",
"\n",
"operation IsQubitPlusZeroOrInconclusiveSimpleUSD (q : Qubit) : Int {\n",
" let basis = RandomInt(2);\n",
"\n",
" // randomize over std and had measurement bases\n",
" if (basis == 0) {\n",
" // use standard basis\n",
" let result = M(q);\n",
" // result can be One only if the state was |+⟩; if result is Zero we can't be certain\n",
" return result == One ? 1 | -1;\n",
" }\n",
" else {\n",
" // use Hadamard basis\n",
" H(q);\n",
" let result = M(q);\n",
" // result can be One only if the state was |0⟩; if result is Zero we can't be certain\n",
" return result == One ? 0 | -1;\n",
" }\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Return to task 2.2 of the Measurements kata.](./Measurements.ipynb#task-22)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### <a name=\"peres-wooters-game\"></a>Task 2.3**. Peres/Wooters game\n",
"\n",
"**Input:** A qubit which is guaranteed to be in one of the three states:\n",
"\n",
"* $|A\\rangle = \\frac{1}{\\sqrt{2}} \\big( |0\\rangle + |1\\rangle \\big)$,\n",
"* $|B\\rangle = \\frac{1}{\\sqrt{2}} \\big( |0\\rangle + \\omega |1\\rangle \\big)$,\n",
"* $|C\\rangle = \\frac{1}{\\sqrt{2}} \\big( |0\\rangle + \\omega^2 |1\\rangle \\big)$,\n",
"\n",
"Here $\\omega = e^{2i \\pi/ 3}$.\n",
"\n",
"**Output:** \n",
"\n",
"* 1 or 2 if the qubit was in the $|A\\rangle$ state, \n",
"* 0 or 2 if the qubit was in the $|B\\rangle$ state, \n",
"* 0 or 1 if the qubit was in the $|C\\rangle$ state.\n",
"\n",
"You are never allowed to give an incorrect answer. Your solution will be called multiple times, with one of the states picked with equal probability every time.\n",
"\n",
"The state of the qubit at the end of the operation does not matter. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Solution\n",
"\n",
"> The task is a simple game inspired by a quantum detection problem due to Holevo<sup><a href=\"#peres-wooters-game-ref1\">[1]</a></sup> and Peres/Wootters<sup><a href=\"#peres-wooters-game-ref2\">[2]</a></sup>. In the game, a player A thinks of a number (0,1 or 2) and the opponent, player B, tries to guess any number but the one chosen by player A. \n",
">\n",
"> Classically, if you just made a guess, you'd have to ask two questions to be right $100\\%$ of the time. If instead, player A prepares a qubit with 0, 1, or 2 encoded into three single qubit states that are at an angle of 120 degrees with respect to each other and then hands the state to the opponent, then player B can apply a Positive Operator Valued Measure (POVM) consisting of 3 states that are perpendicular to the states chosen by player A. \n",
"> It can be shown that this allows B to be right $100\\%$ of the time with only 1 measurement, which is something that is not achievable with a von Neumann measurement on 1 qubit.\n",
"See also Peres<sup><a href=\"#peres-wooters-game-ref3\">[3, chapter 9.6]</a></sup> for a nice description of the optimal POVM.\n",
"\n",
"Next, we address how we can implement the mentioned POVM by way of a von Neumann measurement, and then how to implement said von Neumann measurement in Q\\#. First, we note that the POVM elements are given by the columns of the following matrix: \n",
" \n",
"$$M = \\frac{1}{\\sqrt{2}}\\left(\\begin{array}{rrr}\n",
"1 & 1 & 1 \\\\ \n",
"1 & \\omega & \\omega^2 \n",
"\\end{array}\n",
"\\right)$$\n",
"\n",
"where $\\omega = e^{2 \\pi i/3}$ denotes a primitive $3$rd root of unity. Our task will be to implement the rank 1 POVM given by the columns of $M$ via a von Neumann measurement. This can be done by \"embedding\" $M$ into a larger unitary matrix (taking complex conjugates and transposed):\n",
"\n",
"$$M' = \\frac{1}{\\sqrt{2}}\\left(\\begin{array}{cccc}\n",
"1 & -1 & 1 & 0 \\\\ \n",
"1 & -\\omega^2 & \\omega & 0 \\\\\n",
"1 & -\\omega & \\omega^2 & 0 \\\\\n",
"0 & 0 & 0 & -i \n",
"\\end{array}\n",
"\\right)$$\n",
"\n",
"Notice that applying $M'$ to input states given by column $i$ of $M$ (padded with two zeros to make it a vector of length $4$), where $i=0, 1, 2$ will never return the label $i$ as the corresponding vectors are perpendicular. \n",
"\n",
"We are therefore left with the problem of implementing $M'$ as a sequence of elementary quantum gates. Notice that \n",
"\n",
"$$M' \\cdot {\\rm diag}(1,-1,1,-1) = M' \\cdot (\\mathbf{1}_2 \\otimes Z) = \n",
"\\frac{1}{\\sqrt{2}}\\left(\\begin{array}{cccc}\n",
"1 & 1 & 1 & 0 \\\\ \n",
"1 & \\omega^2 & \\omega & 0 \\\\\n",
"1 & \\omega & \\omega^2 & 0 \\\\\n",
"0 & 0 & 0 & i \n",
"\\end{array}\n",
"\\right)$$\n",
"\n",
"Using a technique used in the Rader (also sometimes called Rader-Winograd) decomposition of the discrete Fourier transform <sup><a href=\"#peres-wooters-game-ref4\">[4]</a></sup>, which reduces it to a cyclic convolution, we apply a $2\\times 2$ Fourier transform on the indices $i,j=1,2$ of this matrix (i.e. a block matrix which consists of a direct sum of blocks $\\mathbf{1}_1$, $H$, and $\\mathbf{1}_1$ which we abbreviate in short as ${\\rm diag}(1,H,1)$). This yields\n",
"\n",
"$${\\rm diag}(1, H, 1) \\cdot M' \\cdot (\\mathbf{1}_2 \\otimes Z) \\cdot {\\rm diag}(1, H, 1) = \n",
"\\left(\\begin{array}{rrrr}\n",
"\\frac{1}{\\sqrt3} & \\sqrt{\\frac23} & 0 & 0 \\\\ \n",
"\\sqrt{\\frac23} & -\\frac{1}{\\sqrt3} & 0 & 0 \\\\\n",
"0 & 0 & i & 0 \\\\\n",
"0 & 0 & 0 & i \n",
"\\end{array}\n",
"\\right)$$\n",
"\n",
"This implies that after multiplication with the diagonal operator $(S^\\dagger \\otimes \\mathbf{1}_2)$, we are left with \n",
"\n",
"$${\\rm diag}(1, H, 1) \\cdot M' \\cdot (\\mathbf{1}_2 \\otimes Z) \\cdot {\\rm diag}(1, H, 1)\\cdot (S^\\dagger \\otimes \\mathbf{1}_2) = \n",
"\\left(\\begin{array}{rrrr}\n",
"\\frac{1}{\\sqrt3} & \\sqrt{\\frac23} & 0 & 0 \\\\ \n",
"\\sqrt{\\frac23} & -\\frac{1}{\\sqrt3} & 0 & 0 \\\\\n",
"0 & 0 & 1 & 0 \\\\\n",
"0 & 0 & 0 & 1 \n",
"\\end{array}\n",
"\\right)$$\n",
"\n",
"which is a (zero-)controlled rotation $R$ around the $Y$-axis by an angle given by $\\arccos \\sqrt{\\frac23}$. Putting everything together, i.e., by applying the inverses of gates so that we find that \n",
"\n",
"$$M' = {\\rm diag}(1,H,1) \\cdot R \\cdot (S \\otimes \\mathbf{1}_2) \\cdot {\\rm diag}(1,H,1) \\cdot (\\mathbf{1}_2 \\otimes Z)$$\n",
"\n",
" Noting finally, that to apply this sequence of unitaries to a column vector, we have to apply it in reverse when writing it as a program (as actions on vectors are left-associative). After applying a circuit identity that simplifies the resulting circuit after implementing ${\\rm diag}(1,H,1)$ via controlled $H$, \n",
"we arrive at the listing shown below.\n",
"\n",
"<a name=\"peres-wooters-game-ref1\"></a>[1] A. Holevo. Information-theoretical aspects of quantum measurement. Problems of Information Transmission, vol. 9, no. 2,pp. 110–118 (1973) \n",
"<a name=\"peres-wooters-game-ref2\"></a>[2] A. Peres and W. K. Wootters. Optimal detection of quantum information. Phys. Rev. Lett., vol. 66, pp. 1119-1122, Mar.1991. \n",
"<a name=\"peres-wooters-game-ref3\"></a>[3] A. Peres. Quantum Theory: Concepts and Methods. Kluwer Academic Publishers, 2002. \n",
"<a name=\"peres-wooters-game-ref4\"></a>[4] C. M. Rader. Discrete Fourier transforms when the number of data samples is prime. Proc. IEEE 56, 1107–1108 (1968"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"%kata T203_IsQubitNotInABC_Test\n",
"\n",
"open Microsoft.Quantum.Math;\n",
"open Microsoft.Quantum.Measurement;\n",
"\n",
"operation IsQubitNotInABC (q : Qubit) : Int {\n",
" \n",
" let alpha = ArcCos(Sqrt(2.0 / 3.0));\n",
"\n",
" using (a = Qubit()) {\n",
" Z(q);\n",
" CNOT(a, q);\n",
" Controlled H([q], a);\n",
" S(a);\n",
" X(q);\n",
"\n",
" (ControlledOnInt(0, Ry))([a], (-2.0 * alpha, q));\n",
" CNOT(a, q);\n",
" Controlled H([q], a);\n",
" CNOT(a, q);\n",
"\n",
" // finally, measure in the standard basis\n",
" let res0 = MResetZ(a);\n",
" let res1 = M(q);\n",
"\n",
" // dispatch on the cases\n",
" if (res0 == Zero and res1 == Zero) {\n",
" return 0;\n",
" }\n",
" elif (res0 == One and res1 == Zero) {\n",
" return 1;\n",
" }\n",
" elif (res0 == Zero and res1 == One) {\n",
" return 2;\n",
" }\n",
" else {\n",
" // this should never occur\n",
" return 3;\n",
" }\n",
" }\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Return to task 2.3 of the Measurements kata.](./Measurements.ipynb#peres-wooters-game)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Q#",
"language": "qsharp",
"name": "iqsharp"
},
"language_info": {
"file_extension": ".qs",
"mimetype": "text/x-qsharp",
"name": "qsharp",
"version": "0.10"
}
},
"nbformat": 4,
"nbformat_minor": 2
}

Двоичные данные
Measurements/img/Task201_Rotation.png Normal file

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 26 KiB