Check satisfiability of a literal, and minimize the satisfying assignment if satisfiable.
(aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state) → (mv status sat-invals sat-regvals sat-inmasks sat-regmasks new-state)
Function:
(defun aignet-lit-ipasir-sat-minimize (x invals regvals inmasks regmasks aignet state) (declare (xargs :stobjs (invals regvals inmasks regmasks aignet state))) (declare (xargs :guard (litp x))) (declare (xargs :guard (fanin-litp x aignet))) (let ((__function__ 'aignet-lit-ipasir-sat-minimize)) (declare (ignorable __function__)) (aignet-lits-ipasir-sat-minimize (list x) invals regvals inmasks regmasks aignet state)))
Theorem:
(defthm return-type-of-aignet-lit-ipasir-sat-minimize.status (b* (((mv ?status ?sat-invals ?sat-regvals ?sat-inmasks ?sat-regmasks ?new-state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))) (or (equal status :failed) (equal status :unsat) (equal status :sat))) :rule-classes ((:forward-chaining :trigger-terms ((mv-nth 0 (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))))))
Theorem:
(defthm return-type-of-aignet-lit-ipasir-sat-minimize.sat-invals (b* (((mv ?status ?sat-invals ?sat-regvals ?sat-inmasks ?sat-regmasks ?new-state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))) (equal (len sat-invals) (num-ins aignet))) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-aignet-lit-ipasir-sat-minimize.sat-regvals (b* (((mv ?status ?sat-invals ?sat-regvals ?sat-inmasks ?sat-regmasks ?new-state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))) (equal (len sat-regvals) (num-regs aignet))) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-aignet-lit-ipasir-sat-minimize.sat-inmasks (b* (((mv ?status ?sat-invals ?sat-regvals ?sat-inmasks ?sat-regmasks ?new-state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))) (equal (len sat-inmasks) (num-ins aignet))) :rule-classes :rewrite)
Theorem:
(defthm return-type-of-aignet-lit-ipasir-sat-minimize.sat-regmasks (b* (((mv ?status ?sat-invals ?sat-regvals ?sat-inmasks ?sat-regmasks ?new-state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))) (equal (len sat-regmasks) (num-regs aignet))) :rule-classes :rewrite)
Theorem:
(defthm satisfying-assign-of-aignet-lit-ipasir-sat-minimize (b* (((mv ?status ?sat-invals ?sat-regvals ?sat-inmasks ?sat-regmasks ?new-state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))) (implies (and (equal status :sat) (aignet-litp x aignet) (vals-equiv-under-masks sat-inmasks sat-invals invals1) (vals-equiv-under-masks sat-regmasks sat-regvals regvals1)) (equal (lit-eval x invals1 regvals1 aignet) 1))))
Theorem:
(defthm satisfying-assign-of-aignet-lit-ipasir-sat-minimize-basic (b* (((mv ?status ?sat-invals ?sat-regvals ?sat-inmasks ?sat-regmasks ?new-state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))) (implies (and (equal status :sat) (aignet-litp x aignet)) (equal (lit-eval x sat-invals sat-regvals aignet) 1))))
Theorem:
(defthm aignet-lit-ipasir-sat-minimize-not-unsat-when-sat (b* (((mv ?status ?sat-invals ?sat-regvals ?sat-inmasks ?sat-regmasks ?new-state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))) (implies (and (equal (lit-eval x some-invals some-regvals aignet) 1) (aignet-litp x aignet)) (not (equal status :unsat)))))
Theorem:
(defthm w-state-of-aignet-lit-ipasir-sat-minimize (b* (((mv ?status ?sat-invals ?sat-regvals ?sat-inmasks ?sat-regmasks ?new-state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state))) (equal (w new-state) (w state))))
Theorem:
(defthm aignet-lit-ipasir-sat-minimize-of-lit-fix-x (equal (aignet-lit-ipasir-sat-minimize (lit-fix x) invals regvals inmasks regmasks aignet state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state)))
Theorem:
(defthm aignet-lit-ipasir-sat-minimize-lit-equiv-congruence-on-x (implies (lit-equiv x x-equiv) (equal (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state) (aignet-lit-ipasir-sat-minimize x-equiv invals regvals inmasks regmasks aignet state))) :rule-classes :congruence)
Theorem:
(defthm aignet-lit-ipasir-sat-minimize-of-node-list-fix-aignet (equal (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks (node-list-fix aignet) state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state)))
Theorem:
(defthm aignet-lit-ipasir-sat-minimize-node-list-equiv-congruence-on-aignet (implies (node-list-equiv aignet aignet-equiv) (equal (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet state) (aignet-lit-ipasir-sat-minimize x invals regvals inmasks regmasks aignet-equiv state))) :rule-classes :congruence)