chore(kernel): binder => binding where appropriate
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
33ae79cd9e
commit
5ce134e24e
12 changed files with 45 additions and 39 deletions
|
@ -74,7 +74,7 @@ struct default_converter : public converter {
|
|||
} else if (is_app(new_b) && is_var(app_arg(new_b), 0) && !has_free_var(app_fn(new_b), 0)) {
|
||||
return lower_free_vars(app_fn(new_b), 1);
|
||||
} else {
|
||||
return update_binder(e, binding_domain(e), new_b);
|
||||
return update_binding(e, binding_domain(e), new_b);
|
||||
}
|
||||
} else if (is_app(b) && is_var(app_arg(b), 0) && !has_free_var(app_fn(b), 0)) {
|
||||
return lower_free_vars(app_fn(b), 1);
|
||||
|
@ -294,9 +294,9 @@ struct default_converter : public converter {
|
|||
and
|
||||
body(t) is definitionally equal to body(s)
|
||||
*/
|
||||
bool is_def_eq_binder(expr t, expr s, context & c, delayed_justification & jst) {
|
||||
bool is_def_eq_binding(expr t, expr s, context & c, delayed_justification & jst) {
|
||||
lean_assert(t.kind() == s.kind());
|
||||
lean_assert(is_binder(t));
|
||||
lean_assert(is_binding(t));
|
||||
expr_kind k = t.kind();
|
||||
buffer<expr> subst;
|
||||
do {
|
||||
|
@ -323,7 +323,7 @@ struct default_converter : public converter {
|
|||
if (t.kind() == s.kind()) {
|
||||
switch (t.kind()) {
|
||||
case expr_kind::Lambda: case expr_kind::Pi:
|
||||
return to_lbool(is_def_eq_binder(t, s, c, jst));
|
||||
return to_lbool(is_def_eq_binding(t, s, c, jst));
|
||||
case expr_kind::Sort:
|
||||
// t and s are Sorts
|
||||
if (is_equivalent(sort_level(t), sort_level(s))) {
|
||||
|
|
|
@ -406,9 +406,9 @@ expr update_rev_app(expr const & e, unsigned num, expr const * new_args) {
|
|||
return e;
|
||||
}
|
||||
|
||||
expr update_binder(expr const & e, expr const & new_domain, expr const & new_body) {
|
||||
expr update_binding(expr const & e, expr const & new_domain, expr const & new_body) {
|
||||
if (!is_eqp(binding_domain(e), new_domain) || !is_eqp(binding_body(e), new_body))
|
||||
return copy_tag(e, mk_binder(e.kind(), binding_name(e), new_domain, new_body, binding_info(e)));
|
||||
return copy_tag(e, mk_binding(e.kind(), binding_name(e), new_domain, new_body, binding_info(e)));
|
||||
else
|
||||
return e;
|
||||
}
|
||||
|
|
|
@ -131,7 +131,7 @@ public:
|
|||
friend expr mk_app(expr const & f, expr const & a);
|
||||
friend expr mk_pair(expr const & f, expr const & s, expr const & t);
|
||||
friend expr mk_proj(bool fst, expr const & p);
|
||||
friend expr mk_binder(expr_kind k, name const & n, expr const & t, expr const & e, binder_info const & i);
|
||||
friend expr mk_binding(expr_kind k, name const & n, expr const & t, expr const & e, binder_info const & i);
|
||||
friend expr mk_let(name const & n, expr const & t, expr const & v, expr const & e);
|
||||
friend expr mk_macro(macro_definition const & m, unsigned num, expr const * args);
|
||||
|
||||
|
@ -397,7 +397,7 @@ inline bool is_lambda(expr_cell * e) { return e->kind() == expr_kind::Lambd
|
|||
inline bool is_pi(expr_cell * e) { return e->kind() == expr_kind::Pi; }
|
||||
inline bool is_sort(expr_cell * e) { return e->kind() == expr_kind::Sort; }
|
||||
inline bool is_let(expr_cell * e) { return e->kind() == expr_kind::Let; }
|
||||
inline bool is_binder(expr_cell * e) { return is_lambda(e) || is_pi(e); }
|
||||
inline bool is_binding(expr_cell * e) { return is_lambda(e) || is_pi(e); }
|
||||
inline bool is_mlocal(expr_cell * e) { return is_metavar(e) || is_local(e); }
|
||||
|
||||
inline bool is_var(expr const & e) { return e.kind() == expr_kind::Var; }
|
||||
|
@ -410,7 +410,7 @@ inline bool is_lambda(expr const & e) { return e.kind() == expr_kind::Lambda
|
|||
inline bool is_pi(expr const & e) { return e.kind() == expr_kind::Pi; }
|
||||
inline bool is_sort(expr const & e) { return e.kind() == expr_kind::Sort; }
|
||||
inline bool is_let(expr const & e) { return e.kind() == expr_kind::Let; }
|
||||
inline bool is_binder(expr const & e) { return is_lambda(e) || is_pi(e); }
|
||||
inline bool is_binding(expr const & e) { return is_lambda(e) || is_pi(e); }
|
||||
inline bool is_mlocal(expr const & e) { return is_metavar(e) || is_local(e); }
|
||||
|
||||
bool is_atomic(expr const & e);
|
||||
|
@ -438,14 +438,14 @@ template<typename T> expr mk_app(T const & args) { return mk_app(args.size(), ar
|
|||
expr mk_rev_app(unsigned num_args, expr const * args);
|
||||
template<typename T> expr mk_rev_app(T const & args) { return mk_rev_app(args.size(), args.data()); }
|
||||
template<typename T> expr mk_rev_app(expr const & f, T const & args) { return mk_rev_app(f, args.size(), args.data()); }
|
||||
inline expr mk_binder(expr_kind k, name const & n, expr const & t, expr const & e, binder_info const & i = binder_info()) {
|
||||
inline expr mk_binding(expr_kind k, name const & n, expr const & t, expr const & e, binder_info const & i = binder_info()) {
|
||||
return expr(new expr_binding(k, n, t, e, i));
|
||||
}
|
||||
inline expr mk_lambda(name const & n, expr const & t, expr const & e, binder_info const & i = binder_info()) {
|
||||
return mk_binder(expr_kind::Lambda, n, t, e, i);
|
||||
return mk_binding(expr_kind::Lambda, n, t, e, i);
|
||||
}
|
||||
inline expr mk_pi(name const & n, expr const & t, expr const & e, binder_info const & i = binder_info()) {
|
||||
return mk_binder(expr_kind::Pi, n, t, e, i);
|
||||
return mk_binding(expr_kind::Pi, n, t, e, i);
|
||||
}
|
||||
inline expr mk_let(name const & n, expr const & t, expr const & v, expr const & e) { return expr(new expr_let(n, t, v, e)); }
|
||||
inline expr mk_sort(level const & l) { return expr(new expr_sort(l)); }
|
||||
|
@ -500,7 +500,7 @@ expr mk_app_vars(expr const & f, unsigned n);
|
|||
inline expr_var * to_var(expr_cell * e) { lean_assert(is_var(e)); return static_cast<expr_var*>(e); }
|
||||
inline expr_const * to_constant(expr_cell * e) { lean_assert(is_constant(e)); return static_cast<expr_const*>(e); }
|
||||
inline expr_app * to_app(expr_cell * e) { lean_assert(is_app(e)); return static_cast<expr_app*>(e); }
|
||||
inline expr_binding * to_binding(expr_cell * e) { lean_assert(is_binder(e)); return static_cast<expr_binding*>(e); }
|
||||
inline expr_binding * to_binding(expr_cell * e) { lean_assert(is_binding(e)); return static_cast<expr_binding*>(e); }
|
||||
inline expr_let * to_let(expr_cell * e) { lean_assert(is_let(e)); return static_cast<expr_let*>(e); }
|
||||
inline expr_sort * to_sort(expr_cell * e) { lean_assert(is_sort(e)); return static_cast<expr_sort*>(e); }
|
||||
inline expr_mlocal * to_mlocal(expr_cell * e) { lean_assert(is_mlocal(e)); return static_cast<expr_mlocal*>(e); }
|
||||
|
@ -636,7 +636,7 @@ struct expr_cell_offset_eqp { unsigned operator()(expr_cell_offset const & p1, e
|
|||
expr update_app(expr const & e, expr const & new_fn, expr const & new_arg);
|
||||
expr update_rev_app(expr const & e, unsigned num, expr const * new_args);
|
||||
template<typename C> expr update_rev_app(expr const & e, C const & c) { return update_rev_app(e, c.size(), c.data()); }
|
||||
expr update_binder(expr const & e, expr const & new_domain, expr const & new_body);
|
||||
expr update_binding(expr const & e, expr const & new_domain, expr const & new_body);
|
||||
expr update_let(expr const & e, expr const & new_type, expr const & new_val, expr const & new_body);
|
||||
expr update_mlocal(expr const & e, expr const & new_type);
|
||||
expr update_sort(expr const & e, level const & new_level);
|
||||
|
|
|
@ -9,6 +9,11 @@ Author: Leonardo de Moura
|
|||
#include "kernel/environment.h"
|
||||
|
||||
namespace lean {
|
||||
name pick_unused_name(expr const &, name const & s) {
|
||||
// TODO(Leo)
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
\brief Very basic printer for expressions.
|
||||
It is mainly used when debugging code.
|
||||
|
@ -68,7 +73,7 @@ struct print_expr_fn {
|
|||
return print_child(a, c);
|
||||
}
|
||||
|
||||
void print_binder(char const * bname, expr const & e, context const & c) {
|
||||
void print_binding(char const * bname, expr const & e, context const & c) {
|
||||
out() << bname << " ";
|
||||
if (binding_info(e).is_implicit())
|
||||
out() << "{";
|
||||
|
@ -121,11 +126,11 @@ struct print_expr_fn {
|
|||
print_app(a, c);
|
||||
break;
|
||||
case expr_kind::Lambda:
|
||||
print_binder("fun", a, c);
|
||||
print_binding("fun", a, c);
|
||||
break;
|
||||
case expr_kind::Pi:
|
||||
if (!is_arrow(a)) {
|
||||
print_binder("Pi", a, c);
|
||||
print_binding("Pi", a, c);
|
||||
} else {
|
||||
print_child(binding_domain(a), c);
|
||||
out() << " -> ";
|
||||
|
|
|
@ -98,7 +98,7 @@ expr replace_fn::operator()(expr const & e) {
|
|||
goto begin_loop;
|
||||
if (check_index(f, 1) && !visit(binding_body(e), offset + 1))
|
||||
goto begin_loop;
|
||||
r = update_binder(e, rs(-2), rs(-1));
|
||||
r = update_binding(e, rs(-2), rs(-1));
|
||||
pop_rs(2);
|
||||
break;
|
||||
case expr_kind::Let:
|
||||
|
|
|
@ -22,14 +22,14 @@ expr replace_visitor::visit_app(expr const & e) {
|
|||
lean_assert(is_app(e));
|
||||
return update_app(e, visit(app_fn(e)), visit(app_arg(e)));
|
||||
}
|
||||
expr replace_visitor::visit_binder(expr const & e) {
|
||||
lean_assert(is_binder(e));
|
||||
expr replace_visitor::visit_binding(expr const & e) {
|
||||
lean_assert(is_binding(e));
|
||||
expr new_d = visit(binding_domain(e));
|
||||
expr new_b = visit(binding_body(e));
|
||||
return update_binder(e, new_d, new_b);
|
||||
return update_binding(e, new_d, new_b);
|
||||
}
|
||||
expr replace_visitor::visit_lambda(expr const & e) { return visit_binder(e); }
|
||||
expr replace_visitor::visit_pi(expr const & e) { return visit_binder(e); }
|
||||
expr replace_visitor::visit_lambda(expr const & e) { return visit_binding(e); }
|
||||
expr replace_visitor::visit_pi(expr const & e) { return visit_binding(e); }
|
||||
expr replace_visitor::visit_let(expr const & e) {
|
||||
lean_assert(is_let(e));
|
||||
expr new_t = visit(let_type(e));
|
||||
|
|
|
@ -27,7 +27,7 @@ protected:
|
|||
virtual expr visit_meta(expr const &);
|
||||
virtual expr visit_local(expr const &);
|
||||
virtual expr visit_app(expr const &);
|
||||
virtual expr visit_binder(expr const &);
|
||||
virtual expr visit_binding(expr const &);
|
||||
virtual expr visit_lambda(expr const &);
|
||||
virtual expr visit_pi(expr const &);
|
||||
virtual expr visit_let(expr const &);
|
||||
|
|
|
@ -248,9 +248,9 @@ expr & to_app(lua_State * L, int idx) {
|
|||
return r;
|
||||
}
|
||||
|
||||
expr & to_binder(lua_State * L, int idx) {
|
||||
expr & to_binding(lua_State * L, int idx) {
|
||||
expr & r = to_expr(L, idx);
|
||||
if (!is_binder(r))
|
||||
if (!is_binding(r))
|
||||
throw exception(sstream() << "arg #" << idx << " must be a binder (i.e., lambda or Pi)");
|
||||
return r;
|
||||
}
|
||||
|
@ -476,7 +476,7 @@ EXPR_PRED(is_var)
|
|||
EXPR_PRED(is_app)
|
||||
EXPR_PRED(is_lambda)
|
||||
EXPR_PRED(is_pi)
|
||||
EXPR_PRED(is_binder)
|
||||
EXPR_PRED(is_binding)
|
||||
EXPR_PRED(is_let)
|
||||
EXPR_PRED(is_macro)
|
||||
EXPR_PRED(is_metavar)
|
||||
|
@ -593,10 +593,10 @@ static int expr_abstract(lua_State * L) {
|
|||
}
|
||||
}
|
||||
|
||||
static int binding_name(lua_State * L) { return push_name(L, binding_name(to_binder(L, 1))); }
|
||||
static int binding_domain(lua_State * L) { return push_expr(L, binding_domain(to_binder(L, 1))); }
|
||||
static int binding_body(lua_State * L) { return push_expr(L, binding_body(to_binder(L, 1))); }
|
||||
static int binding_info(lua_State * L) { return push_binder_info(L, binding_info(to_binder(L, 1))); }
|
||||
static int binding_name(lua_State * L) { return push_name(L, binding_name(to_binding(L, 1))); }
|
||||
static int binding_domain(lua_State * L) { return push_expr(L, binding_domain(to_binding(L, 1))); }
|
||||
static int binding_body(lua_State * L) { return push_expr(L, binding_body(to_binding(L, 1))); }
|
||||
static int binding_info(lua_State * L) { return push_binder_info(L, binding_info(to_binding(L, 1))); }
|
||||
|
||||
static int let_name(lua_State * L) { return push_name(L, let_name(to_let(L, 1))); }
|
||||
static int let_type(lua_State * L) { return push_expr(L, let_type(to_let(L, 1))); }
|
||||
|
@ -642,7 +642,7 @@ static const struct luaL_Reg expr_m[] = {
|
|||
{"is_app", safe_function<expr_is_app>},
|
||||
{"is_lambda", safe_function<expr_is_lambda>},
|
||||
{"is_pi", safe_function<expr_is_pi>},
|
||||
{"is_binder", safe_function<expr_is_binder>},
|
||||
{"is_binding", safe_function<expr_is_binding>},
|
||||
{"is_let", safe_function<expr_is_let>},
|
||||
{"is_macro", safe_function<expr_is_macro>},
|
||||
{"is_meta", safe_function<expr_is_meta>},
|
||||
|
|
|
@ -180,12 +180,12 @@ public:
|
|||
class expr_deserializer : public object_deserializer<expr> {
|
||||
typedef object_deserializer<expr> super;
|
||||
public:
|
||||
expr read_binder(expr_kind k) {
|
||||
deserializer & d = get_owner();
|
||||
expr read_binding(expr_kind k) {
|
||||
deserializer & d = get_owner();
|
||||
name n = read_name(d);
|
||||
binder_info i = read_binder_info(d);
|
||||
expr t = read();
|
||||
return mk_binder(k, n, t, read(), i);
|
||||
return mk_binding(k, n, t, read(), i);
|
||||
}
|
||||
|
||||
expr read() {
|
||||
|
@ -214,7 +214,7 @@ public:
|
|||
return mk_app(f, read());
|
||||
}
|
||||
case expr_kind::Lambda: case expr_kind::Pi:
|
||||
return read_binder(k);
|
||||
return read_binding(k);
|
||||
case expr_kind::Let: {
|
||||
name n = read_name(d);
|
||||
expr t = read();
|
||||
|
|
|
@ -36,7 +36,7 @@ struct max_sharing_fn::imp {
|
|||
res = update_app(a, apply(app_fn(a)), apply(app_arg(a)));
|
||||
break;
|
||||
case expr_kind::Lambda: case expr_kind::Pi:
|
||||
res = update_binder(a, apply(binding_domain(a)), apply(binding_body(a)));
|
||||
res = update_binding(a, apply(binding_domain(a)), apply(binding_body(a)));
|
||||
break;
|
||||
case expr_kind::Let:
|
||||
res = update_let(a, apply(let_type(a)), apply(let_value(a)), apply(let_body(a)));
|
||||
|
|
|
@ -15,6 +15,7 @@ Author: Leonardo de Moura
|
|||
#include "kernel/abstract.h"
|
||||
#include "kernel/instantiate.h"
|
||||
#include "library/max_sharing.h"
|
||||
#include "library/deep_copy.h"
|
||||
#include "library/kernel_serializer.h"
|
||||
using namespace lean;
|
||||
|
||||
|
|
|
@ -45,8 +45,8 @@ assert(Var(0):is_var())
|
|||
assert(f(a):is_app())
|
||||
assert(l1:is_lambda())
|
||||
assert(pi3:is_pi())
|
||||
assert(l1:is_binder())
|
||||
assert(pi3:is_binder())
|
||||
assert(l1:is_binding())
|
||||
assert(pi3:is_binding())
|
||||
assert(mk_metavar("m", Bool):is_metavar())
|
||||
assert(mk_local("m", Bool):is_local())
|
||||
assert(mk_metavar("m", Bool):is_mlocal())
|
||||
|
|
Loading…
Add table
Reference in a new issue