LCOV - code coverage report
Current view: top level - buildbot/coverage/build/src/theory - theory_inference.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 6 9 66.7 %
Date: 2024-08-31 11:49:51 Functions: 7 11 63.6 %
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /******************************************************************************
       2                 :            :  * Top contributors (to current version):
       3                 :            :  *   Andrew Reynolds, Gereon Kremer, Aina Niemetz
       4                 :            :  *
       5                 :            :  * This file is part of the cvc5 project.
       6                 :            :  *
       7                 :            :  * Copyright (c) 2009-2024 by the authors listed in the file AUTHORS
       8                 :            :  * in the top-level source directory and their institutional affiliations.
       9                 :            :  * All rights reserved.  See the file COPYING in the top-level source
      10                 :            :  * directory for licensing information.
      11                 :            :  * ****************************************************************************
      12                 :            :  *
      13                 :            :  * The theory inference utility.
      14                 :            :  */
      15                 :            : 
      16                 :            : #include "cvc5_private.h"
      17                 :            : 
      18                 :            : #ifndef CVC5__THEORY__THEORY_INFERENCE_H
      19                 :            : #define CVC5__THEORY__THEORY_INFERENCE_H
      20                 :            : 
      21                 :            : #include "expr/node.h"
      22                 :            : #include "theory/inference_id.h"
      23                 :            : #include "theory/output_channel.h"
      24                 :            : 
      25                 :            : namespace cvc5::internal {
      26                 :            : namespace theory {
      27                 :            : 
      28                 :            : class TheoryInferenceManager;
      29                 :            : 
      30                 :            : /**
      31                 :            :  * A theory inference base class. This class is an abstract data structure for
      32                 :            :  * storing pending lemmas or facts in the buffered inference manager. It can
      33                 :            :  * be seen a single use object capturing instructions for making a single
      34                 :            :  * call to TheoryInferenceManager for lemmas or facts.
      35                 :            :  */
      36                 :            : class TheoryInference
      37                 :            : {
      38                 :            :  public:
      39                 :     768510 :   TheoryInference(InferenceId id) : d_id(id) {}
      40                 :     920407 :   virtual ~TheoryInference() {}
      41                 :            : 
      42                 :            :   /**
      43                 :            :    * Process lemma, return the trust node to pass to
      44                 :            :    * TheoryInferenceManager::trustedLemma. In addition, the inference should
      45                 :            :    * process any internal side effects of the lemma.
      46                 :            :    *
      47                 :            :    * @param p The property of the lemma which will be passed to trustedLemma
      48                 :            :    * for this inference. If this call does not update p, the default value will
      49                 :            :    * be used.
      50                 :            :    * @return The trust node (of kind TrustNodeKind::LEMMA) corresponding to the
      51                 :            :    * lemma and its proof generator.
      52                 :            :    */
      53                 :          0 :   virtual TrustNode processLemma(LemmaProperty& p) { return TrustNode::null(); }
      54                 :            :   /**
      55                 :            :    * Process internal fact, return the conclusion to pass to
      56                 :            :    * TheoryInferenceManager::assertInternalFact. In addition, the inference
      57                 :            :    * should process any internal side effects of the fact.
      58                 :            :    *
      59                 :            :    * @param exp The explanation for the returned conclusion. Each node added to
      60                 :            :    * exp should be a (conjunction of) literals that hold in the current equality
      61                 :            :    * engine.
      62                 :            :    * @return The (possibly negated) conclusion.
      63                 :            :    */
      64                 :          0 :   virtual Node processFact(std::vector<Node>& exp, ProofGenerator*& pg)
      65                 :            :   {
      66                 :          0 :     return Node::null();
      67                 :            :   }
      68                 :            : 
      69                 :            :   /** Get the InferenceId of this theory inference. */
      70                 :    1130660 :   InferenceId getId() const { return d_id; }
      71                 :            :   /** Set the InferenceId of this theory inference. */
      72                 :      18291 :   void setId(InferenceId id) { d_id = id; }
      73                 :            : 
      74                 :            :  private:
      75                 :            :   InferenceId d_id;
      76                 :            : };
      77                 :            : 
      78                 :            : /**
      79                 :            :  * A simple theory lemma with no side effects. Makes a single call to
      80                 :            :  * trustedLemma in its process method.
      81                 :            :  */
      82                 :            : class SimpleTheoryLemma : public TheoryInference
      83                 :            : {
      84                 :            :  public:
      85                 :            :   SimpleTheoryLemma(InferenceId id, Node n, LemmaProperty p, ProofGenerator* pg);
      86                 :     419821 :   virtual ~SimpleTheoryLemma() {}
      87                 :            :   /** Process lemma */
      88                 :            :   TrustNode processLemma(LemmaProperty& p) override;
      89                 :            :   /** The lemma to send */
      90                 :            :   Node d_node;
      91                 :            :   /** The lemma property (see OutputChannel::lemma) */
      92                 :            :   LemmaProperty d_property;
      93                 :            :   /**
      94                 :            :    * The proof generator for this lemma, which if non-null, is wrapped in a
      95                 :            :    * TrustNode to be set on the output channel via trustedLemma at the time
      96                 :            :    * the lemma is sent. This proof generator must be able to provide a proof
      97                 :            :    * for d_node in the remainder of the user context.
      98                 :            :    */
      99                 :            :   ProofGenerator* d_pg;
     100                 :            : };
     101                 :            : 
     102                 :            : /**
     103                 :            :  * A simple internal fact with no side effects. Makes a single call to
     104                 :            :  * assertInternalFact in its process method.
     105                 :            :  */
     106                 :            : class SimpleTheoryInternalFact : public TheoryInference
     107                 :            : {
     108                 :            :  public:
     109                 :            :   SimpleTheoryInternalFact(InferenceId id, Node conc, Node exp, ProofGenerator* pg);
     110                 :     343151 :   virtual ~SimpleTheoryInternalFact() {}
     111                 :            :   /** Process internal fact */
     112                 :            :   Node processFact(std::vector<Node>& exp, ProofGenerator*& pg) override;
     113                 :            :   /** The lemma to send */
     114                 :            :   Node d_conc;
     115                 :            :   /** The explanation */
     116                 :            :   Node d_exp;
     117                 :            :   /** The proof generator */
     118                 :            :   ProofGenerator* d_pg;
     119                 :            : };
     120                 :            : 
     121                 :            : }  // namespace theory
     122                 :            : }  // namespace cvc5::internal
     123                 :            : 
     124                 :            : #endif

Generated by: LCOV version 1.14