Theorem: subset_tangentCone_prod_right
File: Mathlib/Analysis/Calculus/TangentCone.lean

tactic: rintro _ ⟨w, ⟨c, d, hd, hc, hy⟩, rfl⟩
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
⊢ ↑(LinearMap.inr 𝕜 E F) '' tangentConeAt 𝕜 t y ⊆ tangentConeAt 𝕜 (s ×ˢ t) (x, y)

tactic: have : ∀ n, ∃ d', x + d' ∈ s ∧ ‖c n • d'‖ < ((1 : ℝ) / 2) ^ n := by
  intro n
  rcases mem_closure_iff_nhds.1 hs _
      (eventually_nhds_norm_smul_sub_lt (c n) x (pow_pos one_half_pos n)) with
    ⟨z, hz, hzs⟩
  exact ⟨z - x, by simpa using hzs, by simpa using hz⟩
state_before: case intro.intro.intro.intro.intro.intro
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
⊢ ↑(LinearMap.inr 𝕜 E F) w ∈ tangentConeAt 𝕜 (s ×ˢ t) (x, y)

tactic: choose d' hd' using this
state_before: case intro.intro.intro.intro.intro.intro
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
this : ∀ (n : ℕ), ∃ d', x + d' ∈ s ∧ ‖c n • d'‖ < (1 / 2) ^ n
⊢ ↑(LinearMap.inr 𝕜 E F) w ∈ tangentConeAt 𝕜 (s ×ˢ t) (x, y)

tactic: refine' ⟨c, fun n => (d' n, d n), _, hc, _⟩
state_before: case intro.intro.intro.intro.intro.intro
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
d' : ℕ → E
hd' : ∀ (n : ℕ), x + d' n ∈ s ∧ ‖c n • d' n‖ < (1 / 2) ^ n
⊢ ↑(LinearMap.inr 𝕜 E F) w ∈ tangentConeAt 𝕜 (s ×ˢ t) (x, y)

tactic: show ∀ᶠ n in atTop, (x, y) + (d' n, d n) ∈ s ×ˢ t
state_before: case intro.intro.intro.intro.intro.intro.refine'_1
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
d' : ℕ → E
hd' : ∀ (n : ℕ), x + d' n ∈ s ∧ ‖c n • d' n‖ < (1 / 2) ^ n
⊢ ∀ᶠ (n : ℕ) in atTop, (x, y) + (fun n => (d' n, d n)) n ∈ s ×ˢ t

case intro.intro.intro.intro.intro.intro.refine'_2
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
d' : ℕ → E
hd' : ∀ (n : ℕ), x + d' n ∈ s ∧ ‖c n • d' n‖ < (1 / 2) ^ n
⊢ Tendsto (fun n => c n • (fun n => (d' n, d n)) n) atTop (𝓝 (↑(LinearMap.inr 𝕜 E F) w))

tactic: intro n
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
⊢ ∀ (n : ℕ), ∃ d', x + d' ∈ s ∧ ‖c n • d'‖ < (1 / 2) ^ n

tactic: rcases mem_closure_iff_nhds.1 hs _
    (eventually_nhds_norm_smul_sub_lt (c n) x (pow_pos one_half_pos n)) with
  ⟨z, hz, hzs⟩
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
n : ℕ
⊢ ∃ d', x + d' ∈ s ∧ ‖c n • d'‖ < (1 / 2) ^ n

tactic: exact ⟨z - x, by simpa using hzs, by simpa using hz⟩
state_before: case intro.intro
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
n : ℕ
z : E
hz : z ∈ {x_1 | (fun y => ‖c n • (y - x)‖ < (1 / 2) ^ n) x_1}
hzs : z ∈ s
⊢ ∃ d', x + d' ∈ s ∧ ‖c n • d'‖ < (1 / 2) ^ n

tactic: simpa using hzs
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
n : ℕ
z : E
hz : z ∈ {x_1 | (fun y => ‖c n • (y - x)‖ < (1 / 2) ^ n) x_1}
hzs : z ∈ s
⊢ x + (z - x) ∈ s

tactic: simpa using hz
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
n : ℕ
z : E
hz : z ∈ {x_1 | (fun y => ‖c n • (y - x)‖ < (1 / 2) ^ n) x_1}
hzs : z ∈ s
⊢ ‖c n • (z - x)‖ < (1 / 2) ^ n

tactic: filter_upwards [hd]with n hn
state_before: case intro.intro.intro.intro.intro.intro.refine'_1
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
d' : ℕ → E
hd' : ∀ (n : ℕ), x + d' n ∈ s ∧ ‖c n • d' n‖ < (1 / 2) ^ n
⊢ ∀ᶠ (n : ℕ) in atTop, (x, y) + (d' n, d n) ∈ s ×ˢ t

tactic: simp [hn, (hd' n).1]
state_before: case h
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
d' : ℕ → E
hd' : ∀ (n : ℕ), x + d' n ∈ s ∧ ‖c n • d' n‖ < (1 / 2) ^ n
n : ℕ
hn : y + d n ∈ t
⊢ (x, y) + (d' n, d n) ∈ s ×ˢ t

tactic: apply Tendsto.prod_mk_nhds _ hy
state_before: case intro.intro.intro.intro.intro.intro.refine'_2
𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
d' : ℕ → E
hd' : ∀ (n : ℕ), x + d' n ∈ s ∧ ‖c n • d' n‖ < (1 / 2) ^ n
⊢ Tendsto (fun n => c n • (fun n => (d' n, d n)) n) atTop (𝓝 (↑(LinearMap.inr 𝕜 E F) w))

tactic: refine' squeeze_zero_norm (fun n => (hd' n).2.le) _
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
d' : ℕ → E
hd' : ∀ (n : ℕ), x + d' n ∈ s ∧ ‖c n • d' n‖ < (1 / 2) ^ n
⊢ Tendsto (fun c_1 => c c_1 • ((fun n => (d' n, d n)) c_1).fst) atTop (𝓝 (↑0 w))

tactic: exact tendsto_pow_atTop_nhds_0_of_lt_1 one_half_pos.le one_half_lt_one
state_before: 𝕜 : Type u_3
inst✝⁶ : NontriviallyNormedField 𝕜
E : Type u_2
inst✝⁵ : NormedAddCommGroup E
inst✝⁴ : NormedSpace 𝕜 E
F : Type u_1
inst✝³ : NormedAddCommGroup F
inst✝² : NormedSpace 𝕜 F
G : Type ?u.50038
inst✝¹ : NormedAddCommGroup G
inst✝ : NormedSpace ℝ G
x y✝ : E
s t✝ : Set E
t : Set F
y : F
hs : x ∈ closure s
w : F
c : ℕ → 𝕜
d : ℕ → F
hd : ∀ᶠ (n : ℕ) in atTop, y + d n ∈ t
hc : Tendsto (fun n => ‖c n‖) atTop atTop
hy : Tendsto (fun n => c n • d n) atTop (𝓝 w)
d' : ℕ → E
hd' : ∀ (n : ℕ), x + d' n ∈ s ∧ ‖c n • d' n‖ < (1 / 2) ^ n
⊢ Tendsto (fun n => (1 / 2) ^ n) atTop (𝓝 0)