• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
      • Sv
        • Svex-stvs
        • Svex-decomposition-methodology
        • Sv-versus-esim
        • Svex-decomp
        • Svex-compose-dfs
        • Svex-compilation
        • Moddb
        • Svmods
        • Svstmt
        • Sv-tutorial
        • Expressions
          • Rewriting
          • Svex
          • Bit-blasting
          • Functions
          • 4vmask
            • Svex-argmasks
              • Svmask-for-bitand
              • Svmask-for-signx
              • Svmask-for-bitxor
              • Svmask-for-concat
              • Svmask-for-bit?!
              • Svmask-for-bit?
              • Svmask-for-?!
              • Svmask-for-?
              • Svmask-for-?*
              • Svmask-for-==??
              • Svmask-for-rsh
              • Svmask-for-bitsel
              • Svmask-for-+
              • Svmask-for-override
              • Svmask-for-uand
              • Svmask-for-zerox
              • Svmask-for-safer-==?
              • Svmask-for-bitor
              • Svmask-for-partinst
              • 4vmasklist-len-fix
              • Svmask-for-==?
              • Svmask-for-xdet
              • Svmask-for-unfloat
              • 4vmask-all-or-none
              • Svmask-for-partsel
              • Svmask-for-offp
              • Svmask-for-bitnot
                • Svmask-for-===*
                • Svmask-for-===
                • Svmask-for-res
                • Svmask-for-onp
                • Svmask-for-blkrev
                • Svmask-for-resor
                • Svmask-for-resand
                • Svmask-for-pow
                • Svmask-for-onehot0
                • Svmask-for-onehot
                • Svmask-for-lsh
                • Svmask-for-id
                • Svmask-for-countones
                • Svmask-for-clog2
                • Svmask-for-/
                • Svmask-for-==
                • Svmask-for-<
                • Svmask-for-*
                • Svmask-for-%
                • Svmask-for-uxor
                • Svmask-for-uor
                • Svmask-for-u-
                • Svmask-for-b-
                • Unrev-block-index
                • Svmask-for-unknown-function
                • Sparseint-unrev-blocks
              • 4vmask-p
              • 4vmask-subsumes
              • 4veclist-mask
              • 4vec-mask-to-zero
              • 4vec-mask
              • 4vmasklist-subsumes
              • 4vmask-union
              • 4vec-mask?
              • 4vmask-equiv
              • 4vmask-fix
              • 4vmask-alist
              • 4veclist-mask?
              • 4vmasklist
              • 4vmask-empty
            • Why-infinite-width
            • Svex-vars
            • Evaluation
            • Values
          • Symbolic-test-vector
          • Vl-to-svex
        • Fgl
        • Vwsim
        • Vl
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Math
      • Testing-utilities
    • Svex-argmasks

    Svmask-for-bitnot

    Implements svex-argmasks for BITNOT.

    Signature
    (svmask-for-bitnot mask args) → argmasks
    Arguments
    mask — Care mask for the full expression.
        Guard (4vmask-p mask).
    args — Arguments to this BITNOT operator.
        Guard (svexlist-p args).
    Returns
    argmasks — The new care masks inferred for the args.
        Type (4vmasklist-p argmasks).

    Since bitwise negation just negates bits without moving them around or merging them together, it doesn't seem like there's any way to improve on the outer care mask here.

    Definitions and Theorems

    Function: svmask-for-bitnot$inline

    (defun svmask-for-bitnot$inline (mask args)
      (declare (xargs :guard (and (4vmask-p mask)
                                  (svexlist-p args))))
      (let ((__function__ 'svmask-for-bitnot))
        (declare (ignorable __function__))
        (b* ((mask (4vmask-fix mask)))
          (list mask))))

    Theorem: 4vmasklist-p-of-svmask-for-bitnot

    (defthm 4vmasklist-p-of-svmask-for-bitnot
      (b* ((argmasks (svmask-for-bitnot$inline mask args)))
        (4vmasklist-p argmasks))
      :rule-classes :rewrite)

    Theorem: svmask-for-bitnot$inline-of-4vmask-fix-mask

    (defthm svmask-for-bitnot$inline-of-4vmask-fix-mask
      (equal (svmask-for-bitnot$inline (4vmask-fix mask)
                                       args)
             (svmask-for-bitnot$inline mask args)))

    Theorem: svmask-for-bitnot$inline-4vmask-equiv-congruence-on-mask

    (defthm svmask-for-bitnot$inline-4vmask-equiv-congruence-on-mask
      (implies (4vmask-equiv mask mask-equiv)
               (equal (svmask-for-bitnot$inline mask args)
                      (svmask-for-bitnot$inline mask-equiv args)))
      :rule-classes :congruence)

    Theorem: svmask-for-bitnot$inline-of-svexlist-fix-args

    (defthm svmask-for-bitnot$inline-of-svexlist-fix-args
      (equal (svmask-for-bitnot$inline mask (svexlist-fix args))
             (svmask-for-bitnot$inline mask args)))

    Theorem: svmask-for-bitnot$inline-svexlist-equiv-congruence-on-args

    (defthm svmask-for-bitnot$inline-svexlist-equiv-congruence-on-args
      (implies (svexlist-equiv args args-equiv)
               (equal (svmask-for-bitnot$inline mask args)
                      (svmask-for-bitnot$inline mask args-equiv)))
      :rule-classes :congruence)

    Theorem: svmask-for-bitnot-correct

    (defthm svmask-for-bitnot-correct
     (implies
        (and (equal (4veclist-mask (svmask-for-bitnot mask args)
                                   (svexlist-eval args env))
                    (4veclist-mask (svmask-for-bitnot mask args)
                                   args1))
             (syntaxp (not (equal args1
                                  (cons 'svexlist-eval
                                        (cons args (cons env 'nil)))))))
        (equal (4vec-mask mask (svex-apply 'bitnot args1))
               (4vec-mask mask
                          (svex-apply 'bitnot
                                      (svexlist-eval args env))))))