Suzuki Trotter
The suzuki_trotter
function produces the Suzuki-Trotter product for a given order and repetitions. Given a Hamiltonian as a sum of Pauli strings
the Suzuki-Trotter formula of order \(o\) and repetitions \(r\) approximates the Hamiltonian simulation \(U = e^{-iHt}\) according to the following:
-
Each order \(ST^{(o)}(H,t)\) is defined recursively:
- The first order is : \(ST^{(1)}(H,t) = \Pi^L_{k=1} e^{-iH_k t}\)
- The second order is : \(ST^{(2)}(H,t) = \Pi^L_{k=1} e^{-iH_k t/2} \Pi^1_{k=L} e^{-iH_k t/2}\)
- Recursion formula for order \(2m\) with \(m>1\) is given in Eq. (5) of Ref. [2]
-
For a given order, repetitions refers to
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