Documentation

VCVio.CryptoFoundations.Asymptotics.Negligible

Negligible Functions #

This file defines a simple wrapper around SuperpolynomialDecay for functions ℕ → ℝ≥0∞, as this is usually the situation for cryptographic reductions.

Main Results #

def negligible (f : ENNReal) :

A function f is negligible if it decays faster than any polynomial function.

Instances For
    @[simp]
    Instances For
      theorem negligible_of_zero {f : ENNReal} (hf : ∀ (n : ), f n = 0) :
      theorem negligible_of_le {f g : ENNReal} (hfg : ∀ (n : ), f n g n) (hg : negligible g) :

      Negligibility is monotone: if f ≤ g pointwise and g is negligible, then f is.

      theorem negligible_add {f g : ENNReal} (hf : negligible f) (hg : negligible g) :

      Sum of two negligible functions is negligible.

      theorem negligible_const_mul {f : ENNReal} (hf : negligible f) {c : ENNReal} (hc : c ) :
      negligible fun (n : ) => c * f n

      Constant multiple of a negligible function is negligible (requires c ≠ ⊤ because multiplication by is discontinuous at 0 in ℝ≥0∞).

      theorem negligible_sum {ι : Type u_1} {s : Finset ι} {f : ιENNReal} (h : is, negligible (f i)) :
      negligible fun (n : ) => is, f i n

      A finite sum of negligible functions is negligible.

      theorem negligible_pow_mul {f : ENNReal} (hf : negligible f) (d : ) :
      negligible fun (n : ) => n ^ d * f n

      If f is negligible, then fun n => (↑n)^d * f n is negligible for any fixed d. Absorbs polynomial powers of the parameter into the superpolynomial decay.

      theorem negligible_polynomial_mul {f : ENNReal} (hf : negligible f) (p : Polynomial ) :
      negligible fun (n : ) => (Polynomial.eval n p) * f n

      If f is negligible, then fun n => ↑(p.eval n) * f n is negligible for any polynomial p. This is the key lemma for handling polynomial-loss security reductions.