(4v-onehot-sexpr-prime vars sexpr) rewrites
How is this reduction accomplished? Well, in the implementation of 4v-shannon-expansion, reduced expressions are formed by using 4v-sexpr-restrict to assume that the variable being is first true, and then false. Our approach is basically similar, and our new sexpr is essentially the following:
(ITE* A1 SEXPR|_{A1=T,A2=NIL,A3=NIL,...AN=NIL) (ITE* A2 SEXPR|_{A1=NIL,A2=T,A3=NIL,...AN=NIL} ... (ITE* AN SEXPR|_{A1=NIL,A2=NIL,A3=NIL,...,AN=T} (X)) ...))
We prove this produces a conservative approximation of
Function:
(defun 4v-onehot-false-bindings (vars) (declare (xargs :guard t)) (if (atom vars) nil (cons (cons (car vars) (4vs-f)) (4v-onehot-false-bindings (cdr vars)))))
Function:
(defun 4v-onehot-sexpr-prime-aux (vars false-bindings sexpr) "Returns SEXPR'" (declare (xargs :guard t)) (b* (((when (atom vars)) (fast-alist-free false-bindings) (4vs-x)) (var (car vars)) (bindings (hons-acons var (4vs-t) false-bindings)) (sexpr/bindings (4v-sexpr-restrict-with-rw sexpr bindings)) (false-bindings (hons-acons var (4vs-f) bindings))) (4vs-ite*-dumb (car vars) sexpr/bindings (4v-onehot-sexpr-prime-aux (cdr vars) false-bindings sexpr))))
Function:
(defun 4v-onehot-sexpr-prime (vars sexpr) (declare (xargs :guard (and (atom-listp vars) (not (member-equal nil vars))))) (4v-onehot-sexpr-prime-aux vars (make-fast-alist (4v-onehot-false-bindings vars)) sexpr))
Theorem:
(defthm alist-equiv-implies-equal-4v-onehot-sexpr-prime-aux-2 (implies (alist-equiv false-bindings false-bindings-equiv) (equal (4v-onehot-sexpr-prime-aux vars false-bindings sexpr) (4v-onehot-sexpr-prime-aux vars false-bindings-equiv sexpr))) :rule-classes (:congruence))
Theorem:
(defthm 4v-sexpr-eval-of-4v-onehot-sexpr-prime (implies (and (4v-onehot-list-p (4v-sexpr-eval-list vars env)) (atom-listp vars) (not (member-equal nil vars))) (4v-<= (4v-sexpr-eval (4v-onehot-sexpr-prime vars sexpr) env) (4v-sexpr-eval sexpr env))))
Theorem:
(defthm 4v-sexpr-vars-of-4v-onehot-sexpr-prime (implies (atom-listp vars) (subsetp-equal (4v-sexpr-vars (4v-onehot-sexpr-prime vars sexpr)) (append vars (4v-sexpr-vars sexpr)))))