fix(kernel/converter): add temporary fix, we need to be able to backtrack constraints

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2014-06-21 20:07:07 -07:00
parent f9a21166f0
commit aac3830e31

View file

@ -412,12 +412,14 @@ struct default_converter : public converter {
} }
// At this point, t_n and s_n are in weak head normal form (modulo meta-variables and proof irrelevance) // At this point, t_n and s_n are in weak head normal form (modulo meta-variables and proof irrelevance)
bool is_same_fn_app = false;
if (is_app(t_n) && is_app(s_n)) { if (is_app(t_n) && is_app(s_n)) {
buffer<expr> t_args; buffer<expr> t_args;
buffer<expr> s_args; buffer<expr> s_args;
expr t_fn = get_app_args(t_n, t_args); expr t_fn = get_app_args(t_n, t_args);
expr s_fn = get_app_args(s_n, s_args); expr s_fn = get_app_args(s_n, s_args);
if (is_def_eq(t_fn, s_fn, c, jst) && t_args.size() == s_args.size()) { if (t_fn == s_fn && t_args.size() == s_args.size()) {
is_same_fn_app = true;
unsigned i = 0; unsigned i = 0;
for (; i < t_args.size(); i++) { for (; i < t_args.size(); i++) {
if (!is_def_eq(t_args[i], s_args[i], c, jst)) if (!is_def_eq(t_args[i], s_args[i], c, jst))
@ -445,7 +447,7 @@ struct default_converter : public converter {
return true; return true;
} }
if (has_metavar(t_n) || has_metavar(s_n)) { if (!is_same_fn_app && (has_metavar(t_n) || has_metavar(s_n))) {
c.add_cnstr(mk_eq_cnstr(t_n, s_n, jst.get())); c.add_cnstr(mk_eq_cnstr(t_n, s_n, jst.get()));
return true; return true;
} }