Theorem: LocallyFinite.exists_forall_eventually_eq_prod
File: Mathlib/Topology/LocallyFinite.lean

tactic: choose U hUx hU using hf
state_before: ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
hf : LocallyFinite fun n => {x | f (n + 1) x ≠ f n x}
⊢ ∃ F, ∀ (x : X), ∀ᶠ (p : ℕ × X) in atTop ×ˢ 𝓝 x, f p.fst p.snd = F p.snd

tactic: choose N hN using fun x => (hU x).bddAbove
state_before: ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
⊢ ∃ F, ∀ (x : X), ∀ᶠ (p : ℕ × X) in atTop ×ˢ 𝓝 x, f p.fst p.snd = F p.snd

tactic: replace hN : ∀ (x), ∀ n > N x, ∀ y ∈ U x, f (n + 1) y = f n y
state_before: ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X), N x ∈ upperBounds {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
⊢ ∃ F, ∀ (x : X), ∀ᶠ (p : ℕ × X) in atTop ×ˢ 𝓝 x, f p.fst p.snd = F p.snd

tactic: exact fun x n hn y hy => by_contra fun hne => hn.lt.not_le <| hN x ⟨y, hne, hy⟩
state_before: case hN
ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X), N x ∈ upperBounds {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
⊢ ∀ (x : X) (n : ℕ), n > N x → ∀ (y : X), y ∈ U x → f (n + 1) y = f n y

ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X) (n : ℕ), n > N x → ∀ (y : X), y ∈ U x → f (n + 1) y = f n y
⊢ ∃ F, ∀ (x : X), ∀ᶠ (p : ℕ × X) in atTop ×ˢ 𝓝 x, f p.fst p.snd = F p.snd

tactic: replace hN : ∀ (x), ∀ n ≥ N x + 1, ∀ y ∈ U x, f n y = f (N x + 1) y
state_before: ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X) (n : ℕ), n > N x → ∀ (y : X), y ∈ U x → f (n + 1) y = f n y
⊢ ∃ F, ∀ (x : X), ∀ᶠ (p : ℕ × X) in atTop ×ˢ 𝓝 x, f p.fst p.snd = F p.snd

tactic: exact fun x n hn y hy => Nat.le_induction rfl (fun k hle => (hN x _ hle _ hy).trans) n hn
state_before: case hN
ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X) (n : ℕ), n > N x → ∀ (y : X), y ∈ U x → f (n + 1) y = f n y
⊢ ∀ (x : X) (n : ℕ), n ≥ N x + 1 → ∀ (y : X), y ∈ U x → f n y = f (N x + 1) y

ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X) (n : ℕ), n ≥ N x + 1 → ∀ (y : X), y ∈ U x → f n y = f (N x + 1) y
⊢ ∃ F, ∀ (x : X), ∀ᶠ (p : ℕ × X) in atTop ×ˢ 𝓝 x, f p.fst p.snd = F p.snd

tactic: refine ⟨fun x => f (N x + 1) x, fun x => ?_⟩
state_before: ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X) (n : ℕ), n ≥ N x + 1 → ∀ (y : X), y ∈ U x → f n y = f (N x + 1) y
⊢ ∃ F, ∀ (x : X), ∀ᶠ (p : ℕ × X) in atTop ×ˢ 𝓝 x, f p.fst p.snd = F p.snd

tactic: filter_upwards [Filter.prod_mem_prod (eventually_gt_atTop (N x)) (hUx x)]
state_before: ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X) (n : ℕ), n ≥ N x + 1 → ∀ (y : X), y ∈ U x → f n y = f (N x + 1) y
x : X
⊢ ∀ᶠ (p : ℕ × X) in atTop ×ˢ 𝓝 x, f p.fst p.snd = (fun x => f (N x + 1) x) p.snd

tactic: rintro ⟨n, y⟩ ⟨hn : N x < n, hy : y ∈ U x⟩
state_before: case h
ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X) (n : ℕ), n ≥ N x + 1 → ∀ (y : X), y ∈ U x → f n y = f (N x + 1) y
x : X
⊢ ∀ (a : ℕ × X), a ∈ {x_1 | N x < x_1} ×ˢ U x → f a.fst a.snd = f (N a.snd + 1) a.snd

tactic: calc
  f n y = f (N x + 1) y := hN _ _ hn _ hy
  _ = f (max (N x + 1) (N y + 1)) y := (hN _ _ (le_max_left _ _) _ hy).symm
  _ = f (N y + 1) y := hN _ _ (le_max_right _ _) _ (mem_of_mem_nhds <| hUx y)
state_before: case h.mk.intro
ι : Type ?u.9232
ι' : Type ?u.9235
α : Type ?u.9238
X : Type u_2
Y : Type ?u.9244
inst✝¹ : TopologicalSpace X
inst✝ : TopologicalSpace Y
f✝ g : ι → Set X
π : X → Sort u_1
f : ℕ → (x : X) → π x
U : X → Set X
hUx : ∀ (x : X), U x ∈ 𝓝 x
hU : ∀ (x : X), Set.Finite {i | Set.Nonempty ((fun n => {x | f (n + 1) x ≠ f n x}) i ∩ U x)}
N : X → ℕ
hN : ∀ (x : X) (n : ℕ), n ≥ N x + 1 → ∀ (y : X), y ∈ U x → f n y = f (N x + 1) y
x : X
n : ℕ
y : X
hn : N x < n
hy : y ∈ U x
⊢ f (n, y).fst (n, y).snd = f (N (n, y).snd + 1) (n, y).snd