The lawful operator framework provides free theorems around the typeclass LawfulOperator
.
Its definition is based on section 3.3 of the AIGNET paper.
decls1
is a prefix of decls2
- of :: (
The prefix may never be longer than the other array.
The prefix and the other array must agree on all elements up until the bound of the prefix
- )
If decls1
is a prefix of decls2
and we start evaluating decls2
at an
index in bounds of decls1
we can evaluate at decls1
.
If decls1
is a prefix of decls2
and we start evaluating decls2
at an
index in bounds of decls1
we can evaluate at decls1
.
A function f
that takes some aig : AIG α
and an argument of type β aig
is called a lawful
AIG operator if it only extends the AIG
but never modifies already existing nodes.
This guarantees that applying such a function will not change the semantics of any existing parts of the circuit, allowing us to perform local reasoning on the AIG.
Instances
- Std.Sat.AIG.RefVec.instLawfulOperatorFoldTargetFold
- Std.Sat.AIG.instLawfulOperatorBinaryInputMkAndCached
- Std.Sat.AIG.instLawfulOperatorBinaryInputMkBEqCached
- Std.Sat.AIG.instLawfulOperatorBinaryInputMkImpCached
- Std.Sat.AIG.instLawfulOperatorBinaryInputMkOrCached
- Std.Sat.AIG.instLawfulOperatorBinaryInputMkXorCached
- Std.Sat.AIG.instLawfulOperatorBoolMkConst
- Std.Sat.AIG.instLawfulOperatorBoolMkConstCached
- Std.Sat.AIG.instLawfulOperatorGateInputMkGate
- Std.Sat.AIG.instLawfulOperatorGateInputMkGateCached
- Std.Sat.AIG.instLawfulOperatorMkAtom
- Std.Sat.AIG.instLawfulOperatorMkAtomCached
- Std.Sat.AIG.instLawfulOperatorRefMkNotCached
- Std.Sat.AIG.instLawfulOperatorTernaryInputMkIfCached
- Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulOperatorFullAdderInputMkFullAdderCarry
- Std.Tactic.BVDecide.BVExpr.bitblast.instLawfulOperatorFullAdderInputMkFullAdderOut
- Std.Tactic.BVDecide.BVExpr.bitblast.mkOverflowBit.instLawfulOperatorOverflowInput
- Std.Tactic.BVDecide.BVPred.instLawfulOperatorBVBitBitblast
- Std.Tactic.BVDecide.BVPred.instLawfulOperatorBinaryRefVecMkEq
- Std.Tactic.BVDecide.BVPred.instLawfulOperatorBinaryRefVecMkUlt
- Std.Tactic.BVDecide.BVPred.instLawfulOperatorGetLsbDTargetBlastGetLsbD