Boolean circuits #
The De Morgan basis consists of binary AND and OR, unary NOT, and Boolean constants.
Every gate has fan-in at most two, so these are the usual bounded fan-in Boolean circuits
(Program.fanInAtMost_two). Circuit size counts every gate, including constants;
designated output wires are free.
@[reducible, inline]
Boolean functions on n inputs.
Equations
- Cslib.Circuits.Boolean.BooleanFunction n = ((Fin n → Bool) → Bool)
Instances For
@[instance_reducible]
Equations
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq (Cslib.Circuits.Boolean.Op.const a) (Cslib.Circuits.Boolean.Op.const b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq (Cslib.Circuits.Boolean.Op.const value) Cslib.Circuits.Boolean.Op.not = isFalse ⋯
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq (Cslib.Circuits.Boolean.Op.const value) Cslib.Circuits.Boolean.Op.and = isFalse ⋯
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq (Cslib.Circuits.Boolean.Op.const value) Cslib.Circuits.Boolean.Op.or = isFalse ⋯
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.not (Cslib.Circuits.Boolean.Op.const value) = isFalse ⋯
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.not Cslib.Circuits.Boolean.Op.not = isTrue ⋯
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.not Cslib.Circuits.Boolean.Op.and = isFalse Cslib.Circuits.Boolean.instDecidableEqOp.decEq._proof_8
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.not Cslib.Circuits.Boolean.Op.or = isFalse Cslib.Circuits.Boolean.instDecidableEqOp.decEq._proof_9
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.and (Cslib.Circuits.Boolean.Op.const value) = isFalse ⋯
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.and Cslib.Circuits.Boolean.Op.not = isFalse Cslib.Circuits.Boolean.instDecidableEqOp.decEq._proof_11
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.and Cslib.Circuits.Boolean.Op.and = isTrue ⋯
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.and Cslib.Circuits.Boolean.Op.or = isFalse Cslib.Circuits.Boolean.instDecidableEqOp.decEq._proof_12
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.or (Cslib.Circuits.Boolean.Op.const value) = isFalse ⋯
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.or Cslib.Circuits.Boolean.Op.not = isFalse Cslib.Circuits.Boolean.instDecidableEqOp.decEq._proof_14
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.or Cslib.Circuits.Boolean.Op.and = isFalse Cslib.Circuits.Boolean.instDecidableEqOp.decEq._proof_15
- Cslib.Circuits.Boolean.instDecidableEqOp.decEq Cslib.Circuits.Boolean.Op.or Cslib.Circuits.Boolean.Op.or = isTrue ⋯
Instances For
@[reducible, inline]
The De Morgan signature.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The usual Boolean interpretation.
Equations
- Cslib.Circuits.Boolean.interpretation (Cslib.Circuits.Boolean.Op.const b) x_2 = b
- Cslib.Circuits.Boolean.interpretation Cslib.Circuits.Boolean.Op.not x_2 = !x_2 0
- Cslib.Circuits.Boolean.interpretation Cslib.Circuits.Boolean.Op.and x_2 = (x_2 0 && x_2 1)
- Cslib.Circuits.Boolean.interpretation Cslib.Circuits.Boolean.Op.or x_2 = (x_2 0 || x_2 1)
Instances For
theorem
Cslib.Circuits.Program.fanInAtMost_two
{n g : ℕ}
(p : Program Boolean.signature n g)
:
p.FanInAtMost 2
Every De Morgan program has fan-in at most two.
theorem
Cslib.Circuits.Circuit.fanInAtMost_two
{n g o : ℕ}
(c : Circuit Boolean.signature n g o)
:
c.FanInAtMost 2
Every De Morgan circuit has fan-in at most two.