Processing math: 100%

qml.liealg

Overview

This module contains functionality to express and manipulate Lie algebras within the context of quantum computing.

In quantum computing, we are typically dealing with vectors in the Hilbert space H=C2n that are manipulated by unitary gates from the special unitary group SU(2n). For full universality, we require the available gates to span all of SU(2n) in order to reach any state in Hilbert space from any other state.

SU(2n) is a Lie group and has an associated Lie algebra to it, called su(2n). In some cases, it is more convenient to work with the associated Lie algebra rather than the Lie group.

Lie algebra functionality

lie_closure(generators, *[, max_iterations, ...])

Compute the (dynamical) Lie algebra from a set of generators.

structure_constants(g[, pauli, matrix, ...])

Compute the structure constants that make up the adjoint representation of a Lie algebra.

center(g[, pauli])

Compute the center of a Lie algebra.

cartan_decomp(g, involution)

Compute the Cartan Decomposition g=km of a Lie algebra g.

horizontal_cartan_subalgebra(k, m[, adj, ...])

Compute a Cartan subalgebra (CSA) am.

Functions

check_cartan_decomp(k, m[, verbose])

Helper function to check the validity of a Cartan decomposition g=km.

check_commutation_relation(ops1, ops2, vspace)

Helper function to check [ops1,ops2]vspace.

check_abelian(ops)

Helper function to check if all operators in ops commute, i.e., form an Abelian set of operators.

adjvec_to_op(adj_vecs, basis[, is_orthogonal])

Transform adjoint vector representations back into operator format.

op_to_adjvec(ops, basis[, is_orthogonal])

Decompose a batch of operators into a given operator basis.

change_basis_ad_rep(adj, basis_change)

Apply a basis_change between bases of operators to the adjoint representation adj.

Involutions

A map θ:gg from the Lie algebra g to itself is called an involution if it fulfills θ(θ(g))=g gg and is compatible with commutators, [θ(g),θ(g)]=θ([g,g]). Involutions are used to construct a cartan_decomp(). There are seven canonical Cartan involutions of classical real simple Lie algebras (AI, AII, AIII, BDI, DIII, CI, CII) and one canonical involution for each real semisimple Lie algebra made up of two isomorphic classical simple components (A, BD, C). See, for example, Tab. 4 in Edelman and Jeong. Note that the functions implemented here do not represent the mathematical involutions directly, but return a boolean value that indicates whether or not the input is in the +1 eigenspace of θ. When using them, it is usually assumed that we apply them to operators in the eigenbasis of the underlying involution θ.

even_odd_involution(op)

The Even-Odd involution.

concurrence_involution(op)

The Concurrence Canonical Decomposition Θ(g)=gT as a Cartan involution function.

A(op[, wire])

Canonical Cartan decomposition of type A on su(n)su(n), given by θ:xyyx.

AI(op)

Canonical Cartan decomposition of type AI, given by θ:xx.

AII(op[, wire])

Canonical Cartan decomposition of type AII, given by θ:xY0xY0.

AIII(op[, p, q, wire])

Canonical Cartan decomposition of type AIII, given by θ:xIp,qxIp,q.

BD(op[, wire])

Canonical Cartan decomposition of type BD on so(n)so(n), given by θ:xyyx.

BDI(op[, p, q, wire])

Canonical Cartan decomposition of type BDI, given by θ:xIp,qxIp,q.

DIII(op[, wire])

Canonical Cartan decomposition of type DIII, given by θ:xY0xY0.

C(op[, wire])

Canonical Cartan decomposition of type C on sp(n)sp(n), given by θ:xyyx.

CI(op)

Canonical Cartan decomposition of type CI, given by θ:xx.

CII(op[, p, q, wire])

Canonical Cartan decomposition of type CII, given by θ:xKp,qxKp,q.