Branch data Line data Source code
1 : : /****************************************************************************** 2 : : * Top contributors (to current version): 3 : : * Mathias Preiner, Aina Niemetz, Hans-Joerg Schurr 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 : : * Implementation of bit-vectors proof checker. 14 : : */ 15 : : 16 : : #include "theory/bv/proof_checker.h" 17 : : 18 : : namespace cvc5::internal { 19 : : namespace theory { 20 : : namespace bv { 21 : : 22 : 47547 : BVProofRuleChecker::BVProofRuleChecker(NodeManager* nm) : ProofRuleChecker(nm) 23 : : { 24 : 47547 : } 25 : 8940 : void BVProofRuleChecker::registerTo(ProofChecker* pc) 26 : : { 27 : 8940 : pc->registerTrustedChecker(ProofRule::MACRO_BV_BITBLAST, this, 2); 28 : 8940 : pc->registerTrustedChecker(ProofRule::BV_BITBLAST_STEP, this, 2); 29 : 8940 : pc->registerChecker(ProofRule::BV_EAGER_ATOM, this); 30 : 8940 : } 31 : : 32 : 22589 : Node BVProofRuleChecker::checkInternal(ProofRule id, 33 : : const std::vector<Node>& children, 34 : : const std::vector<Node>& args) 35 : : { 36 [ - + ]: 22589 : if (id == ProofRule::MACRO_BV_BITBLAST) 37 : : { 38 : 0 : Assert(children.empty()); 39 : 0 : Assert(args.size() == 1); 40 : 0 : Assert(args[0].getKind() == Kind::EQUAL); 41 : 0 : return args[0]; 42 : : } 43 [ + + ]: 22589 : else if (id == ProofRule::BV_BITBLAST_STEP) 44 : : { 45 [ - + ][ - + ]: 22337 : Assert(children.empty()); [ - - ] 46 [ - + ][ - + ]: 22337 : Assert(args.size() == 1); [ - - ] 47 [ - + ][ - + ]: 22337 : Assert(args[0].getKind() == Kind::EQUAL); [ - - ] 48 : 22337 : return args[0]; 49 : : } 50 [ + - ]: 252 : else if (id == ProofRule::BV_EAGER_ATOM) 51 : : { 52 [ - + ][ - + ]: 252 : Assert(children.empty()); [ - - ] 53 [ - + ][ - + ]: 252 : Assert(args.size() == 1); [ - - ] 54 [ - + ][ - + ]: 252 : Assert(args[0].getKind() == Kind::BITVECTOR_EAGER_ATOM); [ - - ] 55 : 252 : return args[0].eqNode(args[0][0]); 56 : : } 57 : : // no rule 58 : 0 : return Node::null(); 59 : : } 60 : : 61 : : } // namespace bv 62 : : } // namespace theory 63 : : } // namespace cvc5::internal