Zulip Chat Archive
Stream: general
Topic: strange elaboration
Kenny Lau (Jun 10 2020 at 07:31):
import analysis.normed_space.basic
open_locale big_operators
variables {α : Type} [normed_group α] {t : finset α} {f : α → α}
-- ∀ (ε : ℝ), ε > 0 → ∥t.sum f∥ < ε
example : ∀ε > 0, ∥ t.sum f ∥ < ε := by skip
-- ∀ (ε : ℕ), ε > 0 → ∥∑ (i : α) in t, f i∥ < ↑ε
example : ∀ε > 0, ∥ (∑ i in t, f i) ∥ < ε := by skip
Kenny Lau (Jun 10 2020 at 07:31):
the epsilon in the second example is (wrongly) interpreted as a natural number
Kenny Lau (Jun 10 2020 at 07:32):
the notation is irrelevant:
-- ∀ (ε : ℕ), ε > 0 → ∥∑ (i : α) in t, f i∥ < ↑ε
example : ∀ε > 0, ∥ t.sum (λ i, f i) ∥ < ε := by skip
Kenny Lau (Jun 10 2020 at 07:34):
strangely enough the type is correct again if > 0
is removed:
import analysis.normed_space.basic
variables {α : Type} [normed_group α] {t : finset α} {f : α → α}
-- ∀ (ε : ℝ), ε > 0 → ∥t.sum f∥ < ε
example : ∀ε > 0, ∥ t.sum f ∥ < ε := by skip
-- ∀ (ε : ℝ), ∥t.sum (λ (i : α), f i)∥ < ε
example : ∀ε, ∥ t.sum (λ i, f i) ∥ < ε := by skip
-- INCORRECT
-- ∀ (ε : ℕ), ε > 0 → ∥t.sum (λ (i : α), f i)∥ < ↑ε
example : ∀ε > 0, ∥ t.sum (λ i, f i) ∥ < ε := by skip
Mario Carneiro (Jun 10 2020 at 08:03):
In what sense is it incorrect? It looks like lean was able to type it either way
Mario Carneiro (Jun 10 2020 at 08:03):
The 0
is the source of the nat defaulting
Kenny Lau (Jun 10 2020 at 08:10):
@Mario Carneiro then why does it get elaborated as \R in the first example?
Kenny Lau (Jun 10 2020 at 08:10):
maybe not "incorrect" but rather "inconsistent"
Mario Carneiro (Jun 10 2020 at 08:11):
nat defaulting has always been a little weird, since it is somewhat outside the usual elaboration process. It happens "late" but it still has to trigger before type inference is complete
Kenny Lau (Jun 10 2020 at 08:11):
so should I change it to the longer form \forall \e : \R, \e > 0 \to
?
Kenny Lau (Jun 10 2020 at 08:11):
https://github.com/leanprover-community/mathlib/runs/756776916
Mario Carneiro (Jun 10 2020 at 08:11):
I've never really been convinced it is a good idea, but the original point was so that people could just write #eval 1 + 1
and get something sensible
Kenny Lau (Jun 10 2020 at 08:11):
https://github.com/leanprover-community/mathlib/pull/3014
Yury G. Kudryashov (Jun 10 2020 at 08:12):
AFAIR you can use ε > (0 : real)
.
Mario Carneiro (Jun 10 2020 at 08:13):
You can also .. ninja'd
Kenny Lau (Jun 10 2020 at 08:13):
oh
Mario Carneiro (Jun 10 2020 at 08:13):
we should make ∀(ε : ℝ) > 0,
work
Mario Carneiro (Jun 10 2020 at 08:14):
it's a bit silly that you can't put a type ascription there
Kenny Lau (Jun 10 2020 at 08:15):
#lean4 ?
Mario Carneiro (Jun 10 2020 at 08:18):
3.x should be able to handle it without too much work
Mario Carneiro (Jun 10 2020 at 08:18):
although I'm not in a position to hack on lean ATM
Last updated: Dec 20 2023 at 11:08 UTC