return out;
}
+std::ostream& operator<<(std::ostream& out,
+ theory::bv::BvOptimizeSatProof level)
+{
+ switch (level)
+ {
+ case theory::bv::BITVECTOR_OPTIMIZE_SAT_PROOF_NONE:
+ out << "BITVECTOR_OPTIMIZE_SAT_PROOF_NONE";
+ break;
+ case theory::bv::BITVECTOR_OPTIMIZE_SAT_PROOF_PROOF:
+ out << "BITVECTOR_OPTIMIZE_SAT_PROOF_PROOF";
+ break;
+ case theory::bv::BITVECTOR_OPTIMIZE_SAT_PROOF_FORMULA:
+ out << "BITVECTOR_OPTIMIZE_SAT_PROOF_FORMULA";
+ break;
+ default: out << "BvOptimizeSatProof:UNKNOWN![" << unsigned(level) << "]";
+ }
+
+ return out;
+}
+
}/* CVC4 namespace */
+
BITVECTOR_PROOF_LRAT,
};
+/**
+ * When the BV solver does eager bit-blasting backed by DRAT-producing SAT solvers, proofs
+ * can be written in a variety of formats.
+ */
+enum BvOptimizeSatProof
+{
+ /**
+ * Do not optimize the SAT proof.
+ */
+ BITVECTOR_OPTIMIZE_SAT_PROOF_NONE = 0,
+ /**
+ * Optimize the SAT proof, but do not shrink the formula
+ */
+ BITVECTOR_OPTIMIZE_SAT_PROOF_PROOF = 1,
+ /**
+ * Optimize the SAT proof and shrink the formula
+ */
+ BITVECTOR_OPTIMIZE_SAT_PROOF_FORMULA = 2,
+};
+
+
}/* CVC4::theory::bv namespace */
}/* CVC4::theory namespace */
std::ostream& operator<<(std::ostream& out, theory::bv::BvSlicerMode mode);
std::ostream& operator<<(std::ostream& out, theory::bv::SatSolverMode mode);
std::ostream& operator<<(std::ostream& out, theory::bv::BvProofFormat format);
+std::ostream& operator<<(std::ostream& out, theory::bv::BvOptimizeSatProof level);
}/* CVC4 namespace */
includes = ["options/bv_bitblast_mode.h"]
help = "choose which UNSAT proof format to use, see --bv-sat-solver=help"
+[[option]]
+ name = "bvOptimizeSatProof"
+ category = "expert"
+ long = "bv-optimize-sat-proof=MODE"
+ type = "CVC4::theory::bv::BvOptimizeSatProof"
+ default = "CVC4::theory::bv::BITVECTOR_OPTIMIZE_SAT_PROOF_FORMULA"
+ handler = "stringToBvOptimizeSatProof"
+ predicates = ["satSolverEnabledBuild"]
+ includes = ["options/bv_bitblast_mode.h"]
+ help = "enable SAT proof optimizations, see --bv-optimize-sat-proof=help"
+
[[option]]
name = "bvSatSolver"
smt_name = "bv-sat-solver"
}
}
+const std::string OptionsHandler::s_bvOptimizeSatProofHelp =
+ "\
+Optimization levels currently supported by the --bv-optimize-sat-proof option:\n\
+\n\
+ none : Do not optimize the SAT proof\n\
+\n\
+ proof : Use drat-trim to shrink the SAT proof\n\
+\n\
+ formula : Use drat-trim to shrink the SAT proof and formula (default)\
+";
+
+theory::bv::BvOptimizeSatProof OptionsHandler::stringToBvOptimizeSatProof(
+ std::string option, std::string optarg)
+{
+ if (optarg == "none")
+ {
+ return theory::bv::BITVECTOR_OPTIMIZE_SAT_PROOF_NONE;
+ }
+ else if (optarg == "proof")
+ {
+ return theory::bv::BITVECTOR_OPTIMIZE_SAT_PROOF_PROOF;
+ }
+ else if (optarg == "formula")
+ {
+ return theory::bv::BITVECTOR_OPTIMIZE_SAT_PROOF_FORMULA;
+ }
+ else if (optarg == "help")
+ {
+ puts(s_bvOptimizeSatProofHelp.c_str());
+ exit(1);
+ }
+ else
+ {
+ throw OptionException(std::string("unknown option for --bv-optimize-sat-proof: `")
+ + optarg + "'. Try --bv-optimize-sat-proof=help.");
+ }
+}
+
+
const std::string OptionsHandler::s_bitblastingModeHelp = "\
Bit-blasting modes currently supported by the --bitblast option:\n\
\n\
theory::bv::BvProofFormat stringToBvProofFormat(std::string option,
std::string optarg);
+ theory::bv::BvOptimizeSatProof stringToBvOptimizeSatProof(std::string option,
+ std::string optarg);
theory::strings::ProcessLoopMode stringToStringsProcessLoopMode(
std::string option, std::string optarg);
static const std::string s_bitblastingModeHelp;
static const std::string s_bvSatSolverHelp;
static const std::string s_bvProofFormatHelp;
+ static const std::string s_bvOptimizeSatProofHelp;
static const std::string s_booleanTermConversionModeHelp;
static const std::string s_bvSlicerModeHelp;
static const std::string s_stringToStringsProcessLoopModeHelp;