snegOrderedQ

◼ snegOrderedQ[op1[i1], op2[i2]] returns True if operators op1[i1] and op2[i2] are canonically ordered, and False otherwise.

◼ Predefined snegOrderedQ functions exist in the case of fermion operators for ordering=EMPTY and ordering=SEA. Optionally, the user may override the default reordering by redefining snegOrderedQ, or even by implementing new ordering types.  See also ordering.

◼ By default, sneg attempts to put the operators in the canonical normal order, i.e the creation operators are moved in front of the annihilation operators. In this context, annihilation operators are defined to be those operators that yield zero when applied to the vacuum state, irrespective of the first index (CR or AN): the suitable behavior must be defined using iscreation and isannihilation functions. ordering defines what the relevant vacuum state is.

◼ For ordering=EMPTY, the canonical normal order coincides with the "naive canonical order": particle-creation (first index CR) operators are shifted in front of the particle-annihilation (first index AN) operators.

◼ For ordering=SEA, the reordering depends on what is known about the creation/annihilation nature of the operators. If operator type is known (see isannihilation and iscreation), true canonical ordering is used. If the type is unknown, "naive canonical order" is used.

◼ For bosonic and Majorana operators, canonical normal order is used (sorting according to function OrderedQ).

◼ See also: overrideSEA, ordering, acmt, cmt, isannihilation, iscreation.

Further examples

Load sneg

<< sneg`sneg`;

Let c and d be fermionic operators; for c the vacuum state is empty, for d the vacuum state is a Fermi sea.

snegfermionoperators[c, d]
ordering[c] = EMPTY;
ordering[d] = SEA;

Automatic reordering to the naive canonical order.

nc[c[AN], c[CR]]
nc[d[AN], d[CR]]

For generic momentum k we do not know if d is creation or annihilation operator, therefore we also perform reordering to the naive canonical order.

nc[c[AN, k], c[CR, k]]
nc[d[AN, k], d[CR, k]]
nc[c[AN, k, σ], c[CR, k, σ]]
nc[d[AN, k, σ], d[CR, k, σ]]

Reordering allows, for example, that the following simplification is performed. Without naive reordering, the operator string would be returned unmodified.

nc[d[AN, k], d[CR, k], d[AN, k]]
nc[d[CR, k], d[AN, k], d[CR, k]]

Using snegAssuming, additional assumption about wavenumbers k1 and k2 can be imposed, thereby enforcing the reordering in the canonical normal form.

isannihilation[d[AN, k1]]
iscreation[d[CR, k2]]
op = nc[d[AN, k1], d[CR, k2]]
snegAssuming[{k1 /: k1 < 0 = True, 
k2 /: k2 < 0 = 
            True}, Print[op]];

Test reordering for bosonic operators

snegbosonoperators[a]
nc[a[CR], a[AN]]
nc[a[AN], a[CR]]

Test reordering for Majorana operators

snegmajoranaoperators[ξ]
nc[ξ[1], ξ[2]]
nc[ξ[2], ξ[1]]