fix(frontends/lean/parser): user provided numeral notation should have precedence over the default based on 'num'

This commit is contained in:
Leonardo de Moura 2014-11-29 17:29:03 -08:00
parent bc65aeb5e1
commit 2487e3b83d
2 changed files with 17 additions and 2 deletions

View file

@ -1167,10 +1167,12 @@ expr parser::parse_numeral_expr() {
"(solution: use 'import data.num', or define notation for the given numeral)", p); "(solution: use 'import data.num', or define notation for the given numeral)", p);
} }
buffer<expr> cs; buffer<expr> cs;
for (expr const & c : vals)
cs.push_back(copy_with_new_pos(c, p));
if (*m_has_num) if (*m_has_num)
cs.push_back(save_pos(from_num(n), p)); cs.push_back(save_pos(from_num(n), p));
for (expr const & c : vals)
cs.push_back(copy_with_new_pos(c, p));
// Remark: choices are processed from right to left.
// We want to process user provided notation before the default 'num'.
lean_assert(!cs.empty()); lean_assert(!cs.empty());
if (cs.size() == 1) if (cs.size() == 1)
return cs[0]; return cs[0];

View file

@ -0,0 +1,13 @@
import algebra.ring data.num
open algebra
variable A : Type
variable s : ring A
variable H0 : 0 = 0 -- since algebra defines notation '0' it should have precedence over num
variable H1 : 1 = 1 -- since algebra defines notation '1' it should have precedence over num
example : has_zero.zero A = has_zero.zero A :=
H0
example : has_one.one A = has_one.one A :=
H1