From d7f7a37c53f82118046e4dd487e88e816d1301ac Mon Sep 17 00:00:00 2001 From: David Wierichs Date: Mon, 25 Nov 2024 18:08:03 +0100 Subject: [PATCH] [Demo] The KAK theorem (#1227) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit **Title:** The KAK theorem **Summary:** The KAK theorem is a group theoretical tool to decompose operators into a sequence of smaller operators. It brings an abstract mathematical structure to direct use in compilation and simulation tasks. In this demo we will explain the mathematical objects "Lie subalgebra", "Cartan involution", and "symmetric space", which are prerequisites to the KAK theorem. Then we state the theorem and explain how it powers a standard circuit decomposition/template construction technique, which also proves the universality of single- and two-qubit operations for quantum computing. All steps are illustrated with mathematical and code examples. **Relevant references:** See end of demo file or the metadata file **Possible Drawbacks:** N/A **Related GitHub Issues:** #1261 [sc-74884] ---- If you are writing a demonstration, please answer these questions to facilitate the marketing process. * GOALS — Why are we working on this now? - The theorem uses Lie algebra theory, for which functionalities were recently added to PennyLane. - It can be seen as a follow-up/extension/application of the more basic [Introduction to Lie algebras](https://pennylane.ai/qml/demos/tutorial_liealgebra/) demo and it is related to content about Lie algebraic simulation ([g-sim](https://pennylane.ai/qml/demos/tutorial_liesim/)| [(g+P)-sim](https://pennylane.ai/qml/demos/tutorial_liesim_extension/)). - There will be a close follow-up demo on "Fixed-depth Hamiltonian simulation" (#1261), which makes use of the KAK theorem. * AUDIENCE — Who is this for? - Researchers/Learners that would like to understand the mathematical structure behind the KAK theorem (to be used for Khaneja-Glaser circuit templates, for example). - Researchers/Learners that would like to familiarize themselves with Lie algebraic tools in PennyLane beyond a basic introduction and the simulation-related tools in the existing content pieces. - Researchers/Learners that would like to read/understand the "Fixed-depth Hamiltonian simulation" demo coming up in #1261. * KEYWORDS — What words should be included in the marketing post? "KAK theorem" "Lie algebra" "Symmetric space" "Cartan decomposition" and/or "Cartan involution" "Circuit templates" * Which of the following types of documentation is most similar to your file? (more details [here](https://www.notion.so/xanaduai/Different-kinds-of-documentation-69200645fe59442991c71f9e7d8a77f8)) - [ ] Tutorial - [x] Demo - [ ] How-to --------- Co-authored-by: Korbinian Kottmann <43949391+Qottmann@users.noreply.github.com> Co-authored-by: Ivana Kurečić --- .../thumbnail_large_kak_theorem.png | Bin 0 -> 56384 bytes .../OGthumbnail_kak_theorem.png | Bin 0 -> 54174 bytes .../thumbnail_kak_theorem.png | Bin 0 -> 14521 bytes conf.py | 2 +- .../tutorial_kak_theorem.metadata.json | 174 +++ demonstrations/tutorial_kak_theorem.py | 988 ++++++++++++++++++ 6 files changed, 1163 insertions(+), 1 deletion(-) create mode 100644 _static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_kak_theorem.png create mode 100644 _static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_kak_theorem.png create mode 100644 _static/demo_thumbnails/regular_demo_thumbnails/thumbnail_kak_theorem.png create mode 100644 demonstrations/tutorial_kak_theorem.metadata.json create mode 100644 demonstrations/tutorial_kak_theorem.py diff --git a/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_kak_theorem.png b/_static/demo_thumbnails/large_demo_thumbnails/thumbnail_large_kak_theorem.png new file mode 100644 index 0000000000000000000000000000000000000000..bc387fdbd7165bbbbd7aa21cd65ddffaa26fa312 GIT binary patch literal 56384 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�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 z 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 literal 0 HcmV?d00001 diff --git a/_static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_kak_theorem.png b/_static/demo_thumbnails/opengraph_demo_thumbnails/OGthumbnail_kak_theorem.png new file mode 100644 index 0000000000000000000000000000000000000000..1741f4268b3818851c0765df627c27b285ebb3a0 GIT binary patch literal 54174 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%0D~6DjP3^l>5ahHA@Z8r3}EDgcm91 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 D|3~{Y literal 0 HcmV?d00001 diff --git a/_static/demo_thumbnails/regular_demo_thumbnails/thumbnail_kak_theorem.png b/_static/demo_thumbnails/regular_demo_thumbnails/thumbnail_kak_theorem.png new file mode 100644 index 0000000000000000000000000000000000000000..8816ac97b885364295d736b6e4276c8864f86461 GIT binary patch literal 14521 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. + +Without further ado, let's get started! + +Lie algebras and their groups +----------------------------- + +We start with Lie algebras, their Lie groups, +and a particular interaction between the two, the *adjoint action*. + +Lie algebras +~~~~~~~~~~~~ + +As mentioned above, we will assume a basic understanding of the mathematical objects +we will use. To warm up, however, let us briefly talk about Lie algebras (for details +see our :doc:`intro to (dynamical) Lie algebras `). + +A *Lie algebra* :math:`\mathfrak{g}` is a vector space with an additional operation +that takes two vectors to a new vector, the *Lie bracket*. To form an algebra, :math:`\mathfrak{g}` must be +closed under the Lie bracket. +For our purposes, the vectors will always be matrices and the Lie bracket will be the matrix +commutator. + +**Example** + +Our working example in this demo will be the *special unitary* algebra in two dimensions, +:math:`\mathfrak{su}(2).` +It consists of traceless complex-valued skew-Hermitian :math:`2\times 2` matrices, which we +can conveniently describe using the Pauli matrices: + +.. math:: + + \mathfrak{su}(2) + &= \left\{i\left(\begin{array}{cc} a & b-ic \\ b+ic & -a \end{array}\right) + {\large |} a, b, c \in \mathbb{R}\right\}\\ + &= \left\{i(a Z + b X + c Y)| a, b, c \in \mathbb{R}\right\}. + +We will also look at a more involved example at the end of the demo. + +.. admonition:: Math detail: our Lie algebras are real + :class: note + + The algebra :math:`\mathfrak{su}(n)` is a *real* Lie algebra, i.e., it is a vector space over + real numbers, :math:`\mathbb{R}.` This means that scalar-vector multiplication is + only valid between vectors (complex-valued matrices) and real scalars. + + There is a simple way to see this. Multiplying a skew-Hermitian matrix + :math:`x\in\mathfrak{su}(n)` by a complex number :math:`c\in\mathbb{C}` will yield + :math:`(cx)^\dagger=\overline{c} x^\dagger=-\overline{c} x,` so that + the result might no longer be skew-Hermitian, i.e. no longer in the algebra! If we keep it to real scalars + :math:`c\in\mathbb{R}` only, we have :math:`\overline{c}=c,` so that + :math:`(cx)^\dagger=-cx` and we're fine. + + We will only consider real Lie algebras here. + +Let us set up :math:`\mathfrak{su}(2)` in code. +Note that the algebra itself consists of *skew*-Hermitian matrices, but we will work +with the Hermitian counterparts as inputs, i.e., we will skip the factor :math:`i.` +We can check that :math:`\mathfrak{su}(2)` is closed under commutators by +computing all nested commutators, the so-called *Lie closure*, and observing +that the closure is not larger than :math:`\mathfrak{su}(2)` itself. +Of course, we could also check the closure manually for this small example. +""" + +from itertools import product, combinations +import pennylane as qml +from pennylane import X, Y, Z +import numpy as np + +su2 = [X(0), Y(0), Z(0)] +print(f"su(2) is {len(su2)}-dimensional") + +all_hermitian = all(qml.equal(qml.adjoint(op).simplify(), op) for op in su2) +print(f"The operators are all Hermitian: {all_hermitian}") + +su2_lie_closed = qml.lie_closure(su2) +print(f"The Lie closure of su(2) is {len(su2_lie_closed)}-dimensional.") + +traces = [op.pauli_rep.trace() for op in su2] +print(f"All operators are traceless: {np.allclose(traces, 0.)}") + +###################################################################### +# We find that :math:`\mathfrak{su}(2)` is indeed closed, and that it is a 3-dimensional +# space, as expected from the explicit expression above. +# We also picked a correct representation with traceless operators. +# +# .. admonition:: Math detail: (semi)simple Lie algebras +# :class: note +# +# Our main result for this demo will be the KAK theorem, which applies to so-called +# *semisimple* Lie algebras, which are in turn composed of *simple* Lie algebras as building +# blocks. Without going into detail, it often is sufficient to think of these building +# blocks as (1) special orthogonal algebras :math:`\mathfrak{so}(n),` (2) unitary symplectic +# algebras :math:`\mathfrak{sp}(n),` and (3) special unitary algebras :math:`\mathfrak{su}(n).` +# In particular, our example here is of the latter type, so it is not only semisimple, +# but even simple. +# +# Lie group from a Lie algebra +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# The topic of Lie groups and Lie algebras is a large field of study and there are many +# things we could talk about in this section. For the sake of brevity, however, we will +# only list a few important properties that are needed further below. For more details +# and proofs, refer to your favourite Lie theory book, which could be [#hall]_ or [#tu]_. +# +# The Lie group :math:`\mathcal{G}` associated to a Lie algebra :math:`\mathfrak{g}` is given +# by the exponential map applied to the algebra: +# +# .. math:: +# +# \mathcal{G}=\exp(\mathfrak{g}). +# +# We will only consider Lie groups :math:`\exp(\mathfrak{g})` arising from a Lie algebra +# :math:`\mathfrak{g}` here. +# As we usually think about the unitary algebras :math:`\mathfrak{u}` and their +# subalgebras, the correspondence is well-known to quantum practitioners: Exponentiate +# a skew-Hermitian matrix to obtain a unitary operation, i.e., a quantum gate. +# +# Interaction between Lie groups and algebras +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# We will make use of a particular interaction between the algebra :math:`\mathfrak{g}` and +# its group :math:`\mathcal{G},` called the *adjoint action* of :math:`\mathcal{G}` on +# :math:`\mathfrak{g}.` It is given by +# +# .. math:: +# +# \text{Ad}: \mathcal{G} \times \mathfrak{g} \to \mathfrak{g}, +# \ (\exp(x),y)\mapsto \text{Ad}_{\exp(x)}(y) = \exp(x) y\exp(-x). +# +# Similarly, we can interpret the Lie bracket as a map of :math:`\mathfrak{g}` acting on itself, +# which is called the *adjoint representation* of :math:`\mathfrak{g}` on itself: +# +# .. math:: +# +# \text{ad}: \mathfrak{g} \times \mathfrak{g} \to \mathfrak{g}, +# \ (x, y) \mapsto \text{ad}_x(y) = [x, y]. +# +# The adjoint group action and adjoint algebra representation do not only carry a very +# similar name, they are intimately related: +# +# .. math:: +# +# \text{Ad}_{\exp(x)}(y) = \exp(\text{ad}_x) (y), +# +# where we applied the exponential map to :math:`\text{ad}_x,` which maps from :math:`\mathfrak{g}` +# to itself, via its series representation. +# We will refer to this relationship as the *adjoint identity*. +# We talk about :math:`\text{Ad}` and :math:`\text{ad}` in more detail in the box below, and refer to our demo +# :doc:`g-sim: Lie algebraic classical simulations ` for +# further discussion. +# +# .. admonition:: Derivation: adjoint representations +# :class: note +# +# We begin this derivation with the *adjoint action* of :math:`\mathcal{G}` on itself, +# given by +# +# .. math:: +# +# \Psi: \mathcal{G} \times \mathcal{G} \to \mathcal{G}, +# \ (\exp(x),\exp(y))\mapsto \Psi_{\exp(x)}(\exp(y)) = \exp(x) \exp(y)\exp(-x). +# +# The map :math:`\Psi_{\exp(x)}` (with fixed subscript) is a smooth map from the Lie group +# :math:`\mathcal{G}` to itself, so that we may differentiate it. This leads to the +# differential :math:`\text{Ad}_{\exp(x)}=d\Psi_{\exp(x)},` which maps the tangent spaces of +# :math:`\mathcal{G}` to itself. At the identity, where +# the algebra :math:`\mathfrak{g}` forms the tangent space, we find +# +# .. math:: +# +# \text{Ad} : \mathcal{G} \times\mathfrak{g} \to \mathfrak{g}, +# \ (\exp(x), y)\mapsto \exp(x) y \exp(-x). +# +# This is the adjoint action of :math:`\mathcal{G}` on :math:`\mathfrak{g}` as we +# introduced above. +# +# Now that we have the adjoint action of :math:`\mathcal{G}` on :math:`\mathfrak{g},` +# we can differentiate it with respect to the subscript argument: +# +# .. math:: +# +# \text{ad}_{\circ}(y)&=d\text{Ad}_\circ(y),\\ +# \text{ad}: \mathfrak{g}\times \mathfrak{g}&\to\mathfrak{g}, +# \ (x, y)\mapsto \text{ad}_x(y) = [x, y]. +# +# It is a non-trivial observation that this differential equals the commutator! +# With :math:`\text{ad}` we arrived at a map that *represents* the action of an algebra element +# :math:`x` on the vector space that is the algebra itself. That is, we found the +# *adjoint representation* of :math:`\mathfrak{g}.` +# +# Finally, note that the adjoint identity can be proven with similar tools as above, +# i.e., chaining derivatives and exponentiation suitably. +# +# Symmetric spaces +# ---------------- +# +# Symmetric spaces are a popular field of study both in physics and mathematics. +# We will not go into depth regarding their interpretation or classification, but refer the +# interested reader to the broad existing literature, including [#arvanitogeorgos]_ and +# [#helgason]_. +# In the following, we mostly care about the algebraic structure of symmetric spaces. +# +# Subalgebras and Cartan decompositions +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# A *subalgebra* :math:`\mathfrak{k}` of a Lie algebra :math:`\mathfrak{g}` is a +# vector subspace that is closed under the Lie bracket. Overall, this means that +# :math:`\mathfrak{k}` is closed under addition, scalar multiplication, and the Lie bracket. +# The latter often is simply written as :math:`[\mathfrak{k}, \mathfrak{k}]\subset \mathfrak{k}.` +# +# The algebras we are interested in come with an *inner product* between its elements. +# For our purposes, it is sufficient to assume that it is +# +# .. math:: +# +# \langle x, y\rangle = \text{tr}[x^\dagger y]. +# +# Let's implement the inner product and an orthogonality check based on it: +# + + +def inner_product(op1, op2): + """Compute the trace inner product between two operators.""" + # Use two wires to reuse it in the second example on two qubits later on + return qml.math.trace(qml.matrix(qml.adjoint(op1) @ op2, wire_order=[0, 1])) + + +def is_orthogonal(op, basis): + """Check whether an operator is orthogonal to a space given by some basis.""" + return np.allclose([inner_product(op, basis_op) for basis_op in basis], 0) + + +###################################################################### +# Given a subalgebra :math:`\mathfrak{k}\subset \mathfrak{g},` the inner product allows +# us to define an orthogonal complement +# +# .. math:: +# +# \mathfrak{p} = \{x\in\mathfrak{g} | \langle x, y\rangle=0 \ \forall \ y\in\mathfrak{k}\}. +# +# In this context, :math:`\mathfrak{k}` is commonly called the *vertical space*, +# :math:`\mathfrak{p}` accordingly is the *horizontal space*. +# The KAK theorem will apply to scenarios in which these spaces satisfy additional +# commutation relations, which do not hold for all subalgebras: +# +# .. math:: +# +# [\mathfrak{k}, \mathfrak{p}] \subset& \mathfrak{p} \qquad \text{(Reductive property)},\\ +# [\mathfrak{p}, \mathfrak{p}] \subset& \mathfrak{k} \qquad \text{(Symmetric property)}. +# +# The first property tells us that :math:`\mathfrak{p}` is left intact by the adjoint action of +# :math:`\mathfrak{k}.` The second property suggests that :math:`\mathfrak{p}` behaves like the +# *opposite* of a subalgebra, i.e., all commutators lie in its complement, the subalgebra +# :math:`\mathfrak{k}.` Due to the adjoint identity from above, the first property also holds for +# group elements acting on algebra elements; for all :math:`x\in\mathfrak{p}` and +# :math:`K\in\mathcal{K}=\exp(\mathfrak{k}),` we have +# +# .. math:: +# +# K x K^\dagger +# = \exp(y) x \exp(-y) +# = \text{Ad}_{\exp(y)}(x) +# = \exp(\text{ad}_y) (x) +# = \sum_{n=0}^\infty \frac{1}{n!} \underset{\in\mathfrak{p}}{\underbrace{(\text{ad}_y)^n (x)}} +# \in \mathfrak{p}. +# +# If the reductive property holds, the quotient space :math:`\mathcal{G}/\mathcal{K}` of the groups +# of :math:`\mathfrak{g}` and :math:`\mathfrak{k}` (see detail box below) is called a +# *reductive homogeneous space*. If both properties hold, :math:`(\mathfrak{k}, \mathfrak{p})` is +# called a *Cartan pair* and we call :math:`\mathfrak{g}=\mathfrak{k} \oplus \mathfrak{p}` a +# *Cartan decomposition*. :math:`(\mathfrak{g}, \mathfrak{k})` is named a *symmetric pair* +# and the quotient :math:`\mathcal{G}/\mathcal{K}` is a *symmetric space*. +# Symmetric spaces are relevant for a wide range of applications in physics +# and have been studied a lot throughout the last hundred years. +# +# .. admonition:: Nomenclature: Cartan decomposition/pair +# :class: warning +# +# Depending on context and field, there sometimes is an additional requirement +# for :math:`\mathfrak{g}=\mathfrak{k}\oplus\mathfrak{p}` to be called a Cartan decomposition. +# Without going into detail, this requirement is that the so-called *Killing form* must be +# negative definite on :math:`\mathfrak{k}` and positive definite on :math:`\mathfrak{p}` +# [#helgason]_. +# +# .. admonition:: Math detail: quotient space +# :class: note +# +# The *quotient space* of a Lie group :math:`\mathcal{G}` and a subgroup :math:`\mathcal{K}` +# is the space of cosets of :math:`\mathcal{K},` i.e., +# :math:`\mathcal{G}/\mathcal{K} = \{g\mathcal{K} | g\in G\}.` In this space, two elements are +# equal if they just differ by multiplying an element from :math:`\mathcal{K}` from the left +# to one of them. The quotient space is a manifold like the two groups :math:`\mathcal{G}` and +# :math:`\mathcal{K},` but in general it will *not* be a group itself. For example, a product +# of two elements is +# :math:`(g'\mathcal{K})(g\mathcal{K})=g'g(g^{-1} \mathcal{K} g) \mathcal{K},` which only is +# a coset again if :math:`g^{-1} \mathcal{K} g\subset \mathcal{K}.` Subgroups for which this +# condition holds for any :math:`g\in \mathcal{G}` are called *normal subgroups*. +# We are interested in cases where the symmetric property +# :math:`[\mathfrak{p}, \mathfrak{p}] \subset \mathfrak{k}` holds, which excludes (non-Abelian) +# normal subgroups, and thus our quotient space :math:`\mathcal{G}/\mathcal{K}` will not be +# a group. +# +# **Example** +# +# For our example, we consider the subalgebra :math:`\mathfrak{k}=\mathfrak{u}(1)` +# of :math:`\mathfrak{su}(2)` that generates Pauli-:math:`Z` rotations: +# +# .. math:: +# +# \mathfrak{k} = \text{span}_{\mathbb{R}} \{iZ\}. +# +# Let us define it in code, and check whether it gives rise to a Cartan decomposition. +# As we want to look at another example later, we wrap everything in a function. +# + + +def check_cartan_decomposition(g, k, space_name): + """Given an algebra g and an operator subspace k, verify that k is a subalgebra + and gives rise to a Cartan decomposition.""" + # Check Lie closure of k + k_lie_closure = qml.pauli.dla.lie_closure(k) + k_is_closed = len(k_lie_closure) == len(k) + print(f"The Lie closure of k is as big as k itself: {k_is_closed}.") + + # Orthogonal complement of k, assuming that everything is given in the same basis. + p = [g_op for g_op in g if is_orthogonal(g_op, k)] + print( + f"k has dimension {len(k)}, p has dimension {len(p)}, which combine to " + f"the dimension {len(g)} of g: {len(k)+len(p)==len(g)}" + ) + + # Check reductive property + k_p_commutators = [qml.commutator(k_op, p_op) for k_op, p_op in product(k, p)] + k_p_coms_in_p = all([is_orthogonal(com, k) for com in k_p_commutators]) + + print(f"All commutators in [k, p] are in p (orthogonal to k): {k_p_coms_in_p}.") + if k_p_coms_in_p: + print(f"{space_name} is a reductive homogeneous space.") + + # Check symmetric property + p_p_commutators = [qml.commutator(*ops) for ops in combinations(p, r=2)] + p_p_coms_in_k = all([is_orthogonal(com, p) for com in p_p_commutators]) + + print(f"All commutators in [p, p] are in k (orthogonal to p): {p_p_coms_in_k}.") + if p_p_coms_in_k: + print(f"{space_name} is a symmetric space.") + + return p + + +u1 = [Z(0)] +space_name = "SU(2)/U(1)" +p = check_cartan_decomposition(su2, u1, space_name) + +###################################################################### +# Cartan subalgebras +# ~~~~~~~~~~~~~~~~~~ +# +# The symmetric property of a Cartan decomposition +# :math:`([\mathfrak{p}, \mathfrak{p}]\subset\mathfrak{k})` tells us that :math:`\mathfrak{p}` +# is *very far* from being a subalgebra (commutators never end up in :math:`\mathfrak{p}` again). +# This also gives us information about potential subalgebras *within* :math:`\ \mathfrak{p}.` +# Assume we have a subalgebra :math:`\mathfrak{a}\subset\mathfrak{p}.` Then the commutator +# between any two elements :math:`x, y\in\mathfrak{a}` must satisfy +# +# .. math:: +# +# [x, y] \in \mathfrak{a} \subset \mathfrak{p} +# &\Rightarrow [x, y]\in\mathfrak{p} \text{(subalgebra property)}, \\ +# [x, y] \in [\mathfrak{a}, \mathfrak{a}] \subset [\mathfrak{p}, \mathfrak{p}] +# \subset \mathfrak{k} &\Rightarrow [x, y]\in\mathfrak{k}\ \text{(symmetric property)}. +# +# That is, the commutator must lie in *both* orthogonal complements :math:`\mathfrak{k}` and +# :math:`\mathfrak{p},` which only have the zero vector in common. This tells us that *all* +# commutators in :math:`\mathfrak{a}` vanish, making it an *Abelian* subalgebra: +# +# .. math:: +# +# [\mathfrak{a}, \mathfrak{a}] = \{0\}. +# +# Such an Abelian subalgebra is a (horizontal) *Cartan subalgebra (CSA)* if it is *maximal*, +# i.e., if it can not be made any larger (higher-dimensional) without leaving :math:`\mathfrak{p}.` +# +# .. admonition:: Nomenclature: Cartan subalgebra +# :class: warning +# +# Depending on context and field, there are inequivalent notions of Cartan subalgebras. +# In particular, there is a common notion of Cartan subalgebras which are not contained +# in a horizontal space. Throughout this demo, we always mean a *horizontal* +# maximal Abelian subalgebra :math:`\mathfrak{a}\subset\mathfrak{p}.` The two notions +# can be made compatible by being precise about the space of which the subalgebra is a CSA. +# +# How many different CSAs are there? Given a CSA :math:`\mathfrak{a},` we can pick a vertical +# element :math:`y\in\mathfrak{k}` and apply the corresponding group element :math:`K=\exp(y)` to +# all elements of the CSA, using the adjoint action we studied above. This will yield a valid +# CSA again: First, :math:`K\mathfrak{a} K^\dagger` remains in :math:`\mathfrak{p}` +# due to the reductive property, as we discussed when introducing the Cartan decomposition. +# Second, the adjoint action will not change the Abelian property because +# +# .. math:: +# +# [K x_1 K^\dagger, K x_2 K^\dagger] = K [x_1, x_2] K^\dagger = K 0 K^\dagger = 0 +# \quad \forall\ x_{1, 2}\in\mathfrak{a}. +# +# Finally, we are guaranteed that :math:`K\mathfrak{a} K^\dagger` remains maximal: +# +# .. admonition:: Math detail: CSAs remain maximal +# :class: note +# +# The reason that :math:`K\mathfrak{a} K^\dagger` is maximal if :math:`\mathfrak{a}` was, is +# that we assume :math:`\mathfrak{g}` to be a semisimple Lie algebra, for which the +# adjoint representation is faithful. This in turn implies that linearly +# independent elements of :math:`\mathfrak{g}` will not be mapped to linearly dependent +# elements by the adjoint action of :math:`K.` +# +# For most :math:`y\in\mathfrak{k},` applying :math:`K=\exp(y)` in this way will yield a +# *different* CSA, so that we find a whole continuum of them. +# It turns out that they *all* can be found by starting with *any* +# :math:`\mathfrak{a}` and applying all of :math:`\mathcal{K}` to it. +# +# *This is what powers the KAK theorem.* +# +# **Example** +# +# For our example, we established the decomposition +# :math:`\mathfrak{su}(2)=\mathfrak{u}(1)\oplus \mathfrak{p}` with the two-dimensional horizontal +# space :math:`\mathfrak{p} = \text{span}_{\mathbb{R}}\{iX, iY\}.` Starting with the subspace +# :math:`\mathfrak{a}=\text{span}_{\mathbb{R}} \{iY\},` we see that we immediately reach a maximal Abelian +# subalgebra (a CSA), because :math:`[Y, X]\neq 0.` Applying a rotation +# :math:`\exp(i\eta Z)\in\mathcal{K}` to this CSA gives us a new CSA via +# +# .. math:: +# +# \mathfrak{a}'=\{\exp(i\eta Z) (c iY) \exp(-i\eta Z) | c\in\mathbb{R}\} +# =\{c\cos(2\eta) iY + c\sin(2\eta) iX | c\in\mathbb{R}\} . +# +# The vertical group element :math:`\exp(i\eta Z)` simply rotates the CSA within +# :math:`\mathfrak{p}.` Let us not forget to define the CSA in code. + +# CSA generator: iY +a = p[1] + +# Rotate CSA by applying some vertical group element exp(i eta Z) +eta = 0.6 +# The factor -2 compensates the convention -1/2 in the RZ gate +a_prime = qml.RZ(-2 * eta, 0) @ a @ qml.RZ(2 * eta, 0) + +# Expectation from our theoretical calculation +a_prime_expected = np.cos(2 * eta) * a + np.sin(2 * eta) * p[0] +a_primes_equal = np.allclose(qml.matrix(a_prime_expected), qml.matrix(a_prime)) +print(f"The rotated CSAs match between numerics and theory: {a_primes_equal}") + +###################################################################### +# Cartan involutions +# ~~~~~~~~~~~~~~~~~~ +# +# In practice, there often is a more convenient way to obtain a Cartan decomposition +# than by specifying the subalgebra :math:`\mathfrak{k}` or its horizontal counterpart +# :math:`\mathfrak{p}` manually. It goes as follows. +# +# We will look at a map :math:`\theta` from the total Lie algebra :math:`\mathfrak{g}` +# to itself. We demand that :math:`\theta` has the following properties, for +# :math:`x, y\in\mathfrak{g}` and :math:`c\in\mathbb{R}.` +# +# #. It is linear, i.e., :math:`\theta(x + cy)=\theta(x) +c \theta(y),` +# #. It is compatible with the commutator, i.e., :math:`\theta([x, y])=[\theta(x),\theta(y)],` and +# #. It is an *involution*, i.e., :math:`\theta(\theta(x)) = x,` +# or :math:`\theta^2=\mathbb{I}_{\mathfrak{g}}.` +# +# In short, we demand that :math:`\theta` be an *involutive automorphism* of :math:`\mathfrak{g}.` +# +# As an involution, :math:`\theta` only can have the eigenvalues :math:`\pm 1,` with associated +# eigenspaces :math:`\mathfrak{g}_\pm.` Let's see what happens when we compute commutators between +# elements :math:`x_\pm\in\mathfrak{g}_\pm \Leftrightarrow \theta(x_\pm) = \pm x_\pm:` +# +# .. math:: +# +# &\theta([x_+, x_+]) = [\theta(x_+), \theta(x_+)] = [x_+, x_+] +# &\ \Rightarrow\ [x_+, x_+]\in\mathfrak{g}_+ ,\\ +# &\theta([x_+, x_-]) = [\theta(x_+), \theta(x_-)] = -[x_+, x_-] +# &\ \Rightarrow\ [x_+, x_-]\in\mathfrak{g}_- ,\\ +# &\theta([x_-, x_-]) = [\theta(x_-), \theta(x_-)] = (-1)^2 [x_-, x_-] +# &\ \Rightarrow\ [x_-, x_-]\in\mathfrak{g}_+. +# +# Or, in other words, +# :math:`[\mathfrak{g}_+, \mathfrak{g}_+] \subset \mathfrak{g}_+,` +# :math:`[\mathfrak{g}_+, \mathfrak{g}_-] \subset \mathfrak{g}_-,` +# and :math:`[\mathfrak{g}_-, \mathfrak{g}_-] \subset \mathfrak{g}_+.` +# So an involution is enough to find us a Cartan decomposition, with +# :math:`\mathfrak{k}=\mathfrak{g}_+` and :math:`\mathfrak{p}=\mathfrak{g}_-.` +# +# 🤯 +# +# We might want to call such a :math:`\theta` a *Cartan involution*. +# +# .. admonition:: Nomenclature: Cartan involution +# :class: warning +# +# Some people do so, some people again require more properties for such an +# involution to be called Cartan involution. +# For our purposes, let's go with the more general definition and call all +# involutions with the properties above Cartan involutions. +# +# Conversely, if we have a Cartan decomposition based on a subalgebra :math:`\mathfrak{k},` +# we can define the map +# +# .. math:: +# +# \theta_{\mathfrak{k}}(x) = \Pi_{\mathfrak{k}}(x)-\Pi_{\mathfrak{p}}(x), +# +# where :math:`\Pi_{\mathfrak{k},\mathfrak{p}}` are the projectors onto the two vector +# subspaces. Clearly, :math:`\theta_{\mathfrak{k}}` is linear because projectors are. +# It is also compatible with the commutator due to the commutation relations +# between :math:`\mathfrak{k}` and :math:`\mathfrak{p}` (see box below). +# Finally, :math:`\theta_{\mathfrak{k}}` is an involution because +# +# .. math:: +# +# \theta_{\mathfrak{k}}^2=(\Pi_{\mathfrak{k}}-\Pi_{\mathfrak{p}})^2 +# = \Pi_{\mathfrak{k}}^2-\Pi_{\mathfrak{k}}\Pi_{\mathfrak{p}} +# -\Pi_{\mathfrak{p}}\Pi_{\mathfrak{k}}+\Pi_{\mathfrak{p}}^2 +# =\Pi_{\mathfrak{k}}+\Pi_{\mathfrak{p}} +# = \mathbb{I}_{\mathfrak{g}}, +# +# where we used the projectors' property :math:`\Pi_{\mathfrak{k}}^2=\Pi_{\mathfrak{k}}` and +# :math:`\Pi_{\mathfrak{p}}^2=\Pi_{\mathfrak{p}},` as well as the fact that +# :math:`\Pi_{\mathfrak{k}}\Pi_{\mathfrak{p}}=\Pi_{\mathfrak{p}}\Pi_{\mathfrak{k}}=0` because +# the spaces :math:`\mathfrak{k}` and :math:`\mathfrak{p}` are orthogonal to each other. +# +# .. admonition:: Math detail: :math:`\theta_{\mathfrak{k}}` is a homomorphism +# :class: note +# +# To see that :math:`\theta_{\mathfrak{k}}` is compatible with the commutator, i.e., +# an algebra homomorphism, see how a commutator :math:`[x, y]` splits: +# +# .. math:: +# +# [x, y] +# &= [\Pi_{\mathfrak{k}}(x) + \Pi_{\mathfrak{p}}(x), \Pi_{\mathfrak{k}}(y) + \Pi_{\mathfrak{p}}(y)] \\ +# &= \underset{\in \mathfrak{k}}{\underbrace{[\Pi_{\mathfrak{k}}(x), \Pi_{\mathfrak{k}}(y)]}} +# +\underset{\in \mathfrak{p}}{\underbrace{[\Pi_{\mathfrak{k}}(x), \Pi_{\mathfrak{p}}(y)]}} +# +\underset{\in \mathfrak{p}}{\underbrace{[\Pi_{\mathfrak{p}}(x), \Pi_{\mathfrak{k}}(y)]}} +# +\underset{\in \mathfrak{k}}{\underbrace{[\Pi_{\mathfrak{p}}(x), \Pi_{\mathfrak{p}}(y)]}}, +# +# where we used :math:`\mathbb{I}_{\mathfrak{g}} = \Pi_{\mathfrak{k}} + \Pi_{\mathfrak{p}}` and the +# commutation relations between :math:`\mathfrak{k}` and :math:`\mathfrak{p}.` +# We can use this split to compute +# +# .. math:: +# +# \theta_{\mathfrak{k}} ([x, y]) +# &=\Pi_{\mathfrak{k}}([x, y]) - \Pi_{\mathfrak{p}}([x, y])\\ +# &=[\Pi_{\mathfrak{k}}(x), \Pi_{\mathfrak{k}}(y)] + [\Pi_{\mathfrak{p}}(x), \Pi_{\mathfrak{p}}(y)] +# - [\Pi_{\mathfrak{k}}(x), \Pi_{\mathfrak{p}}(y)] - [\Pi_{\mathfrak{p}}(x), \Pi_{\mathfrak{k}}(y)]\\ +# &=[\Pi_{\mathfrak{k}}(x) -\Pi_{\mathfrak{p}}(x), \Pi_{\mathfrak{k}}(y)-\Pi_{\mathfrak{p}}(y)]\\ +# &=[\theta_{\mathfrak{k}} (x),\theta_{\mathfrak{k}} (y)]. +# +# Thus, :math:`\theta_{\mathfrak{k}}` indeed is compatible with the commutator. +# +# This shows us that we can easily switch between a Cartan involution and a Cartan +# decomposition, in either direction! +# +# **Example** +# +# In our example, an involution that reproduces our choice +# :math:`\mathfrak{k}=\text{span}_{\mathbb{R}} \{iZ\}` is :math:`\theta_Z(x) = Z x Z` +# (convince yourself that it is an involution that respects commutators, or verify that +# it matches :math:`\theta_{\mathfrak{k}}` from above). + + +def theta_Z(x): + return qml.simplify(Z(0) @ x @ Z(0)) + + +theta_of_u1 = [theta_Z(x) for x in u1] +u1_is_su2_plus = all(qml.equal(x, theta_of_x) for x, theta_of_x in zip(u1, theta_of_u1)) +print(f"U(1) is the +1 eigenspace: {u1_is_su2_plus}") + +theta_of_p = [theta_Z(x) for x in p] +p_is_su2_minus = all(qml.equal(-x, theta_of_x) for x, theta_of_x in zip(p, theta_of_p)) +print(f"p is the -1 eigenspace: {p_is_su2_minus}") + +###################################################################### +# We can easily get a new subalgebra by modifying the involution, say, to +# :math:`\theta_Y(x) = Y x Y,` expecting that +# :math:`\mathfrak{k}_Y=\text{span}_{\mathbb{R}} \{iY\}` becomes the new subalgebra. + + +def theta_Y(x): + return qml.simplify(Y(0) @ x @ Y(0)) + + +eigvals = [] +for x in su2: + if qml.equal(theta_Y(x), x): + eigvals.append(1) + elif qml.equal(theta_Y(x), -x): + eigvals.append(-1) + else: + raise ValueError("Operator not purely in either eigenspace.") + +print(f"Under theta_Y, the operators\n{su2}\nhave the eigenvalues\n{eigvals}") + +###################################################################### +# This worked! A new involution gave us a new subalgebra and Cartan decomposition. +# +# .. admonition:: Math detail: classification of Cartan decompositions +# :class: note +# +# You might already see that the two different decompositions created by :math:`\theta_Z` +# and :math:`\theta_Y` are very similar. There is a whole field of study that +# characterizes---and even fully classifies---the possible Cartan decompositions +# of semisimple Lie algebras. This classification +# plays a big role when talking about decompositions without getting stuck on details +# like the choice of basis or the representation of the algebra as matrices. +# For example, there are only three types of Cartan decompositions of the special unitary +# algebra :math:`\mathfrak{su}(n),` called AI, AII, and AIII. The subalgebras +# :math:`\mathfrak{k}` for these decompositions are the special orthogonal algebra +# :math:`\mathfrak{so}(n)` (AI), the unitary symplectic algebra :math:`\mathfrak{sp}(n)` (AII), +# and a sum of (special) unitary algebras +# :math:`\mathfrak{su}(p)\oplus\mathfrak{su}(q)\oplus\mathfrak{u}(1)` (AIII, :math:`p+q=n`). +# For a quick overview, see for example the `Wikipedia entry on symmetric spaces +# `__. +# Their involutions are usually represented by complex conjugation (AI), by the adjoint +# action with a Pauli operator (AIII, for qubits, :math:`p=q=2^{N-1}`), or by both +# (AII). It is instructive to try and see why those three are *not* equivalent +# under a unitary basis change! +# +# The KAK theorem +# --------------- +# +# Now that we covered all prerequisites, we are ready for our main result. It consists of two +# steps that are good to know individually, so we will look at both of them in sequence. +# We will not conduct formal proofs but leave those to the literature references. +# In the following, let :math:`\mathfrak{g}` be a compact real semisimple Lie algebra and +# :math:`\mathfrak{k}` a subalgebra such that :math:`\mathfrak{g}=\mathfrak{k}\oplus \mathfrak{p}` +# is a Cartan decomposition. +# +# The first step is a decomposition of the Lie group :math:`\mathcal{G}=\exp(\mathfrak{g})` +# into the Lie subgroup +# :math:`\mathcal{K}=\exp(\mathfrak{k})` and the exponential of the horizontal space, +# :math:`\mathcal{P}=\exp(\mathfrak{p}),` *which is not a group* (see box on quotient spaces). +# The decomposition is a simple product within :math:`\mathcal{G}:` +# +# .. math:: +# +# \mathcal{G} &= \mathcal{K}\mathcal{P}, \text{ or }\\ +# \forall\ G\in\mathcal{G}\ \ \exists K\in\mathcal{K}, x\in\mathfrak{p}: \ G &= K \exp(x). +# +# This *KP* decomposition can be seen as the *group version* of +# :math:`\mathfrak{g} = \mathfrak{k} \oplus\mathfrak{p}` and is known as a *global* Cartan +# decomposition of :math:`\mathcal{G}.` +# +# The second step is the further decomposition of the space :math:`\mathcal{P}=\exp(\mathfrak{p}).` +# For this we first need to fix a Cartan subalgebra (CSA) :math:`\mathfrak{a}\subset\mathfrak{p}.` +# The CSA might be given through some application or from context, but there is no +# canonical choice. +# Given a horizontal vector :math:`x\in\mathfrak{p},` we can always construct a second CSA +# :math:`\mathfrak{a}_x\subset\mathfrak{p}` that contains :math:`x.` As any two CSAs can be mapped +# to each other by some subalgebra element :math:`y\in\mathfrak{k}` using the adjoint action :math:`\text{Ad},` +# we know that a :math:`y` exists such that +# +# .. math:: +# +# \exp(y)\mathfrak{a}_x\exp(-y)=\mathfrak{a} +# \quad\Rightarrow\quad x\in(\exp(-y) \mathfrak{a}\exp(y). +# +# Generalizing this statement across all horizontal elements :math:`x\in\mathfrak{p},` we find +# +# .. math:: +# +# \mathfrak{p} \subset \{\exp(-y) \mathfrak{a} \exp(y) | y\in\mathfrak{k}\}. +# +# As we discussed, the converse inclusion also must hold for a reductive space, so that we +# may even replace :math:`\subset` by an equality. +# Now we can use :math:`\exp(\text{Ad}_{K} x)=\text{Ad}_{K}\exp(x)` to move +# this statement to the group level, +# +# .. math:: +# +# \mathcal{P} +# =\exp(\mathfrak{p}) +# = \{\exp(\exp(-y) \mathfrak{a} \exp(y)) | y\in\mathfrak{k}\} +# = \{\exp(K^{-1} \mathfrak{a} K) | K\in\mathcal{K}\} +# = \{K^{-1} \mathcal{A} K | K\in\mathcal{K}\}, +# +# where we abbreviated :math:`\mathcal{A} = \exp(\mathfrak{a}).` +# +# Chaining the two steps together and combining the left factor :math:`K^{-1}` with the group +# :math:`\mathcal{K}` in the *KP* decomposition, we obtain the *KAK theorem* +# +# .. math:: +# +# \mathcal{G} +# =\mathcal{K}\mathcal{P} +# = \mathcal{K}\{K^{-1} \mathcal{A} K | K\in\mathcal{K}\}, +# = \{K_1 \mathcal{A} K_2 | K_{1,2}\in\mathcal{K}\}, +# = \mathcal{K} \mathcal{A} \mathcal{K} \qquad\textbf{(KAK Theorem).} +# +# It teaches us that any group element can be decomposed into two factors from the Lie subgroup and +# the exponential of a CSA element, i.e., of commuting elements from the horizontal subspace +# :math:`\mathfrak{p}.` This may already hint at the usefulness of the KAK theorem for matrix +# factorizations in general, and for quantum circuit decompositions in particular. +# Given a group operation :math:`G=\exp(x)` with :math:`x\in\mathfrak{g},` there are two +# subalgebra elements :math:`y_{1,2}\in\mathfrak{k}` (or subgroup elements +# :math:`K_{1,2}=\exp(y_{1,2})\in \mathcal{K}`) and a Cartan subgalgebra element +# :math:`a\in\mathfrak{a}` so that +# +# .. math:: +# +# G\in\mathcal{G} \quad\Rightarrow\quad G=K_1 \exp(a) K_2. +# +# If :math:`x` happens to be from the horizontal subspace :math:`\mathfrak{p},` so that +# :math:`G\in \mathcal{P}\subset\mathcal{G},` we know that the two subgroup elements :math:`K_1` +# and :math:`K_2` will in fact be related, namely +# +# .. math:: +# +# G\in\mathcal{P} \quad\Rightarrow\quad G=K\exp(a)K^\dagger. +# +# **Example** +# +# Applying what we just learned to our example on :math:`\mathfrak{su}(2),` we can state that +# any single-qubit gate can be implemented by running a gate from +# :math:`\mathcal{K}=\{\exp(i\eta Z) | \eta\in\mathbb{R}\},` a CSA gate +# :math:`\mathcal{A}=\{\exp(i\varphi Y) | \eta\in\mathbb{R}\},` and another gate from +# :math:`\mathcal{K}.` We rediscovered a standard decomposition of an arbitrary +# :math:`SU(2)` gate! PennyLane produces it with :func:`~.pennylane.ops.one_qubit_decomposition`: + +x = 0.2j * su2[0] - 0.1j * su2[1] - 0.2j * su2[2] +G = qml.math.linalg.expm(qml.matrix(x)) +print(qml.ops.one_qubit_decomposition(G, 0, rotations="ZYZ")) + +###################################################################### +# If we pick a *horizontal gate*, i.e., a gate :math:`G\in\mathcal{P}`, we obtain the same +# rotation angle for the initial and final :math:`R_Z` rotations, up to the expected sign, and +# a shift by some multiple of :math:`2\pi.` + +horizontal_x = -0.1j * p[0] - 4.1j * p[1] +print(horizontal_x) +P = qml.math.linalg.expm(qml.matrix(horizontal_x)) +decomp = qml.ops.one_qubit_decomposition(P, 0, rotations="ZYZ") +print(decomp) +angle_match = np.isclose((decomp[0].data[0] + decomp[-1].data[0]) % (2 * np.pi), 0.0) +print(f"First and last rotation angle match up to sign and shift by 2kπ: {angle_match}") + +###################################################################### +# Other choices for involutions or---equivalently---subalgebras :math:`\mathfrak{k}` will +# lead to other decompositions of ``Rot``. For example, using :math:`\theta_Y` from above +# together with the CSA :math:`\mathfrak{a}_Y=\text{span}_{\mathbb{R}} \{iX\},` we find the +# decomposition +# +# .. math:: +# +# \text{Rot}(\phi, \theta, \omega) = R_Y(\eta_1) R_X(\vartheta) R_Y(\eta_2). +# +# And that's it for our main discussion. We conclude this demo by applying the +# KAK theorem to the group of arbitrary two-qubit gates. +# +# Application: Two-qubit gate decomposition +# ----------------------------------------- +# +# Two-qubit operations are described by the special unitary group :math:`SU(4)` and +# here we will use a decomposition of its algebra :math:`\mathfrak{su}(4)` to decompose +# such gates. +# Specifically, we use the subalgebra that generates single-qubit operations independently +# on either qubit, :math:`\mathfrak{su}(2)\oplus\mathfrak{su}(2).` Let's set it up with our +# tool from earlier: + +# Define su(4). Skip first entry of Pauli group, which is the identity +su4 = list(qml.pauli.pauli_group(2))[1:] +print(f"su(4) is {len(su4)}-dimensional") + +# Define subalgebra su(2) ⊕ su(2) +su2_su2 = [X(0), Y(0), Z(0), X(1), Y(1), Z(1)] +space_name = "SU(4)/(SU(2)xSU(2))" +p = check_cartan_decomposition(su4, su2_su2, space_name) + +###################################################################### +# .. admonition:: Math detail: involution for two-qubit decomposition +# :class: note +# +# The accompanying involution sorts operators by the number of qubits on which they are +# supported (:math:`\mathfrak{k}` is supported on one, :math:`\mathfrak{p}` on two). +# This can be realized with the operation +# +# .. math:: +# +# \theta(x) = -Y_0Y_1 x^T Y_0Y_1. +# +# Intuitively, the conjugation by :math:`Y_0Y_1` adds a minus +# sign for each :math:`X` and :math:`Z` factor in :math:`x,` and the transposition +# adds a minus sign for each :math:`Y.` Taken together, each Pauli operator contributes +# a minus sign. Finally, as we want the single-qubit operators to receive no sign in total +# (:math:`\mathfrak{k}` is the :math:`+1` eigenspace), we add a minus sign overall. +# +# Now we can pick a Cartan subalgebra within :math:`\mathfrak{p},` the vector space +# of all two-qubit Paulis. A common choice is +# +# .. math:: +# +# \mathfrak{a} = \text{span}_{\mathbb{R}}\{iX_0X_1, iY_0Y_1, iZ_0Z_1\}. +# +# These three operators commute, making :math:`\mathfrak{a}` Abelian. +# They also form a *maximal* Abelian algebra within :math:`\mathfrak{p},` which is less obvious. +# +# The KAK theorem now tells us that any two-qubit gate :math:`U,` being part of +# :math:`SU(4),` can be implemented by a sequence +# +# .. math:: +# +# U &= \exp(y_1) \exp(a)\exp(y_2)\\ +# &= \exp(i[\varphi^x_0 X_0 + \varphi^y_0 Y_0 + \varphi^z_0 Z_0]) +# \exp(i[\varphi^x_1 X_1 + \varphi^y_1 Y_1 + \varphi^z_1 Z_1])\\ +# &\times \exp(i [\eta^x X_0X_1 + \eta^y Y_0Y_1 + \eta^z Z_0Z_1])\\ +# &\times \exp(i[\vartheta^x_0 X_0 + \vartheta^y_0 Y_0 + \vartheta^z_0 Z_0]) +# \exp(i[\vartheta^x_1 X_1 + \vartheta^y_1 Y_1 + \vartheta^z_1 Z_1]). +# +# Here we decomposed the exponentials of the vertical elements :math:`y_{1,2}` further by +# splitting them into exponentials acting on the first and second qubit, respectively. +# +# The three parameters :math:`\eta^{x, y, z}` sometimes are called the *Cartan coordinates* +# of :math:`U,` and they can be used, e.g., to assess the smallest-possible duration to +# implement the gate in hardware. +# +# With this result, we can implement a template that can create any two-qubit gate. +# We'll use :class:`~.pennylane.Rot` for the single-qubit exponentials (which changes +# the meaning of the angles, but maintains the coverage) and are allowed to +# split the Cartan subalgebra term :math:`\exp(a)` into three exponentials, as its +# terms commute. +# + + +def su4_gate(params): + phi0, phi1, eta, theta0, theta1 = np.split(params, range(3, 15, 3)) + qml.Rot(*phi0, wires=0) + qml.Rot(*phi1, wires=1) + qml.IsingXX(eta[0], wires=[0, 1]) + qml.IsingYY(eta[1], wires=[0, 1]) + qml.IsingZZ(eta[2], wires=[0, 1]) + qml.Rot(*theta0, wires=0) + qml.Rot(*theta1, wires=1) + + +params = np.random.random(15) +fig, ax = qml.draw_mpl(su4_gate, wire_order=[0, 1])(params) + +###################################################################### +# And that's a wrap on our KAK theorem application for two-qubit gates! +# +# You may have noticed that the theorem only states the existence of a +# decomposition, but does not provide a constructive way of finding +# :math:`y_{1,2}` and :math:`a` for a given gate :math:`U.` For this, +# some additional work is required, as explained in [#kokcu_fdhs]_, for example. +# +# Conclusion +# ---------- +# +# In this demo we learned about the KAK theorem and how it uses a Cartan +# decomposition of a Lie algebra to decompose its Lie group. +# This allows us to break down arbitrary quantum gates from that group, +# as we implemented in code for the groups of single-qubit and two-qubit gates, +# :math:`SU(2)` and :math:`SU(4).` +# +# If you are interested in other applications of Lie theory in the field of +# quantum computing, you are in luck! It has been a handy tool throughout the last +# decades, e.g., for the simulation of quantum circuits [#somma]_ [#goh]_ and their +# compression [#kokcu_comp]_ [#gu]_, in quantum optimal control [#dirr]_, and for trainability +# analyses [#fontana]_ [#ragone]_. For Lie algebraic classical simulation of quantum circuits, +# also take a look at the :doc:`g-sim ` and +# :doc:`(g+P)-sim ` demos. +# +# References +# ---------- +# +# .. [#hall] +# +# Brian C. Hall +# "Lie Groups, Lie Algebras, and Representations. An Elementary Introduction" +# `Graduate Texts in Mathematics, Springer `__, 2015. +# +# .. [#tu] +# +# Loring W. Tu +# "An Introduction to Manifolds" +# `Universitext, Springer `__, 2011. +# +# .. [#arvanitogeorgos] +# +# Andreas Arvanitogeorgos +# "An Introduction to Lie Groups and the Geometry of Homogeneous Spaces" +# `Student Mathematical Library **22** `__, 2003 +# +# .. [#helgason] +# +# Sigurdur Helgason +# "Differential geometry, Lie groups, and symmetric spaces" +# `Graduate Studies in Mathematics **34** `__, 2001 +# +# .. [#goh] +# +# Matthew L. Goh, Martin Larocca, Lukasz Cincio, M. Cerezo, Frédéric Sauvage +# "Lie-algebraic classical simulations for variational quantum computing" +# `arXiv:2308.01432 `__, 2023. +# +# .. [#somma] +# +# Rolando D. Somma +# "Quantum Computation, Complexity, and Many-Body Physics" +# `arXiv:quant-ph/0512209 `__, 2005. +# +# .. [#kokcu_fdhs] +# +# Efekan Kökcü, Thomas Steckmann, Yan Wang, J. K. Freericks, Eugene F. Dumitrescu, Alexander F. Kemper +# "Fixed Depth Hamiltonian Simulation via Cartan Decomposition" +# `arXiv:2104.00728 `__, 2021. +# `PRL (closed access) `__, 2022. +# +# .. [#kokcu_comp] +# +# Efekan Kökcü, Daan Camps, Lindsay Bassman, James K. Freericks, Wibe A. de Jong, Roel Van Beeumen, Alexander F. Kemper +# "Algebraic Compression of Quantum Circuits for Hamiltonian Evolution" +# `arXiv:2108.03282 `__, 2021. +# `PRA (closed access) `__, 2022. +# +# .. [#gu] +# +# Shouzhen Gu, Rolando D. Somma, Burak Şahinoğlu +# "Fast-forwarding quantum evolution" +# `Quantum **5** `__, 2021. +# +# .. [#dirr] +# +# G. Dirr, U. Helmke +# "Lie Theory for Quantum Control" +# `GAMM-Mitteilungen **31** `__, 2008. +# +# .. [#fontana] +# +# Enrico Fontana, Dylan Herman, Shouvanik Chakrabarti, Niraj Kumar, Romina Yalovetzky, Jamie Heredge, Shree Hari Sureshbabu, Marco Pistoia +# "The Adjoint Is All You Need: Characterizing Barren Plateaus in Quantum Ansätze" +# `Nat. Commun. **15** `__, 2024. +# +# .. [#ragone] +# +# Michael Ragone, Bojko N. Bakalov, Frédéric Sauvage, Alexander F. Kemper, Carlos Ortiz Marrero, Martin Larocca, M. Cerezo +# "A Unified Theory of Barren Plateaus for Deep Parametrized Quantum Circuits" +# `Nat. Commun. **15** `__, 2024. +# +# About the author +# ----------------