(align-let-vars-values-aux vars index value) → (mv var-names var-types values)
Function:
(defun align-let-vars-values-aux (vars index value) (declare (xargs :guard (and (typed-variable-listp vars) (natp index) (expressionp value)))) (let ((__function__ 'align-let-vars-values-aux)) (declare (ignorable __function__)) (b* (((when (endp vars)) (mv nil nil nil)) (var (car vars)) (name (typed-variable->name var)) (type (typed-variable->type var)) (val (make-expression-component :multi value :index index)) ((mv names types vals) (align-let-vars-values-aux (cdr vars) (1+ (nfix index)) value))) (mv (cons name names) (cons type types) (cons val vals)))))
Theorem:
(defthm identifier-listp-of-align-let-vars-values-aux.var-names (b* (((mv ?var-names ?var-types common-lisp::?values) (align-let-vars-values-aux vars index value))) (identifier-listp var-names)) :rule-classes :rewrite)
Theorem:
(defthm type-listp-of-align-let-vars-values-aux.var-types (b* (((mv ?var-names ?var-types common-lisp::?values) (align-let-vars-values-aux vars index value))) (type-listp var-types)) :rule-classes :rewrite)
Theorem:
(defthm expression-listp-of-align-let-vars-values-aux.values (b* (((mv ?var-names ?var-types common-lisp::?values) (align-let-vars-values-aux vars index value))) (expression-listp values)) :rule-classes :rewrite)
Theorem:
(defthm len-of-align-let-vars-values-aux.names (b* (((mv ?var-names ?var-types common-lisp::?values) (align-let-vars-values-aux vars index value))) (equal (len var-names) (len vars))))
Theorem:
(defthm len-of-align-let-vars-values-aux.types (b* (((mv ?var-names ?var-types common-lisp::?values) (align-let-vars-values-aux vars index value))) (equal (len var-types) (len vars))))
Theorem:
(defthm len-of-align-let-vars-values-aux.values (b* (((mv ?var-names ?var-types common-lisp::?values) (align-let-vars-values-aux vars index value))) (equal (len values) (len vars))))
Theorem:
(defthm align-let-vars-values-aux-of-typed-variable-list-fix-vars (equal (align-let-vars-values-aux (typed-variable-list-fix vars) index value) (align-let-vars-values-aux vars index value)))
Theorem:
(defthm align-let-vars-values-aux-typed-variable-list-equiv-congruence-on-vars (implies (typed-variable-list-equiv vars vars-equiv) (equal (align-let-vars-values-aux vars index value) (align-let-vars-values-aux vars-equiv index value))) :rule-classes :congruence)
Theorem:
(defthm align-let-vars-values-aux-of-nfix-index (equal (align-let-vars-values-aux vars (nfix index) value) (align-let-vars-values-aux vars index value)))
Theorem:
(defthm align-let-vars-values-aux-nat-equiv-congruence-on-index (implies (nat-equiv index index-equiv) (equal (align-let-vars-values-aux vars index value) (align-let-vars-values-aux vars index-equiv value))) :rule-classes :congruence)
Theorem:
(defthm align-let-vars-values-aux-of-expression-fix-value (equal (align-let-vars-values-aux vars index (expression-fix value)) (align-let-vars-values-aux vars index value)))
Theorem:
(defthm align-let-vars-values-aux-expression-equiv-congruence-on-value (implies (expression-equiv value value-equiv) (equal (align-let-vars-values-aux vars index value) (align-let-vars-values-aux vars index value-equiv))) :rule-classes :congruence)