Compose an svex with a substitution alist. Variables not in the substitution are left in place.
(svex-compose* x a) → xa
Theorem:
(defthm return-type-of-svex-compose*.xa (b* ((?xa (svex-compose* x a))) (svex-p xa)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-svexlist-compose*.xa (b* ((?xa (svexlist-compose* x a))) (svexlist-p xa)) :rule-classes :rewrite)
Theorem:
(defthm svex-compose*-of-svex-fix-x (equal (svex-compose* (svex-fix x) a) (svex-compose* x a)))
Theorem:
(defthm svex-compose*-of-svex-alist-fix-a (equal (svex-compose* x (svex-alist-fix a)) (svex-compose* x a)))
Theorem:
(defthm svexlist-compose*-of-svexlist-fix-x (equal (svexlist-compose* (svexlist-fix x) a) (svexlist-compose* x a)))
Theorem:
(defthm svexlist-compose*-of-svex-alist-fix-a (equal (svexlist-compose* x (svex-alist-fix a)) (svexlist-compose* x a)))
Theorem:
(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:
(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:
(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:
(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:
(defthm len-of-svexlist-compose* (equal (len (svexlist-compose* x a)) (len x)))
Theorem:
(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:
(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:
(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:
(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:
(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:
(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:
(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))