Theorem: Real.continuous_mul_log
File: Mathlib/Analysis/SpecialFunctions/Log/NegMulLog.lean

tactic: rw [continuous_iff_continuousAt]
state_before: ⊢ Continuous fun x => x * log x
state_after: ⊢ ∀ (x : ℝ), ContinuousAt (fun x => x * log x) x

tactic: intro x
state_before: ⊢ ∀ (x : ℝ), ContinuousAt (fun x => x * log x) x
state_after: x : ℝ
⊢ ContinuousAt (fun x => x * log x) x

tactic: obtain hx | rfl := ne_or_eq x 0
state_before: x : ℝ
⊢ ContinuousAt (fun x => x * log x) x
state_after: case inl
x : ℝ
hx : x ≠ 0
⊢ ContinuousAt (fun x => x * log x) x

case inr

⊢ ContinuousAt (fun x => x * log x) 0

tactic: rw [ContinuousAt, zero_mul]
state_before: case inr

⊢ ContinuousAt (fun x => x * log x) 0
state_after: case inr

⊢ Filter.Tendsto (fun x => x * log x) (𝓝 0) (𝓝 0)

tactic: simp_rw [mul_comm _ (log _)]
state_before: case inr

⊢ Filter.Tendsto (fun x => x * log x) (𝓝 0) (𝓝 0)
state_after: case inr

⊢ Filter.Tendsto (fun x => log x * x) (𝓝 0) (𝓝 0)

tactic: nth_rewrite 1 [← nhdsWithin_univ]
state_before: case inr

⊢ Filter.Tendsto (fun x => log x * x) (𝓝 0) (𝓝 0)
state_after: case inr

⊢ Filter.Tendsto (fun x => log x * x) (𝓝[Set.univ] 0) (𝓝 0)

tactic: have : (Set.univ : Set ℝ) = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0} := by ext; simp [em]
state_before: case inr

⊢ Filter.Tendsto (fun x => log x * x) (𝓝[Set.univ] 0) (𝓝 0)
state_after: case inr
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ Filter.Tendsto (fun x => log x * x) (𝓝[Set.univ] 0) (𝓝 0)

tactic: rw [this, nhdsWithin_union, nhdsWithin_union]
state_before: case inr
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ Filter.Tendsto (fun x => log x * x) (𝓝[Set.univ] 0) (𝓝 0)
state_after: case inr
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ Filter.Tendsto (fun x => log x * x) (𝓝[<] 0 ⊔ 𝓝[>] 0 ⊔ 𝓝[{0}] 0) (𝓝 0)

tactic: simp only [nhdsWithin_singleton, sup_le_iff, Filter.nonpos_iff, Filter.tendsto_sup]
state_before: case inr
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ Filter.Tendsto (fun x => log x * x) (𝓝[<] 0 ⊔ 𝓝[>] 0 ⊔ 𝓝[{0}] 0) (𝓝 0)
state_after: case inr
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ (Filter.Tendsto (fun x => log x * x) (𝓝[<] 0) (𝓝 0) ∧ Filter.Tendsto (fun x => log x * x) (𝓝[>] 0) (𝓝 0)) ∧
    Filter.Tendsto (fun x => log x * x) (pure 0) (𝓝 0)

tactic: refine ⟨⟨tendsto_log_mul_self_nhds_zero_left, ?_⟩, ?_⟩
state_before: case inr
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ (Filter.Tendsto (fun x => log x * x) (𝓝[<] 0) (𝓝 0) ∧ Filter.Tendsto (fun x => log x * x) (𝓝[>] 0) (𝓝 0)) ∧
    Filter.Tendsto (fun x => log x * x) (pure 0) (𝓝 0)
state_after: case inr.refine_1
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ Filter.Tendsto (fun x => log x * x) (𝓝[>] 0) (𝓝 0)

case inr.refine_2
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ Filter.Tendsto (fun x => log x * x) (pure 0) (𝓝 0)

tactic: exact (continuous_id'.continuousAt).mul (continuousAt_log hx)
state_before: case inl
x : ℝ
hx : x ≠ 0
⊢ ContinuousAt (fun x => x * log x) x
state_after: no goals

tactic: ext
state_before: ⊢ Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
state_after: case h
x✝ : ℝ
⊢ x✝ ∈ Set.univ ↔ x✝ ∈ Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}

tactic: simp [em]
state_before: case h
x✝ : ℝ
⊢ x✝ ∈ Set.univ ↔ x✝ ∈ Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
state_after: no goals

tactic: simpa only [rpow_one] using tendsto_log_mul_rpow_nhds_zero zero_lt_one
state_before: case inr.refine_1
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ Filter.Tendsto (fun x => log x * x) (𝓝[>] 0) (𝓝 0)
state_after: no goals

tactic: convert tendsto_pure_nhds (fun x ↦ log x * x) 0
state_before: case inr.refine_2
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ Filter.Tendsto (fun x => log x * x) (pure 0) (𝓝 0)
state_after: case h.e'_5.h.e'_3
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ 0 = log 0 * 0

tactic: simp
state_before: case h.e'_5.h.e'_3
this : Set.univ = Set.Iio 0 ∪ Set.Ioi 0 ∪ {0}
⊢ 0 = log 0 * 0
state_after: no goals