diff --git a/src/frontends/lean/parser_cmds.cpp b/src/frontends/lean/parser_cmds.cpp index 89679b6fd..4718408fc 100644 --- a/src/frontends/lean/parser_cmds.cpp +++ b/src/frontends/lean/parser_cmds.cpp @@ -803,12 +803,12 @@ void parser_imp::parse_using() { new_prefix = curr_name(); next(); } - buffer> to_add; + buffer> to_add; for (auto it = m_env->begin_objects(); it != m_env->end_objects(); ++it) { if (it->has_type() && it->has_name() && !is_hidden_object(*it) && is_prefix_of(prefix, it->get_name())) { auto n = replace_prefix(it->get_name(), prefix, new_prefix); if (!n.is_anonymous()) - to_add.emplace_back(n, mk_constant(it->get_name())); + to_add.emplace_back(n, it->get_name()); } } for (auto p : to_add) { diff --git a/src/frontends/lean/parser_expr.cpp b/src/frontends/lean/parser_expr.cpp index 35a53ac4d..86e66015c 100644 --- a/src/frontends/lean/parser_expr.cpp +++ b/src/frontends/lean/parser_expr.cpp @@ -247,7 +247,7 @@ expr parser_imp::parse_mixfixc(operator_info const & op) { expr parser_imp::get_name_ref(name const & id, pos_info const & p, bool implicit_args) { auto it = m_using_decls.find(id); if (it != m_using_decls.end()) { - return it->second; + return get_name_ref(it->second, p, implicit_args); } else { lean_assert(!m_namespace_prefixes.empty()); auto it = m_namespace_prefixes.end(); diff --git a/src/frontends/lean/parser_imp.h b/src/frontends/lean/parser_imp.h index 981c7fcba..941b174b9 100644 --- a/src/frontends/lean/parser_imp.h +++ b/src/frontends/lean/parser_imp.h @@ -56,7 +56,7 @@ class parser_imp { typedef name_map builtins; typedef expr_map expr_pos_info; typedef expr_map tactic_hints; // a mapping from placeholder to tactic - typedef scoped_map using_decls; + typedef scoped_map using_decls; enum class scope_kind { Scope, Namespace }; std::weak_ptr m_this; diff --git a/tests/lean/using_bug1.lean b/tests/lean/using_bug1.lean new file mode 100644 index 000000000..16d6cc6e9 --- /dev/null +++ b/tests/lean/using_bug1.lean @@ -0,0 +1,12 @@ +variables a b c d : Nat +axiom H : a + (b + c) = a + (b + d) +using Nat +check add_succr a + +theorem mul_zerol2 (a : Nat) : 0 * a = 0 +:= induction_on a + (have 0 * 0 = 0 : trivial) + (λ (n : Nat) (iH : 0 * n = 0), + calc 0 * (n + 1) = (0 * n) + 0 : mul_succr 0 n + ... = 0 + 0 : { iH } + ... = 0 : trivial) diff --git a/tests/lean/using_bug1.lean.expected.out b/tests/lean/using_bug1.lean.expected.out new file mode 100644 index 000000000..fceffd9bd --- /dev/null +++ b/tests/lean/using_bug1.lean.expected.out @@ -0,0 +1,10 @@ + Set: pp::colors + Set: pp::unicode + Assumed: a + Assumed: b + Assumed: c + Assumed: d + Assumed: H + Using: Nat +Nat::add_succr a : ∀ b : ℕ, a + (b + 1) = a + b + 1 + Proved: mul_zerol2