(vl-elabscope-update-subscope? key val x) → new-x
Function:
(defun vl-elabscope-update-subscope? (key val x) (declare (xargs :guard (and (vl-elabkey-p key) (vl-elabscope-p val) (vl-elabscope-p x)))) (let ((__function__ 'vl-elabscope-update-subscope?)) (declare (ignorable __function__)) (if (hons-equal (vl-elabscope-subscope key x) (vl-elabscope-fix val)) (vl-elabscope-fix x) (vl-elabscope-update-subscope key val x))))
Theorem:
(defthm vl-elabscope-p-of-vl-elabscope-update-subscope? (b* ((new-x (vl-elabscope-update-subscope? key val x))) (vl-elabscope-p new-x)) :rule-classes :rewrite)
Theorem:
(defthm vl-elabscope-update-subscope?-of-vl-elabkey-fix-key (equal (vl-elabscope-update-subscope? (vl-elabkey-fix key) val x) (vl-elabscope-update-subscope? key val x)))
Theorem:
(defthm vl-elabscope-update-subscope?-vl-elabkey-equiv-congruence-on-key (implies (vl-elabkey-equiv key key-equiv) (equal (vl-elabscope-update-subscope? key val x) (vl-elabscope-update-subscope? key-equiv val x))) :rule-classes :congruence)
Theorem:
(defthm vl-elabscope-update-subscope?-of-vl-elabscope-fix-val (equal (vl-elabscope-update-subscope? key (vl-elabscope-fix val) x) (vl-elabscope-update-subscope? key val x)))
Theorem:
(defthm vl-elabscope-update-subscope?-vl-elabscope-equiv-congruence-on-val (implies (vl-elabscope-equiv val val-equiv) (equal (vl-elabscope-update-subscope? key val x) (vl-elabscope-update-subscope? key val-equiv x))) :rule-classes :congruence)
Theorem:
(defthm vl-elabscope-update-subscope?-of-vl-elabscope-fix-x (equal (vl-elabscope-update-subscope? key val (vl-elabscope-fix x)) (vl-elabscope-update-subscope? key val x)))
Theorem:
(defthm vl-elabscope-update-subscope?-vl-elabscope-equiv-congruence-on-x (implies (vl-elabscope-equiv x x-equiv) (equal (vl-elabscope-update-subscope? key val x) (vl-elabscope-update-subscope? key val x-equiv))) :rule-classes :congruence)