Zulip Chat Archive
Stream: new members
Topic: limUnder_add_atTop_eq_nat
Arshak Parsa (Sep 25 2024 at 08:00):
Is this theorem provable?
import Mathlib
theorem limUnder_add_atTop_eq_nat
[TopologicalSpace α] [Nonempty α]
(f : ℕ → α) (k : ℕ) :
limUnder atTop (fun n => f (n + k)) = limUnder atTop (fun n => f n) := by
sorry
this is OK when the limit exists, but what happens if the limit does not exist?
Kevin Buzzard (Sep 25 2024 at 08:12):
It's not obviously OK when the limit exists, as in this generality a sequence can have more than one limit, so how can you be sure that the two limUnder
s are choosing the same one?
However if you unfold the definitions it looks to me like probably this result is provable. Start with
import Mathlib
set_option autoImplicit true
theorem limUnder_add_atTop_eq_nat
[TopologicalSpace α] [Nonempty α]
(f : ℕ → α) (k : ℕ) :
limUnder atTop (fun n => f (n + k)) = limUnder atTop (fun n => f n) := by
refine congr_arg Classical.epsilon ?h
ext x
-- looks OK
and now it looks like you have to prove that the set of limit points is the same for both f and shifted-f, which should be OK.
Arshak Parsa (Sep 25 2024 at 08:26):
tendsto_add_atTop_iff_nat
is true, but I'm not sure what happens if the limit does not exist.
Vincent Beffara (Sep 25 2024 at 09:16):
Then neither limit exists and presumably you get the same junk value on both sides so equality still holds
Vincent Beffara (Sep 25 2024 at 09:33):
Also, check docs#Filter.map_add_atTop_eq_nat
Vincent Beffara (Sep 25 2024 at 09:43):
import Mathlib
theorem limUnder_add_atTop_eq_nat
[TopologicalSpace α] [Nonempty α]
(f : ℕ → α) (k : ℕ) :
limUnder Filter.atTop (fun n => f (n + k)) = limUnder Filter.atTop (fun n => f n) := by
unfold limUnder
change lim (Filter.map (f ∘ fun n => (n + k)) _) = _
rw [← Filter.map_compose]
change lim (Filter.map f (Filter.map (fun n => n + k) _)) = _
rw [Filter.map_add_atTop_eq_nat k]
Vincent Beffara (Sep 25 2024 at 09:44):
Note that your initial statement is not provable because AtTop
(rather than Filter.AtTop
) is taken as an implicit parameter, so you are stating that it holds for any filter, which it doen't.
Kevin Buzzard (Sep 25 2024 at 12:43):
(deleted)
Kevin Buzzard (Sep 25 2024 at 12:50):
Here's my effort:
import Mathlib
variable (α : Type)
open Filter
theorem limUnder_add_atTop_eq_nat
[TopologicalSpace α] [Nonempty α]
(f : ℕ → α) (k : ℕ) :
limUnder atTop (fun n => f (n + k)) = limUnder atTop (fun n => f n) := by
refine congr_arg Classical.epsilon ?h
ext x
change map (f ∘ fun n ↦ n + k) _ ≤ _ ↔ _
rw [← map_compose]
unfold Function.comp
rw [map_add_atTop_eq_nat]
Last updated: May 02 2025 at 03:31 UTC