#include <vector>
#include "proof/proof_node_manager.h"
+#include "smt/logic_exception.h"
#include "smt_util/boolean_simplification.h"
#include "theory/booleans/circuit_propagator.h"
#include "theory/booleans/theory_bool_rewriter.h"
#include "theory/valuation.h"
#include "util/hash.h"
+using namespace cvc5::kind;
+
namespace cvc5 {
namespace theory {
namespace booleans {
return Theory::ppAssert(tin, outSubstitutions);
}
+TrustNode TheoryBool::ppRewrite(TNode n, std::vector<SkolemLemma>& lems)
+{
+ Trace("bool-ppr") << "TheoryBool::ppRewrite " << n << std::endl;
+ if (n.getKind() == ITE)
+ {
+ TypeNode tn = n.getType();
+ if (!tn.isFirstClass())
+ {
+ std::stringstream ss;
+ ss << "ITE branches of type " << tn << " are currently not supported."
+ << std::endl;
+ throw LogicException(ss.str());
+ }
+ }
+ return TrustNode::null();
+}
+
TheoryRewriter* TheoryBool::getTheoryRewriter() { return &d_rewriter; }
ProofRuleChecker* TheoryBool::getProofChecker() { return &d_checker; }
PPAssertStatus ppAssert(TrustNode tin,
TrustSubstitutionMap& outSubstitutions) override;
+ TrustNode ppRewrite(TNode n, std::vector<SkolemLemma>& lems) override;
+
std::string identify() const override;
private:
regress0/strings/norn-31.smt2
regress0/strings/norn-simp-rew.smt2
regress0/strings/parser-syms.cvc.smt2
+ regress0/strings/proj-issue316-regexp-ite.smt2
regress0/strings/re_diff.smt2
regress0/strings/re-in-rewrite.smt2
regress0/strings/re-syntax.smt2
--- /dev/null
+; COMMAND-LINE: --theoryof-mode=type
+; COMMAND-LINE: --theoryof-mode=term
+; SCRUBBER: grep -o "ITE branches of type RegLan are currently not supported"
+; EXPECT: ITE branches of type RegLan are currently not supported
+; EXIT: 1
+(set-logic QF_SLIA)
+(declare-const b Bool)
+(declare-const x String)
+(assert (str.in_re x (ite b re.none re.allchar)))
+(check-sat)