Add proofs for nonlinear sign lemmas. (#5707)
authorGereon Kremer <gereon.kremer@cs.rwth-aachen.de>
Wed, 23 Dec 2020 03:40:45 +0000 (04:40 +0100)
committerGitHub <noreply@github.com>
Wed, 23 Dec 2020 03:40:45 +0000 (21:40 -0600)
This PR adds proof support for NL_SIGN lemmas.

src/theory/arith/nl/ext/monomial_check.cpp

index a70fa1bc0bbf55a9589a3c329bacd02ab744c19b..199ba1746fd0ac6d801dcfad40a29a4f300a1262 100644 (file)
@@ -311,8 +311,17 @@ int MonomialCheck::compareSign(
   {
     if (mvaoa.getConst<Rational>().sgn() != 0)
     {
-      Node lemma = av.eqNode(d_data->d_zero).impNode(oa.eqNode(d_data->d_zero));
-      d_data->d_im.addPendingArithLemma(lemma, InferenceId::NL_SIGN);
+      Node prem = av.eqNode(d_data->d_zero);
+      Node conc = oa.eqNode(d_data->d_zero);
+      Node lemma = prem.impNode(conc);
+      CDProof* proof = nullptr;
+      if (d_data->isProofEnabled())
+      {
+        proof = d_data->getProof();
+        proof->addStep(conc, PfRule::MACRO_SR_PRED_INTRO, {prem}, {conc});
+        proof->addStep(lemma, PfRule::SCOPE, {conc}, {prem});
+      }
+      d_data->d_im.addPendingArithLemma(lemma, InferenceId::NL_SIGN, proof);
     }
     return 0;
   }
@@ -737,4 +746,4 @@ void MonomialCheck::setMonomialFactor(Node a,
 }  // namespace nl
 }  // namespace arith
 }  // namespace theory
-}  // namespace CVC4
\ No newline at end of file
+}  // namespace CVC4