summaryrefslogtreecommitdiff
path: root/src/parser
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2020-02-14 17:09:59 -0600
committerGitHub <noreply@github.com>2020-02-14 17:09:59 -0600
commit528e801343c692b0ce8123f8754e069e6523f5dc (patch)
tree517c86381e7a0535c376d244c830365d04e3aa62 /src/parser
parent08289dd911aff28110baf0fd815fd912f8b76fd3 (diff)
Remove quantifiers rewrite rules infrastructure (#3754)
Diffstat (limited to 'src/parser')
-rw-r--r--src/parser/smt2/Smt2.g95
-rw-r--r--src/parser/smt2/smt2.cpp27
-rw-r--r--src/parser/smt2/smt2.h18
3 files changed, 6 insertions, 134 deletions
diff --git a/src/parser/smt2/Smt2.g b/src/parser/smt2/Smt2.g
index aed62f94c..90303dd40 100644
--- a/src/parser/smt2/Smt2.g
+++ b/src/parser/smt2/Smt2.g
@@ -1254,8 +1254,6 @@ extendedCommand[std::unique_ptr<CVC4::Command>* cmd]
| DECLARE_CODATATYPES_2_5_TOK datatypes_2_5_DefCommand[true, cmd]
| DECLARE_CODATATYPE_TOK datatypeDefCommand[true, cmd]
| DECLARE_CODATATYPES_TOK datatypesDefCommand[true, cmd]
- | rewriterulesCommand[cmd]
-
/* Support some of Z3's extended SMT-LIB commands */
| DECLARE_SORTS_TOK { PARSER_STATE->checkThatLogicIsSet(); }
@@ -1545,43 +1543,6 @@ datatypesDef[bool isCo,
}
;
-rewriterulesCommand[std::unique_ptr<CVC4::Command>* cmd]
-@declarations {
- std::vector<Expr> guards, heads, triggers;
- Expr head, body, bvl, expr, expr2;
- Kind kind;
-}
- : /* rewrite rules */
- REWRITE_RULE_TOK { kind = CVC4::kind::RR_REWRITE; }
- { PARSER_STATE->pushScope(true); }
- boundVarList[bvl]
- LPAREN_TOK ( pattern[expr] { triggers.push_back( expr ); } )* RPAREN_TOK
- LPAREN_TOK (termList[guards,expr])? RPAREN_TOK
- term[head, expr2]
- term[body, expr2]
- {
- *cmd = PARSER_STATE->assertRewriteRule(
- kind, bvl, triggers, guards, {head}, body);
- }
- /* propagation rule */
- | rewritePropaKind[kind]
- { PARSER_STATE->pushScope(true); }
- boundVarList[bvl]
- LPAREN_TOK ( pattern[expr] { triggers.push_back( expr ); } )* RPAREN_TOK
- LPAREN_TOK (termList[guards,expr])? RPAREN_TOK
- LPAREN_TOK (termList[heads,expr])? RPAREN_TOK
- term[body, expr2]
- {
- *cmd = PARSER_STATE->assertRewriteRule(
- kind, bvl, triggers, guards, heads, body);
- }
- ;
-
-rewritePropaKind[CVC4::Kind& kind]
- : REDUCTION_RULE_TOK { $kind = CVC4::kind::RR_REDUCTION; }
- | PROPAGATION_RULE_TOK { $kind = CVC4::kind::RR_DEDUCTION; }
- ;
-
pattern[CVC4::Expr& expr]
@declarations {
std::vector<Expr> patexpr;
@@ -1631,8 +1592,7 @@ simpleSymbolicExprNoKeyword[CVC4::SExpr& sexpr]
| GET_UNSAT_CORE_TOK | EXIT_TOK
| RESET_TOK | RESET_ASSERTIONS_TOK | SET_LOGIC_TOK | SET_INFO_TOK
| GET_INFO_TOK | SET_OPTION_TOK | GET_OPTION_TOK | PUSH_TOK | POP_TOK
- | DECLARE_DATATYPES_TOK | GET_MODEL_TOK | ECHO_TOK | REWRITE_RULE_TOK
- | REDUCTION_RULE_TOK | PROPAGATION_RULE_TOK | SIMPLIFY_TOK)
+ | DECLARE_DATATYPES_TOK | GET_MODEL_TOK | ECHO_TOK | SIMPLIFY_TOK)
{ sexpr = SExpr(SExpr::Keyword(AntlrInput::tokenText($tok))); }
;
@@ -1713,25 +1673,11 @@ termNonVariable[CVC4::Expr& expr, CVC4::Expr& expr2]
args.push_back(bvl);
PARSER_STATE->popScope();
- switch(f.getKind()) {
- case CVC4::kind::RR_REWRITE:
- case CVC4::kind::RR_REDUCTION:
- case CVC4::kind::RR_DEDUCTION:
- if(kind == CVC4::kind::EXISTS) {
- PARSER_STATE->parseError("Use Exists instead of Forall for a rewrite "
- "rule.");
- }
- args.push_back(f2); // guards
- args.push_back(f); // rule
- expr = MK_EXPR(CVC4::kind::REWRITE_RULE, args);
- break;
- default:
- args.push_back(f);
- if(! f2.isNull()){
- args.push_back(f2);
- }
- expr = MK_EXPR(kind, args);
+ args.push_back(f);
+ if(! f2.isNull()){
+ args.push_back(f2);
}
+ expr = MK_EXPR(kind, args);
}
| LPAREN_TOK COMPREHENSION_TOK
{ PARSER_STATE->pushScope(true); }
@@ -1902,33 +1848,7 @@ termNonVariable[CVC4::Expr& expr, CVC4::Expr& expr2]
}
)+ RPAREN_TOK
{
- if(attr == ":rewrite-rule") {
- Expr guard;
- Expr body;
- if(expr[1].getKind() == kind::IMPLIES ||
- expr[1].getKind() == kind::EQUAL) {
- guard = expr[0];
- body = expr[1];
- } else {
- guard = MK_CONST(bool(true));
- body = expr;
- }
- expr2 = guard;
- args.push_back(body[0]);
- args.push_back(body[1]);
- if(!f2.isNull()) {
- args.push_back(f2);
- }
-
- if( body.getKind()==kind::IMPLIES ){
- kind = kind::RR_DEDUCTION;
- }else if( body.getKind()==kind::EQUAL ){
- kind = body[0].getType().isBoolean() ? kind::RR_REDUCTION : kind::RR_REWRITE;
- }else{
- PARSER_STATE->parseError("Error parsing rewrite rule.");
- }
- expr = MK_EXPR( kind, args );
- } else if(! patexprs.empty()) {
+ if(! patexprs.empty()) {
if( !f2.isNull() && f2.getKind()==kind::INST_PATTERN_LIST ){
for( size_t i=0; i<f2.getNumChildren(); i++ ){
if( f2[i].getKind()==kind::INST_PATTERN ){
@@ -2702,9 +2622,6 @@ GET_MODEL_TOK : 'get-model';
BLOCK_MODEL_TOK : 'block-model';
BLOCK_MODEL_VALUES_TOK : 'block-model-values';
ECHO_TOK : 'echo';
-REWRITE_RULE_TOK : 'assert-rewrite';
-REDUCTION_RULE_TOK : 'assert-reduction';
-PROPAGATION_RULE_TOK : 'assert-propagation';
DECLARE_SORTS_TOK : 'declare-sorts';
DECLARE_FUNS_TOK : 'declare-funs';
DECLARE_PREDS_TOK : 'declare-preds';
diff --git a/src/parser/smt2/smt2.cpp b/src/parser/smt2/smt2.cpp
index 3ab3c0eb1..9800cbe91 100644
--- a/src/parser/smt2/smt2.cpp
+++ b/src/parser/smt2/smt2.cpp
@@ -626,33 +626,6 @@ void Smt2::resetAssertions() {
}
}
-std::unique_ptr<Command> Smt2::assertRewriteRule(
- Kind kind,
- Expr bvl,
- const std::vector<Expr>& triggers,
- const std::vector<Expr>& guards,
- const std::vector<Expr>& heads,
- Expr body)
-{
- assert(kind == kind::RR_REWRITE || kind == kind::RR_REDUCTION
- || kind == kind::RR_DEDUCTION);
-
- ExprManager* em = getExprManager();
-
- std::vector<Expr> args;
- args.push_back(mkAnd(heads));
- args.push_back(body);
-
- if (!triggers.empty())
- {
- args.push_back(em->mkExpr(kind::INST_PATTERN_LIST, triggers));
- }
-
- Expr rhs = em->mkExpr(kind, args);
- Expr rule = em->mkExpr(kind::REWRITE_RULE, bvl, mkAnd(guards), rhs);
- return std::unique_ptr<Command>(new AssertCommand(rule, false));
-}
-
Smt2::SynthFunFactory::SynthFunFactory(
Smt2* smt2,
const std::string& fun,
diff --git a/src/parser/smt2/smt2.h b/src/parser/smt2/smt2.h
index 6c1275115..6427b32d5 100644
--- a/src/parser/smt2/smt2.h
+++ b/src/parser/smt2/smt2.h
@@ -198,24 +198,6 @@ class Smt2 : public Parser
void resetAssertions();
/**
- * Creates a command that asserts a rule.
- *
- * @param kind The kind of rule (RR_REWRITE, RR_REDUCTION, RR_DEDUCTION)
- * @param bvl Bound variable list
- * @param triggers List of triggers
- * @param guards List of guards
- * @param heads List of heads
- * @param body The body of the rule
- * @return The command that asserts the rewrite rule
- */
- std::unique_ptr<Command> assertRewriteRule(Kind kind,
- Expr bvl,
- const std::vector<Expr>& triggers,
- const std::vector<Expr>& guards,
- const std::vector<Expr>& heads,
- Expr body);
-
- /**
* Class for creating instances of `SynthFunCommand`s. Creating an instance
* of this class pushes the scope, destroying it pops the scope.
*/
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback