From 78350cb1caa989f740a3159d1c578c454111874c Mon Sep 17 00:00:00 2001 From: Andrew Reynolds Date: Thu, 14 Mar 2019 13:36:56 -0500 Subject: [PATCH] Fix substitution step in ho matching (#2825) --- src/theory/quantifiers/ematching/ho_trigger.cpp | 5 +++++ 1 file changed, 5 insertions(+) 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::iterator itf = fixed_vals.find(k); if (itf == fixed_vals.end()) -- 2.30.2