Conversions to CSLib's Boolean basis #
CSLib counts constants, negations, conjunctions, and disjunctions as gates.
Our De Morgan basis also has an identity operation and supports weighted costs.
The realizations below preserve all outputs: importing a CSLib circuit preserves
its gate count, while exporting a De Morgan circuit removes identity gates.
Neither conversion identifies standardCost with CSLib size, since constants
are free under standardCost.
The one-gate circuit over this library's De Morgan basis simulating each operation of CSLib's De Morgan basis.
Equations
- Algebraic.DeMorgan.fromBooleanOperation (Cslib.Circuits.Boolean.Op.const false) = (Algebraic.Translation.id Algebraic.DeMorgan.signature).operation Algebraic.DeMorgan.Op.false
- Algebraic.DeMorgan.fromBooleanOperation (Cslib.Circuits.Boolean.Op.const true) = (Algebraic.Translation.id Algebraic.DeMorgan.signature).operation Algebraic.DeMorgan.Op.true
- Algebraic.DeMorgan.fromBooleanOperation Cslib.Circuits.Boolean.Op.not = (Algebraic.Translation.id Algebraic.DeMorgan.signature).operation Algebraic.DeMorgan.Op.not
- Algebraic.DeMorgan.fromBooleanOperation Cslib.Circuits.Boolean.Op.and = (Algebraic.Translation.id Algebraic.DeMorgan.signature).operation Algebraic.DeMorgan.Op.and
- Algebraic.DeMorgan.fromBooleanOperation Cslib.Circuits.Boolean.Op.or = (Algebraic.Translation.id Algebraic.DeMorgan.signature).operation Algebraic.DeMorgan.Op.or
Instances For
Each CSLib De Morgan operation is simulated by exactly one gate of this library's De Morgan basis.
Realize CSLib's Boolean operations in the weighted De Morgan basis.
Equations
- Algebraic.DeMorgan.fromBoolean = { operation := Algebraic.DeMorgan.fromBooleanOperation, realizes := Algebraic.DeMorgan.fromBoolean._proof_1 }
Instances For
Importing a CSLib circuit preserves the number of internal gates.
Weighted logical-gate cost is at most the imported CSLib gate count.
The number of CSLib De Morgan gates simulating each operation of this library's De Morgan basis: none for the identity, one otherwise.
Equations
- Algebraic.DeMorgan.toBooleanGateCount Algebraic.DeMorgan.Op.id = 0
- Algebraic.DeMorgan.toBooleanGateCount Algebraic.DeMorgan.Op.false = 1
- Algebraic.DeMorgan.toBooleanGateCount Algebraic.DeMorgan.Op.true = 1
- Algebraic.DeMorgan.toBooleanGateCount Algebraic.DeMorgan.Op.not = 1
- Algebraic.DeMorgan.toBooleanGateCount Algebraic.DeMorgan.Op.and = 1
- Algebraic.DeMorgan.toBooleanGateCount Algebraic.DeMorgan.Op.or = 1
Instances For
The CSLib De Morgan circuit simulating each operation of this library's De Morgan basis; the identity uses no gate.
Equations
- Algebraic.DeMorgan.toBooleanOperation Algebraic.DeMorgan.Op.false = (Algebraic.Translation.id Cslib.Circuits.Boolean.signature).operation (Cslib.Circuits.Boolean.Op.const false)
- Algebraic.DeMorgan.toBooleanOperation Algebraic.DeMorgan.Op.true = (Algebraic.Translation.id Cslib.Circuits.Boolean.signature).operation (Cslib.Circuits.Boolean.Op.const true)
- Algebraic.DeMorgan.toBooleanOperation Algebraic.DeMorgan.Op.id = Cslib.Circuits.Circuit.id Cslib.Circuits.Boolean.signature 1
- Algebraic.DeMorgan.toBooleanOperation Algebraic.DeMorgan.Op.not = (Algebraic.Translation.id Cslib.Circuits.Boolean.signature).operation Cslib.Circuits.Boolean.Op.not
- Algebraic.DeMorgan.toBooleanOperation Algebraic.DeMorgan.Op.and = (Algebraic.Translation.id Cslib.Circuits.Boolean.signature).operation Cslib.Circuits.Boolean.Op.and
- Algebraic.DeMorgan.toBooleanOperation Algebraic.DeMorgan.Op.or = (Algebraic.Translation.id Cslib.Circuits.Boolean.signature).operation Cslib.Circuits.Boolean.Op.or
Instances For
The CSLib simulation of each operation uses toBooleanGateCount gates.
Realize De Morgan operations in CSLib, using a free wire for identity.
Equations
- Algebraic.DeMorgan.toBoolean = { operation := Algebraic.DeMorgan.toBooleanOperation, realizes := Algebraic.DeMorgan.toBoolean._proof_1 }
Instances For
CSLib's Circuit.Computes and this library's Circuit.ComputesWith are the
same predicate, so this holds by Iff.rfl. It is definitional and kept only for
compatibility with code written against the earlier, scalar CSLib predicate.
The imported De Morgan circuit computes function on its single output
exactly when the CSLib circuit does.
The exported CSLib circuit computes function on its single output exactly
when the De Morgan circuit does.