Zero-cost De Morgan wiring #
A wiring specification selects an existing Boolean input or a hardwired constant for each output. The type excludes charged logical operations, so every compiled specification has zero standard De Morgan cost.
Interpret a wiring source against a concrete input assignment.
Equations
- Algebraic.DeMorgan.Wiring.eval input (Algebraic.DeMorgan.Wiring.input index) = input index
- Algebraic.DeMorgan.Wiring.eval input (Algebraic.DeMorgan.Wiring.constant value) = value
Instances For
@[simp]
theorem
Algebraic.DeMorgan.Wiring.eval_input
{inputs : ℕ}
(input : Fin inputs → Bool)
(index : Fin inputs)
:
Compile a wiring source to its zero-cost De Morgan expression.
Equations
Instances For
@[simp]
theorem
Algebraic.DeMorgan.Wiring.expression_eval
{inputs : ℕ}
(source : Wiring inputs)
(input : Fin inputs → Bool)
:
@[simp]
theorem
Algebraic.DeMorgan.Wiring.eval_finAppend
{leftCount inputs rightCount : ℕ}
(left : Fin leftCount → Wiring inputs)
(right : Fin rightCount → Wiring inputs)
(input : Fin inputs → Bool)
(index : Fin (leftCount + rightCount))
:
eval input (Fin.append left right index) = Fin.append (fun (leftIndex : Fin leftCount) => eval input (left leftIndex))
(fun (rightIndex : Fin rightCount) => eval input (right rightIndex)) index
theorem
Algebraic.DeMorgan.Wiring.eval_finAppend_apply
{leftCount width inputs rightCount : ℕ}
(left : Fin leftCount → Fin width → Wiring inputs)
(right : Fin rightCount → Fin width → Wiring inputs)
(input : Fin inputs → Bool)
(index : Fin (leftCount + rightCount))
(bit : Fin width)
:
eval input (Fin.append left right index bit) = Fin.append (fun (leftIndex : Fin leftCount) (bit : Fin width) => eval input (left leftIndex bit))
(fun (rightIndex : Fin rightCount) (bit : Fin width) => eval input (right rightIndex bit)) index bit
def
Algebraic.DeMorgan.Wiring.circuit
{outputs inputs : ℕ}
(specification : Fin outputs → Wiring inputs)
:
Compile an arbitrary vector of input selections and constants.
Equations
- Algebraic.DeMorgan.Wiring.circuit specification = Cslib.Circuits.Circuit.parallelFin outputs fun (output : Fin outputs) => (specification output).expression.circuit
Instances For
@[simp]
theorem
Algebraic.DeMorgan.Wiring.circuit_cost
{outputs inputs : ℕ}
(specification : Fin outputs → Wiring inputs)
: