summaryrefslogtreecommitdiff
path: root/src/theory
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2018-03-05 16:53:44 -0600
committerGitHub <noreply@github.com>2018-03-05 16:53:44 -0600
commita2e78ec8dd5e935b6ef166154be7ee35bffc6d32 (patch)
tree9b8201cbe280b12f6cb1cadf38822bb7c08feef1 /src/theory
parentd51c8347a3c6bf7857c474bd3493377f9fed58e5 (diff)
Fix for sampler. (#1639)
Diffstat (limited to 'src/theory')
-rw-r--r--src/theory/quantifiers/sygus_sampler.cpp21
-rw-r--r--src/theory/quantifiers/sygus_sampler.h3
2 files changed, 16 insertions, 8 deletions
diff --git a/src/theory/quantifiers/sygus_sampler.cpp b/src/theory/quantifiers/sygus_sampler.cpp
index 0b9254818..65883502f 100644
--- a/src/theory/quantifiers/sygus_sampler.cpp
+++ b/src/theory/quantifiers/sygus_sampler.cpp
@@ -303,7 +303,7 @@ Node SygusSampler::registerTerm(Node n, bool forceKeep)
Node res = d_trie.add(bn, this, 0, d_samples.size(), forceKeep);
if (d_use_sygus_type)
{
- Assert(d_builtin_to_sygus.find(res) == d_builtin_to_sygus.end());
+ Assert(d_builtin_to_sygus.find(res) != d_builtin_to_sygus.end());
res = res != bn ? d_builtin_to_sygus[res] : n;
}
return res;
@@ -690,9 +690,16 @@ Node SygusSamplerExt::registerTerm(Node n, bool forceKeep)
{
return n;
}
+ Node bn = n;
+ Node beq_n = eq_n;
+ if (d_use_sygus_type)
+ {
+ bn = d_tds->sygusToBuiltin(n);
+ beq_n = d_tds->sygusToBuiltin(eq_n);
+ }
// one of eq_n or n must be ordered
- bool eqor = isOrdered(eq_n);
- bool nor = isOrdered(n);
+ bool eqor = isOrdered(beq_n);
+ bool nor = isOrdered(bn);
Trace("sygus-synth-rr-debug")
<< "Ordered? : " << nor << " " << eqor << std::endl;
bool isUnique = false;
@@ -703,11 +710,11 @@ Node SygusSamplerExt::registerTerm(Node n, bool forceKeep)
// free variables of the other
if (!eqor)
{
- isUnique = containsFreeVariables(n, eq_n);
+ isUnique = containsFreeVariables(bn, beq_n);
}
else if (!nor)
{
- isUnique = containsFreeVariables(eq_n, n);
+ isUnique = containsFreeVariables(beq_n, bn);
}
}
Trace("sygus-synth-rr-debug") << "AlphaEq unique: " << isUnique << std::endl;
@@ -715,7 +722,7 @@ Node SygusSamplerExt::registerTerm(Node n, bool forceKeep)
if (d_drewrite != nullptr)
{
Trace("sygus-synth-rr-debug") << "Add rewrite..." << std::endl;
- if (!d_drewrite->addRewrite(n, eq_n))
+ if (!d_drewrite->addRewrite(bn, beq_n))
{
rewRedundant = isUnique;
// must be unique according to the dynamic rewriter
@@ -731,7 +738,7 @@ Node SygusSamplerExt::registerTerm(Node n, bool forceKeep)
// sampler database.
if (!eqor)
{
- registerTerm(n, true);
+ SygusSampler::registerTerm(n, true);
}
return eq_n;
}
diff --git a/src/theory/quantifiers/sygus_sampler.h b/src/theory/quantifiers/sygus_sampler.h
index 5fcfc1c93..06576d6ce 100644
--- a/src/theory/quantifiers/sygus_sampler.h
+++ b/src/theory/quantifiers/sygus_sampler.h
@@ -207,7 +207,8 @@ class SygusSampler : public LazyTrieEvaluator
* are those that occur in the range d_type_vars.
*/
bool containsFreeVariables(Node a, Node b);
- private:
+
+ protected:
/** sygus term database of d_qe */
TermDbSygus* d_tds;
/** samples */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback