From c58fa3ff70a1bb6b13ef9489159a899c4f49b004 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Dejan=20Jovanovi=C4=87?= Date: Tue, 12 Jun 2012 19:09:39 +0000 Subject: [PATCH] bufixes and the bugs * array now only propagates thropugh the equality engine * assertions in the equality rewriting to ensure eq -> { eq, T, F } --- src/theory/arrays/theory_arrays.cpp | 6 +++--- src/theory/rewriter.cpp | 11 ++++++++++- src/theory/theory_engine.cpp | 2 +- test/regress/regress0/aufbv/Makefile.am | 11 ++++++++++- test/regress/regress0/aufbv/fuzz00.smt | 2 +- test/regress/regress0/aufbv/fuzz01.delta01.smt | 2 +- test/regress/regress0/aufbv/fuzz01.smt | 2 +- test/regress/regress0/aufbv/fuzz02.delta01.smt | 2 +- test/regress/regress0/aufbv/fuzz02.smt | 2 +- test/regress/regress0/aufbv/fuzz04.delta01.smt | 2 +- test/regress/regress0/aufbv/fuzz04.smt | 2 +- test/regress/regress0/auflia/Makefile.am | 3 ++- test/regress/regress0/auflia/fuzz01.delta01.smt | 2 +- 13 files changed, 34 insertions(+), 15 deletions(-) diff --git a/src/theory/arrays/theory_arrays.cpp b/src/theory/arrays/theory_arrays.cpp index 0e791e39c..0cd487d32 100644 --- a/src/theory/arrays/theory_arrays.cpp +++ b/src/theory/arrays/theory_arrays.cpp @@ -719,9 +719,9 @@ void TheoryArrays::check(Effort e) { Node bk = nm->mkNode(kind::SELECT, fact[0][1], k); Node eq = d_valuation.ensureLiteral(ak.eqNode(bk)); Assert(eq.getKind() == kind::EQUAL); - d_equalityEngine.assertEquality(eq, false, fact); - propagate(eq.notNode()); - Trace("arrays-lem")<<"Arrays::addExtLemma "<< ak << " /= " << bk <<"\n"; + Node lemma = fact[0].orNode(eq.notNode()); + Trace("arrays-lem")<<"Arrays::addExtLemma " << lemma <<"\n"; + d_out->lemma(lemma); ++d_numExt; } } diff --git a/src/theory/rewriter.cpp b/src/theory/rewriter.cpp index 0c5cada09..2e8acfa89 100644 --- a/src/theory/rewriter.cpp +++ b/src/theory/rewriter.cpp @@ -63,12 +63,20 @@ Node Rewriter::rewrite(TNode node) { } Node Rewriter::rewriteEquality(theory::TheoryId theoryId, TNode node) { + Assert(node.getKind() == kind::EQUAL); Trace("rewriter") << "Rewriter::rewriteEquality(" << theoryId << "," << node << ")"<< std::endl; - return Rewriter::callRewriteEquality(theoryId, node); + Node result = Rewriter::callRewriteEquality(theoryId, node); + Trace("rewriter") << "Rewriter::rewriteEquality(" << theoryId << "," << node << ") => " << result << std::endl; + Assert(result.getKind() == kind::EQUAL || result.isConst()); + return result; } Node Rewriter::rewriteTo(theory::TheoryId theoryId, Node node) { +#ifdef CVC4_ASSERTIONS + bool isEquality = node.getKind() == kind::EQUAL; +#endif + Trace("rewriter") << "Rewriter::rewriteTo(" << theoryId << "," << node << ")"<< std::endl; // Check if it's been cached already @@ -190,6 +198,7 @@ Node Rewriter::rewriteTo(theory::TheoryId theoryId, Node node) { // If this is the last node, just return if (rewriteStack.size() == 1) { + Assert(!isEquality || rewriteStackTop.node.getKind() == kind::EQUAL || rewriteStackTop.node.isConst()); return rewriteStackTop.node; } diff --git a/src/theory/theory_engine.cpp b/src/theory/theory_engine.cpp index a047b2b06..f29be08a6 100644 --- a/src/theory/theory_engine.cpp +++ b/src/theory/theory_engine.cpp @@ -951,7 +951,7 @@ void TheoryEngine::assertFact(TNode literal) bool TheoryEngine::propagate(TNode literal, theory::TheoryId theory) { - Debug("theory") << "TheoryEngine::propagate(" << literal << ", " << theory << ")" << std::endl; + Debug("theory::propagate") << "TheoryEngine::propagate(" << literal << ", " << theory << ")" << std::endl; d_propEngine->checkTime(); diff --git a/test/regress/regress0/aufbv/Makefile.am b/test/regress/regress0/aufbv/Makefile.am index bec83183a..be01286e2 100644 --- a/test/regress/regress0/aufbv/Makefile.am +++ b/test/regress/regress0/aufbv/Makefile.am @@ -18,7 +18,16 @@ TESTS = \ diseqprop.01.smt \ wchains010ue.delta01.smt \ wchains010ue.delta02.smt \ - dubreva005ue.delta01.smt + dubreva005ue.delta01.smt \ + fuzz00.smt \ + fuzz01.delta01.smt \ + fuzz01.smt \ + fuzz02.delta01.smt \ + fuzz02.smt \ + fuzz03.delta01.smt \ + fuzz03.smt \ + fuzz04.delta01.smt \ + fuzz04.smt EXTRA_DIST = $(TESTS) diff --git a/test/regress/regress0/aufbv/fuzz00.smt b/test/regress/regress0/aufbv/fuzz00.smt index 36322112e..c9095e3c7 100644 --- a/test/regress/regress0/aufbv/fuzz00.smt +++ b/test/regress/regress0/aufbv/fuzz00.smt @@ -1,6 +1,6 @@ (benchmark fuzzsmt :logic QF_AUFBV -:status unknown +:status sat :extrafuns ((v0 BitVec[2])) :extrafuns ((v1 BitVec[11])) :extrafuns ((a2 Array[5:15])) diff --git a/test/regress/regress0/aufbv/fuzz01.delta01.smt b/test/regress/regress0/aufbv/fuzz01.delta01.smt index 93ba564a3..f448b04d0 100644 --- a/test/regress/regress0/aufbv/fuzz01.delta01.smt +++ b/test/regress/regress0/aufbv/fuzz01.delta01.smt @@ -4,7 +4,7 @@ :extrafuns ((v2 BitVec[11])) :extrafuns ((a9 Array[8:5])) :extrafuns ((a6 Array[1:13])) -:status unknown +:status sat :formula (let (?n1 bv0[15]) (let (?n2 bv0[1]) diff --git a/test/regress/regress0/aufbv/fuzz01.smt b/test/regress/regress0/aufbv/fuzz01.smt index 233427ae0..6605e2f09 100644 --- a/test/regress/regress0/aufbv/fuzz01.smt +++ b/test/regress/regress0/aufbv/fuzz01.smt @@ -1,6 +1,6 @@ (benchmark fuzzsmt :logic QF_AUFBV -:status unknown +:status sat :extrafuns ((v0 BitVec[15])) :extrafuns ((v1 BitVec[3])) :extrafuns ((v2 BitVec[11])) diff --git a/test/regress/regress0/aufbv/fuzz02.delta01.smt b/test/regress/regress0/aufbv/fuzz02.delta01.smt index cb8833ea9..3ad73d520 100644 --- a/test/regress/regress0/aufbv/fuzz02.delta01.smt +++ b/test/regress/regress0/aufbv/fuzz02.delta01.smt @@ -2,7 +2,7 @@ :logic QF_AUFBV :extrafuns ((a5 Array[5:13])) :extrafuns ((v4 BitVec[11])) -:status unknown +:status sat :formula (let (?n1 bv0[11]) (flet ($n2 (bvsle v4 ?n1)) diff --git a/test/regress/regress0/aufbv/fuzz02.smt b/test/regress/regress0/aufbv/fuzz02.smt index 8b60e39fc..2ada96dab 100644 --- a/test/regress/regress0/aufbv/fuzz02.smt +++ b/test/regress/regress0/aufbv/fuzz02.smt @@ -1,6 +1,6 @@ (benchmark fuzzsmt :logic QF_AUFBV -:status unknown +:status sat :extrafuns ((v0 BitVec[14])) :extrafuns ((v1 BitVec[10])) :extrafuns ((v2 BitVec[10])) diff --git a/test/regress/regress0/aufbv/fuzz04.delta01.smt b/test/regress/regress0/aufbv/fuzz04.delta01.smt index 3958c0138..4e1cb5ab7 100644 --- a/test/regress/regress0/aufbv/fuzz04.delta01.smt +++ b/test/regress/regress0/aufbv/fuzz04.delta01.smt @@ -3,7 +3,7 @@ :extrafuns ((v0 BitVec[12])) :extrafuns ((v1 BitVec[11])) :extrafuns ((a3 Array[1:6])) -:status unknown +:status sat :formula (let (?n1 bv0[6]) (let (?n2 bv0[1]) diff --git a/test/regress/regress0/aufbv/fuzz04.smt b/test/regress/regress0/aufbv/fuzz04.smt index 79fd3fdb5..2d7ed9d95 100644 --- a/test/regress/regress0/aufbv/fuzz04.smt +++ b/test/regress/regress0/aufbv/fuzz04.smt @@ -1,6 +1,6 @@ (benchmark fuzzsmt :logic QF_AUFBV -:status unknown +:status sat :extrafuns ((v0 BitVec[12])) :extrafuns ((v1 BitVec[11])) :extrafuns ((a2 Array[1:14])) diff --git a/test/regress/regress0/auflia/Makefile.am b/test/regress/regress0/auflia/Makefile.am index f4f5c57b4..617a0a072 100644 --- a/test/regress/regress0/auflia/Makefile.am +++ b/test/regress/regress0/auflia/Makefile.am @@ -10,7 +10,8 @@ endif # put it below in "TESTS +=" TESTS = \ bug330.smt2 \ - bug336.smt2 + bug336.smt2 \ + fuzz01.delta01.smt EXTRA_DIST = $(TESTS) diff --git a/test/regress/regress0/auflia/fuzz01.delta01.smt b/test/regress/regress0/auflia/fuzz01.delta01.smt index cec8c91a5..6c22a75ca 100644 --- a/test/regress/regress0/auflia/fuzz01.delta01.smt +++ b/test/regress/regress0/auflia/fuzz01.delta01.smt @@ -8,7 +8,7 @@ :extrafuns ((v1 Int)) :extrapreds ((p0 Int)) :extrafuns ((f0 Int Int Int Int)) -:status unknown +:status sat :formula (let (?n1 0) (flet ($n2 (> ?n1 v0)) -- 2.30.2