Documentation

VCVio.OracleComp.ProbComp

Discrete compatibility laws for uniform oracle sampling #

Finite support and discrete output-probability equations for the uniform sampling operations.

theorem ProbComp.probOutput_uniformFin_eq_div (n : ) (m : Fin (n + 1)) :
Pr[= m | $[0..n]] = 1 / (n + 1)
@[simp]
theorem ProbComp.probOutput_uniformFin (n : ) (m : Fin (n + 1)) :
Pr[= m | $[0..n]] = (n + 1)⁻¹
@[simp]
theorem ProbComp.probEvent_uniformFin (n : ) (p : Fin (n + 1)Prop) [DecidablePred p] :
probEvent $[0..n] p = (Fin.countP fun (i : Fin (n + 1)) => decide (p i)) / ↑(n + 1)
@[simp]
theorem ProbComp.probOutput_uniformRange (n m : ) (k : Fin (m + 1)) (h : n < m) :
Pr[= k | uniformRange n m h] = if n k then (m - n + 1)⁻¹ else 0
@[simp]
theorem ProbComp.finSupport_uniformRange (n m : ) (h : n < m) :
@[simp]
theorem ProbComp.probEvent_uniformRange (n m : ) (p : Fin (m + 1)Prop) [DecidablePred p] (h : n < m) :
probEvent (uniformRange n m h) p = {x : Fin (m + 1) | n x p x}.card / (m - n + 1)
@[simp]
theorem ProbComp.probOutput_uniformSelectList {α : Type} [DecidableEq α] (xs : List α) (x : α) :
Pr[= x | $xs] = (List.count x xs) / xs.length
@[simp]
theorem ProbComp.probEvent_uniformSelectList {α : Type} (xs : List α) (p : αProp) [DecidablePred p] :
probEvent ($xs) p = (List.countP (fun (b : α) => decide (p b)) xs) / xs.length
@[simp]
theorem ProbComp.finSupport_uniformSelectVector {α : Type} {n : } (xs : Vector α (n + 1)) [DecidableEq α] :
@[simp]
theorem ProbComp.probOutput_uniformSelectVector {α : Type} {n : } (xs : Vector α (n + 1)) [DecidableEq α] (x : α) :
Pr[= x | $!xs] = (Vector.count x xs) / (n + 1)
@[simp]
theorem ProbComp.probEvent_uniformSelectVector {α : Type} {n : } (xs : Vector α (n + 1)) (p : αProp) [DecidablePred p] :
probEvent ($xs) p = (List.countP (fun (b : α) => decide (p b)) xs.toList) / (n + 1)
@[simp]
theorem ProbComp.probOutput_uniformSelectListVector {α : Type} {n : } (xs : List.Vector α (n + 1)) [DecidableEq α] (x : α) :
Pr[= x | $!xs] = (List.count x xs.toList) / (n + 1)
@[simp]
theorem ProbComp.probEvent_uniformSelectListVector {α : Type} {n : } (xs : List.Vector α (n + 1)) (p : αProp) [DecidablePred p] :
probEvent ($!xs) p = (List.countP (fun (b : α) => decide (p b)) xs.toList) / (n + 1)
@[simp]
theorem ProbComp.probOutput_uniformSelectFinset {α : Type} (s : Finset α) [DecidableEq α] (x : α) :
Pr[= x | $s] = if x s then (↑s.card)⁻¹ else 0
@[simp]
theorem ProbComp.probEvent_uniformSelectFinset {α : Type} (s : Finset α) (p : αProp) [DecidablePred p] :
probEvent ($s) p = {xs | p x}.card / s.card
@[simp]
@[simp]
theorem ProbComp.probOutput_uniformSelectMultiset {α : Type} (s : Multiset α) [DecidableEq α] (x : α) :
Pr[= x | $s] = (Multiset.count x s) / s.card
@[simp]
theorem ProbComp.probEvent_uniformSelectMultiset {α : Type} (s : Multiset α) (p : αProp) [DecidablePred p] :
probEvent ($s) p = (Multiset.countP p s) / s.card