double_commutator
double_commutator(op_a, op_b, op_c, sign)
Computes the double-commutator of three operators.
The double-commutator is defined as follows (see also Chapter 13.6, Equation of motion methods, page 479 of [1]; the sign=False case is the symmetric double commutator appearing in Equation (2) of [2]):
If sign is False, it returns
If sign is True, it returns
Operators which support this method must implement the SupportsCommutators protocol.
All three inputs must be of the same operator type. This will also determine the output type.
>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.library import double_commutator
>>> op1 = FermionOperator.from_dict({((True, 0), (False, 0)): 1})
>>> op2 = FermionOperator.from_dict({((False, 0), (True, 0)): 2})
>>> op3 = FermionOperator.from_dict(
... {((True, 0), (False, 0)): 1, ((False, 0), (True, 0)): 2 + 0.5j}
... )
>>> comm = double_commutator(op1, op2, op3, False)
>>> comm = comm.normal_ordered()
>>> canon = comm.simplify()
>>> assert canon == FermionOperator.zero()
[1]
R. McWeeny. Methods of Molecular Quantum Mechanics. 2nd Edition, Academic Press, 1992. ISBN 0-12-486552-6.
[2]
P. J. Ollitrault, A. Miessen, I. Tavernelli. Molecular Quantum Dynamics: A Quantum Computing Perspective. Acc. Chem. Res. 54, 4229-4238 (2021). https://doi.org/10.1021/acs.accounts.1c00514
Parameters
- op_a (T) – the operator above.
- op_b (T) – the operator above.
- op_c (T) – the operator above.
- sign (bool) – the nature of the outer (anti-)commutator as per the definition above.
Returns
The double-commutator as per the definition above.
Return type
T