BlockEncoding.qubitization#

BlockEncoding.qubitization() BlockEncoding[source]#

Returns a BlockEncoding representing the qubitization walk operator.

For a block-encoded Hermitian operator \(A\) with normalization factor \(\alpha\), this method returns a BlockEncoding of the qubitization walk operator \(W\) satisfying \(W^k=T_k(A/\alpha)\) where \(T_k\) is the \(k\)-Chebyshev polynomial of the first kind.

The action of \(W\) partitions the Hilbert space into a direct sum of two-dimensional invariant subspaces giving it the name “qubitization”. For an eigenstate \(\ket{\lambda}\) of \(A\) with eigenvalue \(\lambda\), the two-dimensional space is spanned by

  • \(\ket{\phi_1} = \ket{0}_a\ket{\lambda}\)

  • \(\ket{\phi_2} = \frac{(W-\lambda/\alpha\mathbb I)\ket{\phi_1}}{\sqrt{1-(\lambda/\alpha)^2}}\)

In this subspace, \(W\) implements a Pauli-Y rotaion by angle \(\theta=-2\arccos(\lambda/\alpha)\), i.e., \(W=e^{i\arccos(\lambda/\alpha)Y}\).

If the block-encoding unitary \(U\) is Hermitian (i.e., \(U^2=\mathbb I\)), then \(W=R U\) where \(R = (2\ket{0}_a\bra{0}_a - \mathbb I)\) is the reflection around the state \(\ket{0}_a\) of the ancilla variables. Otherwise, \(W = R \tilde{U}\) where \(\tilde{U} = (H \otimes \mathbb I)(\ket{0}\bra{0} \otimes U) + (\ket{1}\bra{1} \otimes U^{\dagger})(H \otimes \mathbb I)\) is a Hermitian block-encoding of \(A\) requiring one additional ancilla qubit.

Returns:
BlockEncoding

A new BlockEncoding instance representing the qubitization walk operator.

Notes

  • Normalization: The resulting block-encoding maintains the same scaling factor \(\alpha\) as the original.

References

Examples

Define a block-encoding and apply the qubitization transformation.

from qrisp.block_encodings import BlockEncoding
from qrisp.operators import X, Y, Z

H = X(0)*Y(1) + 0.5*Z(0)*X(1)
BE = BlockEncoding.from_operator(H)
BE_walk = BE.qubitization()