diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2019-03-14 13:36:56 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-14 13:36:56 -0500 |
commit | 78350cb1caa989f740a3159d1c578c454111874c (patch) | |
tree | 64040b3f628da78b5b77265566283b2bf4b88020 /src/theory/quantifiers/ematching | |
parent | 26977381d8e026718a056adee0fa6dea1a76555d (diff) |
Fix substitution step in ho matching (#2825)
Diffstat (limited to 'src/theory/quantifiers/ematching')
-rw-r--r-- | src/theory/quantifiers/ematching/ho_trigger.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/theory/quantifiers/ematching/ho_trigger.cpp b/src/theory/quantifiers/ematching/ho_trigger.cpp index 2fcfa19d9..ebc0081be 100644 --- a/src/theory/quantifiers/ematching/ho_trigger.cpp +++ b/src/theory/quantifiers/ematching/ho_trigger.cpp @@ -270,6 +270,11 @@ bool HigherOrderTrigger::sendInstantiation(InstMatch& m) // Assert( f==value ); for (unsigned k = 0, size = args.size(); k < size; k++) { + // must now subsitute back, to handle cases like + // (@ x y) matching (@ t (@ t s)) + // where the above substitution would produce (@ x (@ x s)), + // but the argument should be (@ t s). + args[k] = args[k].substitute(var, value); Node val = args[k]; std::map<unsigned, Node>::iterator itf = fixed_vals.find(k); if (itf == fixed_vals.end()) |