Transform a list of external declarations.
(split-fn-ext-declon-list target-fn
new-fn-name extdecls split-point)
→
(mv er? new-extdecls)Function:
(defun split-fn-ext-declon-list (target-fn new-fn-name extdecls split-point) (declare (xargs :guard (and (identp target-fn) (identp new-fn-name) (ext-declon-listp extdecls) (natp split-point)))) (b* (((reterr) nil) ((when (endp extdecls)) (retok nil)) ((erp target-found extdecls1) (split-fn-ext-declon target-fn new-fn-name (first extdecls) split-point)) ((when target-found) (retok (append extdecls1 (ext-declon-list-fix (rest extdecls))))) ((erp extdecls2) (split-fn-ext-declon-list target-fn new-fn-name (rest extdecls) split-point))) (retok (append extdecls1 extdecls2))))
Theorem:
(defthm maybe-msgp-of-split-fn-ext-declon-list.er? (b* (((mv ?er? ?new-extdecls) (split-fn-ext-declon-list target-fn new-fn-name extdecls split-point))) (maybe-msgp er?)) :rule-classes :rewrite)
Theorem:
(defthm ext-declon-listp-of-split-fn-ext-declon-list.new-extdecls (b* (((mv ?er? ?new-extdecls) (split-fn-ext-declon-list target-fn new-fn-name extdecls split-point))) (ext-declon-listp new-extdecls)) :rule-classes :rewrite)