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))