Linear combination of unitaries (LCU) #
The LCU primitive block-encodes a linear combination of unitaries into a larger operator acting on an ancilla control register tensored with the system [Lin22, hermfunc.tex:531].
The SELECT sum and the walk operator are HilbertOperators: they are linear
operators used inside a block encoding, not themselves declared as unitary
Gates in this file.
noncomputable def
QuantumAlg.lcuSelect
{a n : ℕ}
(U : Fin (2 ^ a) → Gate n)
:
HilbertOperator (a + n)
The select operator SELECT = sum_i |i><i| ⊗ U_i [Lin22, hermfunc.tex:492].
Equations
- QuantumAlg.lcuSelect U = ∑ i : Fin (2 ^ a), (QuantumAlg.lcuProj i).tensor (U i).op
Instances For
noncomputable def
QuantumAlg.lcuWalk
{a n : ℕ}
(V : Gate a)
(U : Fin (2 ^ a) → Gate n)
:
HilbertOperator (a + n)
The LCU walk operator W = (V† ⊗ I) · SELECT · (V ⊗ I).
Equations
- QuantumAlg.lcuWalk V U = V.conjTranspose.op.tensor 1 * QuantumAlg.lcuSelect U * V.op.tensor 1
Instances For
theorem
QuantumAlg.LinearCombinationOfUnitaries.main
{a n : ℕ}
(V : Gate a)
(U : Fin (2 ^ a) → Gate n)
(alpha : Fin (2 ^ a) → ℝ)
(halpha : ∀ (i : Fin (2 ^ a)), 0 ≤ alpha i)
(hlam : 0 < lcuNorm alpha)
(hV : ∀ (i : Fin (2 ^ a)), V.op i 0 = ↑√(alpha i / lcuNorm alpha))
(s t : Fin (2 ^ n))
:
LCU block encoding [Lin22, hermfunc.tex:531].