Maxima Program

Clifford.mac (v1.00)

Version note

This is the first public version of a small maxima program Clifford.mac, which consists of functions defining the non-commutative product && of the gamma matrices and reducing polynomials of the gamma matrices to the standard forms. All calculations are symbolic and do not utilize any explicit matrix prepresentation of the gamma matrices.

This package requires the following files. If you put these in a directory different from the main file Clifford_v1_00_pub.mac, you need to add it to file_search_maxima or change the value of the variable LibDir in the main file and SymbolicTensorCalculus file.

Global symbols/variables

  • "&&": the infix operator representing the non-commutative product of gamma matrices.
  • Gamm : symbol for the gamma matrix.

    Each gamma matrix is expressed as Gamm[a_1,..., a_k], which is antisymmetric w.r.t. the indices a_1, ..., a_k.

  • eta[a,b] : the symmetric metric tensor of the Clifford algebra.
  • dim : the dimension of the base space of the clifford algebra.
  • You must avoid using names starting from _ as the index of Gamm and eta, in order to avoid erroneous results caused by the confusion of the local variables of function definitions and these indices.
  • Example:
  • eta[s1,s2] * Gamm[a, s1] && Gamm[b, s2] (=$ \eta^{s_1 s_2}\Gamma_{a\, s_1} \Gamma_{b\, s_2}$)

Common abbreviation

  • dm = a value of the dimension dim. It can be a symbol.
  • A name whose first character is 'G' is regarded as a non-commutative variable.
  • An index whose first character is 's' is regarded as a summation index when the function 'gContraction' or 'sumsimp' is applied.

Main procedures

  • X && Y = "&&"(X,Y): the operator representing the non-Abelian product of two expressions. It is bilinear w.r.s. Abelian coefficients and Abelian && X = X && Abelian = Abelian *X.
  • CLsimplify(expr [,dm])

    expresses ‹ expr › as a linear combination of the standard basis Gamm[a], ..., Gamm[a_1, ..., a_N] of the Clifford algebra.

  • dm : an option parameter to specify the value of dim.
  • gContraction(expr [,dm])

    eliminates metric tensors with summation indices, such as eta[s,s], eta[s, a]. by executing the summation symboically.

  • sumsimp(expr [,sx])

    replaces the summation indecies sa, s1, ... in each term of ‹ expr › by a canonical set such as ss1, ss2, ...

  • sx: an option variable name to be used insted of ss.
  • Gsort(expr [,dm]) ⇒ dictobj

    collects terms containing gamma matrices of the same rank. The result is represented by a dict, unless the result has a single term, in which case that single term is given as dictobj.

  • dictobj = dict[ [0]=[expr_0], ..., [r]=[expr_r],[all]=[expr_total]], where the ‹ expr_i › (i=0,1,...,r) is the part containing the gamma matrices of rank i, and ‹ expr_total › is the whole expression.
  • Example:

    expr0 : Gamm[s1] && Gamm[a] && Gamm[s2] && Gamm[b]$
    expr1: expand(CLsimplify(expr0));
    (%o) eta[a,s1]*eta[b,s2] -eta[a,b]*eta[s1,s2]+eta[a,s2]*eta[b,s1]
    - eta[s1,s2]*Gamm[a,b] -eta[a,b]*Gamm[s1,s2] -eta[a,s1]*Gamm[b,s2]
    -eta[b,s1]*Gamm[a,s2] +eta[a,s2]*Gamm[b,s1]+ eta[b,s1]*Gamm[a,s2]
    -Gamm[a,b,s1,s2]
    expr2: factor(gContraction(eta[s1,s2]*expr1));
    (%o) (2-dim)*( eta[a,b] + Gamm[a,b] )
    dict: Gsort(expr2)$
    (%o) ranklist = [0, 2, all]
    showdict(dict)
    (%o) [ [all]=[(2-dim)*eta[a,b]+(2-dim)*Gamm[a,b]],
    [0]=[(2-dim)*eta[a,b]], [2]=[(2-dim)*Gamm[a,b]] ]

Special procedures

  • symmetrize(expr, varlist, type) ⇒ new expr (anti-)symmetrized w.r.t. the specified variable set.
  • expr = any algebraic expression.
  • varlist = the variable list to be (anti-)symmetrized.
  • type = s/a or +1/-1: s or +1 for symmetrization, a or -1 for anti-symmetrization.
  • Example:

    expr0 : x *sin(y)$
    symmetrize(expr0, [x,y], a);
    (%o) x*sin(y) - y*sin(x)

  • symmetrizeT(expr, T, subindexlist, type) ⇒ new expr (anti-)symmetrized w.r.t. the specified index set.
  • expr = any expression which is a polynomial of symbolic array/function T[...]'s.
  • T = the name of the symbolic array/function.
  • subindexlist = a list of sub indices of T to be (anti-)symmetrized.
  • type = s/a or +1/-1: s or +1 for symmetrization, a or -1 for anti-symmetrization.
  • Example:

    expr0 : a*Gamm[a] && Gamm[b]$
    factor(symmetrizeT(expr0,Gamm, [a,b], -1));
    (%o) a*(Gamm[a] && Gamm[b] - Gamm[b] && Gamm[a])
    factor(symmetrizeT(expr0,G, [a,b], -1));
    (%o) 0
    factor(symmetrizeT(expr0,G, [a,b], +1));
    (%o) a*Gamm[a] && Gamm[b]