• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • 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-rewrite
            • Svexlist-rewrite-nrev
              • Svex-args-apply-masks
              • 4veclist-quote
              • Svex-simpconfig-p
              • Svex-rewrite-memo-correct
              • Svex-alist-maybe-rewrite-fixpoint
              • Svexlist-compute-masks
              • Svexlist-rewrite-under-masks
              • Svex-alist-rewrite-fixpoint
              • Svexlist-maybe-rewrite-fixpoint
              • Svexlist-rewrite-fixpoint
              • Svexlist-mask-acons
              • Svexlist-mask-alist/toposort
              • Svex-call-simp
              • Svex-alist-compose
              • Svexlist-rewrite-top
              • Svex-alist-subst
              • Svex-alist-compose-rw
              • Svex-argmasks-lookup
              • Svex-alist-subst-rw
              • Svexlist-mask-acons-rev
              • Svex-mask-lookup
              • Svex-mask-acons
              • Svexlist-mask-alist
              • Svex-alist-rewrite-top
              • Constraintlist-compose
              • Svex-substconfig
              • Svex-simpconfig-fix
              • Svex-subst
              • Svex-rewrite-memo-vars-ok
              • Svex-norm-call
              • Svex-3value-mask
              • Svexlist-count-calls-aux
              • Svex-mask-alist-keys
              • Rewriter-tracing
              • Svex-rewrite-top
              • Svexlist-maskfree-rewrite-nrev
              • Svexlist-multirefs-top
              • Svexlist-count-calls
              • Svex-unify
              • Svexlist-toposort-p
              • Svexlist-maskfree-rewrite-top
              • Svex-alist-compose-nrev
              • Rewriting-concatenations
              • Svex-svex-memo
              • Svex-mask-alist
              • Svex-alist-subst-nrev
              • Svex-simpconfig-fix!
              • Svex-rewrite-rules
            • Svex
            • Bit-blasting
            • Functions
            • 4vmask
            • Why-infinite-width
            • Svex-vars
            • Evaluation
            • Values
          • Symbolic-test-vector
          • Vl-to-svex
        • Fgl
        • Vwsim
        • Vl
        • X86isa
        • Svl
        • Rtl
      • Software-verification
      • Math
      • Testing-utilities
    • Rewriting

    Svexlist-rewrite-nrev

    Signature
    (svexlist-rewrite-nrev x masks 
                           multirefs out-multirefs memo acl2::nrev) 
     
      → 
    (mv new-nrev out-multirefs1 memo1)
    Arguments
    x — Guard (svexlist-p x).
    masks — Guard (svex-mask-alist-p masks).
    multirefs — Guard (svex-key-alist-p multirefs).
    out-multirefs — Guard (svex-key-alist-p out-multirefs).
    memo — Guard (svex-svex-memo-p memo).
    Returns
    out-multirefs1 — Type (svex-key-alist-p out-multirefs1).
    memo1 — Type (svex-svex-memo-p memo1).

    Definitions and Theorems

    Function: svexlist-rewrite-nrev

    (defun svexlist-rewrite-nrev
           (x masks
              multirefs out-multirefs memo acl2::nrev)
      (declare (xargs :stobjs (acl2::nrev)))
      (declare (xargs :guard (and (svexlist-p x)
                                  (svex-mask-alist-p masks)
                                  (svex-key-alist-p multirefs)
                                  (svex-key-alist-p out-multirefs)
                                  (svex-svex-memo-p memo))))
      (let ((__function__ 'svexlist-rewrite-nrev))
        (declare (ignorable __function__))
        (if (atom x)
            (b* ((acl2::nrev (acl2::nrev-fix acl2::nrev)))
              (mv acl2::nrev
                  (svex-key-alist-fix out-multirefs)
                  (svex-svex-memo-fix memo)))
          (b* (((mv first out-multirefs memo)
                (svex-rewrite (car x)
                              masks multirefs out-multirefs memo))
               (acl2::nrev (acl2::nrev-push first acl2::nrev)))
            (svexlist-rewrite-nrev (cdr x)
                                   masks multirefs
                                   out-multirefs memo acl2::nrev)))))

    Theorem: svex-key-alist-p-of-svexlist-rewrite-nrev.out-multirefs1

    (defthm svex-key-alist-p-of-svexlist-rewrite-nrev.out-multirefs1
      (b* (((mv ?new-nrev ?out-multirefs1 ?memo1)
            (svexlist-rewrite-nrev x masks multirefs
                                   out-multirefs memo acl2::nrev)))
        (svex-key-alist-p out-multirefs1))
      :rule-classes :rewrite)

    Theorem: svex-svex-memo-p-of-svexlist-rewrite-nrev.memo1

    (defthm svex-svex-memo-p-of-svexlist-rewrite-nrev.memo1
      (b* (((mv ?new-nrev ?out-multirefs1 ?memo1)
            (svexlist-rewrite-nrev x masks multirefs
                                   out-multirefs memo acl2::nrev)))
        (svex-svex-memo-p memo1))
      :rule-classes :rewrite)

    Theorem: svexlist-rewrite-nrev-removal

    (defthm svexlist-rewrite-nrev-removal
      (b* (((mv ?new-nrev ?out-multirefs1 ?memo1)
            (svexlist-rewrite-nrev x masks multirefs
                                   out-multirefs memo acl2::nrev)))
        (b* (((mv out-spec out-multirefs1-spec memo1-spec)
              (svexlist-rewrite x masks multirefs out-multirefs memo)))
          (and (equal new-nrev (append acl2::nrev out-spec))
               (equal out-multirefs1 out-multirefs1-spec)
               (equal memo1 memo1-spec)))))

    Theorem: svexlist-rewrite-nrev-of-svexlist-fix-x

    (defthm svexlist-rewrite-nrev-of-svexlist-fix-x
     (equal
         (svexlist-rewrite-nrev (svexlist-fix x)
                                masks
                                multirefs out-multirefs memo acl2::nrev)
         (svexlist-rewrite-nrev x masks multirefs
                                out-multirefs memo acl2::nrev)))

    Theorem: svexlist-rewrite-nrev-svexlist-equiv-congruence-on-x

    (defthm svexlist-rewrite-nrev-svexlist-equiv-congruence-on-x
     (implies
      (svexlist-equiv x x-equiv)
      (equal
         (svexlist-rewrite-nrev x masks
                                multirefs out-multirefs memo acl2::nrev)
         (svexlist-rewrite-nrev x-equiv masks multirefs
                                out-multirefs memo acl2::nrev)))
     :rule-classes :congruence)

    Theorem: svexlist-rewrite-nrev-of-svex-mask-alist-fix-masks

    (defthm svexlist-rewrite-nrev-of-svex-mask-alist-fix-masks
     (equal
         (svexlist-rewrite-nrev x (svex-mask-alist-fix masks)
                                multirefs out-multirefs memo acl2::nrev)
         (svexlist-rewrite-nrev x masks multirefs
                                out-multirefs memo acl2::nrev)))

    Theorem: svexlist-rewrite-nrev-svex-mask-alist-equiv-congruence-on-masks

    (defthm
        svexlist-rewrite-nrev-svex-mask-alist-equiv-congruence-on-masks
     (implies
      (svex-mask-alist-equiv masks masks-equiv)
      (equal
         (svexlist-rewrite-nrev x masks
                                multirefs out-multirefs memo acl2::nrev)
         (svexlist-rewrite-nrev x masks-equiv multirefs
                                out-multirefs memo acl2::nrev)))
     :rule-classes :congruence)

    Theorem: svexlist-rewrite-nrev-of-svex-key-alist-fix-multirefs

    (defthm svexlist-rewrite-nrev-of-svex-key-alist-fix-multirefs
      (equal
           (svexlist-rewrite-nrev x masks (svex-key-alist-fix multirefs)
                                  out-multirefs memo acl2::nrev)
           (svexlist-rewrite-nrev x masks multirefs
                                  out-multirefs memo acl2::nrev)))

    Theorem: svexlist-rewrite-nrev-svex-key-alist-equiv-congruence-on-multirefs

    (defthm
     svexlist-rewrite-nrev-svex-key-alist-equiv-congruence-on-multirefs
     (implies
      (svex-key-alist-equiv multirefs multirefs-equiv)
      (equal
         (svexlist-rewrite-nrev x masks
                                multirefs out-multirefs memo acl2::nrev)
         (svexlist-rewrite-nrev x masks multirefs-equiv
                                out-multirefs memo acl2::nrev)))
     :rule-classes :congruence)

    Theorem: svexlist-rewrite-nrev-of-svex-key-alist-fix-out-multirefs

    (defthm svexlist-rewrite-nrev-of-svex-key-alist-fix-out-multirefs
      (equal (svexlist-rewrite-nrev x masks multirefs
                                    (svex-key-alist-fix out-multirefs)
                                    memo acl2::nrev)
             (svexlist-rewrite-nrev x masks multirefs
                                    out-multirefs memo acl2::nrev)))

    Theorem: svexlist-rewrite-nrev-svex-key-alist-equiv-congruence-on-out-multirefs

    (defthm
     svexlist-rewrite-nrev-svex-key-alist-equiv-congruence-on-out-multirefs
     (implies
      (svex-key-alist-equiv out-multirefs out-multirefs-equiv)
      (equal
         (svexlist-rewrite-nrev x masks
                                multirefs out-multirefs memo acl2::nrev)
         (svexlist-rewrite-nrev x masks multirefs
                                out-multirefs-equiv memo acl2::nrev)))
     :rule-classes :congruence)

    Theorem: svexlist-rewrite-nrev-of-svex-svex-memo-fix-memo

    (defthm svexlist-rewrite-nrev-of-svex-svex-memo-fix-memo
     (equal
          (svexlist-rewrite-nrev x masks multirefs
                                 out-multirefs (svex-svex-memo-fix memo)
                                 acl2::nrev)
          (svexlist-rewrite-nrev x masks multirefs
                                 out-multirefs memo acl2::nrev)))

    Theorem: svexlist-rewrite-nrev-svex-svex-memo-equiv-congruence-on-memo

    (defthm
          svexlist-rewrite-nrev-svex-svex-memo-equiv-congruence-on-memo
     (implies
      (svex-svex-memo-equiv memo memo-equiv)
      (equal
         (svexlist-rewrite-nrev x masks
                                multirefs out-multirefs memo acl2::nrev)
         (svexlist-rewrite-nrev x masks multirefs
                                out-multirefs memo-equiv acl2::nrev)))
     :rule-classes :congruence)