Probability Lemmas About Monad Operations #
This file contains lemmas about evalDist
applied to monadic operations like pure
and bind
.
theorem
probFailure_bind_congr
{ι : Type v}
{spec : OracleSpec ι}
{α β γ : Type u}
[spec.FiniteRange]
(oa : OracleComp spec α)
{ob : α → OracleComp spec β}
{oc : α → OracleComp spec γ}
(h : ∀ x ∈ oa.support, [⊥|ob x] = [⊥|oc x])
:
theorem
probFailure_bind_congr'
{ι : Type v}
{spec : OracleSpec ι}
{α β γ : Type u}
[spec.FiniteRange]
(oa : OracleComp spec α)
{ob : α → OracleComp spec β}
{oc : α → OracleComp spec γ}
(h : ∀ (x : α), [⊥|ob x] = [⊥|oc x])
:
theorem
probOutput_bind_congr
{ι : Type v}
{spec : OracleSpec ι}
{α β : Type u}
[spec.FiniteRange]
{oa : OracleComp spec α}
{ob₁ ob₂ : α → OracleComp spec β}
{y : β}
(h : ∀ x ∈ oa.support, [=y|ob₁ x] = [=y|ob₂ x])
:
theorem
probOutput_bind_congr'
{ι : Type v}
{spec : OracleSpec ι}
{α β : Type u}
[spec.FiniteRange]
(oa : OracleComp spec α)
{ob₁ ob₂ : α → OracleComp spec β}
(y : β)
(h : ∀ (x : α), [=y|ob₁ x] = [=y|ob₂ x])
:
theorem
probOutput_bind_mono
{ι : Type v}
{spec : OracleSpec ι}
{α β γ : Type u}
[spec.FiniteRange]
{oa : OracleComp spec α}
{ob : α → OracleComp spec β}
{oc : α → OracleComp spec γ}
{y : β}
{z : γ}
(h : ∀ x ∈ oa.support, [=y|ob x] ≤ [=z|oc x])
:
theorem
probOutput_bind_congr_eq_add
{ι : Type v}
{spec : OracleSpec ι}
{α β : Type u}
[spec.FiniteRange]
{γ₁ γ₂ : Type u}
{oa : OracleComp spec α}
{ob : α → OracleComp spec β}
{oc₁ : α → OracleComp spec γ₁}
{oc₂ : α → OracleComp spec γ₂}
{y : β}
{z₁ : γ₁}
{z₂ : γ₂}
(h : ∀ x ∈ oa.support, [=y|ob x] = [=z₁|oc₁ x] + [=z₂|oc₂ x])
:
theorem
probOutput_bind_congr_le_add
{ι : Type v}
{spec : OracleSpec ι}
{α β : Type u}
[spec.FiniteRange]
{γ₁ γ₂ : Type u}
{oa : OracleComp spec α}
{ob : α → OracleComp spec β}
{oc₁ : α → OracleComp spec γ₁}
{oc₂ : α → OracleComp spec γ₂}
{y : β}
{z₁ : γ₁}
{z₂ : γ₂}
(h : ∀ x ∈ oa.support, [=y|ob x] ≤ [=z₁|oc₁ x] + [=z₂|oc₂ x])
:
theorem
probOutput_bind_congr_add_le
{ι : Type v}
{spec : OracleSpec ι}
{α β : Type u}
[spec.FiniteRange]
{γ₁ γ₂ : Type u}
{oa : OracleComp spec α}
{ob : α → OracleComp spec β}
{oc₁ : α → OracleComp spec γ₁}
{oc₂ : α → OracleComp spec γ₂}
{y : β}
{z₁ : γ₁}
{z₂ : γ₂}
(h : ∀ x ∈ oa.support, [=z₁|oc₁ x] + [=z₂|oc₂ x] ≤ [=y|ob x])
:
theorem
probOutput_bind_congr_le_sub
{ι : Type v}
{spec : OracleSpec ι}
{α β : Type u}
[spec.FiniteRange]
{γ₁ γ₂ : Type u}
{oa : OracleComp spec α}
{ob : α → OracleComp spec β}
{oc₁ : α → OracleComp spec γ₁}
{oc₂ : α → OracleComp spec γ₂}
{y : β}
{z₁ : γ₁}
{z₂ : γ₂}
(h : ∀ x ∈ oa.support, [=y|ob x] ≤ [=z₁|oc₁ x] - [=z₂|oc₂ x])
:
theorem
probOutput_bind_congr_sub_le
{ι : Type v}
{spec : OracleSpec ι}
{α β : Type u}
[spec.FiniteRange]
{γ₁ γ₂ : Type u}
{oa : OracleComp spec α}
{ob : α → OracleComp spec β}
{oc₁ : α → OracleComp spec γ₁}
{oc₂ : α → OracleComp spec γ₂}
{y : β}
{z₁ : γ₁}
{z₂ : γ₂}
(h : ∀ x ∈ oa.support, [=z₁|oc₁ x] - [=z₂|oc₂ x] ≤ [=y|ob x])
: