Same as vl-filter-modinsts-by-modname, but requires that the
fast alist of
(vl-filter-modinsts-by-modname+ names x fal) → (mv * *)
Function:
(defun vl-filter-modinsts-by-modname+ (names x fal) (declare (xargs :guard (and (string-listp names) (vl-modinstlist-p x) (set-equiv (alist-keys fal) (list-fix names))))) (let ((__function__ 'vl-filter-modinsts-by-modname+)) (declare (ignorable __function__)) (mbe :logic (vl-filter-modinsts-by-modname names x) :exec (b* (((when (atom names)) (mv nil (list-fix x))) ((when (atom x)) (mv nil nil)) ((local-stobjs nrev nrev2) (mv yes no nrev nrev2)) ((mv nrev nrev2) (vl-fast-filter-modinsts-by-modname names fal x nrev nrev2)) ((mv yes nrev) (nrev-finish nrev)) ((mv no nrev2) (nrev-finish nrev2))) (mv yes no nrev nrev2)))))
Theorem:
(defthm vl-filter-modinsts-by-modname+-of-string-list-fix-names (equal (vl-filter-modinsts-by-modname+ (string-list-fix names) x fal) (vl-filter-modinsts-by-modname+ names x fal)))
Theorem:
(defthm vl-filter-modinsts-by-modname+-string-list-equiv-congruence-on-names (implies (str::string-list-equiv names names-equiv) (equal (vl-filter-modinsts-by-modname+ names x fal) (vl-filter-modinsts-by-modname+ names-equiv x fal))) :rule-classes :congruence)
Theorem:
(defthm vl-filter-modinsts-by-modname+-of-vl-modinstlist-fix-x (equal (vl-filter-modinsts-by-modname+ names (vl-modinstlist-fix x) fal) (vl-filter-modinsts-by-modname+ names x fal)))
Theorem:
(defthm vl-filter-modinsts-by-modname+-vl-modinstlist-equiv-congruence-on-x (implies (vl-modinstlist-equiv x x-equiv) (equal (vl-filter-modinsts-by-modname+ names x fal) (vl-filter-modinsts-by-modname+ names x-equiv fal))) :rule-classes :congruence)