refactor(library): remove unnecessary file
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
e0ef6b2e9a
commit
28516a8dc2
2 changed files with 0 additions and 127 deletions
|
@ -1,98 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2013 Microsoft Corporation. All rights reserved.
|
|
||||||
Released under Apache 2.0 license as described in the file LICENSE.
|
|
||||||
|
|
||||||
Author: Leonardo de Moura
|
|
||||||
*/
|
|
||||||
#include "kernel/replace_fn.h"
|
|
||||||
#include "kernel/metavar.h"
|
|
||||||
#include "library/substitution.h"
|
|
||||||
#include "library/kernel_bindings.h"
|
|
||||||
|
|
||||||
namespace lean {
|
|
||||||
expr find(substitution & s, expr e) {
|
|
||||||
while (true) {
|
|
||||||
if (is_metavar(e)) {
|
|
||||||
expr * it = s.find(metavar_name(e));
|
|
||||||
if (it == nullptr)
|
|
||||||
return e;
|
|
||||||
e = *it;
|
|
||||||
} else {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
expr apply(substitution & s, expr const & e, optional<ro_metavar_env> const & menv) {
|
|
||||||
return replace(e, [&](expr const & e, unsigned) -> expr {
|
|
||||||
if (is_metavar(e)) {
|
|
||||||
expr r = find(s, e);
|
|
||||||
if (r != e) {
|
|
||||||
if (has_metavar(r)) {
|
|
||||||
r = apply(s, r);
|
|
||||||
s.insert(metavar_name(e), r);
|
|
||||||
}
|
|
||||||
return apply_local_context(r, metavar_lctx(e), menv);
|
|
||||||
} else {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
DECL_UDATA(substitution)
|
|
||||||
|
|
||||||
static int substitution_size(lua_State * L) {
|
|
||||||
lua_pushinteger(L, to_substitution(L, 1).size());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int substitution_empty(lua_State * L) {
|
|
||||||
lua_pushboolean(L, to_substitution(L, 1).empty());
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int substitution_find(lua_State * L) {
|
|
||||||
substitution & s = to_substitution(L, 1);
|
|
||||||
expr * it;
|
|
||||||
if (is_expr(L, 2)) {
|
|
||||||
expr const & e = to_expr(L, 2);
|
|
||||||
if (is_metavar(e))
|
|
||||||
it = s.find(metavar_name(e));
|
|
||||||
else
|
|
||||||
throw exception("arg #2 must be a metavariable");
|
|
||||||
} else {
|
|
||||||
it = s.find(to_name_ext(L, 2));
|
|
||||||
}
|
|
||||||
if (it)
|
|
||||||
push_expr(L, find(s, *it));
|
|
||||||
else
|
|
||||||
lua_pushnil(L);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int substitution_apply(lua_State * L) {
|
|
||||||
return push_expr(L, apply(to_substitution(L, 1), to_expr(L, 2)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct luaL_Reg substitution_m[] = {
|
|
||||||
{"__gc", substitution_gc}, // never throws
|
|
||||||
{"__len", safe_function<substitution_size>},
|
|
||||||
{"find", safe_function<substitution_find>},
|
|
||||||
{"empty", safe_function<substitution_empty>},
|
|
||||||
{"size", safe_function<substitution_size>},
|
|
||||||
{"apply", safe_function<substitution_apply>},
|
|
||||||
{0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
void open_substitution(lua_State * L) {
|
|
||||||
luaL_newmetatable(L, substitution_mt);
|
|
||||||
lua_pushvalue(L, -1);
|
|
||||||
lua_setfield(L, -2, "__index");
|
|
||||||
setfuncs(L, substitution_m, 0);
|
|
||||||
|
|
||||||
SET_GLOBAL_FUN(substitution_pred, "is_substitution");
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (c) 2013 Microsoft Corporation. All rights reserved.
|
|
||||||
Released under Apache 2.0 license as described in the file LICENSE.
|
|
||||||
|
|
||||||
Author: Leonardo de Moura
|
|
||||||
*/
|
|
||||||
#pragma once
|
|
||||||
#include "util/lua.h"
|
|
||||||
#include "util/splay_map.h"
|
|
||||||
#include "util/name.h"
|
|
||||||
#include "kernel/expr.h"
|
|
||||||
#include "kernel/metavar.h"
|
|
||||||
|
|
||||||
namespace lean {
|
|
||||||
/**
|
|
||||||
\brief Simpler version of metavar_env.
|
|
||||||
It is used in fo_unify
|
|
||||||
*/
|
|
||||||
typedef splay_map<name, expr, name_quick_cmp> substitution;
|
|
||||||
/**
|
|
||||||
\brief Apply substitution \c s to \c e
|
|
||||||
*/
|
|
||||||
expr apply(substitution & s, expr const & e, optional<ro_metavar_env> const & menv = none_ro_menv());
|
|
||||||
inline expr apply(substitution & s, expr const & e, ro_metavar_env const & menv) { return apply(s, e, some_ro_menv(menv)); }
|
|
||||||
|
|
||||||
expr find(substitution & s, expr e);
|
|
||||||
UDATA_DEFS_CORE(substitution)
|
|
||||||
void open_substitution(lua_State * L);
|
|
||||||
}
|
|
Loading…
Reference in a new issue