feat(frontends/lean/builtin_cmds): improve print <id>
when <id>
is a not yet revealed theorem
We add a remark saying the command `reveal <id>` should be used to access `<id>` definition.
This commit is contained in:
parent
591fb91f34
commit
8a85e4ee87
5 changed files with 26 additions and 2 deletions
|
@ -304,7 +304,13 @@ bool print_polymorphic(parser & p) {
|
||||||
} else if (is_hits_decl(env, c)) {
|
} else if (is_hits_decl(env, c)) {
|
||||||
print_constant(p, "builtin-HIT-constant", d);
|
print_constant(p, "builtin-HIT-constant", d);
|
||||||
} else if (d.is_axiom()) {
|
} else if (d.is_axiom()) {
|
||||||
print_constant(p, "axiom", d);
|
if (p.in_theorem_queue(d.get_name())) {
|
||||||
|
print_constant(p, "theorem", d);
|
||||||
|
out << "'" << d.get_name() << "' is still in the theorem queue, use command 'reveal "
|
||||||
|
<< d.get_name() << "' to access its definition.\n";
|
||||||
|
} else {
|
||||||
|
print_constant(p, "axiom", d);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
print_constant(p, "constant", d);
|
print_constant(p, "constant", d);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1859,10 +1859,12 @@ bool parser::curr_is_command_like() const {
|
||||||
|
|
||||||
void parser::add_delayed_theorem(environment const & env, name const & n, level_param_names const & ls,
|
void parser::add_delayed_theorem(environment const & env, name const & n, level_param_names const & ls,
|
||||||
expr const & t, expr const & v) {
|
expr const & t, expr const & v) {
|
||||||
|
m_theorem_queue_set.insert(n);
|
||||||
m_theorem_queue.add(env, n, ls, get_local_level_decls(), t, v);
|
m_theorem_queue.add(env, n, ls, get_local_level_decls(), t, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
void parser::add_delayed_theorem(certified_declaration const & cd) {
|
void parser::add_delayed_theorem(certified_declaration const & cd) {
|
||||||
|
m_theorem_queue_set.insert(cd.get_declaration().get_name());
|
||||||
m_theorem_queue.add(cd);
|
m_theorem_queue.add(cd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1873,6 +1875,7 @@ environment parser::reveal_theorems(buffer<name> const & ds) {
|
||||||
if (m_env.get(thm_name).is_axiom() &&
|
if (m_env.get(thm_name).is_axiom() &&
|
||||||
std::any_of(ds.begin(), ds.end(), [&](name const & n) { return n == thm_name; })) {
|
std::any_of(ds.begin(), ds.end(), [&](name const & n) { return n == thm_name; })) {
|
||||||
m_env = m_env.replace(thm);
|
m_env = m_env.replace(thm);
|
||||||
|
m_theorem_queue_set.erase(thm_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -14,7 +14,6 @@ Author: Leonardo de Moura
|
||||||
#include "util/exception.h"
|
#include "util/exception.h"
|
||||||
#include "util/thread_script_state.h"
|
#include "util/thread_script_state.h"
|
||||||
#include "util/script_exception.h"
|
#include "util/script_exception.h"
|
||||||
#include "util/worker_queue.h"
|
|
||||||
#include "util/name_generator.h"
|
#include "util/name_generator.h"
|
||||||
#include "kernel/environment.h"
|
#include "kernel/environment.h"
|
||||||
#include "kernel/expr_maps.h"
|
#include "kernel/expr_maps.h"
|
||||||
|
@ -123,6 +122,7 @@ class parser {
|
||||||
optional<bool> m_has_tactic_decls;
|
optional<bool> m_has_tactic_decls;
|
||||||
// We process theorems in parallel
|
// We process theorems in parallel
|
||||||
theorem_queue m_theorem_queue;
|
theorem_queue m_theorem_queue;
|
||||||
|
name_set m_theorem_queue_set; // set of theorem names in m_theorem_queue
|
||||||
|
|
||||||
// info support
|
// info support
|
||||||
snapshot_vector * m_snapshot_vector;
|
snapshot_vector * m_snapshot_vector;
|
||||||
|
@ -307,6 +307,7 @@ public:
|
||||||
void add_delayed_theorem(environment const & env, name const & n, level_param_names const & ls, expr const & t, expr const & v);
|
void add_delayed_theorem(environment const & env, name const & n, level_param_names const & ls, expr const & t, expr const & v);
|
||||||
void add_delayed_theorem(certified_declaration const & cd);
|
void add_delayed_theorem(certified_declaration const & cd);
|
||||||
environment reveal_theorems(buffer<name> const & ds);
|
environment reveal_theorems(buffer<name> const & ds);
|
||||||
|
bool in_theorem_queue(name const & n) const { return m_theorem_queue_set.contains(n); }
|
||||||
|
|
||||||
/** \brief Read the next token. */
|
/** \brief Read the next token. */
|
||||||
void scan() { m_curr = m_scanner.scan(m_env); }
|
void scan() { m_curr = m_scanner.scan(m_env); }
|
||||||
|
|
10
tests/lean/print_thm.lean
Normal file
10
tests/lean/print_thm.lean
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
open nat
|
||||||
|
|
||||||
|
theorem simple (a : nat) : a ≥ 0 :=
|
||||||
|
zero_le a
|
||||||
|
|
||||||
|
print simple
|
||||||
|
|
||||||
|
reveal simple
|
||||||
|
|
||||||
|
print simple
|
4
tests/lean/print_thm.lean.expected.out
Normal file
4
tests/lean/print_thm.lean.expected.out
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
theorem simple : ∀ (a : ℕ), a ≥ 0
|
||||||
|
'simple' is still in the theorem queue, use command 'reveal simple' to access its definition.
|
||||||
|
theorem simple : ∀ (a : ℕ), a ≥ 0 :=
|
||||||
|
zero_le
|
Loading…
Reference in a new issue