• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Community
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
    • Interfacing-tools
    • Hardware-verification
      • Gl
      • Esim
      • Vl2014
        • Warnings
        • Primitives
        • Use-set
        • Syntax
        • Getting-started
        • Utilities
        • Loader
        • Transforms
          • Expression-sizing
          • Occform
          • Oprewrite
          • Expand-functions
          • Delayredux
          • Unparameterization
          • Caseelim
          • Split
          • Selresolve
          • Weirdint-elim
          • Vl-delta
          • Replicate-insts
          • Rangeresolve
          • Propagate
          • Clean-selects
          • Clean-params
          • Blankargs
          • Inline-mods
          • Expr-simp
          • Trunc
          • Always-top
          • Gatesplit
          • Gate-elim
          • Expression-optimization
          • Elim-supplies
          • Wildelim
            • Vl-design-wildelim
            • Vl-expr-wildelim
              • Vl-wildeq-replacement-expr
              • Vl-wildneq-replacement-expr
                • Vl-wildeq-rewrite-main
                • Vl-wildeq-decompose-rhs
                • Vl-wildeq-rewrite-exprlist
                • Vl-wildeq-rewrite-expr
            • Drop-blankports
            • Clean-warnings
            • Addinstnames
            • Custom-transform-hooks
            • Annotate
            • Latchcode
            • Elim-unused-vars
            • Problem-modules
          • Lint
          • Mlib
          • Server
          • Kit
          • Printer
          • Esim-vl
          • Well-formedness
        • Sv
        • Fgl
        • Vwsim
        • Vl
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Math
      • Testing-utilities
    • Vl-expr-wildelim

    Vl-wildneq-replacement-expr

    Construct the expression to replace lhs !=? rhs.

    Signature
    (vl-wildneq-replacement-expr lhs care-mask zapped atts) 
      → 
    new-x
    Arguments
    lhs — Left hand side of some lhs !=? rhs expression.
        Guard (vl-expr-p lhs).
    care-mask — Care mask computed for rhs; see vl-wildeq-decompose-rhs.
        Guard (vl-expr-p care-mask).
    zapped — Zapped version of rhs; see vl-wildeq-decompose-rhs.
        Guard (vl-expr-p zapped).
    atts — Attributes for the new expression.
        Guard (vl-atts-p atts).
    Returns
    new-x — Type (vl-expr-p new-x).

    This is very much like vl-wildeq-replacement-expr except that we target !=? instead of ==?.

    Here we want to check whether

    (LHS & CARE-MASK) != ZAPPED

    But, per oprewrite, we actually want to write:

    | (  (LHS & CARE-MASK) ^ ZAPPED )

    Definitions and Theorems

    Function: vl-wildneq-replacement-expr

    (defun vl-wildneq-replacement-expr (lhs care-mask zapped atts)
      (declare (xargs :guard (and (vl-expr-p lhs)
                                  (vl-expr-p care-mask)
                                  (vl-expr-p zapped)
                                  (vl-atts-p atts))))
      (declare (xargs :guard (and (vl-expr-welltyped-p lhs)
                                  (vl-expr-welltyped-p care-mask)
                                  (vl-expr-welltyped-p zapped)
                                  (posp (vl-expr->finalwidth lhs))
                                  (equal (vl-expr->finalwidth care-mask)
                                         (vl-expr->finalwidth lhs))
                                  (equal (vl-expr->finalwidth zapped)
                                         (vl-expr->finalwidth lhs))
                                  (vl-expr->finaltype lhs)
                                  (equal (vl-expr->finaltype care-mask)
                                         (vl-expr->finaltype lhs))
                                  (equal (vl-expr->finaltype zapped)
                                         (vl-expr->finaltype lhs)))))
      (let ((__function__ 'vl-wildneq-replacement-expr))
        (declare (ignorable __function__))
        (b* ((width (vl-expr->finalwidth lhs))
             (type (vl-expr->finaltype lhs))
             (masked-lhs (make-vl-nonatom :op :vl-binary-bitand
                                          :args (list lhs care-mask)
                                          :finalwidth width
                                          :finaltype type))
             (inner-xor (make-vl-nonatom :op :vl-binary-xor
                                         :args (list masked-lhs zapped)
                                         :finalwidth width
                                         :finaltype type)))
          (make-vl-nonatom :op :vl-unary-bitor
                           :args (list inner-xor)
                           :finalwidth 1
                           :finaltype :vl-unsigned
                           :atts atts))))

    Theorem: vl-expr-p-of-vl-wildneq-replacement-expr

    (defthm vl-expr-p-of-vl-wildneq-replacement-expr
      (b*
       ((new-x (vl-wildneq-replacement-expr lhs care-mask zapped atts)))
       (vl-expr-p new-x))
      :rule-classes :rewrite)

    Theorem: vl-expr-welltyped-p-of-vl-wildneq-replacement-expr

    (defthm vl-expr-welltyped-p-of-vl-wildneq-replacement-expr
     (implies
      (and (force (vl-expr-p lhs))
           (force (vl-expr-p care-mask))
           (force (vl-expr-p zapped))
           (force (vl-atts-p atts))
           (force (vl-expr-welltyped-p lhs))
           (force (vl-expr-welltyped-p care-mask))
           (force (vl-expr-welltyped-p zapped))
           (force (posp (vl-expr->finalwidth$inline lhs)))
           (force (equal (vl-expr->finalwidth$inline care-mask)
                         (vl-expr->finalwidth$inline lhs)))
           (force (equal (vl-expr->finalwidth$inline zapped)
                         (vl-expr->finalwidth$inline lhs)))
           (force (vl-expr->finaltype$inline lhs))
           (force (equal (vl-expr->finaltype$inline care-mask)
                         (vl-expr->finaltype$inline lhs)))
           (force (equal (vl-expr->finaltype$inline zapped)
                         (vl-expr->finaltype$inline lhs))))
      (b*
       ((new-x (vl-wildneq-replacement-expr lhs care-mask zapped atts)))
       (vl-expr-welltyped-p new-x)))
     :rule-classes :rewrite)

    Theorem: vl-wildneq-replacement-expr-basics

    (defthm vl-wildneq-replacement-expr-basics
      (b*
       ((new-x (vl-wildneq-replacement-expr lhs care-mask zapped atts)))
       (and (equal (vl-expr->finalwidth new-x) 1)
            (equal (vl-expr->finaltype new-x)
                   :vl-unsigned)))
      :rule-classes :rewrite)

    Theorem: vl-wildneq-replacement-expr-of-vl-expr-fix-lhs

    (defthm vl-wildneq-replacement-expr-of-vl-expr-fix-lhs
      (equal (vl-wildneq-replacement-expr (vl-expr-fix lhs)
                                          care-mask zapped atts)
             (vl-wildneq-replacement-expr lhs care-mask zapped atts)))

    Theorem: vl-wildneq-replacement-expr-vl-expr-equiv-congruence-on-lhs

    (defthm vl-wildneq-replacement-expr-vl-expr-equiv-congruence-on-lhs
     (implies
      (vl-expr-equiv lhs lhs-equiv)
      (equal
         (vl-wildneq-replacement-expr lhs care-mask zapped atts)
         (vl-wildneq-replacement-expr lhs-equiv care-mask zapped atts)))
     :rule-classes :congruence)

    Theorem: vl-wildneq-replacement-expr-of-vl-expr-fix-care-mask

    (defthm vl-wildneq-replacement-expr-of-vl-expr-fix-care-mask
      (equal (vl-wildneq-replacement-expr lhs (vl-expr-fix care-mask)
                                          zapped atts)
             (vl-wildneq-replacement-expr lhs care-mask zapped atts)))

    Theorem: vl-wildneq-replacement-expr-vl-expr-equiv-congruence-on-care-mask

    (defthm
      vl-wildneq-replacement-expr-vl-expr-equiv-congruence-on-care-mask
     (implies
      (vl-expr-equiv care-mask care-mask-equiv)
      (equal
         (vl-wildneq-replacement-expr lhs care-mask zapped atts)
         (vl-wildneq-replacement-expr lhs care-mask-equiv zapped atts)))
     :rule-classes :congruence)

    Theorem: vl-wildneq-replacement-expr-of-vl-expr-fix-zapped

    (defthm vl-wildneq-replacement-expr-of-vl-expr-fix-zapped
     (equal
         (vl-wildneq-replacement-expr lhs care-mask (vl-expr-fix zapped)
                                      atts)
         (vl-wildneq-replacement-expr lhs care-mask zapped atts)))

    Theorem: vl-wildneq-replacement-expr-vl-expr-equiv-congruence-on-zapped

    (defthm
         vl-wildneq-replacement-expr-vl-expr-equiv-congruence-on-zapped
     (implies
      (vl-expr-equiv zapped zapped-equiv)
      (equal
         (vl-wildneq-replacement-expr lhs care-mask zapped atts)
         (vl-wildneq-replacement-expr lhs care-mask zapped-equiv atts)))
     :rule-classes :congruence)

    Theorem: vl-wildneq-replacement-expr-of-vl-atts-fix-atts

    (defthm vl-wildneq-replacement-expr-of-vl-atts-fix-atts
      (equal (vl-wildneq-replacement-expr
                  lhs care-mask zapped (vl-atts-fix atts))
             (vl-wildneq-replacement-expr lhs care-mask zapped atts)))

    Theorem: vl-wildneq-replacement-expr-vl-atts-equiv-congruence-on-atts

    (defthm vl-wildneq-replacement-expr-vl-atts-equiv-congruence-on-atts
     (implies
      (vl-atts-equiv atts atts-equiv)
      (equal
         (vl-wildneq-replacement-expr lhs care-mask zapped atts)
         (vl-wildneq-replacement-expr lhs care-mask zapped atts-equiv)))
     :rule-classes :congruence)