other
(in-package "LRAT")
other
(include-book "lrat-checker")
extend-with-prooffunction
(defun extend-with-proof (ncls ndel formula proof) (cond ((atom proof) formula) (t (let* ((entry (car proof)) (delete-flg (proof-entry-deletion-p entry))) (cond (delete-flg (let* ((indices (proof-entry-deletion-indices entry)) (new-formula (delete-clauses indices formula)) (len (length indices)) (ncls (- ncls len)) (ndel (+ ndel len))) (extend-with-proof ncls ndel new-formula (cdr proof)))) (t (let ((clause (access add-step entry :clause))) (mv-let (ncls ndel formula) (verify-clause formula entry ncls ndel) (let* ((index (access add-step entry :index)) (new-formula (add-proof-clause index clause formula))) (if (null clause) new-formula (extend-with-proof (1+ ncls) ndel new-formula (cdr proof))))))))))))
other
(defthm formula-p-delete-clauses (implies (and (formula-p fal) (index-listp index-list)) (formula-p (delete-clauses index-list fal))))
other
(defthm formula-p-add-proof-clause (implies (and (posp index) (clause-or-assignment-p clause) (formula-p formula)) (formula-p (add-proof-clause index clause formula))))
other
(encapsulate nil (local (defthm hons-assoc-equal-delete-clauses-member-equal-case (implies (equal (hons-assoc-equal index fal) (cons index *deleted-clause*)) (equal (hons-assoc-equal index (delete-clauses index-list fal)) (cons index *deleted-clause*))))) (local (defthm hons-assoc-equal-delete-clauses (equal (hons-assoc-equal index (delete-clauses index-list fal)) (if (member-equal index index-list) (cons index *deleted-clause*) (hons-assoc-equal index fal))))) (local (defthm delete-clauses-preserves-formula-truep (implies (and (formula-p formula) (clause-or-assignment-p assignment) (formula-truep formula assignment)) (formula-truep (delete-clauses index-list formula) assignment)) :hints (("Goal" :in-theory (disable formula-truep) :expand ((formula-truep (delete-clauses index-list formula) assignment)) :restrict ((formula-truep-necc ((index (formula-truep-witness (delete-clauses index-list formula) assignment))))))))) (defthm delete-clauses-preserves-satisfiable (implies (and (formula-p formula) (satisfiable formula)) (satisfiable (delete-clauses index-list formula))) :hints (("Goal" :in-theory (disable satisfiable formula-truep) :expand ((satisfiable formula)) :restrict ((satisfiable-suff ((assignment (satisfiable-witness formula)))))))))
other
(encapsulate nil (local (include-book "satisfiable-add-proof-clause")) (defthm satisfiable-add-proof-clause (mv-let (ncls ndel new-formula) (verify-clause formula entry ncls ndel) (declare (ignore ndel)) (implies (and ncls (proof-entry-p entry) (not (proof-entry-deletion-p entry)) (formula-p formula) (satisfiable formula)) (satisfiable (add-proof-clause (access add-step entry :index) (access add-step entry :clause) new-formula))))))
other
(in-theory (disable add-proof-clause verify-clause))
other
(defthm formula-truep-cons-shrink-formula (implies (and (formula-p formula) (clause-or-assignment-p assignment) (formula-truep (cons pair (shrink-formula formula)) assignment)) (formula-truep (cons pair formula) assignment)) :hints (("Goal" :expand ((formula-truep (cons pair formula) assignment)) :restrict ((formula-truep-necc ((index (formula-truep-witness (cons pair formula) assignment))))))))
other
(defthm satisfiable-cons-shrink-formula (implies (formula-p formula) (implies (satisfiable (cons pair (shrink-formula formula))) (satisfiable (cons pair formula)))) :hints (("Goal" :expand ((satisfiable (cons pair (shrink-formula formula)))) :restrict ((satisfiable-suff ((assignment (satisfiable-witness (cons pair (shrink-formula formula))))))))))
other
(encapsulate nil (local (defthm not-satisfiable-add-proof-clause-nil (implies (and (formula-p formula) (posp index)) (not (satisfiable (add-proof-clause index nil formula)))) :hints (("Goal" :in-theory (enable add-proof-clause satisfiable) :restrict ((formula-truep-necc ((index index)))))) :rule-classes nil)) (defthm verify-clause-implies-unsatisfiable (implies (and (formula-p formula) (proof-entry-p entry) (equal (access add-step entry :clause) nil) (satisfiable formula)) (not (car (verify-clause formula entry ncls ndel)))) :hints (("Goal" :in-theory (enable verify-clause add-proof-clause maybe-shrink-formula) :use ((:instance not-satisfiable-add-proof-clause-nil (index (access add-step entry :index))) (:instance satisfiable-add-proof-clause (entry (change add-step entry :clause nil))))))))
other
(defthm formula-p-mv-nth-2-verify-clause (implies (formula-p formula) (formula-p (mv-nth 2 (verify-clause formula entry ncls ndel)))) :hints (("Goal" :in-theory (enable verify-clause maybe-shrink-formula))))
other
(defthm extend-with-proof-preserves-satisfiable (implies (and (formula-p formula) (proofp proof) (verify-proof-rec ncls ndel formula proof) (satisfiable formula)) (satisfiable (extend-with-proof ncls ndel formula proof))) :rule-classes nil)
other
(defthm not-formula-truep-add-nil-clause (not (formula-truep (cons (list (car (car (car proof)))) fal) assignment)) :hints (("Goal" :restrict ((formula-truep-necc ((index (car (car (car proof))))))))))
other
(defthm proof-contradiction-p-implies-false (implies (and (formula-p formula) (proofp proof) (proof-contradiction-p proof)) (equal (formula-truep (extend-with-proof ncls ndel formula proof) assignment) nil)) :hints (("Goal" :in-theory (enable verify-clause add-proof-clause maybe-shrink-formula))))
other
(defthm proof-contradiction-p-implies-not-satisfiable (implies (and (formula-p formula) (proofp proof) (proof-contradiction-p proof)) (not (satisfiable (extend-with-proof ncls ndel formula proof)))) :hints (("Goal" :in-theory (e/d (satisfiable) (extend-with-proof)))))