BlockEncodingReflectionByLCU function

Warning

This documentation refers to the Classic QDK, which has been replaced by the Modern QDK.

Please see https://aka.ms/qdk.api for the API documentation for the Modern QDK.

Namespace: Microsoft.Quantum.Simulation

Package: Microsoft.Quantum.Standard

Encodes an operator of interest into a BlockEncodingReflection.

This constructs a BlockEncodingReflection unitary $U=P\cdot V\cdot P^\dagger$ that encodes some operator $H=\sum_{j}|\alpha_j|U_j$ of interest that is a linear combination of unitaries. Typically, $P$ is a state preparation unitary such that $P\ket{0}_a\sum_j\sqrt{\alpha_j/|\vec\alpha|_2}\ket{j}_a$, and $V=\sum_{j}\ket{j}\bra{j}_a\otimes U_j$.

function BlockEncodingReflectionByLCU (statePreparation : (Qubit[] => Unit is Adj + Ctl), selector : ((Qubit[], Qubit[]) => Unit is Adj + Ctl)) : Microsoft.Quantum.Simulation.BlockEncodingReflection

Input

statePreparation : Qubit[] => Unit is Adj + Ctl

A unitary $P$ that prepares some target state.

selector : (Qubit[],Qubit[]) => Unit is Adj + Ctl

A unitary $V$ that encodes the component unitaries of $H$.

Output : BlockEncodingReflection

A unitary $U$ acting jointly on registers a and s that block- encodes $H$, and satisfies $U'^{-1} = U$.

Remarks

This BlockEncoding implementation gives it the properties of a BlockEncodingReflection.

See Also