Explode a
(vl-msb-bitslice-expr x ss warnings) → (mv successp warnings bit-exprs)
We require that
The only reason this function will fail is if some identifier within
Theorem:
(defthm return-type-of-vl-msb-bitslice-expr.successp (b* (((mv ?successp ?warnings ?bit-exprs) (vl-msb-bitslice-expr x ss warnings))) (booleanp successp)) :rule-classes :type-prescription)
Theorem:
(defthm return-type-of-vl-msb-bitslice-expr.warnings (b* (((mv ?successp ?warnings ?bit-exprs) (vl-msb-bitslice-expr x ss warnings))) (vl-warninglist-p warnings)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-vl-msb-bitslice-expr.bit-exprs (b* (((mv ?successp ?warnings ?bit-exprs) (vl-msb-bitslice-expr x ss warnings))) (true-listp bit-exprs)) :rule-classes :type-prescription)
Theorem:
(defthm return-type-of-vl-msb-bitslice-exprlist.successp (b* (((mv ?successp ?warnings ?bit-exprs) (vl-msb-bitslice-exprlist x ss warnings))) (booleanp successp)) :rule-classes :type-prescription)
Theorem:
(defthm return-type-of-vl-msb-bitslice-exprlist.warnings (b* (((mv ?successp ?warnings ?bit-exprs) (vl-msb-bitslice-exprlist x ss warnings))) (vl-warninglist-p warnings)) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-vl-msb-bitslice-exprlist.bit-exprs (b* (((mv ?successp ?warnings ?bit-exprs) (vl-msb-bitslice-exprlist x ss warnings))) (true-listp bit-exprs)) :rule-classes :type-prescription)
Theorem:
(defthm vl-exprlist-p-of-vl-msb-bitslice-expr (let ((ret (vl-msb-bitslice-expr x ss warnings))) (vl-exprlist-p (mv-nth 2 ret))))
Theorem:
(defthm vl-exprlist-p-of-vl-msb-bitslice-exprlist (let ((ret (vl-msb-bitslice-exprlist x ss warnings))) (vl-exprlist-p (mv-nth 2 ret))))
Theorem:
(defthm len-of-vl-msb-bitslice-expr (let ((ret (vl-msb-bitslice-expr x ss warnings))) (implies (and (mv-nth 0 ret) (force (vl-expr-sliceable-p x)) (force (vl-expr-welltyped-p x))) (equal (len (mv-nth 2 ret)) (vl-expr->finalwidth x)))))
Theorem:
(defthm len-of-vl-msb-bitslice-exprlist (let ((ret (vl-msb-bitslice-exprlist x ss warnings))) (implies (and (mv-nth 0 ret) (force (vl-exprlist-sliceable-p x)) (force (vl-exprlist-welltyped-p x))) (equal (len (mv-nth 2 ret)) (sum-nats (vl-exprlist->finalwidths x))))))
Theorem:
(defthm vl-exprlist->finalwidths-of-vl-msb-bitslice-expr (let ((ret (vl-msb-bitslice-expr x ss warnings))) (implies (and (mv-nth 0 ret) (force (vl-expr-sliceable-p x)) (force (vl-expr-welltyped-p x))) (equal (vl-exprlist->finalwidths (mv-nth 2 ret)) (replicate (vl-expr->finalwidth x) 1)))))
Theorem:
(defthm vl-exprlist->finalwidths-of-vl-msb-bitslice-exprlist (let ((ret (vl-msb-bitslice-exprlist x ss warnings))) (implies (and (mv-nth 0 ret) (force (vl-exprlist-sliceable-p x)) (force (vl-exprlist-welltyped-p x))) (equal (vl-exprlist->finalwidths (mv-nth 2 ret)) (replicate (sum-nats (vl-exprlist->finalwidths x)) 1)))))
Theorem:
(defthm vl-exprlist->finaltypes-of-vl-msb-bitslice-expr (let ((ret (vl-msb-bitslice-expr x ss warnings))) (implies (and (mv-nth 0 ret) (force (vl-expr-sliceable-p x)) (force (vl-expr-welltyped-p x))) (equal (vl-exprlist->finaltypes (mv-nth 2 ret)) (replicate (vl-expr->finalwidth x) :vl-unsigned)))))
Theorem:
(defthm vl-exprlist->finaltypes-of-vl-msb-bitslice-exprlist (let ((ret (vl-msb-bitslice-exprlist x ss warnings))) (implies (and (mv-nth 0 ret) (force (vl-exprlist-sliceable-p x)) (force (vl-exprlist-welltyped-p x))) (equal (vl-exprlist->finaltypes (mv-nth 2 ret)) (replicate (sum-nats (vl-exprlist->finalwidths x)) :vl-unsigned)))))
Theorem:
(defthm vl-exprlist-welltyped-p-of-vl-msb-bitslice-expr (let ((ret (vl-msb-bitslice-expr x ss warnings))) (implies (and (mv-nth 0 ret) (force (vl-expr-sliceable-p x)) (force (vl-expr-welltyped-p x))) (vl-exprlist-welltyped-p (mv-nth 2 ret)))))
Theorem:
(defthm vl-exprlist-welltyped-p-of-vl-msb-bitslice-exprlist (let ((ret (vl-msb-bitslice-exprlist x ss warnings))) (implies (and (mv-nth 0 ret) (force (vl-exprlist-sliceable-p x)) (force (vl-exprlist-welltyped-p x))) (vl-exprlist-welltyped-p (mv-nth 2 ret)))))