Theorem: Flow.omegaLimit_omegaLimit
File: Mathlib/Dynamics/OmegaLimit.lean

tactic: simp only [subset_def, mem_omegaLimit_iff_frequently₂, frequently_iff]
state_before: τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
⊢ ω f ϕ.toFun (ω f ϕ.toFun s) ⊆ ω f ϕ.toFun s

tactic: intro _ h
state_before: τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
⊢ ∀ (x : α),
    (∀ (n : Set α), n ∈ 𝓝 x → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)) →
      ∀ (n : Set α), n ∈ 𝓝 x → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' s ∩ n)

tactic: rintro n hn u hu
state_before: τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
⊢ ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' s ∩ n)

tactic: rcases mem_nhds_iff.mp hn with ⟨o, ho₁, ho₂, ho₃⟩
state_before: τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
n : Set α
hn : n ∈ 𝓝 x✝
u : Set τ
hu : u ∈ f
⊢ ∃ x, x ∈ u ∧ Set.Nonempty (toFun ϕ x '' s ∩ n)

tactic: rcases h o (IsOpen.mem_nhds ho₂ ho₃) hu with ⟨t, _ht₁, ht₂⟩
state_before: case intro.intro.intro
τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
n : Set α
hn : n ∈ 𝓝 x✝
u : Set τ
hu : u ∈ f
o : Set α
ho₁ : o ⊆ n
ho₂ : IsOpen o
ho₃ : x✝ ∈ o
⊢ ∃ x, x ∈ u ∧ Set.Nonempty (toFun ϕ x '' s ∩ n)

tactic: have l₁ : (ω f ϕ s ∩ o).Nonempty :=
  ht₂.mono
    (inter_subset_inter_left _
      ((isInvariant_iff_image _ _).mp (isInvariant_omegaLimit _ _ _ hf) _))
state_before: case intro.intro.intro.intro.intro
τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
n : Set α
hn : n ∈ 𝓝 x✝
u : Set τ
hu : u ∈ f
o : Set α
ho₁ : o ⊆ n
ho₂ : IsOpen o
ho₃ : x✝ ∈ o
t : τ
_ht₁ : t ∈ u
ht₂ : Set.Nonempty (toFun ϕ t '' ω f ϕ.toFun s ∩ o)
⊢ ∃ x, x ∈ u ∧ Set.Nonempty (toFun ϕ x '' s ∩ n)

tactic: have l₂ : (closure (image2 ϕ u s) ∩ o).Nonempty :=
  l₁.mono fun b hb ↦ ⟨omegaLimit_subset_closure_fw_image _ _ _ hu hb.1, hb.2⟩
state_before: case intro.intro.intro.intro.intro
τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
n : Set α
hn : n ∈ 𝓝 x✝
u : Set τ
hu : u ∈ f
o : Set α
ho₁ : o ⊆ n
ho₂ : IsOpen o
ho₃ : x✝ ∈ o
t : τ
_ht₁ : t ∈ u
ht₂ : Set.Nonempty (toFun ϕ t '' ω f ϕ.toFun s ∩ o)
l₁ : Set.Nonempty (ω f ϕ.toFun s ∩ o)
⊢ ∃ x, x ∈ u ∧ Set.Nonempty (toFun ϕ x '' s ∩ n)

tactic: have l₃ : (o ∩ image2 ϕ u s).Nonempty := by
  rcases l₂ with ⟨b, hb₁, hb₂⟩
  exact mem_closure_iff_nhds.mp hb₁ o (IsOpen.mem_nhds ho₂ hb₂)
state_before: case intro.intro.intro.intro.intro
τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
n : Set α
hn : n ∈ 𝓝 x✝
u : Set τ
hu : u ∈ f
o : Set α
ho₁ : o ⊆ n
ho₂ : IsOpen o
ho₃ : x✝ ∈ o
t : τ
_ht₁ : t ∈ u
ht₂ : Set.Nonempty (toFun ϕ t '' ω f ϕ.toFun s ∩ o)
l₁ : Set.Nonempty (ω f ϕ.toFun s ∩ o)
l₂ : Set.Nonempty (closure (image2 ϕ.toFun u s) ∩ o)
⊢ ∃ x, x ∈ u ∧ Set.Nonempty (toFun ϕ x '' s ∩ n)

tactic: rcases l₃ with ⟨ϕra, ho, ⟨_, _, hr, ha, hϕra⟩⟩
state_before: case intro.intro.intro.intro.intro
τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
n : Set α
hn : n ∈ 𝓝 x✝
u : Set τ
hu : u ∈ f
o : Set α
ho₁ : o ⊆ n
ho₂ : IsOpen o
ho₃ : x✝ ∈ o
t : τ
_ht₁ : t ∈ u
ht₂ : Set.Nonempty (toFun ϕ t '' ω f ϕ.toFun s ∩ o)
l₁ : Set.Nonempty (ω f ϕ.toFun s ∩ o)
l₂ : Set.Nonempty (closure (image2 ϕ.toFun u s) ∩ o)
l₃ : Set.Nonempty (o ∩ image2 ϕ.toFun u s)
⊢ ∃ x, x ∈ u ∧ Set.Nonempty (toFun ϕ x '' s ∩ n)

tactic: exact ⟨_, hr, ϕra, ⟨_, ha, hϕra⟩, ho₁ ho⟩
state_before: case intro.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
n : Set α
hn : n ∈ 𝓝 x✝
u : Set τ
hu : u ∈ f
o : Set α
ho₁ : o ⊆ n
ho₂ : IsOpen o
ho₃ : x✝ ∈ o
t : τ
_ht₁ : t ∈ u
ht₂ : Set.Nonempty (toFun ϕ t '' ω f ϕ.toFun s ∩ o)
l₁ : Set.Nonempty (ω f ϕ.toFun s ∩ o)
l₂ : Set.Nonempty (closure (image2 ϕ.toFun u s) ∩ o)
ϕra : α
ho : ϕra ∈ o
w✝¹ : τ
w✝ : α
hr : w✝¹ ∈ u
ha : w✝ ∈ s
hϕra : toFun ϕ w✝¹ w✝ = ϕra
⊢ ∃ x, x ∈ u ∧ Set.Nonempty (toFun ϕ x '' s ∩ n)

tactic: rcases l₂ with ⟨b, hb₁, hb₂⟩
state_before: τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
n : Set α
hn : n ∈ 𝓝 x✝
u : Set τ
hu : u ∈ f
o : Set α
ho₁ : o ⊆ n
ho₂ : IsOpen o
ho₃ : x✝ ∈ o
t : τ
_ht₁ : t ∈ u
ht₂ : Set.Nonempty (toFun ϕ t '' ω f ϕ.toFun s ∩ o)
l₁ : Set.Nonempty (ω f ϕ.toFun s ∩ o)
l₂ : Set.Nonempty (closure (image2 ϕ.toFun u s) ∩ o)
⊢ Set.Nonempty (o ∩ image2 ϕ.toFun u s)

tactic: exact mem_closure_iff_nhds.mp hb₁ o (IsOpen.mem_nhds ho₂ hb₂)
state_before: case intro.intro
τ : Type u_1
inst✝³ : TopologicalSpace τ
inst✝² : AddCommGroup τ
inst✝¹ : TopologicalAddGroup τ
α : Type u_2
inst✝ : TopologicalSpace α
f : Filter τ
ϕ : Flow τ α
s : Set α
hf : ∀ (t : τ), Tendsto ((fun x x_1 => x + x_1) t) f f
x✝ : α
h : ∀ (n : Set α), n ∈ 𝓝 x✝ → ∀ {U : Set τ}, U ∈ f → ∃ x, x ∈ U ∧ Set.Nonempty (toFun ϕ x '' ω f ϕ.toFun s ∩ n)
n : Set α
hn : n ∈ 𝓝 x✝
u : Set τ
hu : u ∈ f
o : Set α
ho₁ : o ⊆ n
ho₂ : IsOpen o
ho₃ : x✝ ∈ o
t : τ
_ht₁ : t ∈ u
ht₂ : Set.Nonempty (toFun ϕ t '' ω f ϕ.toFun s ∩ o)
l₁ : Set.Nonempty (ω f ϕ.toFun s ∩ o)
b : α
hb₁ : b ∈ closure (image2 ϕ.toFun u s)
hb₂ : b ∈ o
⊢ Set.Nonempty (o ∩ image2 ϕ.toFun u s)