Skip to content

Suzuki Trotter

View on GitHub Experiment in the IDE

The suzuki_trotter function produces the Suzuki-Trotter product for a given order and repetitions. Given a Hamiltonian as a sum of Pauli strings

H=k=1LαkHk,

the Suzuki-Trotter formula of order o and repetitions r approximates the Hamiltonian simulation U=eiHt according to the following:

  • Each order ST(o)(H,t) is defined recursively:

    • The first order is : ST(1)(H,t)=Πk=1LeiHkt

    • The second order is : ST(2)(H,t)=Πk=1LeiHkt/2Πk=L1eiHkt/2

    • Recursion formula for order 2m with m>1 is given in Eq. (5) of Ref. [2]

  • For a given order, repetitions refers to

ST(o,r)(H,t)=[ST(o)(H,t/r)]r.

Function: suzuki_trotter

Arguments:

  • pauli_operator: CArray[PauliTerm]

  • evolution_coefficient: CReal

  • order: CInt,

  • repetitions: CInt,

  • qbv: QArray[QBit]

Example

from classiq import *


@qfunc
def main(a: CReal, x: CReal, qba: Output[QArray[QBit]]):
    allocate(3, qba)
    suzuki_trotter(
        [
            PauliTerm(pauli=[Pauli.X, Pauli.X, Pauli.Z], coefficient=a),
            PauliTerm(pauli=[Pauli.Y, Pauli.X, Pauli.Z], coefficient=0.5),
        ],
        evolution_coefficient=x,
        order=1,
        repetitions=1,
        qbv=qba,
    )


qmod = create_model(main, out_file="suzuki_trotter")
qprog = synthesize(qmod)

References

[1] N. Hatano and M. Suzuki, Finding Exponential Product Formulas of Higher Orders, (2005). https://arxiv.org/abs/math-ph/0506007

[2] Childs, et al., Toward the first quantum simulation with quantum speedup, (2018). https://arxiv.org/abs/1711.10980