Specification of the circuit.
We use an if. An alternative is to use logand.
Function:
(defun boolean-not-spec (x y prime) (declare (xargs :guard (and (primep prime) (pfield::fep x prime) (pfield::fep y prime)))) (declare (ignore prime)) (declare (xargs :guard (bitp x))) (let ((__function__ 'boolean-not-spec)) (declare (ignorable __function__)) (equal y (if (= x 0) 1 0))))
Theorem:
(defthm booleanp-of-boolean-not-spec (b* ((yes/no (boolean-not-spec x y prime))) (booleanp yes/no)) :rule-classes :rewrite)
Theorem:
(defthm bitp-y-when-boolean-not-spec (implies (and (boolean-not-spec x y prime) (bitp x)) (bitp y)))