• 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-output-range-map
          • Aignet-comb-transforms
          • 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-transforms

Aignet-output-ranges

Summary of a system to specify the treatments of different primary outputs by AIG transformations

As an AIG is passed through several different transforms, its nodes are typically renumbered, so that the only way of identifying certain a node/literal is if it is the fanin of some primary output. In that case since the primary outputs' numbering is preserved by the transform, we can be assured that e.g. the fanin literal of primary output K after a series of combinational transforms is combinationally equivalent to the fanin literal of primary output K before those transforms.

This is fine when all we want to do with a transform is have it run fully automatically and e.g. preserve combinational equivalence among the outputs. But some transforms benefit from more user direction, and can be configured such that certain nodes are identified for certain purposes. For example, the FRAIG transform can find candidate equivalence classes, but it can benefit from a configuration which says that only certain nodes are to be treated as candidate equivalences. In a usage such as sv::svex-focused-equivalence-checking, these potentially equivalent nodes are known before any transforms are done, but other transforms may need to be run before the fraig transform. Therefore these candidate equivalence nodes are added as primary outputs (generally after the "real" primary outputs of the AIG). We then need to tell the FRAIG transform which outputs are regular primary outputs and which are the candidate equivalence classes. As this is just one example of the special purpose use of primary output nodes for a transform, there may be several different ranges of outputs that are to be used for different purposes across different transforms. We need a mapping, therefore, between ranges of outputs and their special purposes in various transforms.

To allow this sort of thing to work with minimal user hassle, we add one layer of indirection: we instead keep a mapping from output ranges to names (symbols), and separately in each transform's configuration, map names to objects describing their special purposes (which vary by transform).

Typically the output-range map is provided by the user before transforms are started and preserved throughout. However, we also allow a transform to modify the output-range map. E.g., in the future the fraig transform could support recording the remaining candidate equivalence classes so that a subsequent fraig transform could begin with those classes.

Subtopics

Aignet-output-range-map
Type of the mapping that names ranges of primary outputs of an AIG