Documentation

LeanPool.LeanQuantumAlg.Util.TrigPolynomial

Trigonometric polynomials #

A trigonometric polynomial in k real variables is a finite -linear combination of the characters x ↦ exp (i ⟨ω, x⟩), where the frequency vectors ω range over a finite set. These are exactly the trigonometric polynomials, and they are closed under addition, scaling, multiplication by a single character, products, and complex conjugation — the algebraic facts that drive the Fourier representation of the quantum kernel.

This module is quantum-free: it only knows about , finite sums, the real pairing ⟨ω, x⟩ = ∑ i, ω i * x i, and real one-variable trigonometric identities.

def QuantumAlg.freqDot {k : } (ω x : Fin k) :

The real pairing ⟨ω, x⟩ = ∑ i, ω i * x i of a frequency vector with a data point.

Equations
Instances For

    An trigonometric polynomial in k real variables: the function x ↦ ∑_{ω ∈ freqs} coeff ω · exp(i⟨ω, x⟩). The data is a finite set of frequency vectors together with a complex coefficient at each.

    • freqs : Finset (Fin k)

      The finite set of frequency vectors carrying nonzero (or bookkept) coefficients.

    • coeff : (Fin k)

      The complex coefficient at each frequency.

    Instances For
      noncomputable def QuantumAlg.TrigPolynomial.eval {k : } (f : TrigPolynomial k) (x : Fin k) :

      Evaluate an trigonometric polynomial at a data point x.

      Equations
      Instances For
        theorem QuantumAlg.freqDot_add {k : } (ω₁ ω₂ x : Fin k) :
        freqDot (ω₁ + ω₂) x = freqDot ω₁ x + freqDot ω₂ x

        The pairing is additive in the frequency argument.

        theorem QuantumAlg.freqDot_neg {k : } (ω x : Fin k) :
        freqDot (-ω) x = -freqDot ω x

        The pairing negates with the frequency argument.

        theorem QuantumAlg.freqDot_add_right {k : } (ω x₁ x₂ : Fin k) :
        freqDot ω (x₁ + x₂) = freqDot ω x₁ + freqDot ω x₂

        The pairing is additive in the data argument.

        theorem QuantumAlg.freqDot_comm {k : } (ω x : Fin k) :
        freqDot ω x = freqDot x ω

        The pairing is symmetric.

        The zero trigonometric polynomial (empty frequency set).

        Equations
        Instances For
          @[simp]
          theorem QuantumAlg.TrigPolynomial.eval_zero {k : } (x : Fin k) :
          zero.eval x = 0

          Scale an trigonometric polynomial by a complex constant.

          Equations
          Instances For
            theorem QuantumAlg.TrigPolynomial.eval_smul {k : } (c : ) (f : TrigPolynomial k) (x : Fin k) :
            (smul c f).eval x = c * f.eval x
            noncomputable def QuantumAlg.TrigPolynomial.add {k : } (f g : TrigPolynomial k) :

            Sum of two trigonometric polynomials: union of frequencies, with guarded coefficients added.

            Equations
            Instances For
              theorem QuantumAlg.TrigPolynomial.eval_add {k : } (f g : TrigPolynomial k) (x : Fin k) :
              (f.add g).eval x = f.eval x + g.eval x
              noncomputable def QuantumAlg.TrigPolynomial.expMul {k : } (a : Fin k) (f : TrigPolynomial k) :

              Multiply an trigonometric polynomial by the character e^{i⟨a,x⟩}: shifts every frequency by a and leaves the coefficients (re-indexed) unchanged.

              Equations
              Instances For
                theorem QuantumAlg.TrigPolynomial.eval_expMul {k : } (a : Fin k) (f : TrigPolynomial k) (x : Fin k) :
                (expMul a f).eval x = Complex.exp (Complex.I * (freqDot a x)) * f.eval x
                noncomputable def QuantumAlg.TrigPolynomial.sum {k : } {ι : Type u_1} (s : Finset ι) (F : ιTrigPolynomial k) :

                A finite sum of trigonometric polynomials: frequencies union over the index, with coefficients added.

                Equations
                Instances For
                  theorem QuantumAlg.TrigPolynomial.eval_sum {k : } {ι : Type u_1} (s : Finset ι) (F : ιTrigPolynomial k) (x : Fin k) :
                  (sum s F).eval x = is, (F i).eval x
                  noncomputable def QuantumAlg.TrigPolynomial.mul {k : } (f g : TrigPolynomial k) :

                  Product of two trigonometric polynomials: realised as the sum, over f's frequencies, of g shifted by that frequency and scaled by f's coefficient.

                  Equations
                  Instances For
                    theorem QuantumAlg.TrigPolynomial.eval_mul {k : } (f g : TrigPolynomial k) (x : Fin k) :
                    (f.mul g).eval x = f.eval x * g.eval x

                    Complex conjugate of an trigonometric polynomial: negate frequencies, conjugate coefficients.

                    Equations
                    Instances For
                      noncomputable def QuantumAlg.TrigPolynomial.coeffAt {k : } (f : TrigPolynomial k) (ω : Fin k) :

                      The canonical coefficient of an trigonometric polynomial at a frequency: its (guarded) contribution. Two trigonometric polynomials with the same values have the same canonical coefficients (coeffAt_eq_of_eval_eq).

                      Equations
                      Instances For
                        theorem QuantumAlg.freqDot_smul_single {k : } (ω : Fin k) (t : ) (j : Fin k) :
                        freqDot ω (t Pi.single j 1) = t * ω j

                        Pairing against a single scaled basis frequency picks out one coordinate.

                        theorem QuantumAlg.exp_I_real_inj {a b : } (h : ∀ (t : ), Complex.exp (Complex.I * ↑(t * a)) = Complex.exp (Complex.I * ↑(t * b))) :
                        a = b

                        If t ↦ exp(i t a) and t ↦ exp(i t b) agree for all real t, then a = b.

                        noncomputable def QuantumAlg.chiHom {k : } (ω : Fin k) :

                        The character x ↦ exp(i⟨ω,x⟩) as a monoid homomorphism from the additive group of data points (written multiplicatively) to .

                        Equations
                        Instances For
                          @[simp]
                          theorem QuantumAlg.chiHom_apply {k : } (ω : Fin k) (y : Multiplicative (Fin k)) :

                          Distinct frequencies give distinct characters.

                          theorem QuantumAlg.expSum_coeff_zero_of_eval_zero {k : } {s : Finset (Fin k)} {c : (Fin k)} (h : ∀ (x : Fin k), ωs, c ω * Complex.exp (Complex.I * (freqDot ω x)) = 0) (ω : Fin k) :
                          ω sc ω = 0

                          Uniqueness of trigonometric-polynomial coefficients. A vanishing finite combination of the distinct characters has all coefficients zero (Dedekind's independence of characters).

                          theorem QuantumAlg.TrigPolynomial.coeffAt_eq_of_eval_eq {k : } {f g : TrigPolynomial k} (h : ∀ (x : Fin k), f.eval x = g.eval x) (ω : Fin k) :
                          f.coeffAt ω = g.coeffAt ω

                          Two trigonometric polynomials with the same values have the same canonical coefficients.

                          The canonical coefficient of a conjugated trigonometric polynomial negates the frequency and conjugates.

                          Frequency-set characterizations (for tracking which frequencies appear) #

                          @[simp]
                          @[simp]
                          theorem QuantumAlg.TrigPolynomial.expMul_freqs {k : } (a : Fin k) (f : TrigPolynomial k) :
                          (expMul a f).freqs = Finset.image (fun (ω : Fin k) => ω + a) f.freqs
                          @[simp]
                          theorem QuantumAlg.TrigPolynomial.conj_freqs {k : } (f : TrigPolynomial k) :
                          f.conj.freqs = Finset.image (fun (ω : Fin k) => -ω) f.freqs
                          @[simp]
                          theorem QuantumAlg.TrigPolynomial.sum_freqs {k : } {ι : Type u_1} (s : Finset ι) (F : ιTrigPolynomial k) :
                          (sum s F).freqs = s.biUnion fun (i : ι) => (F i).freqs
                          theorem QuantumAlg.TrigPolynomial.mul_freqs {k : } (f g : TrigPolynomial k) :
                          (f.mul g).freqs = f.freqs.biUnion fun (ω : Fin k) => Finset.image (fun (ν : Fin k) => ν + ω) g.freqs

                          Embedding into more variables (for products of sums in disjoint variable blocks) #

                          theorem QuantumAlg.freqDot_append_left {m n : } (ω x : Fin m) (y : Fin n) :

                          The pairing of left-block-supported frequencies sees only the first block.

                          theorem QuantumAlg.freqDot_append_right {m n : } (ω : Fin n) (x : Fin m) (y : Fin n) :

                          The pairing of right-block-supported frequencies sees only the second block.

                          noncomputable def QuantumAlg.TrigPolynomial.embedL {m n : } (f : TrigPolynomial m) :

                          Embed an m-variable trigonometric polynomial into m + n variables on the first block.

                          Equations
                          Instances For
                            noncomputable def QuantumAlg.TrigPolynomial.embedR {m n : } (f : TrigPolynomial n) :

                            Embed an n-variable trigonometric polynomial into m + n variables on the second block.

                            Equations
                            Instances For
                              theorem QuantumAlg.TrigPolynomial.eval_embedL {m n : } (f : TrigPolynomial m) (x : Fin m) (y : Fin n) :
                              theorem QuantumAlg.TrigPolynomial.eval_embedR {m n : } (f : TrigPolynomial n) (x : Fin m) (y : Fin n) :
                              @[simp]
                              @[simp]

                              One-variable parameter-shift identity #

                              theorem QuantumAlg.trig_parameter_shift (a b c θ : ) :
                              deriv (fun (t : ) => a + b * Real.cos t + c * Real.sin t) θ = (a + b * Real.cos (θ + Real.pi / 2) + c * Real.sin (θ + Real.pi / 2) - (a + b * Real.cos (θ - Real.pi / 2) + c * Real.sin (θ - Real.pi / 2))) / 2

                              Parameter-shift identity. The derivative of a + b cos θ + c sin θ equals the symmetric π/2-shifted finite difference (C(θ+π/2) - C(θ-π/2))/2.