Collect the arguments to a macro, like
(vl-parse-define-actuals name echars config loc) → (mv successp actuals remainder)
Function:
(defun vl-parse-define-actuals (name echars config loc) (declare (xargs :guard (and (stringp name) (vl-echarlist-p echars) (vl-loadconfig-p config) (vl-location-p loc)))) (let ((__function__ 'vl-parse-define-actuals)) (declare (ignorable __function__)) (b* (((mv successp morep actual1 echars) (vl-parse-define-actual name echars config loc nil nil)) ((unless successp) (mv nil nil echars)) ((unless morep) (mv t (list actual1) echars)) ((mv successp rest-actuals echars) (vl-parse-define-actuals name echars config loc)) ((unless successp) (mv nil nil echars))) (mv t (cons actual1 rest-actuals) echars))))
Theorem:
(defthm booleanp-of-vl-parse-define-actuals.successp (b* (((mv ?successp ?actuals ?remainder) (vl-parse-define-actuals name echars config loc))) (booleanp successp)) :rule-classes :type-prescription)
Theorem:
(defthm string-listp-of-vl-parse-define-actuals.actuals (b* (((mv ?successp ?actuals ?remainder) (vl-parse-define-actuals name echars config loc))) (string-listp actuals)) :rule-classes :rewrite)
Theorem:
(defthm vl-echarlist-p-of-vl-parse-define-actuals.remainder (implies (force (vl-echarlist-p echars)) (b* (((mv ?successp ?actuals ?remainder) (vl-parse-define-actuals name echars config loc))) (vl-echarlist-p remainder))) :rule-classes :rewrite)