-- Mathlib/Topology/Algebra/Group/Basic.lean
theorem IsClosed.smul_left_of_isCompact (ht : IsClosed t) (hs : IsCompact s) :
    IsClosed (s • t)

Proof state:
case intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
u : Ultrafilter β
hust : s • t ∈ u
hux : ↑u ≤ 𝓝 x
⊢ x ∈ s • t

Tactic:
have : Ultrafilter.map f u ≤ 𝓟 s :=
  calc Ultrafilter.map f u ≤ map f (𝓟 (s • t)) := map_mono (le_principal_iff.mpr hust)
    _ = 𝓟 (f '' (s • t)) := map_principal
    _ ≤ 𝓟 s := principal_mono.mpr (image_subset_iff.mpr (fun x hx ↦ (hf x hx).1))

Result:
case intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
u : Ultrafilter β
hust : s • t ∈ u
hux : ↑u ≤ 𝓝 x
this : ↑(Ultrafilter.map f u) ≤ 𝓟 s
⊢ x ∈ s • t

Proof state:
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
this : ∀ x ∈ s • t, ∃ g ∈ s, g⁻¹ • x ∈ t
⊢ IsClosed (s • t)

Tactic:
choose! f hf using this

Result:
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
⊢ IsClosed (s • t)

Proof state:
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
⊢ x ∈ s • t

Tactic:
rcases mem_closure_iff_ultrafilter.mp hx with ⟨u, hust, hux⟩

Result:
case intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
u : Ultrafilter β
hust : s • t ∈ u
hux : ↑u ≤ 𝓝 x
⊢ x ∈ s • t

Proof state:
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
g : α
hgs : g ∈ s
y : β
hyt : y ∈ t
⊢ g⁻¹ • (fun x1 x2 => x1 • x2) g y ∈ t

Tactic:
rwa [inv_smul_smul]

Result:
no goals

Proof state:
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
u : Ultrafilter β
hust : s • t ∈ u
hux : ↑u ≤ 𝓝 x
this : ↑(Ultrafilter.map f u) ≤ 𝓟 s
g : α
hg : g ∈ s
hug : ↑(Ultrafilter.map f u) ≤ 𝓝 g
⊢ g⁻¹ • x ∈ t

Tactic:
exact ht.mem_of_tendsto ((Tendsto.inv hug).smul hux)
  (Eventually.mono hust (fun y hy ↦ (hf y hy).2))

Result:
no goals

Proof state:
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
g : α
hgs : g ∈ s
y : β
hyt : y ∈ t
⊢ ∃ g_1 ∈ s, g_1⁻¹ • (fun x1 x2 => x1 • x2) g y ∈ t

Tactic:
refine ⟨g, hgs, ?_⟩

Result:
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
g : α
hgs : g ∈ s
y : β
hyt : y ∈ t
⊢ g⁻¹ • (fun x1 x2 => x1 • x2) g y ∈ t

Proof state:
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
⊢ ∀ x ∈ s • t, ∃ g ∈ s, g⁻¹ • x ∈ t

Tactic:
rintro x ⟨g, hgs, y, hyt, rfl⟩

Result:
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
g : α
hgs : g ∈ s
y : β
hyt : y ∈ t
⊢ ∃ g_1 ∈ s, g_1⁻¹ • (fun x1 x2 => x1 • x2) g y ∈ t

Proof state:
case intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
u : Ultrafilter β
hust : s • t ∈ u
hux : ↑u ≤ 𝓝 x
this : ↑(Ultrafilter.map f u) ≤ 𝓟 s
⊢ x ∈ s • t

Tactic:
rcases hs.ultrafilter_le_nhds (Ultrafilter.map f u) this with ⟨g, hg, hug⟩

Result:
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
u : Ultrafilter β
hust : s • t ∈ u
hux : ↑u ≤ 𝓝 x
this : ↑(Ultrafilter.map f u) ≤ 𝓟 s
g : α
hg : g ∈ s
hug : ↑(Ultrafilter.map f u) ≤ 𝓝 g
⊢ x ∈ s • t

Proof state:
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
u : Ultrafilter β
hust : s • t ∈ u
hux : ↑u ≤ 𝓝 x
this : ↑(Ultrafilter.map f u) ≤ 𝓟 s
g : α
hg : g ∈ s
hug : ↑(Ultrafilter.map f u) ≤ 𝓝 g
⊢ x ∈ s • t

Tactic:
suffices g⁻¹ • x ∈ t from
  ⟨g, hg, g⁻¹ • x, this, smul_inv_smul _ _⟩

Result:
case intro.intro.intro.intro
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
u : Ultrafilter β
hust : s • t ∈ u
hux : ↑u ≤ 𝓝 x
this : ↑(Ultrafilter.map f u) ≤ 𝓟 s
g : α
hg : g ∈ s
hug : ↑(Ultrafilter.map f u) ≤ 𝓝 g
⊢ g⁻¹ • x ∈ t

Proof state:
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
⊢ IsClosed (s • t)

Tactic:
refine isClosed_of_closure_subset (fun x hx ↦ ?_)

Result:
α : Type u
β : Type v
inst✝⁵ : TopologicalSpace α
inst✝⁴ : TopologicalSpace β
inst✝³ : Group α
inst✝² : MulAction α β
inst✝¹ : ContinuousInv α
inst✝ : ContinuousSMul α β
s : Set α
t : Set β
ht : IsClosed t
hs : IsCompact s
f : β → α
hf : ∀ x ∈ s • t, f x ∈ s ∧ (f x)⁻¹ • x ∈ t
x : β
hx : x ∈ closure (s • t)
⊢ x ∈ s • t