(aignet-lit-fix x aignet) fixes the literal
(aignet-lit-fix x aignet) → fix
If
Theorem:
(defthm aignet-lit-fix-when-aignet-litp (implies (aignet-litp x aignet) (equal (aignet-lit-fix x aignet) (lit-fix x))))
Otherwise we adjust it to refer to the constant node, which is unconditionally valid.
Function:
(defun aignet-lit-fix (x aignet) (declare (xargs :guard (and (litp x) (node-listp aignet)))) (let ((__function__ 'aignet-lit-fix)) (declare (ignorable __function__)) (make-lit (aignet-id-fix (lit->var x) aignet) (lit->neg x))))
Theorem:
(defthm litp-of-aignet-lit-fix (b* ((fix (aignet-lit-fix x aignet))) (litp fix)) :rule-classes :type-prescription)
Theorem:
(defthm aignet-litp-of-aignet-lit-fix (aignet-litp (aignet-lit-fix x aignet) aignet))
Theorem:
(defthm aignet-lit-fix-when-aignet-litp (implies (aignet-litp x aignet) (equal (aignet-lit-fix x aignet) (lit-fix x))))
Theorem:
(defthm lit->var-of-aignet-lit-fix (equal (lit->var (aignet-lit-fix x aignet)) (aignet-id-fix (lit->var x) aignet)))
Theorem:
(defthm lit->neg-of-aignet-lit-fix (equal (lit->neg (aignet-lit-fix x aignet)) (lit->neg x)))
Theorem:
(defthm aignet-lit-fix-of-lit-fix-x (equal (aignet-lit-fix (lit-fix x) aignet) (aignet-lit-fix x aignet)))
Theorem:
(defthm aignet-lit-fix-lit-equiv-congruence-on-x (implies (lit-equiv x x-equiv) (equal (aignet-lit-fix x aignet) (aignet-lit-fix x-equiv aignet))) :rule-classes :congruence)
Theorem:
(defthm aignet-lit-fix-of-node-list-fix-aignet (equal (aignet-lit-fix x (node-list-fix aignet)) (aignet-lit-fix x aignet)))
Theorem:
(defthm aignet-lit-fix-node-list-equiv-congruence-on-aignet (implies (node-list-equiv aignet aignet-equiv) (equal (aignet-lit-fix x aignet) (aignet-lit-fix x aignet-equiv))) :rule-classes :congruence)