Documentation

Complexitylib.Algebraic.Basis.DeMorgan.Wiring

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.

inductive Algebraic.DeMorgan.Wiring (inputs : ℕ) :

One output of a pure wiring layer.

Instances For
    def Algebraic.DeMorgan.Wiring.eval {inputs : ℕ} (input : Fin inputs → Bool) :
    Wiring inputs → Bool

    Interpret a wiring source against a concrete input assignment.

    Equations
    Instances For
      @[simp]
      theorem Algebraic.DeMorgan.Wiring.eval_input {inputs : ℕ} (input : Fin inputs → Bool) (index : Fin inputs) :
      eval input (Wiring.input index) = input index
      @[simp]
      theorem Algebraic.DeMorgan.Wiring.eval_constant {inputs : ℕ} (input : Fin inputs → Bool) (value : Bool) :
      eval input (constant value) = value
      def Algebraic.DeMorgan.Wiring.expression {inputs : ℕ} :
      Wiring inputs → Expression 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) :
        Expression.eval input source.expression = eval input source
        @[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) :
        Circuit signature inputs outputs

        Compile an arbitrary vector of input selections and constants.

        Equations
        Instances For
          @[simp]
          theorem Algebraic.DeMorgan.Wiring.circuit_size {outputs inputs : ℕ} (specification : Fin outputs → Wiring inputs) :
          (circuit specification).size = ∑ output : Fin outputs, (specification output).expression.gateCount

          The compiled wiring layer has one gate per hardwired constant.

          @[simp]
          theorem Algebraic.DeMorgan.Wiring.circuit_eval {outputs inputs : ℕ} (specification : Fin outputs → Wiring inputs) (input : Fin inputs → Bool) :
          (circuit specification).eval interpretation input = fun (output : Fin outputs) => eval input (specification output)
          @[simp]
          theorem Algebraic.DeMorgan.Wiring.circuit_cost {outputs inputs : ℕ} (specification : Fin outputs → Wiring inputs) :
          (circuit specification).cost standardCost = 0