diff --git a/docs/guides/colibritd-pde.ipynb b/docs/guides/colibritd-pde.ipynb
index b0bb97d808f..81f64b37814 100644
--- a/docs/guides/colibritd-pde.ipynb
+++ b/docs/guides/colibritd-pde.ipynb
@@ -13,23 +13,29 @@
"id": "2f87f5f0",
"metadata": {},
"source": [
- "# QUICK-PDE: A Qiskit Function by ColibriTD\n",
- "\n",
- "\n",
- " Qiskit Functions are an experimental feature available to IBM Quantum® Premium Plan, Flex Plan, and On-Prem (via IBM Quantum Platform API) Plan users. They are in preview release status and subject to change.\n",
- ""
+ "# QUICK-PDE: A Qiskit Function by ColibriTD"
]
},
{
"cell_type": "markdown",
- "id": "3a01cc47",
+ "id": "b9852687",
"metadata": {
- "tags": [
+ "tags": [
"version-info"
]
},
"source": []
},
+ {
+ "cell_type": "markdown",
+ "id": "01701579",
+ "metadata": {},
+ "source": [
+ "\n",
+ " Qiskit Functions are an experimental feature available to IBM Quantum® Premium Plan, Flex Plan, and On-Prem (via IBM Quantum Platform API) Plan users. They are in preview release status and subject to change.\n",
+ ""
+ ]
+ },
{
"cell_type": "markdown",
"id": "dde95705",
@@ -65,7 +71,7 @@
"\n",
"The arguments for CFD's differential equations are on a fixed grid, as follows:\n",
"\n",
- "> $t$ is between 0 and 0.95 with 30 sample points. $x$ is between 0 and 0.95 with a step size of 0.2375.\n",
+ "- $t$ is between 0 and 0.95 with 30 sample points. $x$ is between 0 and 0.95 with a step size of 0.2375.\n",
"\n",
"### Material Deformation\n",
"\n",
@@ -81,7 +87,7 @@
"\n",
"The arguments for MD's differential equations are on a fixed grid, as follows:\n",
"\n",
- "> $x$ is between 0 and 1 with a step size of 0.04."
+ "- $x$ is between 0 and 1 with a step size of 0.04."
]
},
{
diff --git a/docs/guides/get-started-with-primitives.ipynb b/docs/guides/get-started-with-primitives.ipynb
index e35772efe2e..fe0add0c3ae 100644
--- a/docs/guides/get-started-with-primitives.ipynb
+++ b/docs/guides/get-started-with-primitives.ipynb
@@ -9,7 +9,7 @@
"\n",
"\n",
"\n",
- "* While this documentation uses the primitives from Qiskit Runtime, which allow you to use IBM® backends, the primitives can be run on any provider by using the [backend primitives](#backend) instead. Additionally, you can use the *reference* primitives to run on a local statevector simulator. See [Exact simulation with Qiskit primitives](/docs/guides/simulate-with-qiskit-sdk-primitives) for details.\n",
+ "While this documentation uses the primitives from Qiskit Runtime, which allow you to use IBM® backends, the primitives can be run on any provider by using the [backend primitives](#backend) instead. Additionally, you can use the *reference* primitives to run on a local statevector simulator. See [Exact simulation with Qiskit primitives](/docs/guides/simulate-with-qiskit-sdk-primitives) for details.\n",
""
]
},
diff --git a/docs/guides/qpu-information.mdx b/docs/guides/qpu-information.mdx
index 1d10e1da4a9..f9eb5a55d4f 100644
--- a/docs/guides/qpu-information.mdx
+++ b/docs/guides/qpu-information.mdx
@@ -64,11 +64,11 @@ To access the details page, select [Compute resources](https://quantum.cloud.ibm
* **Basis gates** - Each [processor family](/docs/guides/processor-types) has a native gate set. By default, the QPUs in each family only support running the gates and operations in the native gate set. Thus, every gate in the circuit must be translated (by the transpiler) to the elements of this set. To find the native gates (also called basis gates) for a QPU, select its name on the [Compute resources](https://quantum.cloud.ibm.com/computers) page. Note that the non-unitary operations are not listed here; use the [method in Qiskit](/docs/guides/get-qpu-information#native-gates-with-qiskit) to see all native gates and operations for a QPU. See a list of all native gates in [this table](#native-gates).
-* **Version** - The version number of a QPU in the form `major.minor.revision`. See [QPU versioning](#qpu-versioning) for details on how this number is assigned.
+* **Version** - The version number of a QPU in the form `major.minor.revision`. See [QPU versioning](#qpu-versioning) for details on how this number is assigned.
-* **Calibration data** - Download the calibration data as a CSV file or click the arrow to display the Topology diagram, Individual qubit readout graph, or the Calibration data table. You can customize the data that is shown, depending on the view you have open. For example, on the Topology diagram, you can choose the data you want to see for connections and qubits. The colored bars associated with the diagram or graph indicate the range that is shown, with the average value marked. The color maximum and minimum change depending on the QPU.
+* **Calibration data** - Download the calibration data as a CSV file or click the arrow to display the Topology diagram, Individual qubit readout graph, or the Calibration data table. You can customize the data that is shown, depending on the view you have open. For example, on the Topology diagram, you can choose the data you want to see for connections and qubits. The colored bars associated with the diagram or graph indicate the range that is shown, with the average value marked. The color maximum and minimum change depending on the QPU.
- * **Topology diagram** or **coupling map** - A diagram that indicates the pairs of qubits that support two-qubit gate operations between them. This is also called the coupling map or connectivity. Qubits are represented as circles and the supported two-qubit gate operations are displayed as lines connecting the qubits.
+ * **Topology diagram** or **coupling map** - A diagram that indicates the pairs of qubits that support two-qubit gate operations between them. This is also called the coupling map or connectivity. Qubits are represented as circles and the supported two-qubit gate operations are displayed as lines connecting the qubits.
* **Individual qubit properties** - Shows the selected property for each qubit on the QPU. You can view properties such as:
- **T1 (Relaxation Time)**: The T1 time represents the average duration a qubit remains in its excited state $|1\rangle$ before decaying to its ground state $|0\rangle$ due to energy relaxation. This parameter is used to characterize the qubit's energy relaxation behavior, and is expressed in units of seconds (s).
- **T2 (Dephasing Time)**: The T2 time denotes the timescale over which a qubit maintains phase coherence of a superposition between the $|0\rangle$ and $|1\rangle$ states. It accounts for both energy relaxation and pure dephasing processes, providing insight into the qubit's coherence properties.
diff --git a/docs/migration-guides/qiskit-1.0-installation.mdx b/docs/migration-guides/qiskit-1.0-installation.mdx
index 0a226eb3f75..6e59a988383 100644
--- a/docs/migration-guides/qiskit-1.0-installation.mdx
+++ b/docs/migration-guides/qiskit-1.0-installation.mdx
@@ -452,10 +452,11 @@ When you're done with a virtual environment, you can simply delete its directory
When running `import qiskit`, you might see an error such as:
-> ImportError: Qiskit is installed in an invalid environment that has both Qiskit 1.0+ and an earlier version.
-> You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit pre-1.0 and post-1.0.
-> Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated.
-> Qiskit unfortunately cannot enforce this requirement during environment resolution.
+ ImportError: Qiskit is installed in an invalid environment that has both Qiskit 1.0+ and an earlier version.
+ You should create a new virtual environment, and ensure that you do not mix dependencies between Qiskit pre-1.0 and post-1.0.
+ Any packages that depend on 'qiskit-terra' are not compatible with Qiskit 1.0 and will need to be updated.
+ Qiskit unfortunately cannot enforce this requirement during environment resolution.
+
You might have run a completely valid `pip install` command, following all the recommendations in this guide, and still see this error message.
diff --git a/docs/tutorials/quantum-approximate-optimization-algorithm.ipynb b/docs/tutorials/quantum-approximate-optimization-algorithm.ipynb
index a93c9af46df..dd0337b6bfa 100644
--- a/docs/tutorials/quantum-approximate-optimization-algorithm.ipynb
+++ b/docs/tutorials/quantum-approximate-optimization-algorithm.ipynb
@@ -208,43 +208,46 @@
"H_C=\\sum_{ij}Q_{ij}Z_iZ_j + \\sum_i b_iZ_i.\n",
"$$\n",
"\n",
- "> **Reformulation steps from the QAOA problem to the Hamiltonian**\n",
- "\n",
- "> To demonstrate how the QAOA problem can be rewritten in this way, first replace the binary variables $x_i$ to a new set of variables $z_i\\in\\{-1, 1\\}$ via\n",
- ">\n",
- "> $$\n",
- "> x_i = \\frac{1-z_i}{2}.\n",
- "> $$\n",
- ">\n",
- "> Here you can see that if $x_i$ is $0$, then $z_i$ must be $1$. When the $x_i$'s are substituted for the $z_i$'s in the optimization problem ($x^TQx$), an equivalent formulation can be obtained.\n",
- ">\n",
- "> $$\n",
- "> x^TQx=\\sum_{ij}Q_{ij}x_ix_j \\\\ =\\frac{1}{4}\\sum_{ij}Q_{ij}(1-z_i)(1-z_j) \\\\=\\frac{1}{4}\\sum_{ij}Q_{ij}z_iz_j-\\frac{1}{4}\\sum_{ij}(Q_{ij}+Q_{ji})z_i + \\frac{n^2}{4}.\n",
- "> $$\n",
- ">\n",
- "> Now if we define $b_i=-\\sum_{j}(Q_{ij}+Q_{ji})$, remove the prefactor, and the constant $n^2$ term, we arrive at the two equivalent formulations of the same optimization problem.\n",
- ">\n",
- "> $$\n",
- "> \\min_{x\\in\\{0,1\\}^n} x^TQx\\Longleftrightarrow \\min_{z\\in\\{-1,1\\}^n}z^TQz + b^Tz\n",
- "> $$\n",
- ">\n",
- "> Here, $b$ depends on $Q$. Note that to obtain $z^TQz + b^Tz$ we dropped the factor of 1/4 and a constant offset of $n^2$ which do not play a role in the optimization.\n",
- ">\n",
- ">\n",
- "> Now, to obtain a quantum formulation of the problem, promote the $z_i$ variables to a Pauli $Z$ matrix, such as a $2\\times 2$ matrix of the form\n",
- ">\n",
- "> $$\n",
- "> Z_i = \\begin{pmatrix}1 & 0 \\\\ 0 & -1\\end{pmatrix}.\n",
- "> $$\n",
- ">\n",
- "> When you substitute these matrices in the optimization problem above, you obtain the following Hamiltonian\n",
- ">\n",
- "> $$\n",
- "> H_C=\\sum_{ij}Q_{ij}Z_iZ_j + \\sum_i b_iZ_i.\n",
- "> $$\n",
- ">\n",
- "> *Also recall that the $Z$ matrices are embedded in the quantum computer's computational space, that is, a Hilbert space of size $2^n\\times 2^n$. Therefore, you should understand terms such as $Z_iZ_j$ as the tensor product $Z_i\\otimes Z_j$ embedded in the $2^n\\times 2^n$ Hilbert space. For example, in a problem with five decision variables the term $Z_1Z_3$ is understood to mean $I\\otimes Z_3\\otimes I\\otimes Z_1\\otimes I$ where $I$ is the $2\\times 2$ identity matrix.*\n",
+ "\n",
+ "\n",
+ "**Reformulation steps from the QAOA problem to the Hamiltonian**\n",
+ "\n",
"\n",
+ "To demonstrate how the QAOA problem can be rewritten in this way, first replace the binary variables $x_i$ to a new set of variables $z_i\\in\\{-1, 1\\}$ via\n",
+ "\n",
+ "$$\n",
+ "x_i = \\frac{1-z_i}{2}.\n",
+ "$$\n",
+ "\n",
+ "Here you can see that if $x_i$ is $0$, then $z_i$ must be $1$. When the $x_i$'s are substituted for the $z_i$'s in the optimization problem ($x^TQx$), an equivalent formulation can be obtained.\n",
+ "\n",
+ "$$\n",
+ "x^TQx=\\sum_{ij}Q_{ij}x_ix_j \\\\ =\\frac{1}{4}\\sum_{ij}Q_{ij}(1-z_i)(1-z_j) \\\\=\\frac{1}{4}\\sum_{ij}Q_{ij}z_iz_j-\\frac{1}{4}\\sum_{ij}(Q_{ij}+Q_{ji})z_i + \\frac{n^2}{4}.\n",
+ "$$\n",
+ "\n",
+ "Now if we define $b_i=-\\sum_{j}(Q_{ij}+Q_{ji})$, remove the prefactor, and the constant $n^2$ term, we arrive at the two equivalent formulations of the same optimization problem.\n",
+ "\n",
+ "$$\n",
+ "\\min_{x\\in\\{0,1\\}^n} x^TQx\\Longleftrightarrow \\min_{z\\in\\{-1,1\\}^n}z^TQz + b^Tz\n",
+ "$$\n",
+ "\n",
+ "Here, $b$ depends on $Q$. Note that to obtain $z^TQz + b^Tz$ we dropped the factor of 1/4 and a constant offset of $n^2$ which do not play a role in the optimization.\n",
+ "\n",
+ "\n",
+ "Now, to obtain a quantum formulation of the problem, promote the $z_i$ variables to a Pauli $Z$ matrix, such as a $2\\times 2$ matrix of the form\n",
+ "\n",
+ "$$\n",
+ "Z_i = \\begin{pmatrix}1 & 0 \\\\ 0 & -1\\end{pmatrix}.\n",
+ "$$\n",
+ "\n",
+ "When you substitute these matrices in the optimization problem above, you obtain the following Hamiltonian\n",
+ "\n",
+ "$$\n",
+ "H_C=\\sum_{ij}Q_{ij}Z_iZ_j + \\sum_i b_iZ_i.\n",
+ "$$\n",
+ "\n",
+ "*Also recall that the $Z$ matrices are embedded in the quantum computer's computational space, that is, a Hilbert space of size $2^n\\times 2^n$. Therefore, you should understand terms such as $Z_iZ_j$ as the tensor product $Z_i\\otimes Z_j$ embedded in the $2^n\\times 2^n$ Hilbert space. For example, in a problem with five decision variables the term $Z_1Z_3$ is understood to mean $I\\otimes Z_3\\otimes I\\otimes Z_1\\otimes I$ where $I$ is the $2\\times 2$ identity matrix.*\n",
+ "\n",
"\n",
"This Hamiltonian is called the **cost function Hamiltonian**. It has the property that its ground state corresponds to the solution that **minimizes the cost function $f(x)$**.\n",
"Therefore, to solve your optimization problem you now need to prepare the ground state of $H_C$ (or a state with a high overlap with it) on the quantum computer. Then, sampling from this state will, with a high probability, yield the solution to $min~f(x)$."
@@ -827,7 +830,7 @@
"id": "2e2a89de-cef3-46ea-b201-cf931b65dfea",
"metadata": {},
"source": [
- "## Part II. scale it up!\n",
+ "## Part II. Scale it up!\n",
"\n",
"You have access to many devices with over 100 qubits on IBM Quantum® Platform. Select one on which to solve Max-Cut on a 100-node weighted graph. This is a \"utility-scale\" problem. The steps to build the workflow are followed the same as above, but with a much larger graph."
]
diff --git a/learning/courses/basics-of-quantum-information/multiple-systems/classical-information.ipynb b/learning/courses/basics-of-quantum-information/multiple-systems/classical-information.ipynb
index acf7c8922f4..c601be7e3bb 100644
--- a/learning/courses/basics-of-quantum-information/multiple-systems/classical-information.ipynb
+++ b/learning/courses/basics-of-quantum-information/multiple-systems/classical-information.ipynb
@@ -590,8 +590,10 @@
"\n",
"For example, suppose that $\\mathsf{X}$ and $\\mathsf{Y}$ are bits, and consider an operation with the following description.\n",
"\n",
- "> If $\\mathsf{X} = 1,$ then perform a NOT operation on $\\mathsf{Y}.$\\\n",
- "> Otherwise do nothing.\n",
+ "\n",
+ "If $\\mathsf{X} = 1,$ then perform a NOT operation on $\\mathsf{Y}.$\\\n",
+ "Otherwise do nothing.\n",
+ "\n",
"\n",
"This is a deterministic operation known as a *controlled-NOT* operation, where $\\mathsf{X}$ is the *control* bit that determines whether or not a NOT operation should be applied to the *target* bit $\\mathsf{Y}.$\n",
"Here is the matrix representation of this operation:\n",
@@ -640,10 +642,12 @@
"\n",
"Another example is the operation having this description:\n",
"\n",
- "> Perform one of the following two operations, each with probability $1/2:$\n",
- ">\n",
- "> 1. Set $\\mathsf{Y}$ to be equal to $\\mathsf{X}.$\n",
- "> 2. Set $\\mathsf{X}$ to be equal to $\\mathsf{Y}.$\n",
+ "\n",
+ "Perform one of the following two operations, each with probability $1/2:$\n",
+ "\n",
+ "1. Set $\\mathsf{Y}$ to be equal to $\\mathsf{X}.$\n",
+ "2. Set $\\mathsf{X}$ to be equal to $\\mathsf{Y}.$\n",
+ "\n",
"\n",
"The matrix representation of this operation is as follows:\n",
"\n",
diff --git a/learning/courses/basics-of-quantum-information/quantum-circuits/limitations-on-quantum-information.ipynb b/learning/courses/basics-of-quantum-information/quantum-circuits/limitations-on-quantum-information.ipynb
index a766061e5df..ff2f51fc403 100644
--- a/learning/courses/basics-of-quantum-information/quantum-circuits/limitations-on-quantum-information.ipynb
+++ b/learning/courses/basics-of-quantum-information/quantum-circuits/limitations-on-quantum-information.ipynb
@@ -114,12 +114,13 @@
"\n",
"The *no-cloning theorem* shows it is impossible to create a perfect copy of an unknown quantum state.\n",
"\n",
- "> **Theorem (No-cloning theorem).**\n",
- "> Let $\\Sigma$ be a classical state set having at least two elements, and let $\\mathsf{X}$ and $\\mathsf{Y}$ be systems sharing the same classical state set $\\Sigma.$ There does not exist a quantum state $\\vert \\phi\\rangle$ of $\\mathsf{Y}$ and a unitary operation $U$ on the pair $(\\mathsf{X},\\mathsf{Y})$ such that\n",
- "> $$\n",
- "> U \\bigl( \\vert \\psi \\rangle \\otimes \\vert\\phi\\rangle\\bigr) = \\vert \\psi \\rangle \\otimes \\vert\\psi\\rangle\n",
- "> $$\n",
- "> for every state $\\vert \\psi \\rangle$ of $\\mathsf{X}.$\n",
+ "\n",
+ "No-cloning theorem: Let $\\Sigma$ be a classical state set having at least two elements, and let $\\mathsf{X}$ and $\\mathsf{Y}$ be systems sharing the same classical state set $\\Sigma.$ There does not exist a quantum state $\\vert \\phi\\rangle$ of $\\mathsf{Y}$ and a unitary operation $U$ on the pair $(\\mathsf{X},\\mathsf{Y})$ such that\n",
+ "$$\n",
+ "U \\bigl( \\vert \\psi \\rangle \\otimes \\vert\\phi\\rangle\\bigr) = \\vert \\psi \\rangle \\otimes \\vert\\psi\\rangle\n",
+ "$$\n",
+ "for every state $\\vert \\psi \\rangle$ of $\\mathsf{X}.$\n",
+ "\n",
"\n",
"That is, there is no way to initialize the system $\\mathsf{Y}$ (to any state $\\vert\\phi\\rangle$ whatsoever) and perform a unitary operation $U$ on the joint system $(\\mathsf{X},\\mathsf{Y})$ so that the effect is for the state $\\vert\\psi\\rangle$ of $\\mathsf{X}$ to be *cloned* — resulting in $(\\mathsf{X},\\mathsf{Y})$ being in the state\n",
"$\\vert \\psi \\rangle \\otimes \\vert\\psi\\rangle.$\n",
diff --git a/learning/courses/foundations-of-quantum-error-correction/fault-tolerant-quantum-computing/controlling-error-propagation.ipynb b/learning/courses/foundations-of-quantum-error-correction/fault-tolerant-quantum-computing/controlling-error-propagation.ipynb
index cbc94ceec3d..f8444be42c4 100644
--- a/learning/courses/foundations-of-quantum-error-correction/fault-tolerant-quantum-computing/controlling-error-propagation.ipynb
+++ b/learning/courses/foundations-of-quantum-error-correction/fault-tolerant-quantum-computing/controlling-error-propagation.ipynb
@@ -124,8 +124,9 @@
"Unfortunately, it is never possible, for any non-trivial quantum error correcting code, to implement a *universal* set of gates transversally.\n",
"This fact is known as the *Eastin-Knill theorem*.\n",
"\n",
- "> **Theorem** (Eastin-Knill).\n",
- "> For any quantum error correcting code with distance at least 2, the set of logical gates that can be implemented transversally generates a set of operations that (up to a global phase) is discrete, and is therefore not universal.\n",
+ "\n",
+ "Eastin-Knill theorem: For any quantum error correcting code with distance at least 2, the set of logical gates that can be implemented transversally generates a set of operations that (up to a global phase) is discrete, and is therefore not universal.\n",
+ "\n",
"\n",
"The proof of this theorem will not be explained here.\n",
"(It is not a complicated proof, but it does require a basic knowledge of Lie groups and Lie algebras, which are not among the series prerequisites.)\n",
diff --git a/learning/courses/foundations-of-quantum-error-correction/fault-tolerant-quantum-computing/threshold-theorem.ipynb b/learning/courses/foundations-of-quantum-error-correction/fault-tolerant-quantum-computing/threshold-theorem.ipynb
index cacd496e1b3..ee60fe3024d 100644
--- a/learning/courses/foundations-of-quantum-error-correction/fault-tolerant-quantum-computing/threshold-theorem.ipynb
+++ b/learning/courses/foundations-of-quantum-error-correction/fault-tolerant-quantum-computing/threshold-theorem.ipynb
@@ -10,7 +10,9 @@
"The final topic of discussion for the lesson is a very important theorem known as the *threshold theorem*.\n",
"Here is a somewhat informal statement of this theorem.\n",
"\n",
- "> **Theorem** (The threshold theorem). A quantum circuit having size $N$ can be implemented with high accuracy by a noisy quantum circuit, provided that the probability of error at each location in the noisy circuit is below a fixed, nonzero threshold value $p_{\\text{th}} > 0.$ The size of the noisy circuit scales as $O(N \\log^c(N))$ for a positive constant $c.$\n",
+ "\n",
+ "The threshold theorem: A quantum circuit having size $N$ can be implemented with high accuracy by a noisy quantum circuit, provided that the probability of error at each location in the noisy circuit is below a fixed, nonzero threshold value $p_{\\text{th}} > 0.$ The size of the noisy circuit scales as $O(N \\log^c(N))$ for a positive constant $c.$\n",
+ "\n",
"\n",
"In simple terms, it says that if we have any quantum circuit having $N$ gates, where $N$ can be as large as we like, then it's possible to implement that circuit with high accuracy using a noisy quantum circuit, provided that the level of noise is below a certain threshold value that is independent of N.\n",
"Moreover, it isn't too expensive to do this, in the sense that the size of the noisy circuit required is on the order of $N$ times some constant power of the logarithm of $N.$\n",
diff --git a/learning/courses/foundations-of-quantum-error-correction/quantum-code-constructions/css-codes.ipynb b/learning/courses/foundations-of-quantum-error-correction/quantum-code-constructions/css-codes.ipynb
index c19952d4558..8c80589e8da 100644
--- a/learning/courses/foundations-of-quantum-error-correction/quantum-code-constructions/css-codes.ipynb
+++ b/learning/courses/foundations-of-quantum-error-correction/quantum-code-constructions/css-codes.ipynb
@@ -191,7 +191,9 @@
"\n",
"We can now define CSS codes in very simple terms.\n",
"\n",
- "> **Definition.** A CSS code is a stabilizer code that can be expressed using only $X$ and $Z$ stabilizer generators.\n",
+ "\n",
+ "A CSS code is a stabilizer code that can be expressed using only $X$ and $Z$ stabilizer generators.\n",
+ "\n",
"\n",
"That is, CSS codes are stabilizer codes for which we have stabilizer generators in which no Pauli $Y$ matrices appear, and for which $X$ and $Z$ never appear in the *same* stabilizer generator.\n",
"\n",
diff --git a/learning/courses/foundations-of-quantum-error-correction/quantum-code-constructions/other-code-families.ipynb b/learning/courses/foundations-of-quantum-error-correction/quantum-code-constructions/other-code-families.ipynb
index b536ae7eca6..97fb3159d2a 100644
--- a/learning/courses/foundations-of-quantum-error-correction/quantum-code-constructions/other-code-families.ipynb
+++ b/learning/courses/foundations-of-quantum-error-correction/quantum-code-constructions/other-code-families.ipynb
@@ -79,8 +79,9 @@
"Quantum error correction is an active and rapidly advancing area of research.\n",
"Those interested in exploring deeper may wish to consult the [Error Correction Zoo](https://errorcorrectionzoo.org/), which lists numerous examples and categorizations of quantum error correcting codes.\n",
"\n",
- "> **Example:** *The gross code*.\n",
- "> The gross code is a recently discovered $[[144,12,12]]$ stabilizer code. It is similar to the toric code, except each stabilizer generator acts nontrivially on two additional qubits, slightly further away from the tile or vertex for that generator (so each stabilizer generator has weight 6). The advantage of this code is that it can encode 12 qubits, compared with just two for the toric code."
+ "### Example: The gross code\n",
+ "\n",
+ "The gross code is a recently discovered $[[144,12,12]]$ stabilizer code. It is similar to the toric code, except each stabilizer generator acts nontrivially on two additional qubits, slightly further away from the tile or vertex for that generator (so each stabilizer generator has weight 6). The advantage of this code is that it can encode 12 qubits, compared with just two for the toric code."
]
}
],
diff --git a/learning/courses/fundamentals-of-quantum-algorithms/grover-algorithm/grover-algorithm-description.ipynb b/learning/courses/fundamentals-of-quantum-algorithms/grover-algorithm/grover-algorithm-description.ipynb
index ab60a00f4f1..f4cb474dbcf 100644
--- a/learning/courses/fundamentals-of-quantum-algorithms/grover-algorithm/grover-algorithm-description.ipynb
+++ b/learning/courses/fundamentals-of-quantum-algorithms/grover-algorithm/grover-algorithm-description.ipynb
@@ -61,11 +61,11 @@
"The algorithm refers to a number $t,$ which is the number of *iterations* it performs (and therefore the number of *queries* to the function $f$ it requires).\n",
"This number $t$ isn't specified by Grover's algorithm as we're describing it, and we'll discuss later in the lesson how it can be chosen.\n",
"\n",
- "> **Grover's algorithm**\n",
- ">\n",
- "> 1. Initialize an $n$ qubit register $\\mathsf{Q}$ to the all-zero state $\\vert 0^n \\rangle$ and then apply a Hadamard operation to each qubit of $\\mathsf{Q}.$\n",
- "> 2. Apply $t$ times the unitary operation $G = H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n} Z_f$ to the register $\\mathsf{Q}$\n",
- "> 3. Measure the qubits of $\\mathsf{Q}$ with respect to standard basis measurements and output the resulting string.\n",
+ "\n",
+ "1. Initialize an $n$ qubit register $\\mathsf{Q}$ to the all-zero state $\\vert 0^n \\rangle$ and then apply a Hadamard operation to each qubit of $\\mathsf{Q}.$\n",
+ "2. Apply $t$ times the unitary operation $G = H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n} Z_f$ to the register $\\mathsf{Q}$\n",
+ "3. Measure the qubits of $\\mathsf{Q}$ with respect to standard basis measurements and output the resulting string.\n",
+ "\n",
"\n",
"The operation $G = H^{\\otimes n} Z_{\\mathrm{OR}} H^{\\otimes n} Z_f$ iterated in step 2 will be called the *Grover operation* throughout the remainder of this lesson.\n",
"Here is a quantum circuit representation of the Grover operation when $n=7\\!:$\n",
diff --git a/learning/courses/fundamentals-of-quantum-algorithms/grover-algorithm/unstructured-search.ipynb b/learning/courses/fundamentals-of-quantum-algorithms/grover-algorithm/unstructured-search.ipynb
index 585b7009960..207fa78d6dd 100644
--- a/learning/courses/fundamentals-of-quantum-algorithms/grover-algorithm/unstructured-search.ipynb
+++ b/learning/courses/fundamentals-of-quantum-algorithms/grover-algorithm/unstructured-search.ipynb
@@ -65,18 +65,20 @@
"\n",
"Here's a precise statement of the problem, which is named *Search* because we're searching for a solution, meaning a string $x$ that causes $f$ to evaluate to $1.$\n",
"\n",
- "> **Search**\\\n",
- "> Input: a function $f:\\Sigma^n\\rightarrow\\Sigma$\\\n",
- "> Output: a string $x\\in\\Sigma^n$ satisfying $f(x) = 1,$ or \"no solution\" if no such string $x$ exists\n",
+ "\n",
+ "Input: a function $f:\\Sigma^n\\rightarrow\\Sigma$\\\n",
+ "Output: a string $x\\in\\Sigma^n$ satisfying $f(x) = 1,$ or \"no solution\" if no such string $x$ exists\n",
+ "\n",
"\n",
"Notice that this is *not* a promise problem — the function $f$ is arbitrary.\n",
"It will, however, be helpful to consider the following promise variant of the problem, where we're guaranteed that there's exactly one solution.\n",
"This problem appeared as an example of a promise problem in the *Quantum query algorithms* lesson.\n",
"\n",
- "> **Unique search**\\\n",
- "> Input: a function of the form $f:\\Sigma^n \\rightarrow \\Sigma$\\\n",
- "> Promise: there is exactly one string $z\\in\\Sigma^n$ for which $f(z) = 1,$ with $f(x) = 0$ for all strings $x\\neq z$\\\n",
- "> Output: the string $z$\n",
+ "\n",
+ "Input: a function of the form $f:\\Sigma^n \\rightarrow \\Sigma$\\\n",
+ "Promise: there is exactly one string $z\\in\\Sigma^n$ for which $f(z) = 1,$ with $f(x) = 0$ for all strings $x\\neq z$\\\n",
+ "Output: the string $z$\n",
+ "\n",
"\n",
"Also notice that the *Or* problem mentioned in the same lesson is closely related to *Search*.\n",
"For that problem, the goal is simply to determine whether or not a solution exists, as opposed to actually finding a solution."
diff --git a/learning/courses/fundamentals-of-quantum-algorithms/phase-estimation-and-factoring/phase-estimation-problem.ipynb b/learning/courses/fundamentals-of-quantum-algorithms/phase-estimation-and-factoring/phase-estimation-problem.ipynb
index 710c24ccd65..97c24fc509b 100644
--- a/learning/courses/fundamentals-of-quantum-algorithms/phase-estimation-and-factoring/phase-estimation-problem.ipynb
+++ b/learning/courses/fundamentals-of-quantum-algorithms/phase-estimation-and-factoring/phase-estimation-problem.ipynb
@@ -104,12 +104,13 @@
"\n",
"Now here's a statement of the spectral theorem.\n",
"\n",
- "> **Theorem (spectral theorem).**\n",
- "> Let $M$ be a normal $N\\times N$ complex matrix.\n",
- "> There exists an orthonormal basis of $N$-dimensional complex vectors $\\bigl\\{ \\vert\\psi_1\\rangle,\\ldots,\\vert\\psi_N\\rangle \\bigr\\}$ along with complex numbers $\\lambda_1,\\ldots,\\lambda_N$ such that\n",
- "> $$\n",
- "> M = \\lambda_1 \\vert \\psi_1\\rangle\\langle \\psi_1\\vert + \\cdots + \\lambda_N \\vert \\psi_N\\rangle\\langle \\psi_N\\vert.\n",
- "> $$\n",
+ "\n",
+ "Spectral theorem: Let $M$ be a normal $N\\times N$ complex matrix.\n",
+ "There exists an orthonormal basis of $N$-dimensional complex vectors $\\bigl\\{ \\vert\\psi_1\\rangle,\\ldots,\\vert\\psi_N\\rangle \\bigr\\}$ along with complex numbers $\\lambda_1,\\ldots,\\lambda_N$ such that\n",
+ "$$\n",
+ "M = \\lambda_1 \\vert \\psi_1\\rangle\\langle \\psi_1\\vert + \\cdots + \\lambda_N \\vert \\psi_N\\rangle\\langle \\psi_N\\vert.\n",
+ "$$\n",
+ "\n",
"\n",
"The expression of a matrix in the form\n",
"\n",
@@ -272,10 +273,11 @@
"for a unique real number $\\theta$ satisfying $0\\leq\\theta<1.$\n",
"The goal of the problem is to compute or approximate this real number $\\theta.$\n",
"\n",
- "> **Phase estimation problem**\\\n",
- "> Input: A unitary quantum circuit for an $n$-qubit operation $U$ along with an $n$-qubit quantum state $\\vert\\psi\\rangle$ \\\n",
- "> Promise: $\\vert\\psi\\rangle$ is an eigenvector of $U$ \\\n",
- "> Output: an approximation to the number $\\theta\\in[0,1)$ satisfying $U\\vert\\psi\\rangle = e^{2\\pi i \\theta}\\vert\\psi\\rangle$\n",
+ "\n",
+ "Input: A unitary quantum circuit for an $n$-qubit operation $U$ along with an $n$-qubit quantum state $\\vert\\psi\\rangle$ \\\n",
+ "Promise: $\\vert\\psi\\rangle$ is an eigenvector of $U$ \\\n",
+ "Output: an approximation to the number $\\theta\\in[0,1)$ satisfying $U\\vert\\psi\\rangle = e^{2\\pi i \\theta}\\vert\\psi\\rangle$\n",
+ "\n",
"\n",
"Here are a few remarks about this problem statement:\n",
"\n",
diff --git a/learning/courses/fundamentals-of-quantum-algorithms/phase-estimation-and-factoring/shor-algorithm.ipynb b/learning/courses/fundamentals-of-quantum-algorithms/phase-estimation-and-factoring/shor-algorithm.ipynb
index 2ec235df0e8..9cf8bd31a16 100644
--- a/learning/courses/fundamentals-of-quantum-algorithms/phase-estimation-and-factoring/shor-algorithm.ipynb
+++ b/learning/courses/fundamentals-of-quantum-algorithms/phase-estimation-and-factoring/shor-algorithm.ipynb
@@ -127,9 +127,10 @@
"\n",
"Now we can state the order-finding problem.\n",
"\n",
- "> **Order finding**\\\n",
- "> Input: positive integers $N$ and $a$ satisfying $\\gcd(N,a) = 1$\\\n",
- "> Output: the smallest positive integer $r$ such that $a^r \\equiv 1$ $(\\textrm{mod } N)$\n",
+ "\n",
+ "Input: positive integers $N$ and $a$ satisfying $\\gcd(N,a) = 1$\\\n",
+ "Output: the smallest positive integer $r$ such that $a^r \\equiv 1$ $(\\textrm{mod } N)$\n",
+ "\n",
"\n",
"Alternatively, in terms of the notation we just introduced above, we're given $a \\in \\mathbb{Z}_N^{\\ast},$ and we're looking for the smallest positive integer $r$ such that $a^r = 1.$\n",
"This number $r$ is called the *order* of $a$ modulo $N.$\n",
@@ -488,10 +489,11 @@
"We won't explain the continued fraction algorithm here.\n",
"Instead, here's a statement of a known fact about this algorithm.\n",
"\n",
- "> **Fact.**\n",
- "> Given an integer $N\\geq 2$ and a real number $\\alpha\\in(0,1),$ there is at most one choice of integers $u,v\\in\\{0,\\ldots,N-1\\}$ with $v\\neq 0$ and $\\gcd(u,v)=1$ satisfying $\\vert \\alpha - u/v\\vert < \\frac{1}{2N^2}.$\n",
- "> Given $\\alpha$ and $N,$ the *continued fraction algorithm* finds $u$ and $v,$ or reports that they don't exist.\n",
- "> This algorithm can be implemented as a Boolean circuit having size $O((\\operatorname{lg}(N))^3).$\n",
+ "\n",
+ "Given an integer $N\\geq 2$ and a real number $\\alpha\\in(0,1),$ there is at most one choice of integers $u,v\\in\\{0,\\ldots,N-1\\}$ with $v\\neq 0$ and $\\gcd(u,v)=1$ satisfying $\\vert \\alpha - u/v\\vert < \\frac{1}{2N^2}.$\n",
+ "Given $\\alpha$ and $N,$ the *continued fraction algorithm* finds $u$ and $v,$ or reports that they don't exist.\n",
+ "This algorithm can be implemented as a Boolean circuit having size $O((\\operatorname{lg}(N))^3).$\n",
+ "\n",
"\n",
"If we have a very close approximation $y/2^m$ to $k/r,$ and we run the continued fraction algorithm for $N$ and $\\alpha = y/2^m,$ we'll get $u$ and $v,$ as they're described in the fact.\n",
"An analysis of the fact allows us to conclude that\n",
@@ -581,19 +583,19 @@
"It's good that we can do both of these things because order finding won't help us to factor even numbers or for *prime* powers, where the number $s$ happens to be prime.\n",
"If $N$ is odd and not a prime power, however, order finding allows us to split $N.$\n",
"\n",
- "> **Probabilistic algorithm to split an odd, composite integer N that is not a prime power**\n",
- ">\n",
- "> 1. Randomly choose $a\\in\\{2,\\ldots,N-1\\}.$\n",
- "> 2. Compute $d=\\gcd(a,N).$\n",
- "> 3. If $d > 1$ then output $b = d$ and $c = N/d$ and stop. Otherwise continue to the next step knowing that $a\\in\\mathbb{Z}_N^{\\ast}.$\n",
- "> 4. Let $r$ be the order of $a$ modulo $N.$ (Here's where we need order finding.)\n",
- "> 5. If $r$ is even:\n",
- ">\n",
- "> 5.1 Compute $x = a^{r/2} - 1$ modulo $N$ \\\n",
- "> 5.2 Compute $d = \\gcd(x,N).$ \\\n",
- "> 5.3 If $d>1$ then output $b=d$ and $c = N/d$ and stop.\n",
- ">\n",
- "> 6. If this point is reached, the algorithm has failed to find a factor of $N.$\n",
+ "\n",
+ "1. Randomly choose $a\\in\\{2,\\ldots,N-1\\}.$\n",
+ "2. Compute $d=\\gcd(a,N).$\n",
+ "3. If $d > 1$ then output $b = d$ and $c = N/d$ and stop. Otherwise continue to the next step knowing that $a\\in\\mathbb{Z}_N^{\\ast}.$\n",
+ "4. Let $r$ be the order of $a$ modulo $N.$ (Here's where we need order finding.)\n",
+ "5. If $r$ is even:\n",
+ "\n",
+ " 5.1 Compute $x = a^{r/2} - 1$ modulo $N$ \\\n",
+ " 5.2 Compute $d = \\gcd(x,N).$ \\\n",
+ " 5.3 If $d>1$ then output $b=d$ and $c = N/d$ and stop.\n",
+ "\n",
+ "6. If this point is reached, the algorithm has failed to find a factor of $N.$\n",
+ "\n",
"\n",
"A run of this algorithm may fail to find a factor of $N.$\n",
"Specifically, this happens in two situations:\n",
diff --git a/learning/courses/fundamentals-of-quantum-algorithms/quantum-algorithmic-foundations/factoring-and-gcd.ipynb b/learning/courses/fundamentals-of-quantum-algorithms/quantum-algorithmic-foundations/factoring-and-gcd.ipynb
index c9b1b93438e..dd9e16af791 100644
--- a/learning/courses/fundamentals-of-quantum-algorithms/quantum-algorithmic-foundations/factoring-and-gcd.ipynb
+++ b/learning/courses/fundamentals-of-quantum-algorithms/quantum-algorithmic-foundations/factoring-and-gcd.ipynb
@@ -17,9 +17,10 @@
"\n",
"To explain further, let's introduce the *integer factorization* problem.\n",
"\n",
- "> **Integer factorization** \\\n",
- "> Input: an integer $N\\geq 2$\\\n",
- "> Output: the prime factorization of $N$\n",
+ "\n",
+ "Input: an integer $N\\geq 2$\\\n",
+ "Output: the prime factorization of $N$\n",
+ "\n",
"\n",
"By the *prime factorization* of $N$ we mean a list of the prime factors of $N$ and the powers to which they must be raised to obtain $N$ by multiplication.\n",
"For example, the prime factors of $12$ are $2$ and $3,$ and to obtain $12$ we must take the product of $2$ to the power $2$ and $3$ to the power $1.$\n",
@@ -174,9 +175,10 @@
"\n",
"Next let's consider a related but very different problem, which is computing the greatest common divisor (or GCD) of two integers.\n",
"\n",
- "> **Greatest common divisor (GCD)** \\\n",
- "> Input: nonnegative integers $N$ and $M,$ at least one of which is positive\\\n",
- "> Output: the greatest common divisor of $N$ and $M$\n",
+ "\n",
+ "Input: nonnegative integers $N$ and $M,$ at least one of which is positive\\\n",
+ "Output: the greatest common divisor of $N$ and $M$\n",
+ "\n",
"\n",
"The greatest common divisor of two numbers is the largest integer that evenly divides both of them.\n",
"\n",
diff --git a/learning/courses/fundamentals-of-quantum-algorithms/quantum-algorithmic-foundations/measuring-computational-cost.ipynb b/learning/courses/fundamentals-of-quantum-algorithms/quantum-algorithmic-foundations/measuring-computational-cost.ipynb
index 55975f044ae..7c95aaedd30 100644
--- a/learning/courses/fundamentals-of-quantum-algorithms/quantum-algorithmic-foundations/measuring-computational-cost.ipynb
+++ b/learning/courses/fundamentals-of-quantum-algorithms/quantum-algorithmic-foundations/measuring-computational-cost.ipynb
@@ -225,9 +225,10 @@
"\n",
"To explain further, let's take a moment to consider the problem of integer addition, which is much simpler than integer factoring or even computing GCDs.\n",
"\n",
- "> **Integer addition**\\\n",
- "> Input: integers $N$ and $M$\\\n",
- "> Output: $N+M$\n",
+ "\n",
+ "Input: integers $N$ and $M$\\\n",
+ "Output: $N+M$\n",
+ "\n",
"\n",
"How might we design Boolean circuits for solving this problem?\n",
"\n",
@@ -313,9 +314,10 @@
"\n",
"Here are a few more examples of problems from computational number theory, beginning with *multiplication*.\n",
"\n",
- "> **Integer multiplication**\\\n",
- "> Input: integers $N$ and $M$\\\n",
- "> Output: $NM$\n",
+ "\n",
+ "Input: integers $N$ and $M$\\\n",
+ "Output: $NM$\n",
+ "\n",
"\n",
"Creating Boolean circuits for this problem is more difficult than creating circuits for addition — but by thinking about the standard multiplication algorithm, we can come up with circuits having size $O(n^2)$ for this problem (assuming $N$ and $M$ are both represented by $n$-bit binary representations).\n",
"More generally, if $N$ has $n$ bits and $M$ has $m$ bits, there are Boolean circuits of size $O(nm)$ for multiplying $N$ and $M.$\n",
@@ -326,9 +328,10 @@
"\n",
"Another basic problem is *division*, which we interpret to mean computing both the quotient and remainder given an integer divisor and dividend.\n",
"\n",
- "> **Integer division**\\\n",
- "> Input: integers $N$ and $M\\neq0$\\\n",
- "> Output: integers $q$ and $r$ satisfying $0\\leq r < |M|$ and $N = q M + r$\n",
+ "\n",
+ "Input: integers $N$ and $M\\neq0$\\\n",
+ "Output: integers $q$ and $r$ satisfying $0\\leq r < |M|$ and $N = q M + r$\n",
+ "\n",
"\n",
"The cost of integer division is similar to multiplication: if $N$ has $n$ bits and $M$ has $m$ bits, there are Boolean circuits of size $O(nm)$ for solving this problem.\n",
"And like multiplication, asymptotically superior methods are known.\n",
@@ -339,9 +342,10 @@
"\n",
"A somewhat more expensive computation that arises in number theory is *modular exponentiation*.\n",
"\n",
- "> **Integer modular exponentiation**\\\n",
- "> Input: integers $N,$ $K,$ and $M$ with $K\\geq 0$ and $M\\geq 1$\\\n",
- "> Output: $N^K \\hspace{1mm} (\\text{mod }M)$\n",
+ "\n",
+ "Input: integers $N,$ $K,$ and $M$ with $K\\geq 0$ and $M\\geq 1$\\\n",
+ "Output: $N^K \\hspace{1mm} (\\text{mod }M)$\n",
+ "\n",
"\n",
"By $N^K\\hspace{1mm} (\\text{mod }M)$ we mean the remainder when $N^K$ is divided by $M,$ meaning the unique integer $r$ satisfying $0\\leq r < M$ and $N^K = q M + r$ for some integer $q.$\n",
"\n",
diff --git a/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/deutsch-algorithm.ipynb b/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/deutsch-algorithm.ipynb
index dcc73c2d6a1..03d77cf367c 100644
--- a/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/deutsch-algorithm.ipynb
+++ b/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/deutsch-algorithm.ipynb
@@ -47,9 +47,10 @@
"The first and last of these functions are *constant* and the middle two are *balanced*, meaning that the two possible output values for the function occur the same number of times as we range over the inputs.\n",
"Deutsch's problem is to determine which of these two categories the input function belongs to: constant or balanced.\n",
"\n",
- "> **Deutsch's problem** \\\n",
- "> Input: a function $f:\\{0,1\\}\\rightarrow\\{0,1\\}$ \\\n",
- "> Output: $0$ if $f$ is constant, $1$ if $f$ is balanced\n",
+ "\n",
+ "Input: a function $f:\\{0,1\\}\\rightarrow\\{0,1\\}$ \\\n",
+ "Output: $0$ if $f$ is constant, $1$ if $f$ is balanced\n",
+ "\n",
"\n",
"If we view the input function $f$ in Deutsch's problem as representing random access to a string, we're thinking about a two-bit string: $f(0)f(1).$\n",
"\n",
diff --git a/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/deutsch-jozsa-algorithm.ipynb b/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/deutsch-jozsa-algorithm.ipynb
index db593cd4b91..17d4f07e4c2 100644
--- a/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/deutsch-jozsa-algorithm.ipynb
+++ b/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/deutsch-jozsa-algorithm.ipynb
@@ -40,10 +40,11 @@
"For the Deutsch-Jozsa problem, we simply don't worry about functions like this — they're considered to be \"don't care\" inputs.\n",
"That is, for this problem we have a *promise* that $f$ is either constant or balanced.\n",
"\n",
- "> **Deutsch-Jozsa problem** \\\n",
- "> Input: a function $f:\\{0,1\\}^n\\rightarrow\\{0,1\\}$ \\\n",
- "> Promise: $f$ is either constant or balanced \\\n",
- "> Output: $0$ if $f$ is constant, $1$ if $f$ is balanced\n",
+ "\n",
+ "Input: a function $f:\\{0,1\\}^n\\rightarrow\\{0,1\\}$ \\\n",
+ "Promise: $f$ is either constant or balanced \\\n",
+ "Output: $0$ if $f$ is constant, $1$ if $f$ is balanced\n",
+ "\n",
"\n",
"The Deutsch-Jozsa algorithm, with its single query, solves this problem in the following sense:\n",
"if every one of the $n$ measurement outcomes is $0,$ then the function $f$ is constant;\n",
@@ -200,10 +201,11 @@
"\n",
"With this notation in hand we can now define the Bernstein-Vazirani problem.\n",
"\n",
- "> **Bernstein-Vazirani problem** \\\n",
- "> Input: a function $f:\\{0,1\\}^n\\rightarrow\\{0,1\\}$ \\\n",
- "> Promise: there exists a binary string $s = s_{n-1} \\cdots s_0$ for which $f(x) = s\\cdot x$ for all $x\\in\\Sigma^n$ \\\n",
- "> Output: the string $s$\n",
+ "\n",
+ "Input: a function $f:\\{0,1\\}^n\\rightarrow\\{0,1\\}$ \\\n",
+ "Promise: there exists a binary string $s = s_{n-1} \\cdots s_0$ for which $f(x) = s\\cdot x$ for all $x\\in\\Sigma^n$ \\\n",
+ "Output: the string $s$\n",
+ "\n",
"\n",
"We don't actually need a new quantum algorithm for this problem; the Deutsch-Jozsa algorithm solves it.\n",
"In the interest of clarity, let's refer to the quantum circuit from above, which doesn't include the classical post-processing step of computing the OR, as the *Deutsch-Jozsa circuit*.\n",
diff --git a/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/simon-algorithm.ipynb b/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/simon-algorithm.ipynb
index 919b8244635..98548f0e7f7 100644
--- a/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/simon-algorithm.ipynb
+++ b/learning/courses/fundamentals-of-quantum-algorithms/quantum-query-algorithms/simon-algorithm.ipynb
@@ -26,11 +26,12 @@
"for positive integers $n$ and $m.$\n",
"We could restrict our attention to the case $m = n$ in the interest of simplicity, but there's little to be gained in making this assumption — Simon's algorithm and its analysis are basically the same either way.\n",
"\n",
- "> **Simon's problem** \\\n",
- "> Input: a function $f:\\Sigma^n \\rightarrow \\Sigma^m$ \\\n",
- "> Promise: there exists a string $s\\in\\Sigma^n$ such that $[f(x) = f(y)] \\Leftrightarrow\n",
+ "\n",
+ "Input: a function $f:\\Sigma^n \\rightarrow \\Sigma^m$ \\\n",
+ "Promise: there exists a string $s\\in\\Sigma^n$ such that $[f(x) = f(y)] \\Leftrightarrow\n",
"[(x = y) \\vee (x \\oplus s = y)]$ for all $x,y\\in\\Sigma^n$ \\\n",
- "> Output: the string $s$\n",
+ "Output: the string $s$\n",
+ "\n",
"\n",
"We'll unpack the promise to better understand what it says momentarily, but first let's be clear that it requires that $f$ has a very special structure — so most functions won't satisfy this promise.\n",
"It's also fitting to acknowledge that this problem isn't intended to have practical importance.\n",
diff --git a/learning/courses/general-formulation-of-quantum-information/density-matrices/convex-combinations.ipynb b/learning/courses/general-formulation-of-quantum-information/density-matrices/convex-combinations.ipynb
index 6c50944a889..bb44d0afae8 100644
--- a/learning/courses/general-formulation-of-quantum-information/density-matrices/convex-combinations.ipynb
+++ b/learning/courses/general-formulation-of-quantum-information/density-matrices/convex-combinations.ipynb
@@ -152,8 +152,10 @@
"Both of these expressions are equal to $1/2.$\n",
"One way to argue this is to use a fact from linear algebra that can be seen as a generalization of the Pythagorean theorem.\n",
"\n",
- "> **Theorem.** Suppose $\\{\\vert\\psi_1\\rangle,\\ldots,\\vert\\psi_n\\rangle\\}$ is an orthonormal basis of a (real or complex) vector space $\\mathcal{V}.$ For every vector $\\vert \\phi\\rangle \\in \\mathcal{V}$ we have\n",
- "> $\\vert \\langle \\psi_1\\vert\\phi\\rangle\\vert^2 + \\cdots + \\vert \\langle \\psi_n \\vert \\phi \\rangle\\vert^2 = \\| \\vert\\phi\\rangle \\|^2.$\n",
+ "\n",
+ "Suppose $\\{\\vert\\psi_1\\rangle,\\ldots,\\vert\\psi_n\\rangle\\}$ is an orthonormal basis of a (real or complex) vector space $\\mathcal{V}.$ For every vector $\\vert \\phi\\rangle \\in \\mathcal{V}$ we have\n",
+ "$\\vert \\langle \\psi_1\\vert\\phi\\rangle\\vert^2 + \\cdots + \\vert \\langle \\psi_n \\vert \\phi \\rangle\\vert^2 = \\| \\vert\\phi\\rangle \\|^2.$\n",
+ "\n",
"\n",
"We can apply this theorem to determine the probabilities as follows.\n",
"The probability to get $0$ is\n",
@@ -271,12 +273,14 @@
"The spectral theorem, which we encountered in the \"Foundations of quantum algorithms\" course, allows us to conclude this.\n",
"Here's a restatement of the spectral theorem for convenience.\n",
"\n",
- "> **Theorem** (spectral theorem).\n",
- "> Let $M$ be a *normal* $n\\times n$ complex matrix.\n",
- "> There exists an orthonormal basis of $n$ dimensional complex vectors $\\{\\vert\\psi_0\\rangle,\\ldots,\\vert\\psi_{n-1}\\rangle \\}$ along with complex numbers $\\lambda_0,\\ldots,\\lambda_{n-1}$ such that\n",
- "> $$\n",
- "> M = \\lambda_0 \\vert \\psi_0\\rangle\\langle \\psi_0\\vert + \\cdots + \\lambda_{n-1} \\vert \\psi_{n-1}\\rangle\\langle \\psi_{n-1}\\vert.\n",
- "> $$\n",
+ "\n",
+ "\n",
+ "Spectral theorem: Let $M$ be a *normal* $n\\times n$ complex matrix.\n",
+ "There exists an orthonormal basis of $n$ dimensional complex vectors $\\{\\vert\\psi_0\\rangle,\\ldots,\\vert\\psi_{n-1}\\rangle \\}$ along with complex numbers $\\lambda_0,\\ldots,\\lambda_{n-1}$ such that\n",
+ "$$\n",
+ "M = \\lambda_0 \\vert \\psi_0\\rangle\\langle \\psi_0\\vert + \\cdots + \\lambda_{n-1} \\vert \\psi_{n-1}\\rangle\\langle \\psi_{n-1}\\vert.\n",
+ "$$\n",
+ "\n",
"\n",
"(Recall that a matrix $M$ is *normal* if it satisfies $M^{\\dagger} M = M M^{\\dagger}.$ In words, normal matrices are matrices that commute with their own conjugate transpose.)\n",
"\n",
@@ -294,7 +298,9 @@
"We can conclude that $\\lambda_0 + \\cdots + \\lambda_{n-1} = 1$ from the fact that $\\rho$ has trace equal to $1.$\n",
"Going through the details will give us an opportunity to point out the following important and very useful property of the trace.\n",
"\n",
- "> **Theorem** (cyclic property of the trace). For any two matrices $A$ and $B$ that give us a square matrix $AB$ by multiplying, the equality $\\operatorname{Tr}(AB) = \\operatorname{Tr}(BA)$ is true.\n",
+ "\n",
+ "Cyclic property of the trace: For any two matrices $A$ and $B$ that give us a square matrix $AB$ by multiplying, the equality $\\operatorname{Tr}(AB) = \\operatorname{Tr}(BA)$ is true.\n",
+ "\n",
"\n",
"Note that this theorem works even if $A$ and $B$ are not themselves square matrices.\n",
"That is, we may have that $A$ is $n\\times m$ and $B$ is $m\\times n,$ for some choice of positive integers $n$ and $m,$ so that $AB$ is an $n\\times n$ square matrix and $BA$ is $m\\times m.$\n",
diff --git a/learning/courses/general-formulation-of-quantum-information/general-measurements/naimark-theorem.ipynb b/learning/courses/general-formulation-of-quantum-information/general-measurements/naimark-theorem.ipynb
index ed97e66544d..76abd10bc60 100644
--- a/learning/courses/general-formulation-of-quantum-information/general-measurements/naimark-theorem.ipynb
+++ b/learning/courses/general-formulation-of-quantum-information/general-measurements/naimark-theorem.ipynb
@@ -41,7 +41,9 @@
"\n",
"The fact that every measurement can be implemented in this way is pretty simple to prove, but we're going to need a fact concerning positive semidefinite matrices first.\n",
"\n",
- "> **Fact.** Suppose $P$ is an $n \\times n$ positive semidefinite matrix. There exists a unique $n\\times n$ positive semidefinite matrix $Q$ for which $Q^2 = P.$ This unique positive semidefinite matrix is called the *square root* of $P$ and is denoted $\\sqrt{P}.$\n",
+ "\n",
+ "Suppose $P$ is an $n \\times n$ positive semidefinite matrix. There exists a unique $n\\times n$ positive semidefinite matrix $Q$ for which $Q^2 = P.$ This unique positive semidefinite matrix is called the *square root* of $P$ and is denoted $\\sqrt{P}.$\n",
+ "\n",
"\n",
"One way to find the square root of a positive semidefinite matrix is to first compute a spectral decomposition.\n",
"\n",
diff --git a/learning/courses/general-formulation-of-quantum-information/purifications-and-fidelity/fidelity.ipynb b/learning/courses/general-formulation-of-quantum-information/purifications-and-fidelity/fidelity.ipynb
index ffbee1c7958..930cad02a1b 100644
--- a/learning/courses/general-formulation-of-quantum-information/purifications-and-fidelity/fidelity.ipynb
+++ b/learning/courses/general-formulation-of-quantum-information/purifications-and-fidelity/fidelity.ipynb
@@ -24,17 +24,19 @@
"At first glance, the definition that follows might look unusual or mysterious, and perhaps not easy to work with.\n",
"The function it defines, however, turns out to have many interesting properties and multiple alternative formulations, making it much nicer to work with than it may initially appear.\n",
"\n",
- "> **Definition.**\n",
- "> Let $\\rho$ and $\\sigma$ be density matrices representing quantum states of the same system.\n",
- "> The *fidelity* between $\\rho$ and $\\sigma$ is defined as\n",
- "> $$\n",
- "> \\operatorname{F}(\\rho,\\sigma) = \\operatorname{Tr}\\sqrt{\\sqrt{\\rho} \\sigma \\sqrt{\\rho}}.\n",
- "> $$\n",
- "\n",
- "> **Remark.**\n",
- "> Although this is a common definition, it is also common that the fidelity is defined as the *square* of the quantity defined here, which is then referred to as the *root-fidelity*.\n",
+ "\n",
+ "Let $\\rho$ and $\\sigma$ be density matrices representing quantum states of the same system.\n",
+ "The *fidelity* between $\\rho$ and $\\sigma$ is defined as\n",
+ "$$\n",
+ "\\operatorname{F}(\\rho,\\sigma) = \\operatorname{Tr}\\sqrt{\\sqrt{\\rho} \\sigma \\sqrt{\\rho}}.\n",
+ "$$\n",
+ "\n",
+ "\n",
+ "\n",
+ "Although this is a common definition, it is also common that the fidelity is defined as the *square* of the quantity defined here, which is then referred to as the *root-fidelity*.\n",
"Neither definition is right or wrong — it's essentially a matter of preference.\n",
"Nevertheless, one must always be careful to understand or clarify which definition is being used.\n",
+ "\n",
"\n",
"To make sense of the formula in the definition, notice first that $\\sqrt{\\rho} \\sigma \\sqrt{\\rho}$ is a positive semidefinite matrix:\n",
"\n",
@@ -236,12 +238,13 @@
"To conclude the lesson, we'll take a look at *Uhlmann's theorem*, which is a fundamental fact about the fidelity that connects it with the notion of a purification.\n",
"What the theorem says, in simple terms, is that the fidelity between any two quantum states is equal to the *maximum* inner product (in absolute value) between two purifications of those states.\n",
"\n",
- "> **Theorem** (Uhlmann's theorem).\n",
- "> Let $\\rho$ and $\\sigma$ be density matrices representing states of a system $\\mathsf{X},$ and let $\\mathsf{Y}$ be a system having at least as many classical states as $\\mathsf{X}.$ The fidelity between $\\rho$ and $\\sigma$ is given by\n",
- "> $$\n",
- "> \\operatorname{F}(\\rho,\\sigma) = \\max\\bigl\\{ \\vert \\langle \\phi \\vert \\psi \\rangle \\vert \\,:\\, \\operatorname{Tr}_{\\mathsf{Y}}\\bigl(\\vert\\phi\\rangle\\langle\\phi\\vert\\bigr) = \\rho,\\; \\operatorname{Tr}_{\\mathsf{Y}}\\bigl(\\vert\\psi\\rangle\\langle\\psi\\vert\\bigr) = \\sigma\\bigr\\},\n",
- "> $$\n",
- "> where the maximum is taken over all quantum state vectors $\\vert\\phi\\rangle$ and $\\vert\\psi\\rangle$ of $(\\mathsf{X},\\mathsf{Y}).$\n",
+ "\n",
+ "Uhlmann's theorem: Let $\\rho$ and $\\sigma$ be density matrices representing states of a system $\\mathsf{X},$ and let $\\mathsf{Y}$ be a system having at least as many classical states as $\\mathsf{X}.$ The fidelity between $\\rho$ and $\\sigma$ is given by\n",
+ "$$\n",
+ " \\operatorname{F}(\\rho,\\sigma) = \\max\\bigl\\{ \\vert \\langle \\phi \\vert \\psi \\rangle \\vert \\,:\\, \\operatorname{Tr}_{\\mathsf{Y}}\\bigl(\\vert\\phi\\rangle\\langle\\phi\\vert\\bigr) = \\rho,\\; \\operatorname{Tr}_{\\mathsf{Y}}\\bigl(\\vert\\psi\\rangle\\langle\\psi\\vert\\bigr) = \\sigma\\bigr\\},\n",
+ "$$\n",
+ "where the maximum is taken over all quantum state vectors $\\vert\\phi\\rangle$ and $\\vert\\psi\\rangle$ of $(\\mathsf{X},\\mathsf{Y}).$\n",
+ "\n",
"\n",
"We can prove this theorem using the unitary equivalence of purifications — but it isn't completely straightforward and we'll make use of a trick along the way.\n",
"\n",
diff --git a/learning/courses/general-formulation-of-quantum-information/purifications-and-fidelity/purifications.ipynb b/learning/courses/general-formulation-of-quantum-information/purifications-and-fidelity/purifications.ipynb
index ae89cd8e977..a7d7788c77a 100644
--- a/learning/courses/general-formulation-of-quantum-information/purifications-and-fidelity/purifications.ipynb
+++ b/learning/courses/general-formulation-of-quantum-information/purifications-and-fidelity/purifications.ipynb
@@ -5,7 +5,7 @@
"id": "7f4dd0bd",
"metadata": {},
"source": [
- "{/* cspell:ignore operatorname */}\n",
+ "{/* cspell:ignore operatorname, Hughston, Wootters */}\n",
"\n",
"# Purifications\n",
"\n",
@@ -13,11 +13,13 @@
"\n",
"Let us begin with a precise mathematical definition for purifications.\n",
"\n",
- "> **Definition.** Suppose $\\mathsf{X}$ is a system in a state represented by a density matrix $\\rho,$ and $\\vert\\psi\\rangle$ is a quantum state vector of a pair $(\\mathsf{X},\\mathsf{Y})$ that leaves $\\rho$ when $\\mathsf{Y}$ is traced out:\n",
- "> $$\n",
- "> \\rho = \\operatorname{Tr}_{\\mathsf{Y}} \\bigl( \\vert \\psi\\rangle\\langle\\psi\\vert\\bigr).\n",
- "> $$\n",
- ">The state vector $\\vert\\psi\\rangle$ is then said to be a *purification* of $\\rho.$\n",
+ "\n",
+ "Suppose $\\mathsf{X}$ is a system in a state represented by a density matrix $\\rho,$ and $\\vert\\psi\\rangle$ is a quantum state vector of a pair $(\\mathsf{X},\\mathsf{Y})$ that leaves $\\rho$ when $\\mathsf{Y}$ is traced out:\n",
+ "$$\n",
+ "\\rho = \\operatorname{Tr}_{\\mathsf{Y}} \\bigl( \\vert \\psi\\rangle\\langle\\psi\\vert\\bigr).\n",
+ "$$\n",
+ "The state vector $\\vert\\psi\\rangle$ is then said to be a *purification* of $\\rho.$\n",
+ "\n",
"\n",
"The pure state $\\vert\\psi\\rangle\\langle\\psi\\vert,$ expressed as a density matrix rather than a quantum state vector, is also commonly referred to as a purification of $\\rho$ when the equation in the definition is true, but we'll generally use the term to refer to a quantum state vector.\n",
"\n",
@@ -141,12 +143,13 @@
"Schmidt decompositions are closely connected with purifications, and they're very useful in their own right.\n",
"Indeed, when reasoning about a given quantum state vector $\\vert\\psi\\rangle$ of a pair of systems, the first step is often to identify or consider a Schmidt decomposition of this state.\n",
"\n",
- "> **Definition.**\n",
- "> Let $\\vert \\psi\\rangle$ be a given quantum state vector of a pair of systems $(\\mathsf{X},\\mathsf{Y}).$ A *Schmidt decomposition* of $\\vert\\psi\\rangle$ is an expression of the form\n",
- "> $$\n",
- "> \\vert \\psi\\rangle = \\sum_{a = 0}^{r-1} \\sqrt{p_a}\\, \\vert x_a\\rangle \\otimes \\vert y_a \\rangle,\n",
- "> $$\n",
- "> where $p_0,\\ldots,p_{r-1}$ are positive real numbers summing to $1$ and *both* of the sets $\\{\\vert x_0\\rangle,\\ldots,\\vert x_{r-1}\\rangle\\}$ and $\\{\\vert y_0\\rangle,\\ldots,\\vert y_{r-1}\\rangle\\}$ are orthonormal.\n",
+ "\n",
+ "Let $\\vert \\psi\\rangle$ be a given quantum state vector of a pair of systems $(\\mathsf{X},\\mathsf{Y}).$ A *Schmidt decomposition* of $\\vert\\psi\\rangle$ is an expression of the form\n",
+ "$$\n",
+ "\\vert \\psi\\rangle = \\sum_{a = 0}^{r-1} \\sqrt{p_a}\\, \\vert x_a\\rangle \\otimes \\vert y_a \\rangle,\n",
+ "$$\n",
+ "where $p_0,\\ldots,p_{r-1}$ are positive real numbers summing to $1$ and *both* of the sets $\\{\\vert x_0\\rangle,\\ldots,\\vert x_{r-1}\\rangle\\}$ and $\\{\\vert y_0\\rangle,\\ldots,\\vert y_{r-1}\\rangle\\}$ are orthonormal.\n",
+ "\n",
"\n",
"The values\n",
"\n",
@@ -316,15 +319,17 @@
"\n",
"We can use Schmidt decompositions to establish a fundamentally important fact concerning purifications known as the *unitary equivalence of purifications*.\n",
"\n",
- "> **Theorem** (Unitary equivalence of purifications). Suppose that $\\mathsf{X}$ and $\\mathsf{Y}$ are systems, and $\\vert\\psi\\rangle$ and $\\vert\\phi\\rangle$ are quantum state vectors of $(\\mathsf{X},\\mathsf{Y})$ that both purify the same state of $\\mathsf{X}.$ In symbols,\n",
- "> $$\n",
- "> \\operatorname{Tr}_{\\mathsf{Y}} (\\vert\\psi\\rangle\\langle\\psi\\vert) = \\rho = \\operatorname{Tr}_{\\mathsf{Y}} (\\vert\\phi\\rangle\\langle\\phi\\vert)\n",
- "> $$\n",
- "> for some density matrix $\\rho$ representing a state of $\\mathsf{X}.$\n",
- "> There must then exist a unitary operation $U$ on $\\mathsf{Y}$ alone that transforms the first purification into the second:\n",
- "> $$\n",
- "> (\\mathbb{I}_{\\mathsf{X}} \\otimes U) \\vert\\psi\\rangle = \\vert\\phi\\rangle.\n",
- "> $$\n",
+ "\n",
+ "Unitary equivalence of purifications: Suppose that $\\mathsf{X}$ and $\\mathsf{Y}$ are systems, and $\\vert\\psi\\rangle$ and $\\vert\\phi\\rangle$ are quantum state vectors of $(\\mathsf{X},\\mathsf{Y})$ that both purify the same state of $\\mathsf{X}.$ In symbols,\n",
+ "$$\n",
+ "\\operatorname{Tr}_{\\mathsf{Y}} (\\vert\\psi\\rangle\\langle\\psi\\vert) = \\rho = \\operatorname{Tr}_{\\mathsf{Y}} (\\vert\\phi\\rangle\\langle\\phi\\vert)\n",
+ "$$\n",
+ "for some density matrix $\\rho$ representing a state of $\\mathsf{X}.$\n",
+ "There must then exist a unitary operation $U$ on $\\mathsf{Y}$ alone that transforms the first purification into the second:\n",
+ "$$\n",
+ "(\\mathbb{I}_{\\mathsf{X}} \\otimes U) \\vert\\psi\\rangle = \\vert\\phi\\rangle.\n",
+ "$$\n",
+ "\n",
"\n",
"We'll discuss a few implications of this theorem as the lesson continues, but first let's see how it follows from our previous discussion of Schmidt decompositions.\n",
"\n",
@@ -454,16 +459,17 @@
"The last implication of the unitary equivalence of purifications that we'll discuss in this portion of the lesson is the following theorem known as the Hughston-Jozsa-Wootters theorem.\n",
"(This is, in fact, a slightly simplified statement of the theorem known by this name.)\n",
"\n",
- "> **Theorem** (Hughston-Jozsa-Wootters).\n",
- "> Let $\\mathsf{X}$ and $\\mathsf{Y}$ be systems and let $\\vert\\phi\\rangle$ be a quantum state vector of the pair $(\\mathsf{X},\\mathsf{Y}).$\n",
- "> Also let $N$ be an arbitrary positive integer, let $(p_0,\\ldots,p_{N-1})$ be a probability vector, and let $\\vert\\psi_0\\rangle,\\ldots,\\vert\\psi_{N-1}\\rangle$ be quantum state vectors representing states of $\\mathsf{X}$ such that\n",
- "> $$\n",
- "> \\operatorname{Tr}_{\\mathsf{Y}}\\bigl(\\vert\\phi\\rangle\\langle\\phi\\vert\\bigr) = \\sum_{a = 0}^{N-1} p_a \\vert\\psi_a\\rangle\\langle\\psi_a\\vert.\n",
- "> $$\n",
- "> There exists a (general) measurement $\\{P_0,\\ldots,P_{N-1}\\}$ on $\\mathsf{Y}$ such that the following two statements are true when this measurement is performed on $\\mathsf{Y}$ when $(\\mathsf{X},\\mathsf{Y})$ is in the state $\\vert\\phi\\rangle:$\n",
- ">\n",
- "> 1. Each measurement outcome $a\\in\\{0,\\ldots,N-1\\}$ appears with probability $p_a$.\n",
- "> 2. Conditioned on obtaining the measurement outcome $a,$ the state of $\\mathsf{X}$ becomes $\\vert\\psi_a\\rangle.$\n",
+ "\n",
+ "Hughston-Jozsa-Wootters: Let $\\mathsf{X}$ and $\\mathsf{Y}$ be systems and let $\\vert\\phi\\rangle$ be a quantum state vector of the pair $(\\mathsf{X},\\mathsf{Y}).$\n",
+ "Also let $N$ be an arbitrary positive integer, let $(p_0,\\ldots,p_{N-1})$ be a probability vector, and let $\\vert\\psi_0\\rangle,\\ldots,\\vert\\psi_{N-1}\\rangle$ be quantum state vectors representing states of $\\mathsf{X}$ such that\n",
+ "$$\n",
+ "\\operatorname{Tr}_{\\mathsf{Y}}\\bigl(\\vert\\phi\\rangle\\langle\\phi\\vert\\bigr) = \\sum_{a = 0}^{N-1} p_a \\vert\\psi_a\\rangle\\langle\\psi_a\\vert.\n",
+ "$$\n",
+ "There exists a (general) measurement $\\{P_0,\\ldots,P_{N-1}\\}$ on $\\mathsf{Y}$ such that the following two statements are true when this measurement is performed on $\\mathsf{Y}$ when $(\\mathsf{X},\\mathsf{Y})$ is in the state $\\vert\\phi\\rangle:$\n",
+ "\n",
+ "1. Each measurement outcome $a\\in\\{0,\\ldots,N-1\\}$ appears with probability $p_a$.\n",
+ "2. Conditioned on obtaining the measurement outcome $a,$ the state of $\\mathsf{X}$ becomes $\\vert\\psi_a\\rangle.$\n",
+ "\n",
"\n",
"Intuitively speaking, this theorem says that as long as we have a pure state of two systems, then for *any* way of thinking about the reduced state of the first system as a convex combination of pure states, there is a measurement of the second system that effectively makes this way of thinking about the first system a reality.\n",
"Notice that the number $N$ is not necessarily bounded by the number of classical states of $\\mathsf{X}$ or $\\mathsf{Y}.$\n",
diff --git a/learning/courses/general-formulation-of-quantum-information/quantum-channels/representations-of-channels.ipynb b/learning/courses/general-formulation-of-quantum-information/quantum-channels/representations-of-channels.ipynb
index 771ab765247..ae31cf97ddb 100644
--- a/learning/courses/general-formulation-of-quantum-information/quantum-channels/representations-of-channels.ipynb
+++ b/learning/courses/general-formulation-of-quantum-information/quantum-channels/representations-of-channels.ipynb
@@ -80,16 +80,18 @@
"It's not at all obvious, but every channel does in fact have a Stinespring representation, as we will see by the end of the lesson.\n",
"We'll also see that Stinespring representations aren't unique; there will always be different ways to implement the same channel in the manner that's been described.\n",
"\n",
- "> **Remark**. In the context of quantum information, the term *Stinespring representation* commonly refers to a slightly more general expression of a channel having the form\n",
- "> $$\n",
- "> \\Phi(\\rho) = \\operatorname{Tr}_{\\mathsf{G}} \\bigl( A \\rho A^{\\dagger} \\bigr)\n",
- "> $$\n",
- "> for an *isometry* $A,$ which is a matrix whose columns are orthonormal but that might not be a square matrix.\n",
- "> For Stinespring representations having the form that we've adopted as a definition, we can obtain an expression of this other\n",
- "> form by taking\n",
- "> $$\n",
- "> A = U (\\vert 0\\rangle_{\\mathsf{W}} \\otimes \\mathbb{I}_{\\mathsf{X}}).\n",
- "> $$\n",
+ "\n",
+ "In the context of quantum information, the term *Stinespring representation* commonly refers to a slightly more general expression of a channel having the form\n",
+ "$$\n",
+ "\\Phi(\\rho) = \\operatorname{Tr}_{\\mathsf{G}} \\bigl( A \\rho A^{\\dagger} \\bigr)\n",
+ "$$\n",
+ "for an *isometry* $A,$ which is a matrix whose columns are orthonormal but that might not be a square matrix.\n",
+ "For Stinespring representations having the form that we've adopted as a definition, we can obtain an expression of this other\n",
+ "form by taking\n",
+ "$$\n",
+ "A = U (\\vert 0\\rangle_{\\mathsf{W}} \\otimes \\mathbb{I}_{\\mathsf{X}}).\n",
+ "$$\n",
+ "\n",
"\n",
"### Completely dephasing channel\n",
"\n",
diff --git a/learning/courses/quantum-safe-cryptography/asymmetric-key-cryptography.ipynb b/learning/courses/quantum-safe-cryptography/asymmetric-key-cryptography.ipynb
index 85afefc1f53..6ec18602d83 100644
--- a/learning/courses/quantum-safe-cryptography/asymmetric-key-cryptography.ipynb
+++ b/learning/courses/quantum-safe-cryptography/asymmetric-key-cryptography.ipynb
@@ -283,14 +283,12 @@
"\n",
" Note that $n$ is common to both public key and private key, and is known as the modulus. We will need to use this later.\n",
"\n",
- " \n",
- "\n",
- " \n",
- "\n",
+ "\n",
+ " \n",
" Mathematical detail\n",
- "\n",
" \n",
"\n",
+ "\n",
" - Choose two distinct prime numbers, $p$ and $q$.\n",
" - chosen at random (for security).\n",
" - They should be similar in magnitude, but differ in length by a few digits, to make factoring harder.\n",
@@ -347,13 +345,10 @@
" - Alice wishes to send a message $M$ to Bob. In this case a simple integer\n",
" - Alice uses Bob's public key $(e, n)$ to encrypt the message into ciphertext $C$\n",
"\n",
- "\n",
" \n",
"\n",
" \n",
- "\n",
" Mathematical detail\n",
- "\n",
" \n",
"\n",
" - $M$ is an [integer][intrep] $0 ≤ M < n$.\n",
@@ -375,13 +370,9 @@
" - Bob receives the ciphertext $C$\n",
" - Bob uses his private key $(d, n)$ to decrypt the message back into message $M$\n",
"\n",
- "\n",
" \n",
- "\n",
" \n",
- "\n",
" Mathematical detail\n",
- "\n",
" \n",
"\n",
" - $M ≡ C^d (mod n)$.\n",
@@ -411,7 +402,9 @@
"\n",
"In the following code cells, we illustrate a simple example of the RSA algorithm using small integers and then demonstrate practical key distribution and digital signature applications using Python libraries implementing RSA.\n",
"\n",
- "> Note: In this section we will show the math calculations in detail as part of the Python code\n",
+ "\n",
+ "Note: In this section we will show the math calculations in detail as part of the Python code\n",
+ "\n",
"\n",
"#### RSA key generation\n",
"\n",
@@ -1288,11 +1281,10 @@
"\n",
"\n",
"\n",
- "\n",
"Mathematical detail\n",
- "\n",
"\n",
"\n",
+ "\n",
"$L_n[\\frac{1}{3}, (\\frac{64}{9})^{(\\frac{1}{3})}] = e^{[((\\frac{64}{9})^{(\\frac{1}{3})} + o(1)) (log(n))^{\\frac{1}{3}}(log(log(n))^{\\frac{2}{3}})]}$\n",
"\n",
"as a function of the integer $n$ to be factorized.\n",
@@ -1335,11 +1327,8 @@
"metadata": {},
"source": [
"\n",
- "\n",
"\n",
- "\n",
"Mathematical explanation of Shor's algorithm\n",
- "\n",
"\n",
"\n",
"In the context of [RSA][rsa], [Shor's algorithm][shor] works by exploiting the [periodicity][period] of the [modular exponential function][modexp] $f(x) = a^x (mod~n)$ and provides a quantum [period][period]-finding primitive that enables efficient prime factorization of the [modulus][modulus] $n$.\n",
@@ -1391,7 +1380,9 @@
"\n",
"In the following code cells, we illustrate an example of finding a private key given only the public key. This will use brute-force classical computation, but shows how Shor's algorithm could be used - including large keys.\n",
"\n",
- "> Note: In this section we will show the math calculations in detail as part of the Python code\n",
+ "\n",
+ "In this section we will show the math calculations in detail as part of the Python code\n",
+ "\n",
"\n",
"In the example, we have a public key $(5, 247)$, and we will recover the private key.\n",
"\n",
@@ -1660,14 +1651,12 @@
"\n",
"*Figure 1. Diffie-Hellman key exchange*\n",
"\n",
- "\n",
"\n",
"\n",
"\n",
- "\n",
"Mathematical details of Diffie-Hellman key exchange\n",
- "\n",
"\n",
+ "\n",
"With Alice and Bob being the two parties communicating, the protocol works as follows:\n",
"\n",
"- First, Alice and Bob agree on a large prime number $p$ and a primitive root or generator $a$.\n",
@@ -1698,7 +1687,9 @@
"\n",
"Let's look at a simple example of the DH protocol in Python using small prime numbers:\n",
"\n",
- "> Note: In this section we will show the math calculations in detail as part of the Python code\n",
+ "\n",
+ "In this section we will show the math calculations in detail as part of the Python code\n",
+ "\n",
"\n",
"**Step 1:** Alice and Bob agree on a prime $p$ and a primitive root $a$. Let's choose $p=11, a=7$."
]
@@ -1793,9 +1784,7 @@
"\n",
"\n",
"\n",
- "\n",
"Mathematical details of DH security and MITM attacks\n",
- "\n",
"\n",
"\n",
"In this scenario, a third party — say, Eve — intercepts the public keys $h_A, h_B$ during transmission and substitutes her own public key $h_E$ for each of $h_A$ and $h_B$ before forwarding them along to Bob and Alice, respectively.\n",
@@ -1842,11 +1831,8 @@
" From this we choose a random number $x$ as private key, and are able to calculate a public key $y$\n",
"\n",
" \n",
- "\n",
" \n",
- "\n",
" Mathematical details of key generation\n",
- "\n",
" \n",
"\n",
" - **Parameter generation:** Mathematically, DSA involves a cyclic subgroup of $(\\mathbb{Z}_p)^{\\times}$ generated by an element $g$ of prime order q < p. The first step in the DSA is therefore to select two primes p, q to set up the necessary mathematical structures.\n",
@@ -1894,11 +1880,8 @@
" - The message and signature are both now sent to the recipient\n",
"\n",
" \n",
- "\n",
" \n",
- "\n",
" Mathematical details of signing a message\n",
- "\n",
" \n",
"\n",
" The signer signs a message $m$ as follows:\n",
@@ -1929,11 +1912,8 @@
" and seeks to ascertain that the signer is someone with access to the private key $x$.\n",
"\n",
" \n",
- "\n",
" \n",
- "\n",
" Mathematical details of DSA verification scheme\n",
- "\n",
" \n",
"\n",
" - Verify that $0 \\lt r \\lt q$ and $0 \\lt s \\lt q$, that is, $r, s$ are valid modulo~q integers.\n",
@@ -1974,7 +1954,9 @@
"source": [
"In this example, we'll use small primes to illustrate the DSA process in a scenario where Alice sends a signed message to Bob. We'll use small integers in this example. A real-world scenario would employ much larger primes on the order of 2048-3072 bits.\n",
"\n",
- "> You can try rerunning this example with different values to see how the algorithm behaves, but ensure you start running from the first cell in this section.\n",
+ "\n",
+ "You can try rerunning this example with different values to see how the algorithm behaves, but ensure you start running from the first cell in this section.\n",
+ "\n",
"\n",
"We start by importing necessary libraries and choosing our parameters."
]
@@ -2516,11 +2498,8 @@
"Shor's algorithm is able to solve the discrete logarithm problem in polynomial time. It primarily achieves its efficiency by using quantum algorithms which can find the period of a function which depends on the input to the problem - which is then combined with more conventional operations.\n",
"\n",
"\n",
- "\n",
"\n",
- "\n",
"Mathematical details of Shor's algorithm\n",
- "\n",
"\n",
"\n",
"Shor's algorithm provides an efficient solution to the DLP by mapping it to a more general problem in group theory known as the [hidden subgroup problem][80] (HSP).\n",
@@ -2581,11 +2560,8 @@
"Elliptic curve cryptography makes use of applying a series of arithmetic operations to points on the curve. Each effectively navigates to a new point on the curve. This is a simple process to follow in one direction, and with shorter key sizes is more efficient than other algorithms like RSA, but trying to reverse this is very difficult, hence its application to cryptography.\n",
"\n",
"\n",
- "\n",
"\n",
- "\n",
"Mathematical principles of elliptic curve cryptography\n",
- "\n",
"\n",
"\n",
"An [elliptic curve][82] over an algebraic field $K$ is defined by a mathematical equation, typically in the form $y^2 = x^3 + ax + b$ with the coefficients $a, b \\in K$ and describes points $(x, y) \\in K \\otimes K$ with the additional requirement that the curve have no kinks or self-intersections.\n",
@@ -2624,11 +2600,8 @@
"This problem is known to be intractable on classical computers for large $n$ and provides a basis for cryptographic security.\n",
"\n",
"\n",
- "\n",
"\n",
- "\n",
"Mathematical description of ECDLP\n",
- "\n",
"\n",
"\n",
"Elliptic curve cryptography is primarily based on the ECDLP formulated on certain algebraic **finite fields**. In 1999, NIST recommended ten finite fields for use in ECC. These are:\n",
diff --git a/learning/courses/quantum-safe-cryptography/introduction-to-this-course.mdx b/learning/courses/quantum-safe-cryptography/introduction-to-this-course.mdx
index 603b73fb760..aedf4a0d16e 100644
--- a/learning/courses/quantum-safe-cryptography/introduction-to-this-course.mdx
+++ b/learning/courses/quantum-safe-cryptography/introduction-to-this-course.mdx
@@ -72,7 +72,9 @@ When you run a Python cell for the first time, you will be prompted to log in to
You should run each Python cell in order, from the beginning of the notebook. Later cells are typically dependent on earlier ones to set up libraries, variables, and so on. Each cell has been written to produce some output after execution.
-> **Important Note** - The Python code examples are provided to demonstrate the mathematical principles of the algorithms being discussed. They are not intended to be used as actual implementations. It is essential to use well-supported and reviewed security libraries in any real-world usage.
+
+The Python code examples are provided to demonstrate the mathematical principles of the algorithms being discussed. They are not intended to be used as actual implementations. It is essential to use well-supported and reviewed security libraries in any real-world usage.
+
## Digital Certification
diff --git a/learning/courses/quantum-safe-cryptography/quantum-safe-cryptography.ipynb b/learning/courses/quantum-safe-cryptography/quantum-safe-cryptography.ipynb
index 1ded7bbd7d7..4f8c8b1fe14 100644
--- a/learning/courses/quantum-safe-cryptography/quantum-safe-cryptography.ipynb
+++ b/learning/courses/quantum-safe-cryptography/quantum-safe-cryptography.ipynb
@@ -716,7 +716,9 @@
"\n",
"#### KEM example using liboqs (local setup required)\n",
"\n",
- "> **NOTE: This example requires some additional local installation, and currently cannot be run on this site. You can review the output below, or alternatively copy the cells to a suitable local environment if you wish to run these examples**\n",
+ "\n",
+ "This example requires some additional local installation, and currently cannot be run on this site. You can review the output below, or alternatively copy the cells to a suitable local environment if you wish to run these examples**\n",
+ "\n",
"\n",
"Here we make use of the algorithms provided by the `liboqs` open source project which provides a libraries for prototyping and experimenting with quantum-safe cryptography. Refer to the links below to setup and test, and then run these examples in your local Python environment.\n",
"\n",