1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
/********************* */
/*! \file proof_manager.h
** \verbatim
** Top contributors (to current version):
** Andrew Reynolds
** This file is part of the CVC4 project.
** Copyright (c) 2009-2020 by the authors listed in the file AUTHORS
** in the top-level source directory and their institutional affiliations.
** All rights reserved. See the file COPYING in the top-level source
** directory for licensing information.\endverbatim
**
** \brief The proof manager of SmtEngine
**/
#include "cvc4_private.h"
#ifndef CVC4__SMT__PROOF_MANAGER_H
#define CVC4__SMT__PROOF_MANAGER_H
#include "context/cdlist.h"
#include "expr/node.h"
#include "expr/proof_checker.h"
#include "expr/proof_node.h"
#include "expr/proof_node_manager.h"
#include "smt/preprocess_proof_generator.h"
#include "smt/proof_post_processor.h"
namespace CVC4 {
class SmtEngine;
namespace smt {
class Assertions;
/**
* This class is responsible for managing the proof output of SmtEngine, as
* well as setting up the global proof checker and proof node manager.
*/
class PfManager
{
public:
PfManager(context::UserContext* u, SmtEngine* smte);
~PfManager();
/**
* Print the proof on the output channel of the current options in scope.
*
* The argument pg is the module that can provide a proof for false in the
* current context.
*
* Throws an assertion failure if pg cannot provide a closed proof with
* respect to assertions in as.
*/
void printProof(ProofGenerator* pg, Assertions& as);
/**
* Check proof, same as above, without printing.
*/
void checkProof(ProofGenerator* pg, Assertions& as);
/**
* Get final proof.
*
* The argument pg is the module that can provide a proof for false in the
* current context.
*/
std::shared_ptr<ProofNode> getFinalProof(ProofGenerator* pg, Assertions& as);
//--------------------------- access to utilities
/** Get a pointer to the ProofChecker owned by this. */
ProofChecker* getProofChecker() const;
/** Get a pointer to the ProofNodeManager owned by this. */
ProofNodeManager* getProofNodeManager() const;
/** Get the proof generator for proofs of preprocessing. */
smt::PreprocessProofGenerator* getPreprocessProofGenerator() const;
//--------------------------- end access to utilities
private:
/**
* Set final proof, which initializes d_finalProof to the proof of false
* from pg, postprocesses it, and stores it in d_finalProof.
*/
void setFinalProof(ProofGenerator* pg, context::CDList<Node>* al);
/** The false node */
Node d_false;
/** For the new proofs module */
std::unique_ptr<ProofChecker> d_pchecker;
/** A proof node manager based on the above checker */
std::unique_ptr<ProofNodeManager> d_pnm;
/** The preprocess proof generator. */
std::unique_ptr<smt::PreprocessProofGenerator> d_pppg;
/** The proof post-processor */
std::unique_ptr<smt::ProofPostproccess> d_pfpp;
/**
* The final proof produced by the SMT engine.
* Combines the proofs of preprocessing, prop engine and theory engine, to be
* connected by setFinalProof().
*/
std::shared_ptr<ProofNode> d_finalProof;
}; /* class SmtEngine */
} // namespace smt
} // namespace CVC4
#endif /* CVC4__SMT__PROOF_MANAGER_H */
|