Theorem: DenseInducing.extend_Z_bilin_aux
File: Mathlib/Topology/Algebra/UniformGroup.lean

tactic: let Nx := 𝓝 x₀
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
⊢ ∃ U₂,
    U₂ ∈ comap (↑e) (𝓝 x₀) ∧ ∀ (x : β), x ∈ U₂ → ∀ (x' : β), x' ∈ U₂ → (fun p => ↑(↑φ p.fst) p.snd) (x' - x, y₁) ∈ W'

tactic: let ee := fun u : β × β => (e u.1, e u.2)
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
⊢ ∃ U₂,
    U₂ ∈ comap (↑e) (𝓝 x₀) ∧ ∀ (x : β), x ∈ U₂ → ∀ (x' : β), x' ∈ U₂ → (fun p => ↑(↑φ p.fst) p.snd) (x' - x, y₁) ∈ W'

tactic: have lim1 : Tendsto (fun a : β × β => (a.2 - a.1, y₁))
    (comap e Nx ×ˢ comap e Nx) (𝓝 (0, y₁)) := by
  have := Tendsto.prod_mk (tendsto_sub_comap_self de x₀)
    (tendsto_const_nhds : Tendsto (fun _ : β × β => y₁) (comap ee <| 𝓝 (x₀, x₀)) (𝓝 y₁))
  rw [nhds_prod_eq, prod_comap_comap_eq, ← nhds_prod_eq]
  exact (this : _)
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
⊢ ∃ U₂,
    U₂ ∈ comap (↑e) (𝓝 x₀) ∧ ∀ (x : β), x ∈ U₂ → ∀ (x' : β), x' ∈ U₂ → (fun p => ↑(↑φ p.fst) p.snd) (x' - x, y₁) ∈ W'

tactic: have lim2 : Tendsto (fun p : β × δ => φ p.1 p.2) (𝓝 (0, y₁)) (𝓝 0) := by
  simpa using hφ.tendsto (0, y₁)
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
lim1 : Tendsto (fun a => (a.snd - a.fst, y₁)) (comap (↑e) Nx ×ˢ comap (↑e) Nx) (𝓝 (0, y₁))
⊢ ∃ U₂,
    U₂ ∈ comap (↑e) (𝓝 x₀) ∧ ∀ (x : β), x ∈ U₂ → ∀ (x' : β), x' ∈ U₂ → (fun p => ↑(↑φ p.fst) p.snd) (x' - x, y₁) ∈ W'

tactic: have lim := lim2.comp lim1
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
lim1 : Tendsto (fun a => (a.snd - a.fst, y₁)) (comap (↑e) Nx ×ˢ comap (↑e) Nx) (𝓝 (0, y₁))
lim2 : Tendsto (fun p => ↑(↑φ p.fst) p.snd) (𝓝 (0, y₁)) (𝓝 0)
⊢ ∃ U₂,
    U₂ ∈ comap (↑e) (𝓝 x₀) ∧ ∀ (x : β), x ∈ U₂ → ∀ (x' : β), x' ∈ U₂ → (fun p => ↑(↑φ p.fst) p.snd) (x' - x, y₁) ∈ W'

tactic: rw [tendsto_prod_self_iff] at lim
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
lim1 : Tendsto (fun a => (a.snd - a.fst, y₁)) (comap (↑e) Nx ×ˢ comap (↑e) Nx) (𝓝 (0, y₁))
lim2 : Tendsto (fun p => ↑(↑φ p.fst) p.snd) (𝓝 (0, y₁)) (𝓝 0)
lim : Tendsto ((fun p => ↑(↑φ p.fst) p.snd) ∘ fun a => (a.snd - a.fst, y₁)) (comap (↑e) Nx ×ˢ comap (↑e) Nx) (𝓝 0)
⊢ ∃ U₂,
    U₂ ∈ comap (↑e) (𝓝 x₀) ∧ ∀ (x : β), x ∈ U₂ → ∀ (x' : β), x' ∈ U₂ → (fun p => ↑(↑φ p.fst) p.snd) (x' - x, y₁) ∈ W'

tactic: simp_rw [ball_mem_comm]
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
lim1 : Tendsto (fun a => (a.snd - a.fst, y₁)) (comap (↑e) Nx ×ˢ comap (↑e) Nx) (𝓝 (0, y₁))
lim2 : Tendsto (fun p => ↑(↑φ p.fst) p.snd) (𝓝 (0, y₁)) (𝓝 0)
lim :
  ∀ (W : Set G),
    W ∈ 𝓝 0 →
      ∃ U,
        U ∈ comap (↑e) Nx ∧
          ∀ (x x' : β), x ∈ U → x' ∈ U → ((fun p => ↑(↑φ p.fst) p.snd) ∘ fun a => (a.snd - a.fst, y₁)) (x, x') ∈ W
⊢ ∃ U₂,
    U₂ ∈ comap (↑e) (𝓝 x₀) ∧ ∀ (x : β), x ∈ U₂ → ∀ (x' : β), x' ∈ U₂ → (fun p => ↑(↑φ p.fst) p.snd) (x' - x, y₁) ∈ W'

tactic: exact lim W' W'_nhd
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
lim1 : Tendsto (fun a => (a.snd - a.fst, y₁)) (comap (↑e) Nx ×ˢ comap (↑e) Nx) (𝓝 (0, y₁))
lim2 : Tendsto (fun p => ↑(↑φ p.fst) p.snd) (𝓝 (0, y₁)) (𝓝 0)
lim :
  ∀ (W : Set G),
    W ∈ 𝓝 0 →
      ∃ U,
        U ∈ comap (↑e) Nx ∧
          ∀ (x x' : β), x ∈ U → x' ∈ U → ((fun p => ↑(↑φ p.fst) p.snd) ∘ fun a => (a.snd - a.fst, y₁)) (x, x') ∈ W
⊢ ∃ U₂, U₂ ∈ comap (↑e) (𝓝 x₀) ∧ ∀ (a b : β), a ∈ U₂ → b ∈ U₂ → ↑(↑φ (b - a)) y₁ ∈ W'

tactic: have := Tendsto.prod_mk (tendsto_sub_comap_self de x₀)
  (tendsto_const_nhds : Tendsto (fun _ : β × β => y₁) (comap ee <| 𝓝 (x₀, x₀)) (𝓝 y₁))
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
⊢ Tendsto (fun a => (a.snd - a.fst, y₁)) (comap (↑e) Nx ×ˢ comap (↑e) Nx) (𝓝 (0, y₁))

tactic: rw [nhds_prod_eq, prod_comap_comap_eq, ← nhds_prod_eq]
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
this : Tendsto (fun x => (x.snd - x.fst, y₁)) (comap (fun p => (↑e p.fst, ↑e p.snd)) (𝓝 (x₀, x₀))) (𝓝 0 ×ˢ 𝓝 y₁)
⊢ Tendsto (fun a => (a.snd - a.fst, y₁)) (comap (↑e) Nx ×ˢ comap (↑e) Nx) (𝓝 (0, y₁))

tactic: exact (this : _)
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
this : Tendsto (fun x => (x.snd - x.fst, y₁)) (comap (fun p => (↑e p.fst, ↑e p.snd)) (𝓝 (x₀, x₀))) (𝓝 0 ×ˢ 𝓝 y₁)
⊢ Tendsto (fun a => (a.snd - a.fst, y₁)) (comap (fun p => (↑e p.fst, ↑e p.snd)) (𝓝 (x₀, x₀))) (𝓝 0 ×ˢ 𝓝 y₁)

tactic: simpa using hφ.tendsto (0, y₁)
state_before: α : Type u_2
β : Type u_1
γ : Type ?u.684609
δ : Type u_4
G : Type u_3
inst✝¹⁶ : TopologicalSpace α
inst✝¹⁵ : AddCommGroup α
inst✝¹⁴ : TopologicalAddGroup α
inst✝¹³ : TopologicalSpace β
inst✝¹² : AddCommGroup β
inst✝¹¹ : TopologicalAddGroup β
inst✝¹⁰ : TopologicalSpace γ
inst✝⁹ : AddCommGroup γ
inst✝⁸ : TopologicalAddGroup γ
inst✝⁷ : TopologicalSpace δ
inst✝⁶ : AddCommGroup δ
inst✝⁵ : TopologicalAddGroup δ
inst✝⁴ : UniformSpace G
inst✝³ : AddCommGroup G
inst✝² : UniformAddGroup G
inst✝¹ : SeparatedSpace G
inst✝ : CompleteSpace G
e : β →+ α
de : DenseInducing ↑e
f : δ →+ γ
df : DenseInducing ↑f
φ : β →+ δ →+ G
hφ : Continuous fun p => ↑(↑φ p.fst) p.snd
W' : Set G
W'_nhd : W' ∈ 𝓝 0
x₀ : α
y₁ : δ
Nx : Filter α := 𝓝 x₀
ee : (u : β × β) → (fun x => α) u.fst × (fun x => α) u.snd := fun u => (↑e u.fst, ↑e u.snd)
lim1 : Tendsto (fun a => (a.snd - a.fst, y₁)) (comap (↑e) Nx ×ˢ comap (↑e) Nx) (𝓝 (0, y₁))
⊢ Tendsto (fun p => ↑(↑φ p.fst) p.snd) (𝓝 (0, y₁)) (𝓝 0)