Variable renaming relation over expression outcomes.
The underlying computation states must be related, and the two value lists must be the same. The latter condition is because values are not subject to renamings.
Function:
(defun eoutcome-renamevarp (old new ren) (declare (xargs :guard (and (eoutcomep old) (eoutcomep new) (renamingp ren)))) (let ((__function__ 'eoutcome-renamevarp)) (declare (ignorable __function__)) (and (cstate-renamevarp (eoutcome->cstate old) (eoutcome->cstate new) ren) (equal (eoutcome->values old) (eoutcome->values new)))))
Theorem:
(defthm booleanp-of-eoutcome-renamevarp (b* ((yes/no (eoutcome-renamevarp old new ren))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm eoutcome-renamevarp-of-eoutcome-fix-old (equal (eoutcome-renamevarp (eoutcome-fix old) new ren) (eoutcome-renamevarp old new ren)))
Theorem:
(defthm eoutcome-renamevarp-eoutcome-equiv-congruence-on-old (implies (eoutcome-equiv old old-equiv) (equal (eoutcome-renamevarp old new ren) (eoutcome-renamevarp old-equiv new ren))) :rule-classes :congruence)
Theorem:
(defthm eoutcome-renamevarp-of-eoutcome-fix-new (equal (eoutcome-renamevarp old (eoutcome-fix new) ren) (eoutcome-renamevarp old new ren)))
Theorem:
(defthm eoutcome-renamevarp-eoutcome-equiv-congruence-on-new (implies (eoutcome-equiv new new-equiv) (equal (eoutcome-renamevarp old new ren) (eoutcome-renamevarp old new-equiv ren))) :rule-classes :congruence)
Theorem:
(defthm eoutcome-renamevarp-of-renaming-fix-ren (equal (eoutcome-renamevarp old new (renaming-fix ren)) (eoutcome-renamevarp old new ren)))
Theorem:
(defthm eoutcome-renamevarp-renaming-equiv-congruence-on-ren (implies (renaming-equiv ren ren-equiv) (equal (eoutcome-renamevarp old new ren) (eoutcome-renamevarp old new ren-equiv))) :rule-classes :congruence)