Skip to content

workbench_algorithms.subroutines.antisymmetrization

Qubricks for antisymmetrization.

Antisymmetrizer

Antisymmetrizer(prep_qbk, prob_knob=None, **kwargs)

Bases: Qubrick

Qubrick to antisymmetrize a register of qubits.

Parameters:

Name Type Description Default
prep_qbk Qubrick

A state preparation Qubrick.

required
prob_knob (Optional, int)

A value to use which determines the number of qubits to use per seed register, which influences the probability of needing to restart. Defaults to None, in which case, a default value which ensures >= 1/2 probability of success is used.

None
**kwargs dict[str, Any]

Other arguments to pass to the init.

{}

compute

compute(system_reg: Qubits, ctrl: Qubits | int = 0)

Circuit for preparation of an antisymmetrized state.

The antisymmetrization procedure works as follows:

  1. We prepare an auxiliary "seed" register in an equal superposition state.
  2. We employ a sorting network on the seed register, keeping a record of all permutations made during the sort on another "record" register.
  3. The seed register is measured in order to post-select on the collision-free subspace. If we observe a collision, we go back to step 1. If not, continue.
  4. We apply Pauli Zs on each record qubit.
  5. We use the record to reverse the sorting operations on the input system register, resulting in an equal superpotision of all permutations of the input state.
  6. Because we applied Pauli Zs on each record qubit prior to the sort reversal, we also phase each permutation state according to its parity.

The above prepares the desired antisymmetrized state.

Parameters:

Name Type Description Default
system_reg Qubits

Register to prepare antisymmetrized state on.

required
ctrl (int, Qubits)

Control register for the routine. Defaults to 0.

0