Collect strings representing (approximately) the individual bits of wires involved in an expression.
(vl-expr-approx-bits x ss) → approx-bits
We try to return a list of strings like
Theorem:
(defthm return-type-of-vl-expr-approx-bits.approx-bits (b* ((?approx-bits (vl-expr-approx-bits x ss))) (string-listp approx-bits)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-vl-exprlist-approx-bits.bits (b* ((?bits (vl-exprlist-approx-bits x ss))) (string-listp bits)) :rule-classes :rewrite)
Theorem:
(defthm vl-expr-approx-bits-of-vl-expr-fix-x (equal (vl-expr-approx-bits (vl-expr-fix x) ss) (vl-expr-approx-bits x ss)))
Theorem:
(defthm vl-expr-approx-bits-of-vl-scopestack-fix-ss (equal (vl-expr-approx-bits x (vl-scopestack-fix ss)) (vl-expr-approx-bits x ss)))
Theorem:
(defthm vl-exprlist-approx-bits-of-vl-exprlist-fix-x (equal (vl-exprlist-approx-bits (vl-exprlist-fix x) ss) (vl-exprlist-approx-bits x ss)))
Theorem:
(defthm vl-exprlist-approx-bits-of-vl-scopestack-fix-ss (equal (vl-exprlist-approx-bits x (vl-scopestack-fix ss)) (vl-exprlist-approx-bits x ss)))
Theorem:
(defthm vl-expr-approx-bits-vl-expr-equiv-congruence-on-x (implies (vl-expr-equiv x x-equiv) (equal (vl-expr-approx-bits x ss) (vl-expr-approx-bits x-equiv ss))) :rule-classes :congruence)
Theorem:
(defthm vl-expr-approx-bits-vl-scopestack-equiv-congruence-on-ss (implies (vl-scopestack-equiv ss ss-equiv) (equal (vl-expr-approx-bits x ss) (vl-expr-approx-bits x ss-equiv))) :rule-classes :congruence)
Theorem:
(defthm vl-exprlist-approx-bits-vl-exprlist-equiv-congruence-on-x (implies (vl-exprlist-equiv x x-equiv) (equal (vl-exprlist-approx-bits x ss) (vl-exprlist-approx-bits x-equiv ss))) :rule-classes :congruence)
Theorem:
(defthm vl-exprlist-approx-bits-vl-scopestack-equiv-congruence-on-ss (implies (vl-scopestack-equiv ss ss-equiv) (equal (vl-exprlist-approx-bits x ss) (vl-exprlist-approx-bits x ss-equiv))) :rule-classes :congruence)