Documentation

VCVio.EvalDist.TVDist

Total Variation Distance for SPMFs and Monadic Computations #

This file extends the TV distance from PMF (defined in ToMathlib.ProbabilityTheory.TotalVariation) to:

  1. SPMF.tvDist — on sub-probability mass functions (via toPMF)
  2. tvDist — on any monad with HasEvalSPMF (via evalDist)

SPMF.tvDist #

noncomputable def SPMF.tvDist {α : Type u_1} (p q : SPMF α) :

Total variation distance on SPMFs, defined via the underlying PMF (Option α).

Instances For
    @[simp]
    theorem SPMF.tvDist_self {α : Type u_1} (p : SPMF α) :
    p.tvDist p = 0
    theorem SPMF.tvDist_comm {α : Type u_1} (p q : SPMF α) :
    p.tvDist q = q.tvDist p
    theorem SPMF.tvDist_nonneg {α : Type u_1} (p q : SPMF α) :
    0 p.tvDist q
    theorem SPMF.tvDist_triangle {α : Type u_1} (p q r : SPMF α) :
    p.tvDist r p.tvDist q + q.tvDist r
    theorem SPMF.tvDist_le_one {α : Type u_1} (p q : SPMF α) :
    p.tvDist q 1
    @[simp]
    theorem SPMF.tvDist_eq_zero_iff {α : Type u_1} {p q : SPMF α} :
    p.tvDist q = 0 p.toPMF = q.toPMF
    theorem SPMF.tvDist_map_le {α' β : Type w} (f : α'β) (p q : SPMF α') :
    (f <$> p).tvDist (f <$> q) p.tvDist q
    theorem SPMF.tvDist_bind_right_le {α' β : Type w} (f : α'SPMF β) (p q : SPMF α') :
    (p >>= f).tvDist (q >>= f) p.tvDist q

    Monadic tvDist #

    noncomputable def tvDist {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} (mx my : m α) :

    Total variation distance between two monadic computations, defined via their evaluation distributions.

    Instances For
      @[simp]
      theorem tvDist_self {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} (mx : m α) :
      tvDist mx mx = 0
      @[simp]
      theorem tvDist_eq_zero_iff {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} (mx my : m α) :
      tvDist mx my = 0 evalDist mx = evalDist my
      theorem tvDist_comm {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} (mx my : m α) :
      tvDist mx my = tvDist my mx
      theorem tvDist_nonneg {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} (mx my : m α) :
      0 tvDist mx my
      theorem tvDist_triangle {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} (mx my mz : m α) :
      tvDist mx mz tvDist mx my + tvDist my mz
      theorem tvDist_le_one {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} (mx my : m α) :
      tvDist mx my 1
      theorem tvDist_map_le {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} [LawfulMonad m] {β : Type u} (f : αβ) (mx my : m α) :
      tvDist (f <$> mx) (f <$> my) tvDist mx my
      theorem tvDist_bind_right_le {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} [LawfulMonad m] {β : Type u} (f : αm β) (mx my : m α) :
      tvDist (mx >>= f) (my >>= f) tvDist mx my

      TV distance bounds #

      theorem tvDist_le_probEvent_of_probOutput_eq_of_not {m : Type u → Type v} [Monad m] [HasEvalSPMF m] {α : Type u} {mx my : m α} [NeverFail mx] [NeverFail my] (p : αProp) (h_eq : ∀ (x : α), ¬p xPr[= x | mx] = Pr[= x | my]) (h_event_eq : probEvent mx p = probEvent my p) :
      tvDist mx my (probEvent mx p).toReal

      TV distance for bind (left) #

      theorem tvDist_bind_left_le {m : Type u → Type v} [Monad m] [LawfulMonad m] [HasEvalPMF m] {α β : Type u} (mx : m α) (f g : αm β) :
      tvDist (mx >>= f) (mx >>= g) ∑' (a : α), Pr[= a | mx].toReal * tvDist (f a) (g a)
      theorem abs_probOutput_toReal_sub_le_tvDist {m : TypeType v} [Monad m] [HasEvalSPMF m] (game₁ game₂ : m Bool) :
      |Pr[= true | game₁].toReal - Pr[= true | game₂].toReal| tvDist game₁ game₂

      For any Bool computation, the difference of Pr[= true] values is bounded by TV distance.