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