FGL binder to find common constants (under a set of masks) in two symbolic SVEX environments.
(svex-mask-env-common-constants ans masks env1 env2) → const-env
Function:
(defun svex-mask-env-common-constants (ans masks env1 env2) (declare (xargs :guard (and (svex-env-p ans) (svex-mask-alist-p masks) (svex-env-p env1) (svex-env-p env2)))) (let ((__function__ 'svex-mask-env-common-constants)) (declare (ignorable __function__)) (let ((ans (svex-env-fix ans))) (if (and (ec-call (svex-envs-agree-on-masks masks (append ans env1) env1)) (ec-call (svex-envs-agree-on-masks masks (append ans env2) env2))) ans nil))))
Theorem:
(defthm svex-env-common-constants-correct (b* ((?const-env (svex-mask-env-common-constants ans masks env1 env2))) (and (svex-envs-agree-on-masks masks (append const-env env1) env1) (svex-envs-agree-on-masks masks (append const-env env2) env2))))
Theorem:
(defthm svexlist-eval-of-svex-mask-env-common-constants (b* ((masks (svexlist-mask-alist x)) (?const-env (svex-mask-env-common-constants ans masks env1 env2))) (and (equal (svexlist-eval x (append const-env env1)) (svexlist-eval x env1)) (equal (svexlist-eval x (append const-env env2)) (svexlist-eval x env2)))))
Theorem:
(defthm svex-mask-env-common-constants-of-svex-env-fix-ans (equal (svex-mask-env-common-constants (svex-env-fix ans) masks env1 env2) (svex-mask-env-common-constants ans masks env1 env2)))
Theorem:
(defthm svex-mask-env-common-constants-svex-env-equiv-congruence-on-ans (implies (svex-env-equiv ans ans-equiv) (equal (svex-mask-env-common-constants ans masks env1 env2) (svex-mask-env-common-constants ans-equiv masks env1 env2))) :rule-classes :congruence)
Theorem:
(defthm svex-mask-env-common-constants-of-svex-env-fix-env1 (equal (svex-mask-env-common-constants ans masks (svex-env-fix env1) env2) (svex-mask-env-common-constants ans masks env1 env2)))
Theorem:
(defthm svex-mask-env-common-constants-svex-env-equiv-congruence-on-env1 (implies (svex-env-equiv env1 env1-equiv) (equal (svex-mask-env-common-constants ans masks env1 env2) (svex-mask-env-common-constants ans masks env1-equiv env2))) :rule-classes :congruence)
Theorem:
(defthm svex-mask-env-common-constants-of-svex-env-fix-env2 (equal (svex-mask-env-common-constants ans masks env1 (svex-env-fix env2)) (svex-mask-env-common-constants ans masks env1 env2)))
Theorem:
(defthm svex-mask-env-common-constants-svex-env-equiv-congruence-on-env2 (implies (svex-env-equiv env2 env2-equiv) (equal (svex-mask-env-common-constants ans masks env1 env2) (svex-mask-env-common-constants ans masks env1 env2-equiv))) :rule-classes :congruence)