Extend vl-partition-plainarg across a list of arguments.
(vl-partition-plainarglist args port-widths insts ss elem warnings) → (mv successp warnings plainarglists)
Supposing that
Function:
(defun vl-partition-plainarglist (args port-widths insts ss elem warnings) (declare (xargs :guard (and (vl-plainarglist-p args) (pos-listp port-widths) (posp insts) (vl-scopestack-p ss) (vl-modelement-p elem) (vl-warninglist-p warnings)))) (declare (xargs :guard (same-lengthp args port-widths))) (let ((__function__ 'vl-partition-plainarglist)) (declare (ignorable __function__)) (b* (((when (atom args)) (mv t (ok) nil)) ((mv successp warnings car-result) (vl-partition-plainarg (car args) (car port-widths) insts ss elem warnings)) ((unless successp) (mv nil warnings nil)) ((mv successp warnings cdr-result) (vl-partition-plainarglist (cdr args) (cdr port-widths) insts ss elem warnings)) ((unless successp) (mv nil warnings nil))) (mv t warnings (cons car-result cdr-result)))))
Theorem:
(defthm booleanp-of-vl-partition-plainarglist.successp (b* (((mv ?successp ?warnings ?plainarglists) (vl-partition-plainarglist args port-widths insts ss elem warnings))) (booleanp successp)) :rule-classes :type-prescription)
Theorem:
(defthm vl-warninglist-p-of-vl-partition-plainarglist.warnings (b* (((mv ?successp ?warnings ?plainarglists) (vl-partition-plainarglist args port-widths insts ss elem warnings))) (vl-warninglist-p warnings)) :rule-classes :rewrite)
Theorem:
(defthm vl-plainarglistlist-p-of-vl-partition-plainarglist.plainarglists (b* (((mv ?successp ?warnings ?plainarglists) (vl-partition-plainarglist args port-widths insts ss elem warnings))) (vl-plainarglistlist-p plainarglists)) :rule-classes :rewrite)
Theorem:
(defthm vl-partition-plainarglist-mvtypes-0 (booleanp (mv-nth 0 (vl-partition-plainarglist args port-widths insts ss elem warnings))) :rule-classes :type-prescription)
Theorem:
(defthm vl-partition-plainarglist-mvtypes-2 (true-listp (mv-nth 2 (vl-partition-plainarglist args port-widths insts ss elem warnings))) :rule-classes :type-prescription)
Theorem:
(defthm all-have-len-of-vl-partition-plainarglist (let ((ret (vl-partition-plainarglist args port-widths insts ss elem warnings))) (implies (and (mv-nth 0 ret) (equal len (pos-fix insts))) (all-have-len (mv-nth 2 ret) len))))
Theorem:
(defthm vl-partition-plainarglist-of-vl-plainarglist-fix-args (equal (vl-partition-plainarglist (vl-plainarglist-fix args) port-widths insts ss elem warnings) (vl-partition-plainarglist args port-widths insts ss elem warnings)))
Theorem:
(defthm vl-partition-plainarglist-vl-plainarglist-equiv-congruence-on-args (implies (vl-plainarglist-equiv args args-equiv) (equal (vl-partition-plainarglist args port-widths insts ss elem warnings) (vl-partition-plainarglist args-equiv port-widths insts ss elem warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-partition-plainarglist-of-pos-fix-insts (equal (vl-partition-plainarglist args port-widths (pos-fix insts) ss elem warnings) (vl-partition-plainarglist args port-widths insts ss elem warnings)))
Theorem:
(defthm vl-partition-plainarglist-pos-equiv-congruence-on-insts (implies (acl2::pos-equiv insts insts-equiv) (equal (vl-partition-plainarglist args port-widths insts ss elem warnings) (vl-partition-plainarglist args port-widths insts-equiv ss elem warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-partition-plainarglist-of-vl-scopestack-fix-ss (equal (vl-partition-plainarglist args port-widths insts (vl-scopestack-fix ss) elem warnings) (vl-partition-plainarglist args port-widths insts ss elem warnings)))
Theorem:
(defthm vl-partition-plainarglist-vl-scopestack-equiv-congruence-on-ss (implies (vl-scopestack-equiv ss ss-equiv) (equal (vl-partition-plainarglist args port-widths insts ss elem warnings) (vl-partition-plainarglist args port-widths insts ss-equiv elem warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-partition-plainarglist-of-vl-modelement-fix-elem (equal (vl-partition-plainarglist args port-widths insts ss (vl-modelement-fix elem) warnings) (vl-partition-plainarglist args port-widths insts ss elem warnings)))
Theorem:
(defthm vl-partition-plainarglist-vl-modelement-equiv-congruence-on-elem (implies (vl-modelement-equiv elem elem-equiv) (equal (vl-partition-plainarglist args port-widths insts ss elem warnings) (vl-partition-plainarglist args port-widths insts ss elem-equiv warnings))) :rule-classes :congruence)
Theorem:
(defthm vl-partition-plainarglist-of-vl-warninglist-fix-warnings (equal (vl-partition-plainarglist args port-widths insts ss elem (vl-warninglist-fix warnings)) (vl-partition-plainarglist args port-widths insts ss elem warnings)))
Theorem:
(defthm vl-partition-plainarglist-vl-warninglist-equiv-congruence-on-warnings (implies (vl-warninglist-equiv warnings warnings-equiv) (equal (vl-partition-plainarglist args port-widths insts ss elem warnings) (vl-partition-plainarglist args port-widths insts ss elem warnings-equiv))) :rule-classes :congruence)