Theorem: properSMul_iff_continuousSMul_ultrafilter_tendsto_t2
File: Mathlib/Topology/Algebra/ProperAction.lean

Proof steps:
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : T2Space X
⊢ ProperSMul G X ↔
    ContinuousSMul G X ∧
      ∀ (𝒰 : Ultrafilter (G × X)) (x₁ x₂ : X),
        Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂)) → ∃ g, Tendsto fst (↑𝒰) (𝓝 g)
state_after: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : T2Space X
⊢ (ContinuousSMul G X ∧
      ∀ (𝒰 : Ultrafilter (G × X)) (x₁ x₂ : X),
        Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂)) → ∃ g, g • x₂ = x₁ ∧ Tendsto fst (↑𝒰) (𝓝 g)) ↔
    ContinuousSMul G X ∧
      ∀ (𝒰 : Ultrafilter (G × X)) (x₁ x₂ : X),
        Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂)) → ∃ g, Tendsto fst (↑𝒰) (𝓝 g)
tactic: rw [properSMul_iff_continuousSMul_ultrafilter_tendsto]
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : T2Space X
⊢ (ContinuousSMul G X ∧
      ∀ (𝒰 : Ultrafilter (G × X)) (x₁ x₂ : X),
        Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂)) → ∃ g, g • x₂ = x₁ ∧ Tendsto fst (↑𝒰) (𝓝 g)) ↔
    ContinuousSMul G X ∧
      ∀ (𝒰 : Ultrafilter (G × X)) (x₁ x₂ : X),
        Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂)) → ∃ g, Tendsto fst (↑𝒰) (𝓝 g)
state_after: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : T2Space X
hc : ContinuousSMul G X
⊢ (∀ (𝒰 : Ultrafilter (G × X)) (x₁ x₂ : X),
      Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂)) → ∃ g, g • x₂ = x₁ ∧ Tendsto fst (↑𝒰) (𝓝 g)) ↔
    ∀ (𝒰 : Ultrafilter (G × X)) (x₁ x₂ : X),
      Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂)) → ∃ g, Tendsto fst (↑𝒰) (𝓝 g)
tactic: refine and_congr_right fun hc ↦ ?_
state_before: G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : T2Space X
hc : ContinuousSMul G X
⊢ (∀ (𝒰 : Ultrafilter (G × X)) (x₁ x₂ : X),
      Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂)) → ∃ g, g • x₂ = x₁ ∧ Tendsto fst (↑𝒰) (𝓝 g)) ↔
    ∀ (𝒰 : Ultrafilter (G × X)) (x₁ x₂ : X),
      Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂)) → ∃ g, Tendsto fst (↑𝒰) (𝓝 g)
state_after: case a
G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : T2Space X
hc : ContinuousSMul G X
𝒰 : Ultrafilter (G × X)
x₁ x₂ : X
hxx : Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂))
g : G
⊢ g • x₂ = x₁ ∧ Tendsto fst (↑𝒰) (𝓝 g) ↔ Tendsto fst (↑𝒰) (𝓝 g)
tactic: congrm ∀ 𝒰 x₁ x₂ hxx, ∃ g, ?_
state_before: case a
G : Type u_1
X : Type u_2
Y : Type u_3
Z : Type u_4
inst✝⁷ : Group G
inst✝⁶ : MulAction G X
inst✝⁵ : MulAction G Y
inst✝⁴ : TopologicalSpace G
inst✝³ : TopologicalSpace X
inst✝² : TopologicalSpace Y
inst✝¹ : TopologicalSpace Z
inst✝ : T2Space X
hc : ContinuousSMul G X
𝒰 : Ultrafilter (G × X)
x₁ x₂ : X
hxx : Tendsto (fun gx => (gx.1 • gx.2, gx.2)) (↑𝒰) (𝓝 (x₁, x₂))
g : G
⊢ g • x₂ = x₁ ∧ Tendsto fst (↑𝒰) (𝓝 g) ↔ Tendsto fst (↑𝒰) (𝓝 g)
state_after: no goals
tactic: exact and_iff_right_of_imp fun hg ↦ tendsto_nhds_unique
    (hg.smul ((continuous_snd.tendsto _).comp hxx)) ((continuous_fst.tendsto _).comp hxx)