feat(kernel/definition): add mk_definition procedure that automatically computes the weight
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
6c3a796119
commit
f320277248
2 changed files with 19 additions and 1 deletions
|
@ -5,6 +5,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
|
|||
Author: Leonardo de Moura
|
||||
*/
|
||||
#include "kernel/definition.h"
|
||||
#include "kernel/environment.h"
|
||||
#include "kernel/for_each_fn.h"
|
||||
|
||||
namespace lean {
|
||||
static serializer & operator<<(serializer & s, param_names const & ps) { return write_list<name>(s, ps); }
|
||||
|
@ -91,6 +93,18 @@ void definition::write(serializer & s) const { m_ptr->write(s); }
|
|||
definition mk_definition(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t, expr const & v, bool opaque, unsigned weight, module_idx mod_idx, bool use_conv_opt) {
|
||||
return definition(new definition::cell(n, params, cs, t, false, v, opaque, weight, mod_idx, use_conv_opt));
|
||||
}
|
||||
definition mk_definition(environment const & env, name const & n, param_names const & params, level_cnstrs const & cs, expr const & t, expr const & v, bool opaque, module_idx mod_idx, bool use_conv_opt) {
|
||||
unsigned w = 0;
|
||||
for_each(v, [&](expr const & e, unsigned) {
|
||||
if (is_constant(e)) {
|
||||
auto d = env.find(const_name(e));
|
||||
if (d && d->get_weight() > w)
|
||||
w = d->get_weight();
|
||||
}
|
||||
return true;
|
||||
});
|
||||
return mk_definition(n, params, cs, t, v, opaque, w+1, mod_idx, use_conv_opt);
|
||||
}
|
||||
definition mk_theorem(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t, expr const & v) {
|
||||
return definition(new definition::cell(n, params, cs, t, true, v, true, 0, 0, false));
|
||||
}
|
||||
|
|
|
@ -68,7 +68,10 @@ public:
|
|||
module_idx get_module_idx() const;
|
||||
bool use_conv_opt() const;
|
||||
|
||||
friend definition mk_definition(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t, expr const & v, bool opaque, unsigned weight, module_idx mod_idx, bool use_conv_opt);
|
||||
friend definition mk_definition(environment const & env, name const & n, param_names const & params, level_cnstrs const & cs, expr const & t,
|
||||
expr const & v, bool opaque, module_idx mod_idx, bool use_conv_opt);
|
||||
friend definition mk_definition(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t, expr const & v, bool opaque,
|
||||
unsigned weight, module_idx mod_idx, bool use_conv_opt);
|
||||
friend definition mk_theorem(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t, expr const & v);
|
||||
friend definition mk_axiom(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t);
|
||||
friend definition mk_var_decl(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t);
|
||||
|
@ -81,6 +84,7 @@ inline optional<definition> some_definition(definition const & o) { return optio
|
|||
inline optional<definition> some_definition(definition && o) { return optional<definition>(std::forward<definition>(o)); }
|
||||
|
||||
definition mk_definition(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t, expr const & v, bool opaque = false, unsigned weight = 0, module_idx mod_idx = 0, bool use_conv_opt = true);
|
||||
definition mk_definition(environment const & env, name const & n, param_names const & params, level_cnstrs const & cs, expr const & t, expr const & v, bool opaque = false, module_idx mod_idx = 0, bool use_conv_opt = true);
|
||||
definition mk_theorem(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t, expr const & v);
|
||||
definition mk_axiom(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t);
|
||||
definition mk_var_decl(name const & n, param_names const & params, level_cnstrs const & cs, expr const & t);
|
||||
|
|
Loading…
Reference in a new issue