Documentation

VCVio.EvalDist.Instances.OptionT

Probability Distributions on Potentially Failing Computations #

This file gives an instance to extend a evalDist instance on a monad to one transformed by the OptionT monad transformer.

dt: should add more instances and connecting lemmas

noncomputable instance OptionT.instHasEvalSet (m : Type u → Type v) [Monad m] [HasEvalSet m] :

TODO: fintype version of this lemma

Equations
    @[simp]
    theorem OptionT.support_liftM {α : Type u} (m : Type u → Type v) [Monad m] [HasEvalSet m] (mx : m α) :
    noncomputable instance OptionT.instHasEvalSPMF (m : Type u → Type v) [Monad m] [HasEvalSPMF m] :

    If we have a HasEvalPMF m instance, we can lift it to HasEvalSPMF (OptionT m).

    Equations
      theorem OptionT.support_eq (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} (mx : OptionT m α) :
      noncomputable instance OptionT.instHasEvalFinset (m : Type u → Type v) [Monad m] [HasEvalSPMF m] [HasEvalFinset m] :

      Lift a finSupport instance to OptionT. by just taking preimage under some.

      Equations
        theorem OptionT.finSupport_eq (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} [HasEvalFinset m] [DecidableEq α] (mx : OptionT m α) :
        @[simp]
        theorem OptionT.mem_finSupport_iff (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} [HasEvalFinset m] [DecidableEq α] (mx : OptionT m α) (x : α) :
        x finSupport mx yfinSupport mx.run, some (some x) = some y
        theorem OptionT.evalDist_eq (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} (mx : OptionT m α) :
        evalDist mx = (fun {α : Type u} (x : OptionT m α) => (OptionT.mapM' HasEvalSPMF.toSPMF).toFun α x) mx
        theorem OptionT.probOutput_eq (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} (mx : OptionT m α) (x : α) :
        Pr[=x | mx] = Pr[=some x | mx.run]
        theorem OptionT.probEvent_eq (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} (mx : OptionT m α) (p : αProp) [DecidablePred p] :
        Pr[p | mx] = Pr[fun (x : Option α) => Option.all (fun (b : α) => decide (p b)) x = true | mx.run]
        theorem OptionT.probFailure_eq (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} (mx : OptionT m α) :
        @[simp]
        theorem OptionT.probOutput_lift (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} [LawfulMonad m] (mx : m α) (x : α) :
        @[simp]
        theorem OptionT.probEvent_lift (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} [LawfulMonad m] (mx : m α) (p : αProp) :
        @[simp]
        theorem OptionT.probOutput_liftM (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} [LawfulMonad m] (mx : m α) (x : α) :
        Pr[=x | liftM mx] = Pr[=x | mx]
        @[simp]
        theorem OptionT.probEvent_liftM (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} [LawfulMonad m] (mx : m α) (p : αProp) :
        Pr[p | liftM mx] = Pr[p | mx]
        @[simp]
        theorem OptionT.probFailure_liftM (m : Type u → Type v) [Monad m] [HasEvalSPMF m] {α : Type u} [LawfulMonad m] (mx : m α) :