Documentation

Crn.StableBoolean

Boolean closure of stably computable predicates (CRN-3) #

[AADFP06, §4.1, Lemma 3 and Corollary 2]: the stably computable predicates are closed under every 2-place Boolean function, by the parallel composition of two protocols. Its states are pairs (p₁, p₂), its input function is s ↦ (I₁ s, I₂ s), both components make their own transition in every encounter, and the output of (p₁, p₂) is ξ(O₁ p₁, O₂ p₂).

theorem Crn.StablyComputable.map₂ {X : Type u_1} [Fintype X] [DecidableEq X] {φ ψ : (X → ℕ) → Bool} (ξ : Bool → Bool → Bool) (hφ : StablyComputable φ) (hψ : StablyComputable ψ) :
StablyComputable fun (x : X → ℕ) => ξ (φ x) (ψ x)

[AADFP06, Lemma 3] For every 2-place Boolean function ξ, if φ and ψ are stably computable then so is ξ(φ, ψ) (parallel composition).

theorem Crn.StablyComputable.not {X : Type u_1} [Fintype X] [DecidableEq X] {φ : (X → ℕ) → Bool} (hφ : StablyComputable φ) :
StablyComputable fun (x : X → ℕ) => !φ x

Stably computable predicates are closed under negation [AADFP06, Corollary 2].

theorem Crn.StablyComputable.and {X : Type u_1} [Fintype X] [DecidableEq X] {φ ψ : (X → ℕ) → Bool} (hφ : StablyComputable φ) (hψ : StablyComputable ψ) :
StablyComputable fun (x : X → ℕ) => φ x && ψ x

Stably computable predicates are closed under conjunction [AADFP06, Corollary 2].

theorem Crn.StablyComputable.or {X : Type u_1} [Fintype X] [DecidableEq X] {φ ψ : (X → ℕ) → Bool} (hφ : StablyComputable φ) (hψ : StablyComputable ψ) :
StablyComputable fun (x : X → ℕ) => φ x || ψ x

Stably computable predicates are closed under disjunction [AADFP06, Corollary 2].