Kronecker Products and Dirac Matrices in Python

Photo by Vlado Paunovic on Unsplash

Today, let’s play with Kronecker products in SymPy, which is a method to create matrices out of blocks of smaller matrices. The classical example for me are the Dirac gamma matrices, so let’s first review how they are defined and what are their properties. After that, we will implement them in SymPy and verify the stated properties.

The gamma matrices

The Dirac gamma matrices are a set of four 4x4 matrices used in relativistic quantum mechanics, particularly in the formulation of the Dirac equation, which describes the behavior of spin-1/2 particles such as electrons. They are denoted by the symbol γ^μ, where μ = 0, 1, 2, 3. The γ^μ matrices can be written in terms of the Pauli matrices σᵢ as:

where I₂ is the 2x2 identity matrix and σᵢ are the Pauli matrices. We can also write the gamma matrices in terms of Kronecker products:

These expressions show that the gamma matrices are 4x4 matrices constructed from Kronecker products of 2x2 matrices. The first gamma matrix, γ⁰, is a diagonal matrix with the Pauli matrix σ₃ in the top left block and minus the Pauli matrix σ₃ in the bottom right block. The remaining gamma matrices, γ^i, are off-diagonal matrices with zeros in the top left and bottom right blocks and the Pauli matrix σᵢ in the bottom left and top right blocks. The Dirac gamma matrices have several important properties:

They are Hermitian 4x4 matrices and they satisfy the Clifford algebra:

where g^μν is the Minkowski metric and {} is the anticommutator.

Furthermore, they satisfy

as well as

where I₄ is the 4x4 identity matrix and the μ index appearing twice implies a sum over μ (Einstein sum convention). The downstairs version γ_μ is defined by applying the Minkowski metric:

(again, Einstein sum convention, now over ν).

Ok, that’s enough to play with. Let’s see how we can define and verify all that in SymPy.

Implementation and verification with SymPy

First, define the Pauli matrices:

from sympy import *
σ1 = Matrix([[0, 1], [1, 0]])
σ2 = Matrix([[0, -I], [I, 0]])
σ3 = Matrix([[1, 0], [0, -1]])

Then we can use the kronecker_product function and the eye function from sympy to define the gamma matrices:

γ = [
    kronecker_product(σ3, eye(2)),
    I * kronecker_product(σ2, σ1),
    I * kronecker_product(σ2, σ2),
    I * kronecker_product(σ2, σ3)
]

Now let’s see how these matrices look like:

for i, γ_ in enumerate(γ):
    display(Symbol(f'\\gamma_{i}'), γ_)

Next, we check the anticommutation property defining the Clifford algebra:

g = diag(1, -1, -1, -1)
g
for μ in range(4):
    for ν in range(μ+1):
        anticomm = γ[μ] @ γ[ν] + γ[ν] @ γ[μ]
        print(f'μ = {μ}, ν = {ν}:')
        display(Eq(anticomm, 2*g[μ, ν]*eye(4), evaluate=False))
etc.

Next, let’s check that

Eq(
    I * γ[0] @ γ[1] @ γ[2] @ γ[3],
    kronecker_product(σ1, eye(2)),
    evaluate=False
)

Finally, we will verify that

result = zeros(4, 4)
for μ in range(4):
    for ν in range(4):
        result += g[μ, ν] * γ[μ] @ γ[ν]
        
Eq(
    result,
    4 * eye(4),
    evaluate=False
)

Conclusion

In conclusion, this article explored Kronecker products and Dirac matrices using SymPy, which is a Python library for symbolic mathematics. The Dirac gamma matrices, which are used in relativistic quantum mechanics, were defined and their properties were explained. The gamma matrices were then implemented in SymPy using the Kronecker product function.