• 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-comb-transforms
            • Fraig
              • Fraig-sweep-node
              • Fraig-sweep-aux
              • Ipasir-check-aignet-equivalence
              • Fraig-store-ctrex-aux
              • Fraig-config
              • Fraig-ctrexes-maybe-resim
              • Fraig-sweep
              • Fraig-store-ctrex
              • S32v-row-repeat-bitcols
              • Fraig-core-aux
              • Fraig-ctrexes-resim-aux
              • S32v-copy-cares
              • Ipasir-maybe-recycle
              • Fraig-ctrexes-ok
              • Fraig-ctrexes-resim
              • Fraig-record-sat-ctrex-rec
              • Fraig-ctrex-has-relevant-disagreement
              • S32v-bitcol-nth-set
              • Fraig-minimize-sat-ctrex-rec
              • Bitarr-copy-cares-to-s32v-col
              • S32v-install-bit
              • S32v-bitcol-count-set
              • Fraig-ctrexes-init
              • Bitarr-or-cares-with-s32v-col
              • Fraig-ctrex-find-agreeable
              • Fraig-core
              • S32v-repeat-bitcols
              • S32v-add-salt
              • Fraig!
              • Fraig-ctrex-regvals->vecsim
              • Fraig-ctrex-invals->vecsim
              • Bitarr-to-s32v-col
              • Print-fraig-stats-noninitial
              • Fraig-initial-sim
              • Fraig-ctrexes-reinit
              • Aignet-maybe-update-refs
              • S32v-randomize-rows
              • S32v-get-bit
              • Aignet-vals->regvals-after-invals
              • S32v-zero-rows
              • Aignet-vals->in/regvals
              • Fraig-total-checks
              • Fraig-stats-count-sat-call
              • Fraig-ctrex-ncols
              • Fraig-ctrex-data-rows
              • Fraig-stats-update-last-chance
              • Print-fraig-stats-initial
              • Fraig-stats-increment-forced-proved
              • Fraig-stats-increment-coincident-nodes
              • Fraig-ctrex-in/reg-rows
            • Observability-fix
            • Constprop
            • Balance
            • Apply-m-assumption-n-output-output-transform-default
            • Obs-constprop
            • Apply-n-output-comb-transform-default
            • Rewrite
            • Comb-transform
            • Abc-comb-simplify
            • Apply-comb-transform-default
            • 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-simplify-marked
        • 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
    • Testing-utilities
    • Math
  • Aignet-comb-transforms

Fraig

Apply combinational SAT sweeping (fraiging) to remove redundancies in the input network.

Signature
(fraig aignet aignet2 config state) 
  → 
(mv new-aignet2 new-state)
Arguments
aignet — Input aignet.
aignet2 — New aignet -- will be emptied.
config — Settings for the transform.
    Guard (fraig-config-p config).

Note: This fraiging implementation is heavily based on the one in ABC, developed and maintained at Berkeley by Alan Mishchenko.

Settings for the transform can be tweaked using the config input, which is a fraig-config object.

Definitions and Theorems

Function: fraig

(defun fraig (aignet aignet2 config state)
 (declare (xargs :stobjs (aignet aignet2 state)))
 (declare (xargs :guard (fraig-config-p config)))
 (let ((__function__ 'fraig))
   (declare (ignorable __function__))
   (b*
     (((local-stobjs aignet-tmp)
       (mv aignet2 aignet-tmp state))
      ((mv aignet-tmp state)
       (fraig-core aignet aignet-tmp config state))
      (aignet2 (aignet-prune-comb aignet-tmp aignet2
                                  (fraig-config->gatesimp config))))
     (mv aignet2 aignet-tmp state))))

Theorem: num-ins-of-fraig

(defthm num-ins-of-fraig
  (b* (((mv ?new-aignet2 ?new-state)
        (fraig aignet aignet2 config state)))
    (equal (stype-count :pi new-aignet2)
           (stype-count :pi aignet))))

Theorem: num-regs-of-fraig

(defthm num-regs-of-fraig
  (b* (((mv ?new-aignet2 ?new-state)
        (fraig aignet aignet2 config state)))
    (equal (stype-count :reg new-aignet2)
           (stype-count :reg aignet))))

Theorem: num-outs-of-fraig

(defthm num-outs-of-fraig
  (b* (((mv ?new-aignet2 ?new-state)
        (fraig aignet aignet2 config state)))
    (equal (stype-count :po new-aignet2)
           (stype-count :po aignet))))

Theorem: fraig-comb-equivalent

(defthm fraig-comb-equivalent
  (b* (((mv ?new-aignet2 ?new-state)
        (fraig aignet aignet2 config state)))
    (comb-equiv new-aignet2 aignet)))

Theorem: normalize-input-of-fraig

(defthm normalize-input-of-fraig
  (implies (syntaxp (not (equal aignet2 ''nil)))
           (equal (fraig aignet aignet2 config state)
                  (fraig aignet nil config state))))

Theorem: w-state-of-fraig

(defthm w-state-of-fraig
  (b* (((mv ?new-aignet2 ?new-state)
        (fraig aignet aignet2 config state)))
    (equal (w new-state) (w state))))

Theorem: fraig-of-fraig-config-fix-config

(defthm fraig-of-fraig-config-fix-config
  (equal (fraig aignet aignet2 (fraig-config-fix config)
                state)
         (fraig aignet aignet2 config state)))

Theorem: fraig-fraig-config-equiv-congruence-on-config

(defthm fraig-fraig-config-equiv-congruence-on-config
  (implies (fraig-config-equiv config config-equiv)
           (equal (fraig aignet aignet2 config state)
                  (fraig aignet aignet2 config-equiv state)))
  :rule-classes :congruence)

Subtopics

Fraig-sweep-node
Fraig-sweep-aux
Ipasir-check-aignet-equivalence
Fraig-store-ctrex-aux
Fraig-config
Configuration object for the fraig aignet transform.
Fraig-ctrexes-maybe-resim
Fraig-sweep
Fraig-store-ctrex
S32v-row-repeat-bitcols
Fraig-core-aux
Fraig-ctrexes-resim-aux
S32v-copy-cares
Ipasir-maybe-recycle
Fraig-ctrexes-ok
Fraig-ctrexes-resim
Fraig-record-sat-ctrex-rec
Fraig-ctrex-has-relevant-disagreement
S32v-bitcol-nth-set
Fraig-minimize-sat-ctrex-rec
Bitarr-copy-cares-to-s32v-col
S32v-install-bit
S32v-bitcol-count-set
Fraig-ctrexes-init
Bitarr-or-cares-with-s32v-col
Fraig-ctrex-find-agreeable
Fraig-core
S32v-repeat-bitcols
S32v-add-salt
Fraig!
Like fraig, but overwrites the original network instead of returning a new one.
Fraig-ctrex-regvals->vecsim
Fraig-ctrex-invals->vecsim
Bitarr-to-s32v-col
Print-fraig-stats-noninitial
Fraig-initial-sim
Fraig-ctrexes-reinit
Aignet-maybe-update-refs
S32v-randomize-rows
S32v-get-bit
Aignet-vals->regvals-after-invals
S32v-zero-rows
Aignet-vals->in/regvals
Fraig-total-checks
Fraig-stats-count-sat-call
Fraig-ctrex-ncols
Fraig-ctrex-data-rows
Fraig-stats-update-last-chance
Print-fraig-stats-initial
Fraig-stats-increment-forced-proved
Fraig-stats-increment-coincident-nodes
Fraig-ctrex-in/reg-rows