workbench_algorithms.subroutines.antisymmetrization
Qubricks for antisymmetrization.
Antisymmetrizer
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
Circuit for preparation of an antisymmetrized state.
The antisymmetrization procedure works as follows:
- We prepare an auxiliary "seed" register in an equal superposition state.
- We employ a sorting network on the seed register, keeping a record of all permutations made during the sort on another "record" register.
- 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.
- We apply Pauli Zs on each record qubit.
- 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.
- 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
|