(vl-modelement-elaborate x elabindex &key (reclimit 'reclimit) (config 'config)) → (mv ok warnings new-x new-elabindex)
Function:
(defun vl-modelement-elaborate-fn (x elabindex reclimit config) (declare (xargs :stobjs (elabindex))) (declare (xargs :guard (and (vl-modelement-p x) (natp reclimit) (vl-simpconfig-p config)))) (let ((__function__ 'vl-modelement-elaborate)) (declare (ignorable __function__)) (let ((x (vl-modelement-fix x))) (common-lisp::case (tag x) ((:vl-portdecl) (b* (((mv ok warnings x.vl-portdecl elabindex) (vl-portdecl-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-portdecl elabindex))) ((:vl-assign) (b* (((mv ok warnings x.vl-assign elabindex) (vl-assign-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-assign elabindex))) ((:vl-alias) (b* (((mv ok warnings x.vl-alias elabindex) (vl-alias-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-alias elabindex))) ((:vl-vardecl) (b* (((mv ok warnings x.vl-vardecl elabindex) (vl-vardecl-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-vardecl elabindex))) ((:vl-paramdecl) (b* (((mv ok warnings x.vl-paramdecl elabindex) (vl-paramdecl-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-paramdecl elabindex))) ((:vl-fundecl) (b* (((mv ok warnings x.vl-fundecl elabindex) (vl-fundecl-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-fundecl elabindex))) ((:vl-taskdecl) (b* (((mv ok warnings x.vl-taskdecl elabindex) (vl-taskdecl-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-taskdecl elabindex))) ((:vl-modinst) (b* (((mv ok warnings x.vl-modinst elabindex) (vl-modinst-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-modinst elabindex))) ((:vl-gateinst) (b* (((mv ok warnings x.vl-gateinst elabindex) (vl-gateinst-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-gateinst elabindex))) ((:vl-always) (b* (((mv ok warnings x.vl-always elabindex) (vl-always-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-always elabindex))) ((:vl-initial) (b* (((mv ok warnings x.vl-initial elabindex) (vl-initial-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-initial elabindex))) ((:vl-final) (b* (((mv ok warnings x.vl-final elabindex) (vl-final-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-final elabindex))) ((:vl-typedef) (b* (((mv ok warnings x.vl-typedef elabindex) (vl-typedef-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-typedef elabindex))) ((:vl-import) (b* ((ok t) (warnings nil)) (mv ok warnings x elabindex))) ((:vl-fwdtypedef) (b* ((ok t) (warnings nil)) (mv ok warnings x elabindex))) ((:vl-modport) (b* (((mv ok warnings x.vl-modport elabindex) (vl-modport-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-modport elabindex))) ((:vl-genvar) (b* ((ok t) (warnings nil)) (mv ok warnings x elabindex))) ((:vl-assertion) (b* (((mv ok warnings x.vl-assertion elabindex) (vl-assertion-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-assertion elabindex))) ((:vl-cassertion) (b* (((mv ok warnings x.vl-cassertion elabindex) (vl-cassertion-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-cassertion elabindex))) ((:vl-property) (b* (((mv ok warnings x.vl-property elabindex) (vl-property-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-property elabindex))) ((:vl-sequence) (b* (((mv ok warnings x.vl-sequence elabindex) (vl-sequence-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-sequence elabindex))) ((:vl-clkdecl) (b* (((mv ok warnings x.vl-clkdecl elabindex) (vl-clkdecl-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-clkdecl elabindex))) ((:vl-gclkdecl) (b* (((mv ok warnings x.vl-gclkdecl elabindex) (vl-gclkdecl-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-gclkdecl elabindex))) ((:vl-defaultdisable) (b* (((mv ok warnings x.vl-defaultdisable elabindex) (vl-defaultdisable-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-defaultdisable elabindex))) ((:vl-dpiimport) (b* (((mv ok warnings x.vl-dpiimport elabindex) (vl-dpiimport-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-dpiimport elabindex))) ((:vl-dpiexport) (b* ((ok t) (warnings nil)) (mv ok warnings x elabindex))) ((:vl-bind) (b* (((mv ok warnings x.vl-bind elabindex) (vl-bind-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-bind elabindex))) ((:vl-class) (b* ((ok t) (warnings nil)) (mv ok warnings x elabindex))) ((:vl-covergroup) (b* ((ok t) (warnings nil)) (mv ok warnings x elabindex))) ((:vl-elabtask) (b* (((mv ok warnings x.vl-elabtask elabindex) (vl-elabtask-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-elabtask elabindex))) (otherwise (b* (((mv ok warnings x.vl-letdecl elabindex) (vl-letdecl-elaborate-fn x elabindex reclimit config))) (mv ok warnings x.vl-letdecl elabindex)))))))
Theorem:
(defthm vl-warninglist-p-of-vl-modelement-elaborate.warnings (b* (((mv ?ok ?warnings ?new-x ?new-elabindex) (vl-modelement-elaborate-fn x elabindex reclimit config))) (vl-warninglist-p warnings)) :rule-classes :rewrite)
Theorem:
(defthm vl-modelement-p-of-vl-modelement-elaborate.new-x (b* (((mv ?ok ?warnings ?new-x ?new-elabindex) (vl-modelement-elaborate-fn x elabindex reclimit config))) (vl-modelement-p new-x)) :rule-classes :rewrite)
Theorem:
(defthm vl-modelement-elaborate-fn-of-vl-modelement-fix-x (equal (vl-modelement-elaborate-fn (vl-modelement-fix x) elabindex reclimit config) (vl-modelement-elaborate-fn x elabindex reclimit config)))
Theorem:
(defthm vl-modelement-elaborate-fn-vl-modelement-equiv-congruence-on-x (implies (vl-modelement-equiv x x-equiv) (equal (vl-modelement-elaborate-fn x elabindex reclimit config) (vl-modelement-elaborate-fn x-equiv elabindex reclimit config))) :rule-classes :congruence)
Theorem:
(defthm vl-modelement-elaborate-fn-of-nfix-reclimit (equal (vl-modelement-elaborate-fn x elabindex (nfix reclimit) config) (vl-modelement-elaborate-fn x elabindex reclimit config)))
Theorem:
(defthm vl-modelement-elaborate-fn-nat-equiv-congruence-on-reclimit (implies (acl2::nat-equiv reclimit reclimit-equiv) (equal (vl-modelement-elaborate-fn x elabindex reclimit config) (vl-modelement-elaborate-fn x elabindex reclimit-equiv config))) :rule-classes :congruence)
Theorem:
(defthm vl-modelement-elaborate-fn-of-vl-simpconfig-fix-config (equal (vl-modelement-elaborate-fn x elabindex reclimit (vl-simpconfig-fix config)) (vl-modelement-elaborate-fn x elabindex reclimit config)))
Theorem:
(defthm vl-modelement-elaborate-fn-vl-simpconfig-equiv-congruence-on-config (implies (vl-simpconfig-equiv config config-equiv) (equal (vl-modelement-elaborate-fn x elabindex reclimit config) (vl-modelement-elaborate-fn x elabindex reclimit config-equiv))) :rule-classes :congruence)