refactor(library/blast): we don't need blast::justification

This commit is contained in:
Leonardo de Moura 2015-09-23 18:13:18 -07:00
parent 7be1c015d1
commit 86e8508711
5 changed files with 16 additions and 81 deletions

View file

@ -1 +1 @@
add_library(blast OBJECT state.cpp expr.cpp hypothesis.cpp)
add_library(blast OBJECT state.cpp expr.cpp)

View file

@ -14,8 +14,9 @@ namespace blast {
class goal {
typedef rb_map<unsigned, hypothesis, unsigned_cmp> context;
friend class state;
unsigned m_next;
context m_context;
unsigned m_next;
context m_context;
expr m_type;
expr const & mk_lref(expr const & type, optional<expr> const & value);
public:
goal():m_next(0) {}

View file

@ -1,50 +0,0 @@
/*
Copyright (c) 2015 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#include "library/blast/hypothesis.h"
namespace lean {
namespace blast {
struct justification_idx_gen {
unsigned m_next_idx;
list<unsigned> m_free_list;
public:
justification_idx_gen():m_next_idx(0) {}
void recycle(unsigned idx) {
m_free_list = cons(idx, m_free_list);
}
unsigned next() {
if (m_free_list) {
unsigned r = head(m_free_list);
m_free_list = tail(m_free_list);
return r;
} else {
unsigned r = m_next_idx;
m_next_idx++;
return r;
}
}
};
MK_THREAD_LOCAL_GET_DEF(justification_idx_gen, get_justification_idx_gen)
justification_cell::justification_cell():m_rc(0) {
m_idx = get_justification_idx_gen().next();
}
void justification_cell::dealloc() {
get_justification_idx_gen().recycle(m_idx);
delete this;
}
justification::justification():m_ptr(nullptr) {}
justification::justification(justification_cell & ptr):m_ptr(&ptr) { if (m_ptr) m_ptr->inc_ref(); }
justification::justification(justification const & s):m_ptr(s.m_ptr) { if (m_ptr) m_ptr->inc_ref(); }
justification::justification(justification && s):m_ptr(s.m_ptr) { s.m_ptr = nullptr; }
justification::~justification() { if (m_ptr) m_ptr->dec_ref(); }
justification & justification::operator=(justification const & s) { LEAN_COPY_REF(s); }
justification & justification::operator=(justification && s) { LEAN_MOVE_REF(s); }
}}

View file

@ -15,32 +15,6 @@ class hypothesis;
class state;
class goal;
class justification_cell {
MK_LEAN_RC();
unsigned m_idx;
void dealloc();
public:
justification_cell();
virtual ~justification_cell() {}
virtual expr to_expr(hypothesis const &) const = 0;
/** \brief Return thread local unique identifier associated with justification object */
unsigned get_idx() const { return m_idx; }
};
class justification {
justification_cell * m_ptr;
public:
justification();
justification(justification_cell & c);
justification(justification const & s);
justification(justification && s);
~justification();
justification & operator=(justification const & s);
justification & operator=(justification && s);
expr to_expr(hypothesis const & h) const { return m_ptr->to_expr(h); }
};
typedef rb_tree<unsigned, unsigned_cmp> hypothesis_set;
class hypothesis {
@ -51,7 +25,7 @@ class hypothesis {
hypothesis_set m_forward_deps;
expr m_type;
optional<expr> m_value;
justification m_jst;
optional<expr> m_justification;
public:
hypothesis();
bool is_active() const { return m_active; }
@ -60,7 +34,7 @@ public:
hypothesis_set const & get_forward_deps() const { return m_forward_deps; }
expr const & get_type() const { return m_type; }
optional<expr> const & get_value() const { return m_value; }
justification const & get_justification() const { return m_jst; }
optional<expr> const & get_justification() const { return m_justification; }
};
}
}

View file

@ -5,9 +5,19 @@ Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#pragma once
#include "util/rb_map.h"
#include "kernel/expr.h"
#include "library/blast/hypothesis.h"
namespace lean {
namespace blast {
class metavar_decl {
hypothesis_set m_context;
expr m_type;
};
class state {
typedef rb_map<unsigned, metavar_decl, unsigned_cmp> metavar_decls;
metavar_decls m_metavar_decls;
};
}}