refactor(library/blast): refactor hypothesis object: merge m_value and m_justification fields

This commit is contained in:
Leonardo de Moura 2015-10-04 21:27:39 -07:00
parent 7b883cae8f
commit 44881552b4
6 changed files with 18 additions and 18 deletions

View file

@ -215,7 +215,7 @@ class blastenv {
lean_assert(is_local(h)); lean_assert(is_local(h));
expr type = normalize(*norm_tc, mlocal_type(h)); expr type = normalize(*norm_tc, mlocal_type(h));
expr new_type = to_blast_expr(type); expr new_type = to_blast_expr(type);
expr href = s.add_hypothesis(local_pp_name(h), new_type, none_expr(), some_expr(h)); expr href = s.add_hypothesis(local_pp_name(h), new_type, h);
local2href.insert(mlocal_name(h), href); local2href.insert(mlocal_name(h), href);
} }
expr target = normalize(*norm_tc, g.get_type()); expr target = normalize(*norm_tc, g.get_type());

View file

@ -69,16 +69,16 @@ void branch::add_deps(expr const & e, hypothesis & h_user, unsigned hidx_user) {
void branch::add_deps(hypothesis & h_user, unsigned hidx_user) { void branch::add_deps(hypothesis & h_user, unsigned hidx_user) {
add_deps(h_user.m_type, h_user, hidx_user); add_deps(h_user.m_type, h_user, hidx_user);
if (h_user.m_value) if (!blast::is_local(h_user.m_value)) {
add_deps(*h_user.m_value, h_user, hidx_user); add_deps(h_user.m_value, h_user, hidx_user);
}
} }
expr branch::add_hypothesis(name const & n, expr const & type, optional<expr> const & value, optional<expr> const & jst) { expr branch::add_hypothesis(name const & n, expr const & type, expr const & value) {
hypothesis new_h; hypothesis new_h;
new_h.m_name = n; new_h.m_name = n;
new_h.m_type = type; new_h.m_type = type;
new_h.m_value = value; new_h.m_value = value;
new_h.m_justification = jst;
unsigned new_hidx = m_next; unsigned new_hidx = m_next;
m_next++; m_next++;
add_deps(new_h, new_hidx); add_deps(new_h, new_hidx);
@ -88,8 +88,8 @@ expr branch::add_hypothesis(name const & n, expr const & type, optional<expr> co
static name * g_prefix = nullptr; static name * g_prefix = nullptr;
expr branch::add_hypothesis(expr const & type, optional<expr> const & value, optional<expr> const & jst) { expr branch::add_hypothesis(expr const & type, expr const & value) {
return add_hypothesis(name(*g_prefix, m_next), type, value, jst); return add_hypothesis(name(*g_prefix, m_next), type, value);
} }
bool branch::hidx_depends_on(unsigned hidx_user, unsigned hidx_provider) const { bool branch::hidx_depends_on(unsigned hidx_user, unsigned hidx_provider) const {

View file

@ -34,8 +34,8 @@ class branch {
public: public:
branch():m_next(0) {} branch():m_next(0) {}
expr add_hypothesis(name const & n, expr const & type, optional<expr> const & value, optional<expr> const & jst); expr add_hypothesis(name const & n, expr const & type, expr const & value);
expr add_hypothesis(expr const & type, optional<expr> const & value, optional<expr> const & jst); expr add_hypothesis(expr const & type, expr const & value);
/** \brief Return true iff the hypothesis with index \c hidx_user depends on the hypothesis with index /** \brief Return true iff the hypothesis with index \c hidx_user depends on the hypothesis with index
\c hidx_provider. */ \c hidx_provider. */

View file

@ -28,8 +28,8 @@ class hypothesis {
unsigned m_depth; unsigned m_depth;
hypothesis_idx_set m_deps; // hypotheses used by the type and/or value of this hypothesis. hypothesis_idx_set m_deps; // hypotheses used by the type and/or value of this hypothesis.
expr m_type; expr m_type;
optional<expr> m_value; expr m_value; // justification for this object.
optional<expr> m_justification; // Remark: if blast::is_local(m_value) is true, then the hypothesis is an assumption
public: public:
hypothesis():m_active(true), m_depth(0) {} hypothesis():m_active(true), m_depth(0) {}
name const & get_name() const { return m_name; } name const & get_name() const { return m_name; }
@ -37,9 +37,9 @@ public:
unsigned get_depth() const { return m_depth; } unsigned get_depth() const { return m_depth; }
hypothesis_idx_set const & get_backward_deps() const { return m_deps; } hypothesis_idx_set const & get_backward_deps() const { return m_deps; }
expr const & get_type() const { return m_type; } expr const & get_type() const { return m_type; }
optional<expr> const & get_value() const { return m_value; } expr const & get_value() const { return m_value; }
optional<expr> const & get_justification() const { return m_justification; }
/** \brief Return true iff this hypothesis depends on \c h. */ /** \brief Return true iff this hypothesis depends on \c h. */
bool depends_on(expr const & h) const { return m_deps.contains(href_index(h)); } bool depends_on(expr const & h) const { return m_deps.contains(href_index(h)); }
bool is_assumption() const { return blast::is_local(m_value); }
}; };
}} }}

View file

@ -341,7 +341,7 @@ bool state::check_hypothesis(expr const & e, branch const & b, unsigned hidx, hy
bool state::check_hypothesis(branch const & b, unsigned hidx, hypothesis const & h) const { bool state::check_hypothesis(branch const & b, unsigned hidx, hypothesis const & h) const {
lean_assert(check_hypothesis(h.get_type(), b, hidx, h)); lean_assert(check_hypothesis(h.get_type(), b, hidx, h));
lean_assert(!h.get_value() || check_hypothesis(*h.get_value(), b, hidx, h)); lean_assert(h.is_assumption() || check_hypothesis(h.get_value(), b, hidx, h));
return true; return true;
} }

View file

@ -126,16 +126,16 @@ public:
expr instantiate_urefs_mrefs(expr const & e); expr instantiate_urefs_mrefs(expr const & e);
/** \brief Add a new hypothesis to the main branch */ /** \brief Add a new hypothesis to the main branch */
expr add_hypothesis(name const & n, expr const & type, optional<expr> const & value, optional<expr> const & jst) { expr add_hypothesis(name const & n, expr const & type, expr const & value) {
return m_main.add_hypothesis(n, type, value, jst); return m_main.add_hypothesis(n, type, value);
} }
branch & get_main_branch() { return m_main; } branch & get_main_branch() { return m_main; }
branch const & get_main_branch() const { return m_main; } branch const & get_main_branch() const { return m_main; }
/** \brief Add a new hypothesis to the main branch */ /** \brief Add a new hypothesis to the main branch */
expr add_hypothesis(expr const & type, optional<expr> const & value, optional<expr> const & jst) { expr add_hypothesis(expr const & type, expr const & value) {
return m_main.add_hypothesis(type, value, jst); return m_main.add_hypothesis(type, value);
} }
/** \brief Set target (aka conclusion, aka type of the goal, aka type of the term that must be synthesize in this branch) /** \brief Set target (aka conclusion, aka type of the goal, aka type of the term that must be synthesize in this branch)