• 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
            • Observability-fix
            • Constprop
            • Apply-m-assumption-n-output-output-transform-default
            • Balance
              • Aignet-balance-find-xor-pairing-rec
              • Aignet-balance-find-pairing-rec
              • Aignet-balance-outs
              • Aignet-balance-nxsts
              • Aignet-balance-find-xor-pairing
              • Balance-config
              • Aignet-balance-build-superxor-rec
              • Aignet-balance-find-pairing
              • Aignet-balance-build-supergate-rec
              • Aignet-balance-build-supergate
              • Aignet-balance-build-superxor
              • Cancel-parity-lits
                • Find-max-level
                • Balance-core
                • Balance!
                • Aignet-update-node-level
                • Remove-duplicate-lits
                • Supergate-has-contradiction
                • Lit-in-bounds
                • Supergate-has-contradiction-top
                • Print-aignet-levels
                • Litp-for-levels
                • Lit-list-for-levels
                • Levels-sort-<
              • 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
    • Balance

    Cancel-parity-lits

    Signature
    (cancel-parity-lits x neg) → (mv negate new-x)
    Arguments
    x — literal-sorted.
        Guard (lit-listp x).
    neg — Guard (bitp neg).
    Returns
    negate — Type (bitp negate).
    new-x — Type (lit-listp new-x).

    Definitions and Theorems

    Function: cancel-parity-lits

    (defun cancel-parity-lits (x neg)
      (declare (xargs :guard (and (lit-listp x) (bitp neg))))
      (let ((__function__ 'cancel-parity-lits))
        (declare (ignorable __function__))
        (b* (((when (or (atom x) (atom (cdr x))))
              (mv (lbfix neg) (lit-list-fix x)))
             (lit1 (lit-fix (car x)))
             ((when (eql lit1 1))
              (cancel-parity-lits (cdr x)
                                  (b-not neg)))
             ((when (eql lit1 0))
              (cancel-parity-lits (cdr x) neg))
             (lit2 (lit-fix (cadr x)))
             ((when (eql lit1 lit2))
              (cancel-parity-lits (cddr x) neg))
             ((when (eql lit1 (lit-negate lit2)))
              (cancel-parity-lits (cddr x)
                                  (b-not neg)))
             ((mv neg rest)
              (cancel-parity-lits (cdr x) neg)))
          (mv neg (cons lit1 rest)))))

    Theorem: bitp-of-cancel-parity-lits.negate

    (defthm bitp-of-cancel-parity-lits.negate
      (b* (((mv ?negate ?new-x)
            (cancel-parity-lits x neg)))
        (bitp negate))
      :rule-classes :type-prescription)

    Theorem: lit-listp-of-cancel-parity-lits.new-x

    (defthm lit-listp-of-cancel-parity-lits.new-x
      (b* (((mv ?negate ?new-x)
            (cancel-parity-lits x neg)))
        (lit-listp new-x))
      :rule-classes :rewrite)

    Theorem: aignet-eval-parity-of-cancel-parity-lits

    (defthm aignet-eval-parity-of-cancel-parity-lits
      (b* (((mv ?negate ?new-x)
            (cancel-parity-lits x neg)))
        (equal (aignet-eval-parity new-x invals regvals aignet)
               (b-xor (b-xor neg negate)
                      (aignet-eval-parity x invals regvals aignet)))))

    Theorem: aignet-lit-listp-of-cancel-parity-lits

    (defthm aignet-lit-listp-of-cancel-parity-lits
      (b* (((mv ?negate ?new-x)
            (cancel-parity-lits x neg)))
        (implies (aignet-lit-listp x aignet)
                 (aignet-lit-listp new-x aignet))))

    Theorem: cancel-parity-lits-of-lit-list-fix-x

    (defthm cancel-parity-lits-of-lit-list-fix-x
      (equal (cancel-parity-lits (lit-list-fix x)
                                 neg)
             (cancel-parity-lits x neg)))

    Theorem: cancel-parity-lits-lit-list-equiv-congruence-on-x

    (defthm cancel-parity-lits-lit-list-equiv-congruence-on-x
      (implies (satlink::lit-list-equiv x x-equiv)
               (equal (cancel-parity-lits x neg)
                      (cancel-parity-lits x-equiv neg)))
      :rule-classes :congruence)

    Theorem: cancel-parity-lits-of-bfix-neg

    (defthm cancel-parity-lits-of-bfix-neg
      (equal (cancel-parity-lits x (bfix neg))
             (cancel-parity-lits x neg)))

    Theorem: cancel-parity-lits-bit-equiv-congruence-on-neg

    (defthm cancel-parity-lits-bit-equiv-congruence-on-neg
      (implies (bit-equiv neg neg-equiv)
               (equal (cancel-parity-lits x neg)
                      (cancel-parity-lits x neg-equiv)))
      :rule-classes :congruence)