FermionicEvolutionSynthesis

class FermionicEvolutionSynthesis

Bases: ABC

The interface for fermion-to-fermion synthesis of an Evolution gate.

An implementation of this interface rewrites the time evolution \(e^{-i t H}\) carried by an Evolution gate into a FermionicCircuit of smaller FermionicGate instances. Both sides of that rewrite live in fermionic space, which is what distinguishes this from the fermion-to-qubit synthesis performed later by F2QSynthesis: the fermionic structure of H (in particular its groups (see Group operator terms: use the operator structure)) survives and is still available to that later stage.

Important

This fermion-to-fermion step is optional. An Evolution gate does not need to be broken down in fermionic space at all: the fermion-to-qubit stage can map and synthesize it directly, however many terms its operator holds. Splitting it up first is a choice, made because the resulting factors are individually cheaper to implement, or because the split exposes structure (such as mutually commuting groups) that the later stage can exploit.

Because the fermion-to-fermion and fermion-to-qubit steps compose, an evolution may end up approximated at either level, at both, or at neither. Where an approximation is involved at both, the accuracy of the result is governed by the weaker of the two.

Note

Qiskit’s EvolutionSynthesis is the closest analogue, but it belongs to the qubit layer: it synthesizes a PauliEvolutionGate into a QuantumCircuit, after the operator has already been mapped.

Methods

abstractmethod synthesize(gate)

Synthesizes the provided Evolution gate.

Parameters:

gate (Evolution) – the gate to synthesize. Its operator is the Hermitian operator \(H\) and its params[0] the evolution time \(t\) of \(e^{-i t H}\).

Returns:

A FermionicCircuit on gate.num_modes modes implementing the evolution.

Return type:

FermionicCircuit