New way to identify THEORY_LEMMA clusters when printing in the .dot format (#8745)
authorvinciusb <65973642+vinciusb@users.noreply.github.com>
Fri, 20 May 2022 13:36:04 +0000 (10:36 -0300)
committerGitHub <noreply@github.com>
Fri, 20 May 2022 13:36:04 +0000 (13:36 +0000)
Change the way cvc5 identifies THEORY_LEMMA clusters when --print-dot-clusters option is used. Previously, only proof nodes with SCOPE rule after a CNF cluster could identify a THEORY_LEMMA cluster. Now, any of the following rules, after a CNF cluster, can identify it:

1. SCOPE
2. THEORY_LEMMA
3. Any rule R in the following range: CNF_ITE_NEG3 < R < LFSC_RULE

Signed-off-by: Vinícius Braga Freire vinicius.braga.freire@gmail.com
src/proof/dot/dot_printer.cpp
src/proof/dot/dot_printer.h

index 8d648140ed826f0db359df3076b8762141a63c50..b99dab2c1f519d11e13e496724299b8c622ded5b 100644 (file)
@@ -341,7 +341,7 @@ ProofNodeClusterType DotPrinter::defineProofNodeType(const ProofNode* pn,
     return ProofNodeClusterType::FIRST_SCOPE;
   }
   // If the rule is in the SAT range and the last node was: FF or SAT
-  if (isSat(rule) && last <= ProofNodeClusterType::SAT)
+  if (last <= ProofNodeClusterType::SAT && isSat(rule))
   {
     return ProofNodeClusterType::SAT;
   }
@@ -362,8 +362,8 @@ ProofNodeClusterType DotPrinter::defineProofNodeType(const ProofNode* pn,
     {
       return ProofNodeClusterType::CNF;
     }
-    // If the first rule after a CNF is a scope
-    if (isSCOPE(rule))
+    // If the first rule after a CNF is in the TL range
+    if (isTheoryLemma(rule))
     {
       return ProofNodeClusterType::THEORY_LEMMA;
     }
@@ -426,6 +426,12 @@ inline bool DotPrinter::isSCOPE(const PfRule& rule)
   return PfRule::SCOPE == rule;
 }
 
+inline bool DotPrinter::isTheoryLemma(const PfRule& rule)
+{
+  return rule == PfRule::SCOPE || rule == PfRule::THEORY_LEMMA
+         || (PfRule::CNF_ITE_NEG3 < rule && rule < PfRule::LFSC_RULE);
+}
+
 inline bool DotPrinter::isASSUME(const PfRule& rule)
 {
   return PfRule::ASSUME == rule;
index 70d89e17eeda8f1ef5a09baf0d4633b9e888f6cd..7b4b2648595405664fa287769351f05b44df7b36 100644 (file)
@@ -166,26 +166,34 @@ class DotPrinter
   /** Verify if the rule is in the SAT range (i.e. a PfRule that is
    * CHAIN_RESOLUTION, FACTORING, REORDERING, MACRO_RESOLUTION or
    * MACRO_RESOLUTION_TRUST).
-   * @param pn The rule to be verified.
+   * @param rule The rule to be verified.
    * @return The bool indicating if the rule is or not in the SAT range.
    */
   inline bool isSat(const PfRule& rule);
 
   /** Verify if the rule is in the CNF range (between NOT_NOT_ELIM and
    * CNF_ITE_NEG3) in the PfRule enumeration.
-   * @param pn The rule to be verified.
+   * @param rule The rule to be verified.
    * @return The bool indicating if the rule is or not in the CNF range.
    */
   inline bool isCNF(const PfRule& rule);
 
   /** Verify if the rule is a SCOPE
-   * @param pn The rule to be verified.
+   * @param rule The rule to be verified.
    * @return The bool indicating if the rule is or not a SCOPE.
    */
   inline bool isSCOPE(const PfRule& rule);
 
+  /** Verify if the rule is in the theory lemma range (open interval between
+   * CNF_ITE_NEG3 and LFSC_RULE) or if the rule is a SCOPE or THEORY_LEMMA.
+   * @param rule The rule to be verified.
+   * @return The bool indicating whether the rule is for a theory lemma
+   * range.
+   */
+  inline bool isTheoryLemma(const PfRule& rule);
+
   /** Verify if the rule is an ASSUME
-   * @param pn The rule to be verified.
+   * @param rule The rule to be verified.
    * @return The bool indicating if the rule is or not an ASSUME.
    */
   inline bool isASSUME(const PfRule& rule);