Theorem: comm_topologicalGroup_is_uniform
File: Mathlib/Topology/Algebra/UniformGroup.lean

tactic: have :
  Tendsto
    ((fun p : G × G => p.1 / p.2) ∘ fun p : (G × G) × G × G => (p.1.2 / p.1.1, p.2.2 / p.2.1))
    (comap (fun p : (G × G) × G × G => (p.1.2 / p.1.1, p.2.2 / p.2.1)) ((𝓝 1).prod (𝓝 1)))
    (𝓝 (1 / 1)) :=
  (tendsto_fst.div' tendsto_snd).comp tendsto_comap
state_before: G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
⊢ UniformGroup G

tactic: constructor
state_before: G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto ((fun p => p.fst / p.snd) ∘ fun p => (p.fst.snd / p.fst.fst, p.snd.snd / p.snd.fst))
    (comap (fun p => (p.fst.snd / p.fst.fst, p.snd.snd / p.snd.fst)) (Filter.prod (𝓝 1) (𝓝 1))) (𝓝 (1 / 1))
⊢ UniformGroup G

tactic: rw [UniformContinuous, uniformity_prod_eq_prod, tendsto_map'_iff, uniformity_eq_comap_nhds_one' G,
  tendsto_comap_iff, prod_comap_comap_eq]
state_before: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto ((fun p => p.fst / p.snd) ∘ fun p => (p.fst.snd / p.fst.fst, p.snd.snd / p.snd.fst))
    (comap (fun p => (p.fst.snd / p.fst.fst, p.snd.snd / p.snd.fst)) (Filter.prod (𝓝 1) (𝓝 1))) (𝓝 (1 / 1))
⊢ UniformContinuous fun p => p.fst / p.snd

tactic: simp only [Function.comp, div_eq_mul_inv, mul_inv_rev, inv_inv, mul_comm, mul_left_comm] at *
state_before: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto ((fun p => p.fst / p.snd) ∘ fun p => (p.fst.snd / p.fst.fst, p.snd.snd / p.snd.fst))
    (comap (fun p => (p.fst.snd / p.fst.fst, p.snd.snd / p.snd.fst)) (Filter.prod (𝓝 1) (𝓝 1))) (𝓝 (1 / 1))
⊢ Tendsto
    ((fun p => p.snd / p.fst) ∘
      (fun x => (x.fst.fst / x.fst.snd, x.snd.fst / x.snd.snd)) ∘ fun p =>
        ((p.fst.fst, p.snd.fst), p.fst.snd, p.snd.snd))
    (comap (fun p => (p.fst.snd / p.fst.fst, p.snd.snd / p.snd.fst)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)

tactic: simp only [inv_one, mul_one, ← mul_assoc] at this
state_before: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto (fun x => x.snd.fst * (x.fst.snd * x.fst.fst⁻¹ * x.snd.snd⁻¹))
    (comap (fun p => (p.fst.snd * p.fst.fst⁻¹, p.snd.snd * p.snd.fst⁻¹)) (Filter.prod (𝓝 1) (𝓝 1))) (𝓝 (1 * 1⁻¹))
⊢ Tendsto (fun x => x.fst.snd * (x.snd.fst * x.fst.fst⁻¹ * x.snd.snd⁻¹))
    (comap (fun p => (p.fst.snd * p.fst.fst⁻¹, p.snd.snd * p.snd.fst⁻¹)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)

tactic: simp_rw [←mul_assoc, mul_comm]
state_before: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto (fun x => x.snd.fst * x.fst.snd * x.fst.fst⁻¹ * x.snd.snd⁻¹)
    (comap (fun p => (p.fst.snd * p.fst.fst⁻¹, p.snd.snd * p.snd.fst⁻¹)) (Filter.prod (𝓝 1) (𝓝 1))) (𝓝 1)
⊢ Tendsto (fun x => x.fst.snd * (x.snd.fst * x.fst.fst⁻¹ * x.snd.snd⁻¹))
    (comap (fun p => (p.fst.snd * p.fst.fst⁻¹, p.snd.snd * p.snd.fst⁻¹)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)

tactic: assumption
state_before: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto (fun x => x.snd.fst * x.fst.snd * x.fst.fst⁻¹ * x.snd.snd⁻¹)
    (comap (fun p => (p.fst.snd * p.fst.fst⁻¹, p.snd.snd * p.snd.fst⁻¹)) (Filter.prod (𝓝 1) (𝓝 1))) (𝓝 1)
⊢ Tendsto (fun x => x.snd.fst * x.fst.snd * x.fst.fst⁻¹ * x.snd.snd⁻¹)
    (comap (fun p => (p.fst.snd * p.fst.fst⁻¹, p.snd.snd * p.snd.fst⁻¹)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)