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
Low & Chuang (2019) Hamiltonian Simulation by Qubitization.
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()