• 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-offp

    Implements svex-argmasks for OFFP.

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

    Since offp affects each bit, without moving bits 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-offp$inline

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

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

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

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

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

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

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

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

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

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

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

    Theorem: svmask-for-offp-correct

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