fix(library/normalize): bug in normalize
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
fae07771ec
commit
c5e8c10c9d
2 changed files with 17 additions and 1 deletions
|
@ -23,6 +23,14 @@ class normalize_fn {
|
||||||
return update_binding(e, d, b);
|
return update_binding(e, d, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr normalize_app(expr const & e) {
|
||||||
|
buffer<expr> args;
|
||||||
|
expr f = get_app_rev_args(e, args);
|
||||||
|
for (expr & a : args)
|
||||||
|
a = normalize(a);
|
||||||
|
return mk_rev_app(f, args);
|
||||||
|
}
|
||||||
|
|
||||||
expr normalize(expr e) {
|
expr normalize(expr e) {
|
||||||
e = m_tc.whnf(e);
|
e = m_tc.whnf(e);
|
||||||
switch (e.kind()) {
|
switch (e.kind()) {
|
||||||
|
@ -34,7 +42,7 @@ class normalize_fn {
|
||||||
case expr_kind::Lambda: case expr_kind::Pi:
|
case expr_kind::Lambda: case expr_kind::Pi:
|
||||||
return normalize_binding(e);
|
return normalize_binding(e);
|
||||||
case expr_kind::App:
|
case expr_kind::App:
|
||||||
return update_app(e, app_fn(e), normalize(app_arg(e)));
|
return normalize_app(e);
|
||||||
}
|
}
|
||||||
lean_unreachable(); // LCOV_EXCL_LINE
|
lean_unreachable(); // LCOV_EXCL_LINE
|
||||||
}
|
}
|
||||||
|
|
8
tests/lua/expr10.lua
Normal file
8
tests/lua/expr10.lua
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
local env = environment()
|
||||||
|
local f = Local("f", mk_arrow(Bool, Bool, Bool))
|
||||||
|
local a = Local("a", Bool)
|
||||||
|
local b = Local("b", Bool)
|
||||||
|
local x = Local("x", Bool)
|
||||||
|
local t = Fun({f, a, b}, f(Fun(x, x)(b), a))
|
||||||
|
print(env:normalize(t))
|
||||||
|
assert(env:normalize(t) == Fun({f, a, b}, f(b, a)))
|
Loading…
Reference in a new issue