Reachability with restricted oracle answers #
reachableWhen interprets an oracle program using a specified set of possible answers for each
query. The public equations describe pure, query, bind, and monotone enlargement of answer sets.
def
OracleComp.reachableWhen
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(o : QueryImpl spec Set)
(mx : OracleComp spec α)
:
Set α
Outputs reachable when a query may return any response selected by o.
Instances For
@[simp]
theorem
OracleComp.reachableWhen_pure
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(o : QueryImpl spec Set)
(x : α)
:
@[simp]
theorem
OracleComp.reachableWhen_liftM
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(o : QueryImpl spec Set)
(q : OracleQuery spec α)
:
theorem
OracleComp.reachableWhen_query
{ι : Type u}
{spec : OracleSpec ι}
(o : QueryImpl spec Set)
(t : spec.Domain)
:
@[simp]
theorem
OracleComp.reachableWhen_bind
{ι : Type u}
{spec : OracleSpec ι}
{α β : Type v}
(o : QueryImpl spec Set)
(oa : OracleComp spec α)
(ob : α → OracleComp spec β)
:
theorem
OracleComp.reachableWhen_query_bind
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(o : QueryImpl spec Set)
(t : spec.Domain)
(next : spec.Range t → OracleComp spec α)
:
reachableWhen o (liftM (OracleSpec.query t) >>= next) = ⋃ direction ∈ o t, reachableWhen o (next direction)
theorem
OracleComp.reachableWhen_mono
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
{o₁ o₂ : QueryImpl spec Set}
(h : ∀ (q : spec.Domain), o₁ q ⊆ o₂ q)
(oa : OracleComp spec α)
:
reachableWhen o₁ oa ⊆ reachableWhen o₂ oa
theorem
OracleComp.reachableWhen_univ_eq_support
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(oa : OracleComp spec α)
:
Admitting every typed response recovers the free tree's attachment support.
@[deprecated "VCVio retiring support API: use reachableWhen" (since := "2026-09-14")]
def
OracleComp.supportWhen
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(o : QueryImpl spec Set)
(mx : OracleComp spec α)
:
Set α
The SetM interpretation of possible outputs under a query-response assignment.
Instances For
@[simp, deprecated "VCVio retiring support API: use reachableWhen_pure" (since := "2026-09-14")]
theorem
OracleComp.supportWhen_pure
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(o : QueryImpl spec Set)
(x : α)
:
@[deprecated "VCVio retiring support API: use reachableWhen_query_bind" (since := "2026-09-14")]
theorem
OracleComp.supportWhen_query_bind
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(o : QueryImpl spec Set)
(q : spec.Domain)
(oa : spec.Range q → OracleComp spec α)
:
@[simp, deprecated "VCVio retiring support API: use reachableWhen_bind" (since := "2026-09-14")]
theorem
OracleComp.supportWhen_bind
{ι : Type u}
{spec : OracleSpec ι}
{α β : Type v}
(o : QueryImpl spec Set)
(oa : OracleComp spec α)
(ob : α → OracleComp spec β)
:
Reachable outputs of a bind are the reachable outputs of the continuation over reachable outputs of the first computation.
@[deprecated "VCVio retiring support API: use reachableWhen_bind" (since := "2026-09-14")]
theorem
OracleComp.mem_supportWhen_bind_iff
{ι : Type u}
{spec : OracleSpec ι}
{α β : Type v}
(o : QueryImpl spec Set)
(oa : OracleComp spec α)
(ob : α → OracleComp spec β)
(y : β)
:
Membership form of [OracleComp.supportWhen_bind].
@[deprecated "VCVio retiring support API: use reachableWhen_mono" (since := "2026-09-14")]
theorem
OracleComp.supportWhen_mono
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
{o₁ o₂ : QueryImpl spec Set}
(h : ∀ (q : spec.Domain), o₁ q ⊆ o₂ q)
(oa : OracleComp spec α)
:
supportWhen o₁ oa ⊆ supportWhen o₂ oa
Enlarging the set of possible oracle outputs only enlarges the reachable output set.
@[deprecated "VCVio retiring support API: use reachableWhen" (since := "2026-09-15")]
theorem
OracleComp.supportWhen_eq_reachableWhen
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(o : QueryImpl spec Set)
(oa : OracleComp spec α)
:
The SetM interpretation agrees with operation-indexed reachability.