other
(in-package "LRAT")
other
(include-book "lrat-checker")
other
(defthm member-equal-monotone (implies (and (subsetp-equal s1 s2) (member-equal a s1)) (member-equal a s2)))
other
(defthm clause-or-assignment-p-forward (implies (and clause (clause-or-assignment-p clause)) (literalp (car clause))) :hints (("Goal" :in-theory (enable clause-or-assignment-p))))
other
(defthm contradiction-implies-conflicting-literalsp (implies (and (member-equal lit x) (member-equal (- lit) x) (literal-listp x)) (conflicting-literalsp x)) :hints (("Goal" :in-theory (enable literalp) :do-not '(generalize))))
other
(defthm clause-or-assignment-p-is-not-contradictory (implies (and (member-equal lit x) (member-equal (- lit) x)) (not (clause-or-assignment-p x))) :hints (("Goal" :in-theory (enable clause-or-assignment-p))))
other
(defthm is-unit-clause-t-monotone (implies (and (equal (is-unit-clause clause a1) t) (clause-or-assignment-p a2) (not (equal (is-unit-clause clause a2) t))) (not (subsetp-equal a1 a2))))
other
(defthm not-member-is-unit-clause (implies (and (is-unit-clause clause assignment) (not (equal (is-unit-clause clause assignment) t))) (not (member-equal (is-unit-clause clause assignment) assignment))))
other
(defthm clause-or-assignment-p-cons-is-unit-clause (implies (and (clause-or-assignment-p a1) (clause-or-assignment-p clause) (is-unit-clause clause a1) (not (equal (is-unit-clause clause a1) t))) (clause-or-assignment-p (cons (is-unit-clause clause a1) a1))) :hints (("Goal" :in-theory (enable clause-or-assignment-p))))
other
(defthm is-unit-clause-t-monotone-alt (implies (and (subsetp-equal a1 a2) (clause-or-assignment-p a2) (not (equal (is-unit-clause clause a2) t))) (not (equal (is-unit-clause clause a1) t))))
other
(defthm is-unit-clause-implies-not-member-car (implies (and (is-unit-clause clause a1) (clause-or-assignment-p a1)) (not (member (car clause) a1))) :rule-classes :forward-chaining)
other
(defthm evaluate-clause-nil-implies-is-unit-clause-t (implies (null (evaluate-clause clause assignment)) (equal (is-unit-clause clause assignment) t)))
other
(defthm subsetp-preserves-evaluate-clause-nil (implies (and (clause-or-assignment-p a2) (null (evaluate-clause clause a1)) (subsetp a1 a2)) (equal (evaluate-clause clause a2) nil)))
other
(defthm is-unit-clause-unchanged (implies (and (subsetp-equal a1 a2) (clause-or-assignment-p a2) (not (equal (is-unit-clause clause a2) t)) (is-unit-clause clause a1) (is-unit-clause clause a2)) (equal (equal (is-unit-clause clause a1) (is-unit-clause clause a2)) t)))
unit-propagation-2function
(defun unit-propagation-2 (formula indices a1 a2) (cond ((endp indices) (list a1 a2)) (t (let* ((pair (hons-get (car indices) formula)) (clause (and pair (not (deleted-clause-p (cdr pair))) (cdr pair))) (unit-literal (and clause (is-unit-clause clause a1)))) (cond ((not unit-literal) (unit-propagation-2 formula (cdr indices) a1 (let ((u2 (and clause (is-unit-clause clause a2)))) (if u2 (cons u2 a2) a2)))) ((eq unit-literal t) t) (t (unit-propagation-2 formula (cdr indices) (add-to-set unit-literal a1) (add-to-set unit-literal a2))))))))
other
(defthm is-unit-clause-superset (implies (and (subsetp a1 a2) (syntaxp (term-order a1 a2)) (clause-or-assignment-p a2) (is-unit-clause clause a1)) (equal (is-unit-clause clause a2) (cond ((member-equal (is-unit-clause clause a1) a2) nil) ((member-equal (negate (is-unit-clause clause a1)) a2) t) (t (is-unit-clause clause a1))))))
other
(defthm clause-or-assignment-p-cons (implies (and (clause-or-assignment-p assignment) (literalp lit) (not (member lit assignment)) (not (member (negate lit) assignment))) (clause-or-assignment-p (cons lit assignment))) :hints (("Goal" :in-theory (enable clause-or-assignment-p))))
other
(defthm clause-or-assignment-p-has-literals (implies (and (clause-or-assignment-p clause) (not (literalp lit))) (not (member lit clause))))
other
(defthm unit-propagation-t-monotone (implies (and (equal (unit-propagation formula indices a1) t) (clause-or-assignment-p a1) (clause-or-assignment-p a2) (subsetp-equal a1 a2) (formula-p formula)) (equal (unit-propagation formula indices a2) t)) :hints (("Goal" :induct (unit-propagation-2 formula indices a1 a2))))
other
(defthm unit-propagation-monotonicity (implies (and (subsetp-equal a1 a2) (not (equal (unit-propagation formula indices a2) t)) (clause-or-assignment-p a1) (clause-or-assignment-p a2) (formula-p formula)) (and (clause-or-assignment-p a1) (subsetp (unit-propagation formula indices a1) (unit-propagation formula indices a2)))) :hints (("Goal" :induct (unit-propagation-2 formula indices a1 a2))))