• Top
    • Documentation
    • Books
    • Boolean-reasoning
      • Ipasir
      • Aignet
        • Base-api
        • Aignet-construction
        • Representation
        • Aignet-copy-init
        • Aignet-simplify-with-tracking
        • Aignet-simplify-marked-with-tracking
        • Aignet-cnf
        • Aignet-simplify-marked
        • Aignet-complete-copy
        • Aignet-transforms
          • Aignet-output-ranges
          • Aignet-comb-transforms
            • Fraig
            • Parametrize
              • Aignet-parametrize-output-ranges
              • Aignet-parametrize-copy-set-regs
              • Aignet-parametrize-copy-set-ins
              • Aignet-parametrize-collect-bdd-order-aux
              • Aignet-parametrize-collect-bdd-order
              • Aignet-output-range-conjoin-ubdds
              • Aignet-output-range-collect-in/reg-ubdd-order
              • Aignet-finish-reg-ubdd-order
              • Aignet-finish-in-ubdd-order
              • Aignet-copy-dfs-output-range
              • Aignet-parametrize-m-n
              • Aignet-node-to-ubdd
              • Aignet-output-range-to-ubdds
              • Ubdd-to-aignet
              • Aignet-parametrize-copy-init
              • Parametrize-config
              • Parametrize-output-type
              • Ubdd-arr-to-param-space
              • Copy-lits-compose
              • Bitarr-range-1bit-indices
              • Bitarr-range-count
              • Aignet-count-ubdd-branches-wrap
              • Ubdd-to-aignet-memo-ok
              • Aignet-node-to-ubdd-build-cond
              • Copy-lits-compose-in-place
              • Bitarr-range-set
              • Ubdd/level
              • Ubdd-arr
              • Ubdd-arr-max-depth
              • Aignet-count-ubdd-branches
              • Ubdd-negate-cond
              • Ubdd-apply-gate
              • Aignet-node-to-ubdd-short-circuit-cond
              • Bits->bools
              • Eval-ubddarr
              • Ubdd-to-aignet-memo
              • Parametrize-output-type-map
              • Lubdd-fix
            • Observability-fix
            • Constprop
            • Apply-m-assumption-n-output-output-transform-default
            • Balance
            • Apply-n-output-comb-transform-default
            • Apply-comb-transform-default
            • Obs-constprop
            • Rewrite
            • Comb-transform
            • Abc-comb-simplify
            • Prune
            • Rewrite!
            • M-assumption-n-output-comb-transform->name
            • N-output-comb-transform->name
            • Comb-transform->name
            • N-output-comb-transformlist
            • M-assumption-n-output-comb-transformlist
            • Comb-transformlist
            • Apply-comb-transform
          • Aignet-m-assumption-n-output-transforms
          • Aignet-n-output-comb-transforms
        • Aignet-eval
        • Semantics
        • Aignet-read-aiger
        • Aignet-write-aiger
        • Aignet-abc-interface
        • Utilities
      • Aig
      • Satlink
      • Truth
      • Ubdds
      • Bdd
      • Faig
      • Bed
      • 4v
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
    • Math
    • Testing-utilities
  • Aignet-comb-transforms

Parametrize

Transform the AIG so that some conditions assumed to be untrue don't affect the logical equivalence of nodes, using BDDs to compute a hopefully-efficient parametrization.

This is intended to have a similar effect as the observability-fix transform, but perhaps making fraiging more efficient by making the substitution applied to the primary inputs more transparent to random simulation vectors. Currently it only works in the context of m-assumption, n-output transforms, i.e. it preserves full combinational equivalence for the first m outputs, then combinational equivalence under the assumption that the first m outputs are true for the next n outputs.

Usage

In the context of a sequence of m-assumption-n-output AIG transforms, this transform is invoked by including a parametrize-config object in the list of transforms.

Concept

Like the observability transform, this replaces the PIs involved in the assumed condition with new expressions. These expressions equal the PIs themselves when the condition holds, and they evaluate to some values for which the condition does hold otherwise. That is, if the inputs are ins[i] for i=0 to n-1, the parametrized inputs for a satisfiable condition C(ins) satisfies C(Param(C,ins)) and C(ins) => Param(C,ins) = ins. The parametrization by C can be thought of as a fixing function: it maps the set of all input vectors into the subset that satisfy C, keeping those that already satisfy C fixed.

So far, this holds for both the parametrize and observability transforms. The difference is in how inputs that do not satisfy C are mapped to ones that do.

The observability transform maps all inputs that don't satisfy C to a fixed value that does satisfy it, except that inputs C doesn't depend on keep their values. This is simple, but has one big downside: it can make random simulation nearly useless, because if most input vectors do not satisfy C and C depends on most input variables, then most randomly-generated vectors will uselessly map to the same value of those inputs. It also means that the substituted value for every variable involved in the condition depends on the whole condition, regardless of what the particular constraints on that variable are -- this makes strategies for FRAIGing such as level limiting and dependency limiting much less useful.

The parametrize transform uses a different scheme that can potentially distribute randomly-generated input vectors much more evenly over the set of inputs that satisfy C. It works by using BDD parametrization. We fix an ordering of the input variables (the BDD ordering) and translate the assumption C into a BDD. Traversing this BDD lets us generate a set of BDDs giving parametrized values for each of the inputs. The parametrized input vector resulting from a particular input vector can be found by traversing the input vector according to the BDD variable order. We maintain a cube of variable assignments starting with the empty (constant-true) cube, for which C & cube should always be satisfiable (using the assumption that C is satisfiable). For each variable k in the BDD order, let v be the value of k in the input vector. We check whether C & cube & (k=v) is still satisfiable. If so, then we add k=v to the cube; if not, we add k=~v to the cube; either way, C & cube remains satisfiable, and we continue on with the next variable in the order. Once all variables have had assignments added to the cube, the cube then gives the parametrized assignment satisfying C, and if the original input vector satisfied C, then the resulting one is the same since C & cube & (k=v) was satisfiable throughout the algorithm.

Subtopics

Aignet-parametrize-output-ranges
Aignet-parametrize-copy-set-regs
Aignet-parametrize-copy-set-ins
Aignet-parametrize-collect-bdd-order-aux
Aignet-parametrize-collect-bdd-order
Aignet-output-range-conjoin-ubdds
Aignet-output-range-collect-in/reg-ubdd-order
Aignet-finish-reg-ubdd-order
Aignet-finish-in-ubdd-order
Aignet-copy-dfs-output-range
Aignet-parametrize-m-n
Aignet-node-to-ubdd
Aignet-output-range-to-ubdds
Ubdd-to-aignet
Aignet-parametrize-copy-init
Parametrize-config
Config object for the parametrize AIG transform
Parametrize-output-type
Indicator of how the parametrize transform should treat a range of outputs
Ubdd-arr-to-param-space
Copy-lits-compose
Bitarr-range-1bit-indices
Bitarr-range-count
Aignet-count-ubdd-branches-wrap
Ubdd-to-aignet-memo-ok
Aignet-node-to-ubdd-build-cond
Copy-lits-compose-in-place
Bitarr-range-set
Ubdd/level
Ubdd-arr
Abstract stobj: logically this just represents a list of |ACL2|::|UBDDP|s, but it is implemented as an array.
Ubdd-arr-max-depth
Aignet-count-ubdd-branches
Ubdd-negate-cond
Ubdd-apply-gate
Aignet-node-to-ubdd-short-circuit-cond
Bits->bools
Eval-ubddarr
Ubdd-to-aignet-memo
An alist mapping ubdd/level-p to litp.
Parametrize-output-type-map
An alist mapping symbolp to parametrize-output-type-p.
Lubdd-fix