Trace("sat-proof") << push << "SatProofManager::explainLit: Lit: " << lit;
Node litNode = getClauseNode(lit);
Trace("sat-proof") << " [" << litNode << "]\n";
+ // We don't need to explain nodes who are inputs. Note that it's *necessary*
+ // to avoid attempting such explanations because they can introduce cycles at
+ // the node level. For example, if a literal l depends on an input clause C
+ // but a literal l', node-equivalent to C, depends on l, we may have a cycle
+ // when building the overall SAT proof.
+ if (d_assumptions.contains(litNode))
+ {
+ Trace("sat-proof")
+ << "SatProofManager::explainLit: input assumption, ABORT\n";
+ return;
+ }
+ // We don't need to explain nodes who already have proofs.
+ //
// Note that if we had two literals for (= a b) and (= b a) and we had already
// a proof for (= a b) this test would return true for (= b a), which could
// lead to open proof. However we should never have two literals like this in
if (it != d_cnfStream->getTranslationCache().end())
{
Trace("sat-proof") << it->second << "\n";
- Trace("sat-proof") << "- " << fa << "\n";
+ Trace("sat-proof") << " - " << fa << "\n";
continue;
}
// then it's a clause
Trace("sat-proof") << it->second << " ";
}
Trace("sat-proof") << "\n";
- Trace("sat-proof") << "- " << fa << "\n";
+ Trace("sat-proof") << " - " << fa << "\n";
}
}
}
// ignore input assumptions. This is necessary to avoid rare collisions
// between input clauses and literals that are equivalent at the node
- // level. In trying to justify the literal below if, it was previously
+ // level. In trying to justify the literal below, if it was previously
// propagated (say, in a previous check-sat call that survived the
// user-context changes) but no longer holds, then we may introduce a
// bogus proof for it, rather than keeping it as an input.
regress0/proofs/open-pf-datatypes.smt2
regress0/proofs/open-pf-if-unordered-iff.smt2
regress0/proofs/open-pf-rederivation.smt2
+ regress0/proofs/qgu-fuzz-1-bool-sat.smt2
regress0/proofs/scope.smt2
regress0/proofs/trust-subs-eq-open.smt2
regress0/push-pop/boolean/fuzz_12.smt2
regress0/quantifiers/issue4576.smt2
regress0/quantifiers/issue5645-dt-cm-spurious.smt2
regress0/quantifiers/issue5693-prenex.smt2
- regress0/quantifiers/issue6475-rr-const.smt2
+ regress0/quantifiers/issue6475-rr-const.smt2
regress0/quantifiers/issue6603-dt-bool-cegqi.smt2
regress0/quantifiers/issue6838-qpdt.smt2
regress0/quantifiers/issue6996-trivial-elim.smt2
regress1/nl/issue3656.smt2
regress1/nl/issue3803-nl-check-model.smt2
regress1/nl/issue3955-ee-double-notify.smt2
- regress1/nl/issue3966-conf-coeff.smt2
+ regress1/nl/issue3966-conf-coeff.smt2
regress1/nl/issue4791-llr.smt2
regress1/nl/issue5372-2-no-m-presolve.smt2
regress1/nl/issue5660-mb-success.smt2
regress1/quantifiers/issue5735-2-subtypes.smt2
regress1/quantifiers/issue5766-wrong-sel-trigger.smt2
regress1/quantifiers/issue5899-qe.smt2
- regress1/quantifiers/issue6607-witness-te.smt2
+ regress1/quantifiers/issue6607-witness-te.smt2
regress1/quantifiers/issue6638-sygus-inst.smt2
regress1/quantifiers/issue6642-em-types.smt2
regress1/quantifiers/issue6699-nc-shadow.smt2
regress1/strings/issue6653-rre-small.smt2
regress1/strings/issue6777-seq-nth-eval-cm.smt2
regress1/strings/issue6913.smt2
- regress1/strings/issue6973-dup-lemma-conc.smt2
+ regress1/strings/issue6973-dup-lemma-conc.smt2
regress1/strings/kaluza-fl.smt2
regress1/strings/loop002.smt2
regress1/strings/loop003.smt2