Nondeterministic Quantification of Boolean Functions #
This module defines existential and universal quantification over inputs of Boolean functions, corresponding to nondeterministic computation.
Given f : BitString (k + m) → Bool, existential quantification over the
first k variables produces g : BitString m → Bool defined by
g(y) = true iff there exists an assignment x : BitString k such that
f(x ++ y) = true. This models a nondeterministic circuit that
guesses the first k input bits.
Main definitions #
existQuantify— existential quantification over firstkinputsforallQuantify— universal quantification over firstkinputs
Main results #
existQuantify_eq_true— iff characterization via existentialforallQuantify_eq_true— iff characterization via universalforallQuantify_eq_not_existQuantify_not— De Morgan dualityexistQuantify_mono— monotonicity under pointwise implication
Existential quantification over the first k inputs of a Boolean function.
Given f : BitString (k + m) → Bool, produces g : BitString m → Bool where
g(y) = true iff ∃ x : BitString k, f(x ++ y) = true.
This models a nondeterministic circuit that guesses the first k inputs.
Equations
- CircuitComplexity.existQuantify f y = decide (∃ (x : CircuitComplexity.BitString k), f (Fin.append x y) = true)
Instances For
Universal quantification over the first k inputs of a Boolean function.
Equations
- CircuitComplexity.forallQuantify f y = decide (∀ (x : CircuitComplexity.BitString k), f (Fin.append x y) = true)
Instances For
Constant true: existential quantification is always true.
Constant false: existential quantification is always false.
Constant true: universal quantification is always true.
Constant false: universal quantification is always false.
Decomposition: quantifying over k + 1 variables factors as quantifying
over k variables for each value of the first variable.
(∃ a ∈ {0,1}^{k+1}, f(a,y)) ↔ (∃ x ∈ {0,1}^k, f(0∷x,y)) ∨ (∃ x ∈ {0,1}^k, f(1∷x,y))