• 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-wildeq-rewrite-main

    Signature
    (vl-wildeq-rewrite-main x ctx warnings) 
      → 
    (mv new-warnings new-x)
    Arguments
    x — Guard (vl-expr-p x).
    ctx — Guard (vl-context-p ctx).
    warnings — Guard (vl-warninglist-p warnings).
    Returns
    new-warnings — Type (vl-warninglist-p new-warnings).
    new-x — Type (vl-expr-p new-x).

    Definitions and Theorems

    Function: vl-wildeq-rewrite-main

    (defun vl-wildeq-rewrite-main (x ctx warnings)
     (declare (xargs :guard (and (vl-expr-p x)
                                 (vl-context-p ctx)
                                 (vl-warninglist-p warnings))))
     (declare (xargs :guard (and (not (vl-atom-p x))
                                 (or (eq (vl-nonatom->op x)
                                         :vl-binary-wildeq)
                                     (eq (vl-nonatom->op x)
                                         :vl-binary-wildneq)))))
     (let ((__function__ 'vl-wildeq-rewrite-main))
      (declare (ignorable __function__))
      (b*
       ((x (vl-expr-fix x))
        (ctx (vl-context-fix ctx))
        ((unless (vl-expr-welltyped-p x))
         (mv
          (warn
           :type :vl-wildeq-fail
           :msg
           "~a0: failing to simplify wildcard equality operator ~
                            because it is not well-typed: ~a1."
           :args (list ctx x))
          x))
        ((vl-nonatom x) x)
        ((list lhs rhs) x.args)
        ((mv okp care-mask zap-expr)
         (vl-wildeq-decompose-rhs rhs))
        ((unless okp)
         (mv
          (warn
           :type :vl-wildeq-fail
           :msg
           "~a0: right-hand side of wildcard equality operator ~
                             is too complex; we only support constants.  ~
                             Expression: ~a1."
           :args (list ctx x))
          x))
        (new-x
         (if (eq x.op :vl-binary-wildeq)
             (vl-wildeq-replacement-expr lhs care-mask zap-expr x.atts)
          (vl-wildneq-replacement-expr lhs care-mask zap-expr x.atts))))
       (mv (ok) new-x))))

    Theorem: vl-warninglist-p-of-vl-wildeq-rewrite-main.new-warnings

    (defthm vl-warninglist-p-of-vl-wildeq-rewrite-main.new-warnings
      (b* (((mv ?new-warnings ?new-x)
            (vl-wildeq-rewrite-main x ctx warnings)))
        (vl-warninglist-p new-warnings))
      :rule-classes :rewrite)

    Theorem: vl-expr-p-of-vl-wildeq-rewrite-main.new-x

    (defthm vl-expr-p-of-vl-wildeq-rewrite-main.new-x
      (b* (((mv ?new-warnings ?new-x)
            (vl-wildeq-rewrite-main x ctx warnings)))
        (vl-expr-p new-x))
      :rule-classes :rewrite)

    Theorem: vl-expr-welltyped-p-after-vl-wildeq-rewrite-main

    (defthm vl-expr-welltyped-p-after-vl-wildeq-rewrite-main
      (implies (and (vl-expr-welltyped-p x)
                    (not (vl-atom-p x))
                    (or (eq (vl-nonatom->op x)
                            :vl-binary-wildeq)
                        (eq (vl-nonatom->op x)
                            :vl-binary-wildneq)))
               (b* (((mv ?warnings new-x)
                     (vl-wildeq-rewrite-main x ctx warnings)))
                 (and (vl-expr-welltyped-p new-x)
                      (equal (vl-expr->finalwidth new-x)
                             (vl-expr->finalwidth x))
                      (equal (vl-expr->finaltype new-x)
                             (vl-expr->finaltype x))))))

    Theorem: vl-wildeq-rewrite-main-of-vl-expr-fix-x

    (defthm vl-wildeq-rewrite-main-of-vl-expr-fix-x
      (equal (vl-wildeq-rewrite-main (vl-expr-fix x)
                                     ctx warnings)
             (vl-wildeq-rewrite-main x ctx warnings)))

    Theorem: vl-wildeq-rewrite-main-vl-expr-equiv-congruence-on-x

    (defthm vl-wildeq-rewrite-main-vl-expr-equiv-congruence-on-x
      (implies (vl-expr-equiv x x-equiv)
               (equal (vl-wildeq-rewrite-main x ctx warnings)
                      (vl-wildeq-rewrite-main x-equiv ctx warnings)))
      :rule-classes :congruence)

    Theorem: vl-wildeq-rewrite-main-of-vl-context-fix-ctx

    (defthm vl-wildeq-rewrite-main-of-vl-context-fix-ctx
      (equal (vl-wildeq-rewrite-main x (vl-context-fix ctx)
                                     warnings)
             (vl-wildeq-rewrite-main x ctx warnings)))

    Theorem: vl-wildeq-rewrite-main-vl-context-equiv-congruence-on-ctx

    (defthm vl-wildeq-rewrite-main-vl-context-equiv-congruence-on-ctx
      (implies (vl-context-equiv ctx ctx-equiv)
               (equal (vl-wildeq-rewrite-main x ctx warnings)
                      (vl-wildeq-rewrite-main x ctx-equiv warnings)))
      :rule-classes :congruence)

    Theorem: vl-wildeq-rewrite-main-of-vl-warninglist-fix-warnings

    (defthm vl-wildeq-rewrite-main-of-vl-warninglist-fix-warnings
     (equal (vl-wildeq-rewrite-main x ctx (vl-warninglist-fix warnings))
            (vl-wildeq-rewrite-main x ctx warnings)))

    Theorem: vl-wildeq-rewrite-main-vl-warninglist-equiv-congruence-on-warnings

    (defthm
     vl-wildeq-rewrite-main-vl-warninglist-equiv-congruence-on-warnings
     (implies (vl-warninglist-equiv warnings warnings-equiv)
              (equal (vl-wildeq-rewrite-main x ctx warnings)
                     (vl-wildeq-rewrite-main x ctx warnings-equiv)))
     :rule-classes :congruence)