Documentation

LeanPool.LeanQuantumAlg.Primitives.LCU

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.

def QuantumAlg.lcuProj {a : } (i : Fin (2 ^ a)) :

The control-basis projector |i><i| on the a-qubit control register.

Equations
Instances For
    noncomputable def QuantumAlg.lcuSelect {a n : } (U : Fin (2 ^ a)Gate n) :

    The select operator SELECT = sum_i |i><i| ⊗ U_i [Lin22, hermfunc.tex:492].

    Equations
    Instances For
      def QuantumAlg.lcuNorm {a : } (alpha : Fin (2 ^ a)) :

      The coefficient 1-norm lambda = sum_i alpha_i for nonnegative coefficients.

      Equations
      Instances For
        noncomputable def QuantumAlg.lcuWalk {a n : } (V : Gate a) (U : Fin (2 ^ a)Gate n) :

        The LCU walk operator W = (V† ⊗ I) · SELECT · (V ⊗ I).

        Equations
        Instances For
          theorem QuantumAlg.lcuWalk_eq_sum {a n : } (V : Gate a) (U : Fin (2 ^ a)Gate n) :
          lcuWalk V U = i : Fin (2 ^ a), (V.conjTranspose.op * lcuProj i * V.op).tensor (U i).op

          The LCU walk operator expands into a control-block sum.

          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)) :
          lcuWalk V U (prodEquiv (0, s)) (prodEquiv (0, t)) = (↑(lcuNorm alpha))⁻¹ * i : Fin (2 ^ a), (alpha i) * (U i).op s t

          LCU block encoding [Lin22, hermfunc.tex:531].