• 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
          • Alias-normalization
          • Svex-design-flatten-and-normalize
          • Svex-design-compile
          • Svex-composition
            • Svex-compose-assigns-keys
            • Svex-compose*
            • Svex-compose
              • Svexlist-compose
            • Svex-compose-svstack
            • Svex-assigns-compose1
            • Svex-assigns-compose
            • Svex-compose-bit-sccs
            • Svex-compose-assigns
            • Svex-replace-var
          • Compile.lisp
          • Assign->segment-drivers
          • Segment-driver-map-resolve
          • Assigns->segment-drivers
        • Moddb
        • Svmods
        • Svstmt
        • Sv-tutorial
        • Expressions
        • Symbolic-test-vector
        • Vl-to-svex
      • Fgl
      • Vwsim
      • Vl
      • X86isa
      • Svl
      • Rtl
    • Software-verification
    • Math
    • Testing-utilities
  • Svex-composition

Svex-compose

Compose an svex with a substitution alist. Variables not in the substitution are left in place.

Signature
(svex-compose x a) → xa
Arguments
x — Guard (svex-p x).
a — Guard (svex-alist-p a).
Returns
xa — x composed with a, unbound variables preserved.
    Type (svex-p xa).

Theorem: return-type-of-svex-compose.xa

(defthm return-type-of-svex-compose.xa
  (b* ((?xa (svex-compose x a)))
    (svex-p xa))
  :rule-classes :rewrite)

Theorem: return-type-of-svexlist-compose.xa

(defthm return-type-of-svexlist-compose.xa
  (b* ((?xa (svexlist-compose x a)))
    (svexlist-p xa))
  :rule-classes :rewrite)

Theorem: svex-compose-of-svex-fix-x

(defthm svex-compose-of-svex-fix-x
  (equal (svex-compose (svex-fix x) a)
         (svex-compose x a)))

Theorem: svex-compose-of-svex-alist-fix-a

(defthm svex-compose-of-svex-alist-fix-a
  (equal (svex-compose x (svex-alist-fix a))
         (svex-compose x a)))

Theorem: svexlist-compose-of-svexlist-fix-x

(defthm svexlist-compose-of-svexlist-fix-x
  (equal (svexlist-compose (svexlist-fix x) a)
         (svexlist-compose x a)))

Theorem: svexlist-compose-of-svex-alist-fix-a

(defthm svexlist-compose-of-svex-alist-fix-a
  (equal (svexlist-compose x (svex-alist-fix a))
         (svexlist-compose x a)))

Theorem: svex-compose-svex-equiv-congruence-on-x

(defthm svex-compose-svex-equiv-congruence-on-x
  (implies (svex-equiv x x-equiv)
           (equal (svex-compose x a)
                  (svex-compose x-equiv a)))
  :rule-classes :congruence)

Theorem: svex-compose-svex-alist-equiv-congruence-on-a

(defthm svex-compose-svex-alist-equiv-congruence-on-a
  (implies (svex-alist-equiv a a-equiv)
           (equal (svex-compose x a)
                  (svex-compose x a-equiv)))
  :rule-classes :congruence)

Theorem: svexlist-compose-svexlist-equiv-congruence-on-x

(defthm svexlist-compose-svexlist-equiv-congruence-on-x
  (implies (svexlist-equiv x x-equiv)
           (equal (svexlist-compose x a)
                  (svexlist-compose x-equiv a)))
  :rule-classes :congruence)

Theorem: svexlist-compose-svex-alist-equiv-congruence-on-a

(defthm svexlist-compose-svex-alist-equiv-congruence-on-a
  (implies (svex-alist-equiv a a-equiv)
           (equal (svexlist-compose x a)
                  (svexlist-compose x a-equiv)))
  :rule-classes :congruence)

Theorem: len-of-svexlist-compose

(defthm len-of-svexlist-compose
  (equal (len (svexlist-compose x a))
         (len x)))

Theorem: svex-eval-of-svex-compose

(defthm svex-eval-of-svex-compose
  (equal (svex-eval (svex-compose x a) env)
         (svex-eval x
                    (append (svex-alist-eval a env) env))))

Theorem: svexlist-eval-of-svexlist-compose

(defthm svexlist-eval-of-svexlist-compose
  (equal (svexlist-eval (svexlist-compose x a)
                        env)
         (svexlist-eval x
                        (append (svex-alist-eval a env) env))))

Theorem: vars-of-svex-compose

(defthm vars-of-svex-compose
  (implies (and (not (member v (svex-vars x)))
                (not (member v (svex-alist-vars a))))
           (not (member v (svex-vars (svex-compose x a))))))

Theorem: vars-of-svexlist-compose

(defthm vars-of-svexlist-compose
  (implies (and (not (member v (svexlist-vars x)))
                (not (member v (svex-alist-vars a))))
           (not (member v
                        (svexlist-vars (svexlist-compose x a))))))

Theorem: vars-of-svex-compose-strong

(defthm vars-of-svex-compose-strong
  (implies (and (not (member v (svex-alist-vars a)))
                (or (member v (svex-alist-keys a))
                    (not (member v (svex-vars x)))))
           (not (member v (svex-vars (svex-compose x a))))))

Theorem: vars-of-svexlist-compose-strong

(defthm vars-of-svexlist-compose-strong
  (implies (and (not (member v (svex-alist-vars a)))
                (or (member v (svex-alist-keys a))
                    (not (member v (svexlist-vars x)))))
           (not (member v
                        (svexlist-vars (svexlist-compose x a))))))

Function: svex-compose-memoize-condition

(defun svex-compose-memoize-condition (x a)
  (declare (ignorable x a)
           (xargs :guard (if (svex-p x) (svex-alist-p a) 'nil)))
  (eq (svex-kind x) :call))

Subtopics

Svexlist-compose