summaryrefslogtreecommitdiff
path: root/src/theory/bv/proof_checker.cpp
diff options
context:
space:
mode:
authorMathias Preiner <mathias.preiner@gmail.com>2020-12-07 19:15:14 -0800
committerGitHub <noreply@github.com>2020-12-07 21:15:14 -0600
commitca4f71c3c3c0da881e0bb9b93dbbb2bb3fe49c46 (patch)
treec03c753476e28d0bc852e4e6a4b2e49030de8f2a /src/theory/bv/proof_checker.cpp
parenta35585fc3b20d70f88a156cd0403f6aa5c9a0dbe (diff)
Add support for BV proofs with the simple bitblasting solver. (#5603)
Diffstat (limited to 'src/theory/bv/proof_checker.cpp')
-rw-r--r--src/theory/bv/proof_checker.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/theory/bv/proof_checker.cpp b/src/theory/bv/proof_checker.cpp
new file mode 100644
index 000000000..395930824
--- /dev/null
+++ b/src/theory/bv/proof_checker.cpp
@@ -0,0 +1,53 @@
+/********************* */
+/*! \file proof_checker.cpp
+ ** \verbatim
+ ** Top contributors (to current version):
+ ** Mathias Preiner
+ ** 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 Implementation of bit-vectors proof checker
+ **/
+
+#include "theory/bv/proof_checker.h"
+
+namespace CVC4 {
+namespace theory {
+namespace bv {
+
+void BVProofRuleChecker::registerTo(ProofChecker* pc)
+{
+ pc->registerChecker(PfRule::BV_BITBLAST, this);
+ pc->registerChecker(PfRule::BV_EAGER_ATOM, this);
+}
+
+Node BVProofRuleChecker::checkInternal(PfRule id,
+ const std::vector<Node>& children,
+ const std::vector<Node>& args)
+{
+ if (id == PfRule::BV_BITBLAST)
+ {
+ BBSimple bb(nullptr);
+ Assert(children.empty());
+ Assert(args.size() == 1);
+ bb.bbAtom(args[0]);
+ Node n = bb.getStoredBBAtom(args[0]);
+ return args[0].eqNode(n);
+ }
+ else if (id == PfRule::BV_EAGER_ATOM)
+ {
+ Assert(children.empty());
+ Assert(args.size() == 1);
+ Assert(args[0].getKind() == kind::BITVECTOR_EAGER_ATOM);
+ return args[0].eqNode(args[0][0]);
+ }
+ // no rule
+ return Node::null();
+}
+
+} // namespace bv
+} // namespace theory
+} // namespace CVC4
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback