• Top
    • Documentation
    • Books
    • Recursion-and-induction
    • Boolean-reasoning
      • Ipasir
      • Aignet
        • Base-api
        • Aignet-construction
        • Representation
        • Aignet-copy-init
        • Aignet-simplify-marked-with-tracking
        • Aignet-cnf
        • Aignet-simplify-with-tracking
        • Aignet-complete-copy
        • Aignet-eval
        • Semantics
        • Aignet-transforms
        • Aignet-simplify-marked
        • Aignet-read-aiger
        • Aignet-write-aiger
        • Aignet-abc-interface
        • Utilities
          • Aignet-record-levels
        • Aig
        • Satlink
        • Truth
        • Ubdds
        • Bdd
        • Faig
        • Bed
        • 4v
      • Debugging
      • Projects
      • Std
      • Proof-automation
      • Macro-libraries
      • ACL2
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Utilities

    Aignet-record-levels

    Records the level of each node in aignet-levels, where combinational inputs and constants have level 0 and a node has level n+1 if its children have maximum level n.

    Signature
    (aignet-record-levels aignet aignet-levels) 
      → 
    new-aignet-levels
    Returns
    new-aignet-levels — Type (< (fanin-count aignet) (len new-aignet-levels)).

    Does not record a level value for combinational outputs. Look up the level of its fanin node instead.

    Definitions and Theorems

    Function: aignet-record-levels

    (defun aignet-record-levels (aignet aignet-levels)
      (declare (xargs :stobjs (aignet aignet-levels)))
      (declare (xargs :guard t))
      (let ((__function__ 'aignet-record-levels))
        (declare (ignorable __function__))
        (b* ((aignet-levels (resize-u32 (num-fanins aignet)
                                        aignet-levels)))
          (aignet-record-levels-aux 0 aignet aignet-levels))))

    Theorem: return-type-of-aignet-record-levels

    (defthm return-type-of-aignet-record-levels
      (b*
       ((new-aignet-levels (aignet-record-levels aignet aignet-levels)))
       (< (fanin-count aignet)
          (len new-aignet-levels)))
      :rule-classes :linear)

    Theorem: aignet-levels-correct-of-aignet-record-levels

    (defthm aignet-levels-correct-of-aignet-record-levels
      (aignet-levels-correct-up-to
           (+ 1 (fanin-count aignet))
           aignet
           (aignet-record-levels aignet aignet-levels)))

    Theorem: len-of-aignet-record-levels

    (defthm len-of-aignet-record-levels
     (b*
      ((?new-aignet-levels (aignet-record-levels aignet aignet-levels)))
      (equal (len new-aignet-levels)
             (num-fanins aignet))))