fix(kernel/inductive): bug in inductive datatype computational rule, we *must* first instantiate universe variables, *and then* the arguments
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
6e6f778ecf
commit
e3f9b21c30
2 changed files with 3 additions and 4 deletions
|
@ -85,8 +85,7 @@ theorem equal_f {A : Type} {B : A → Type} {f g : Π x, B x} (H : f = g) : ∀
|
|||
definition cast {A B : Type} (H : A = B) (a : A) : B
|
||||
:= eq_rec a H
|
||||
|
||||
-- TODO(Leo): check why unifier needs 'help' in the following theorem
|
||||
theorem cast_refl.{l} {A : Type.{l}} (a : A) : cast (refl A) a = a
|
||||
theorem cast_refl {A : Type} (a : A) : cast (refl A) a = a
|
||||
:= refl (cast (refl A) a)
|
||||
|
||||
definition iff (a b : Bool) := (a → b) ∧ (b → a)
|
||||
|
|
|
@ -798,8 +798,8 @@ optional<expr> inductive_normalizer_extension::operator()(expr const & e, extens
|
|||
for (unsigned i = 0; i < it2->m_num_bu; i++)
|
||||
ACebu.push_back(intro_args[it1->m_num_params + i]);
|
||||
std::reverse(ACebu.begin(), ACebu.end());
|
||||
expr r = instantiate(it2->m_comp_rhs_body, ACebu.size(), ACebu.data());
|
||||
r = instantiate_univ_params(r, it1->m_level_names, const_levels(elim_fn));
|
||||
expr r = instantiate_univ_params(it2->m_comp_rhs_body, it1->m_level_names, const_levels(elim_fn));
|
||||
r = instantiate(r, ACebu.size(), ACebu.data());
|
||||
return some_expr(r);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue