Extends vl-always-edgesynth to a list of always blocks.
(vl-alwayslist-edgesynth x scary-regs vars cvtregs delta &key vecp) → (mv new-x cvtregs delta)
Function:
(defun vl-alwayslist-edgesynth-fn (x scary-regs vars cvtregs delta vecp) (declare (xargs :guard (and (vl-alwayslist-p x) (string-listp scary-regs) (vl-vardecllist-p vars) (string-listp cvtregs) (vl-delta-p delta)))) (let ((__function__ 'vl-alwayslist-edgesynth)) (declare (ignorable __function__)) (b* (((when (atom x)) (mv nil cvtregs delta)) ((mv new-car? cvtregs delta) (vl-always-edgesynth (car x) scary-regs vars cvtregs delta :vecp vecp)) ((mv new-cdr cvtregs delta) (vl-alwayslist-edgesynth (cdr x) scary-regs vars cvtregs delta :vecp vecp)) (new-x (if new-car? (cons new-car? new-cdr) new-cdr))) (mv new-x cvtregs delta))))
Theorem:
(defthm vl-alwayslist-p-of-vl-alwayslist-edgesynth.new-x (implies (and (force (vl-alwayslist-p x)) (force (string-listp scary-regs)) (force (vl-vardecllist-p vars)) (force (string-listp cvtregs)) (force (vl-delta-p delta))) (b* (((mv ?new-x ?cvtregs ?delta) (vl-alwayslist-edgesynth-fn x scary-regs vars cvtregs delta vecp))) (vl-alwayslist-p new-x))) :rule-classes :rewrite)
Theorem:
(defthm string-listp-of-vl-alwayslist-edgesynth.cvtregs (implies (and (force (vl-alwayslist-p x)) (force (string-listp scary-regs)) (force (vl-vardecllist-p vars)) (force (string-listp cvtregs)) (force (vl-delta-p delta))) (b* (((mv ?new-x ?cvtregs ?delta) (vl-alwayslist-edgesynth-fn x scary-regs vars cvtregs delta vecp))) (string-listp cvtregs))) :rule-classes :rewrite)
Theorem:
(defthm vl-delta-p-of-vl-alwayslist-edgesynth.delta (implies (and (force (vl-alwayslist-p x)) (force (string-listp scary-regs)) (force (vl-vardecllist-p vars)) (force (string-listp cvtregs)) (force (vl-delta-p delta))) (b* (((mv ?new-x ?cvtregs ?delta) (vl-alwayslist-edgesynth-fn x scary-regs vars cvtregs delta vecp))) (vl-delta-p delta))) :rule-classes :rewrite)