Skip to content

Matrix Basis for the Classified Algebra #200

@AmanieOxana

Description

@AmanieOxana

Context

get_algebra returns the isomorphism label of the dynamical Lie algebra generated by a set of Pauli strings — one of the four canonical types from Theorem 1 in Aguilar et al. 2024. For example,

generators = p(["XY", "XZ"], n=4)
generators.get_algebra()      # -> "sp(4)"

The label fixes the family (u, so, sp) and the dimension parameter, but it is a name, not a usable mathematical object. Anything algebraic with the result — dimension checks, structure-constant computations, feeding into a Cartan-decomposition pipeline like Wierichs et al. 2025, arXiv:2503.19014 — needs the algebra instantiated as a concrete basis of operators.

This issue is the first step: expose the algebra in defining representation. Cartan involutions, k/p split, and CSAs come in a follow-up.

Task

Add a function that returns the algebra named by get_algebra as a list of matrices in its defining representation, partitioned by direct summand. The output is fully determined by the label, so this is table-driven — no input-dependent computation.

Canonical type Algebra per summand Defining rep # summands
A so(n+3) (n+3)×(n+3) real antisymmetric 2^{n_1}
B1 sp(2^{n_2}) 2^{n_2+1}×2^{n_2+1} symplectic 2^{n_1}
B2 so(2^{n_2+3}) 2^{n_2+3}×2^{n_2+3} real antisymmetric 2^{n_1}
B3 su(2^{n_2+2}) 2^{n_2+2}×2^{n_2+2} traceless anti-Hermitian 2^{n_1}

Per summand the basis is a textbook construction:

  • so(N): {E_{ij} − E_{ji} : 1 ≤ i < j ≤ N}.
  • su(N): a fixed traceless anti-Hermitian basis (generalized Gell-Mann is the obvious choice).
  • sp(N): standard basis of anti-Hermitian X with X^T J + J X = 0, with J = [[0, I_N], [-I_N, 0]].

Whatever convention is chosen, it must be fixed and documented — downstream consumers need a stable basis ordering.

The task is to find a basis for the direct sum of these simple Lie algebras.

API sketch

from paulie import get_pauli_string as p

generators = p(["XY", "XZ"], n=4)
basis = generators.get_algebra_basis()
# basis: list of np.ndarray, one per summand,
#   each of shape (dim, N, N) with N the defining-rep size

For a single-summand algebra (n_1 = 0) the list has length 1.

Acceptance criteria

  • get_algebra_basis is exposed at the same level as get_algebra.
  • For every input where get_algebra succeeds, get_algebra_basis returns the corresponding defining-rep matrix basis
  • The algebra basis has the correct dimension and is able to span the lie closure
  • Convention (basis ordering, sign choices, choice of J) is documented in the function's docstring.
  • Unit tests under tests/
  • docs/source/user/classification.rst gets a short example reusing the two examples already on that page.

Out of scope (separate follow-ups)

  • Cartan involutions, induced k/p decomposition, and horizontal CSA per family — needed to feed the recursive-CD pipeline of arXiv:2503.19014. Tab. II of that paper specifies the conventions; matching them in the follow-up will minimize friction.

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions