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