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

Proof steps:
state_before: G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
⊢ UniformGroup G
state_after: G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto ((fun p => p.1 / p.2) ∘ fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1))
    (comap (fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1)) ((𝓝 1).prod (𝓝 1))) (𝓝 (1 / 1))
⊢ UniformGroup G
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
this :
  Tendsto ((fun p => p.1 / p.2) ∘ fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1))
    (comap (fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1)) ((𝓝 1).prod (𝓝 1))) (𝓝 (1 / 1))
⊢ UniformGroup G
state_after: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto ((fun p => p.1 / p.2) ∘ fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1))
    (comap (fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1)) ((𝓝 1).prod (𝓝 1))) (𝓝 (1 / 1))
⊢ UniformContinuous fun p => p.1 / p.2
tactic: constructor
state_before: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto ((fun p => p.1 / p.2) ∘ fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1))
    (comap (fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1)) ((𝓝 1).prod (𝓝 1))) (𝓝 (1 / 1))
⊢ UniformContinuous fun p => p.1 / p.2
state_after: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto ((fun p => p.1 / p.2) ∘ fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1))
    (comap (fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1)) ((𝓝 1).prod (𝓝 1))) (𝓝 (1 / 1))
⊢ Tendsto ((fun p => p.2 / p.1) ∘ (fun x => (x.1.1 / x.1.2, x.2.1 / x.2.2)) ∘ fun p => ((p.1.1, p.2.1), p.1.2, p.2.2))
    (comap (fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)
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.1 / p.2) ∘ fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1))
    (comap (fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1)) ((𝓝 1).prod (𝓝 1))) (𝓝 (1 / 1))
⊢ Tendsto ((fun p => p.2 / p.1) ∘ (fun x => (x.1.1 / x.1.2, x.2.1 / x.2.2)) ∘ fun p => ((p.1.1, p.2.1), p.1.2, p.2.2))
    (comap (fun p => (p.1.2 / p.1.1, p.2.2 / p.2.1)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)
state_after: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto (fun x => x.2.1 * (x.1.2 * x.1.1⁻¹ * x.2.2⁻¹))
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) ((𝓝 1).prod (𝓝 1))) (𝓝 (1 * 1⁻¹))
⊢ Tendsto (fun x => x.1.2 * (x.2.1 * x.1.1⁻¹ * x.2.2⁻¹))
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)
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 x => x.2.1 * (x.1.2 * x.1.1⁻¹ * x.2.2⁻¹))
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) ((𝓝 1).prod (𝓝 1))) (𝓝 (1 * 1⁻¹))
⊢ Tendsto (fun x => x.1.2 * (x.2.1 * x.1.1⁻¹ * x.2.2⁻¹))
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)
state_after: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto (fun x => x.2.1 * x.1.2 * x.1.1⁻¹ * x.2.2⁻¹)
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) ((𝓝 1).prod (𝓝 1))) (𝓝 1)
⊢ Tendsto (fun x => x.1.2 * (x.2.1 * x.1.1⁻¹ * x.2.2⁻¹))
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) (𝓝 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.2.1 * x.1.2 * x.1.1⁻¹ * x.2.2⁻¹)
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) ((𝓝 1).prod (𝓝 1))) (𝓝 1)
⊢ Tendsto (fun x => x.1.2 * (x.2.1 * x.1.1⁻¹ * x.2.2⁻¹))
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)
state_after: case uniformContinuous_div
G : Type u_1
inst✝² : CommGroup G
inst✝¹ : TopologicalSpace G
inst✝ : TopologicalGroup G
this :
  Tendsto (fun x => x.2.1 * x.1.2 * x.1.1⁻¹ * x.2.2⁻¹)
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) ((𝓝 1).prod (𝓝 1))) (𝓝 1)
⊢ Tendsto (fun x => x.2.1 * x.1.2 * x.1.1⁻¹ * x.2.2⁻¹)
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) (𝓝 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.2.1 * x.1.2 * x.1.1⁻¹ * x.2.2⁻¹)
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) ((𝓝 1).prod (𝓝 1))) (𝓝 1)
⊢ Tendsto (fun x => x.2.1 * x.1.2 * x.1.1⁻¹ * x.2.2⁻¹)
    (comap (fun p => (p.1.2 * p.1.1⁻¹, p.2.2 * p.2.1⁻¹)) (𝓝 1 ×ˢ 𝓝 1)) (𝓝 1)
state_after: no goals
tactic: assumption