Distribution Semantics for Computations with Lists and Vectors #
This file contains lemmas for probEvent
and probOutput
of computations involving List
.
We also include Vector
as a related case.
theorem
OracleComp.mem_support_seq_map_cons_iff'
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(oa : OracleComp spec α)
(ob : OracleComp spec (List α))
(xs : List α)
:
theorem
OracleComp.cons_mem_support_seq_map_cons_iff
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(oa : OracleComp spec α)
(ob : OracleComp spec (List α))
(x : α)
(xs : List α)
:
theorem
OracleComp.mem_finSupport_seq_map_cons_iff'
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(oa : OracleComp spec α)
(ob : OracleComp spec (List α))
[spec.FiniteRange]
[spec.DecidableEq]
[DecidableEq α]
(xs : List α)
:
xs ∈ (List.cons <$> oa <*> ob).finSupport ↔ List.recOn xs False fun (x : α) (xs : List α) (x_1 : Prop) => x ∈ oa.finSupport ∧ xs ∈ ob.finSupport
theorem
OracleComp.mem_finSupport_seq_map_cons_iff
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(oa : OracleComp spec α)
(ob : OracleComp spec (List α))
[spec.FiniteRange]
[spec.DecidableEq]
[DecidableEq α]
(xs : List α)
(h : xs ≠ [])
:
theorem
OracleComp.cons_mem_finSupport_seq_map_cons_iff
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(oa : OracleComp spec α)
(ob : OracleComp spec (List α))
[spec.FiniteRange]
[spec.DecidableEq]
[DecidableEq α]
(x : α)
(xs : List α)
:
theorem
OracleComp.probOutput_cons_seq_map_cons_eq_mul
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(oa : OracleComp spec α)
(ob : OracleComp spec (List α))
[spec.FiniteRange]
[spec.DecidableEq]
(x : α)
(xs : List α)
:
theorem
OracleComp.probOutput_cons_seq_map_cons_eq_mul'
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(oa : OracleComp spec α)
(ob : OracleComp spec (List α))
[spec.FiniteRange]
[spec.DecidableEq]
(x : α)
(xs : List α)
:
@[simp]
theorem
OracleComp.probOutput_seq_map_cons_eq_mul
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
(oa : OracleComp spec α)
(ob : OracleComp spec (List α))
[spec.FiniteRange]
[spec.DecidableEq]
(xs : List α)
:
@[simp]
theorem
OracleComp.probOutput_map_append_left
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
[DecidableEq α]
[spec.FiniteRange]
(xs : List α)
(oa : OracleComp spec (List α))
(ys : List α)
:
@[simp]
theorem
OracleComp.probFailure_list_mapM_loop
{ι : Type u}
{spec : OracleSpec ι}
{α : Type u_1}
{β : Type u_2}
[spec.FiniteRange]
(xs : List α)
(f : α → OracleComp spec β)
(ys : List β)
:
@[simp]
theorem
OracleComp.probOutput_list_mapM_loop
{ι : Type u}
{spec : OracleSpec ι}
{α : Type u_1}
{β : Type u_2}
[DecidableEq β]
[spec.FiniteRange]
(xs : List α)
(f : α → OracleComp spec β)
(ys zs : List β)
:
@[simp]
theorem
OracleComp.probOutput_list_mapM
{ι : Type u}
{spec : OracleSpec ι}
{α : Type u_1}
{β : Type u_2}
[spec.FiniteRange]
(xs : List α)
(f : α → OracleComp spec β)
(ys : List β)
:
@[simp]
theorem
OracleComp.support_seq_map_vector_cons
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
{n : ℕ}
(oa : OracleComp spec α)
(ob : OracleComp spec (List.Vector α n))
:
@[simp]
theorem
OracleComp.probOutput_seq_map_vector_cons_eq_mul
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
{n : ℕ}
(oa : OracleComp spec α)
(ob : OracleComp spec (List.Vector α n))
[spec.FiniteRange]
[spec.DecidableEq]
(xs : List.Vector α (n + 1))
:
@[simp]
theorem
OracleComp.probOutput_seq_map_vector_cons_eq_mul'
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
{n : ℕ}
(oa : OracleComp spec α)
(ob : OracleComp spec (List.Vector α n))
[spec.FiniteRange]
[spec.DecidableEq]
(xs : List.Vector α (n + 1))
:
@[simp]
theorem
OracleComp.probOutput_vector_toList
{ι : Type u}
{spec : OracleSpec ι}
{α : Type v}
[spec.FiniteRange]
[spec.DecidableEq]
{n : ℕ}
(oa : OracleComp spec (List.Vector α n))
(xs : List α)
: