{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Joint Measurements Kata\n", "\n", "**Joint Measurements** quantum kata is a series of exercises designed to get you familiar with programming in Q#. It covers the joint parity measurements and using them for distinguishing quantum states or for performing multi-qubit gates.\n", "\n", "* In Q# joint measurements are implemented as the [Measure](https://docs.microsoft.com/qsharp/api/qsharp/microsoft.quantum.intrinsic.measure) operation.\n", "* You can read more about measurements of multi-qubit Pauli operators in the [Q# documentation](https://docs.microsoft.com/azure/quantum/concepts-pauli-measurements).\n", "\n", "Each task is wrapped in one operation preceded by the description of the task. Your goal is to fill in the blank (marked with `// ...` comments)\n", "with some Q# code that solves the task. To verify your answer, run the cell using Ctrl+Enter (⌘+Enter on macOS).\n", "\n", "The tasks are given in approximate order of increasing difficulty; harder ones are marked with asterisks." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task 1. Single-qubit measurement\n", "\n", "**Input:** Two qubits (stored in an array) which are guaranteed to be either in superposition of states $|00\\rangle$ and $|11\\rangle$ or in superposition of states $|01\\rangle$ and $|10\\rangle$.\n", "\n", "**Output:** 0 if qubits were in the first superposition, 1 if they were in the second superposition. \n", "*The state of the qubits at the end of the operation does not matter.*\n", "\n", "
\n", "
\n", " Need a hint? Click here\n", " Use two single-qubit measurements. \n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%kata T01_SingleQubitMeasurement \n", "\n", "operation SingleQubitMeasurement (qs : Qubit[]) : Int {\n", " // ...\n", " return -1;\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Can't come up with a solution? See the explained solution in the [Joint Measurements Workbook](./Workbook_JointMeasurements.ipynb#Task-1.-Single-qubit-measurement).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task 2. Parity measurement\n", "\n", "**Inputs**: Two qubits (stored in an array) which are guaranteed to be either in superposition of states $|00\\rangle$ and $|11\\rangle$ or in superposition of states $|01\\rangle$ and $|10\\rangle$.\n", "\n", "**Output**: 0 if qubits were in the first superposition, 1 if they were in the second superposition. \n", "*The state of the qubits at the end of the operation should be the same as the starting state.*" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%kata T02_ParityMeasurement \n", "\n", "operation ParityMeasurement (qs : Qubit[]) : Int {\n", " // ...\n", " return -1;\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Can't come up with a solution? See the explained solution in the [Joint Measurements Workbook](./Workbook_JointMeasurements.ipynb#Task-2.-Parity-measurement).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task 3. $|0000\\rangle + |1111\\rangle$ or $|0011\\rangle + |1100\\rangle$ ?\n", "**Inputs**: Four qubits (stored in an array) which are guaranteed to be either in superposition of states $|0000\\rangle$ and $|1111\\rangle$ or in superposition of states $|0011\\rangle$ and $|1100\\rangle$.\n", "\n", "**Output** : 0 if qubits were in the first superposition, 1 if they were in the second superposition. \n", "*The state of the qubits at the end of the operation should be the same as the starting state.*" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%kata T03_GHZOrGHZWithX \n", "\n", "operation GHZOrGHZWithX (qs : Qubit[]) : Int {\n", " // ...\n", " return -1;\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Can't come up with a solution? See the explained solution in the [Joint Measurements Workbook](./Workbook_JointMeasurements.ipynb#Task-3.-$|0000\\rangle-+-|1111\\rangle$-or-$|0011\\rangle-+-|1100\\rangle$--?).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task 4. GHZ state or W state ?\n", "\n", "**Inputs:** An **even** number of qubits (stored in an array) which are guaranteed to be either in a superposition of states $|0..0\\rangle$ and $|1..1\\rangle$ (the [GHZ state](https://en.wikipedia.org/wiki/Greenberger%E2%80%93Horne%E2%80%93Zeilinger_state)) or in the [W state](https://en.wikipedia.org/wiki/W_state).\n", "\n", "**Output:** 0 if qubits were in the first superposition, 1 if they were in the second superposition. \n", "*The state of the qubits at the end of the operation should be the same as the starting state.*" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%kata T04_GHZOrWState\n", "\n", "operation GHZOrWState (qs : Qubit[]) : Int {\n", " // ...\n", " return -1;\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Can't come up with a solution? See the explained solution in the [Joint Measurements Workbook](./Workbook_JointMeasurements.ipynb#Task-4.-GHZ-state-or-W-state-?).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task 5*. Parity measurement in different basis\n", "\n", "**Inputs:** Two qubits (stored in an array) which are guaranteed to be\n", "* either in superposition $\\alpha |00\\rangle + \\beta |01\\rangle + \\beta |10\\rangle + \\alpha |11\\rangle$\n", "* or in superposition $\\alpha |00\\rangle - \\beta |01\\rangle + \\beta |10\\rangle - \\alpha |11\\rangle$\n", "\n", "**Output:** 0 if qubits were in the first superposition, 1 if they were in the second superposition. \n", "*The state of the qubits at the end of the operation should be the same as the starting state.*" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%kata T05_DifferentBasis\n", "\n", "operation DifferentBasis (qs : Qubit[]) : Int {\n", " // ...\n", " return -1;\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Can't come up with a solution? See the explained solution in the [Joint Measurements Workbook](./Workbook_JointMeasurements.ipynb#parity-x).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task 6*. Controlled X gate with $|0\\rangle$ target\n", "\n", "**Input:** Two unentangled qubits (stored in an array of length 2). The first qubit (`qs[0]`) will be in state $|\\psi\\rangle = \\alpha |0\\rangle + \\beta |1\\rangle$ , the second (`qs[1]`) - in state $|0\\rangle$ (this can be written as two-qubit state $\\big(\\alpha |0\\rangle + \\beta |1\\rangle\\big) \\otimes |0\\rangle$). \n", "\n", "**Output:** Change the two-qubit state to $\\alpha |00\\rangle + \\beta |11\\rangle$ using only single-qubit gates and joint measurements. Do not use two-qubit gates. You do not need to allocate extra qubits." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%kata T06_ControlledX\n", "\n", "operation ControlledX (qs : Qubit[]) : Unit {\n", " // ...\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Can't come up with a solution? See the explained solution in the [Joint Measurements Workbook](./Workbook_JointMeasurements.ipynb#controlled-x-0).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Task 7**. Controlled X gate with arbitrary target\n", "\n", "**Input:** Two qubits (stored in an array of length 2) in an arbitrary two-qubit state $\\alpha |00\\rangle + \\beta |01\\rangle + \\color{blue}\\gamma |10\\rangle + \\color{blue}\\delta |11\\rangle$.\n", "\n", "**Goal:** Change the two-qubit state to $\\alpha |00\\rangle + \\beta |01\\rangle + \\color{red}\\delta |10\\rangle + \\color{red}\\gamma |11\\rangle$ using only single-qubit gates and joint measurements. Do not use two-qubit gates.\n", "\n", "> A general-case implementation of CNOT gate via joint measurements is described in [this paper](https://arxiv.org/pdf/1201.5734.pdf).\n", "\n", "
\n", " Need a hint? Click here\n", " You can use an extra qubit to perform this operation.\n", "
" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%kata T07_ControlledX_General\n", "\n", "operation ControlledX_General (qs : Qubit[]) : Unit {\n", " // ...\n", "}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Can't come up with a solution? See the explained solution in the [Joint Measurements Workbook](./Workbook_JointMeasurements.ipynb#controlled-x).*" ] } ], "metadata": { "kernelspec": { "display_name": "Q#", "language": "qsharp", "name": "iqsharp" }, "language_info": { "file_extension": ".qs", "mimetype": "text/x-qsharp", "name": "qsharp", "version": "0.14" } }, "nbformat": 4, "nbformat_minor": 2 }