Theorem: ENNReal.log_rpow
File: Mathlib/Analysis/SpecialFunctions/Log/ENNReal.lean

tactic: rcases lt_trichotomy y 0 with (y_neg | rfl | y_pos)
state_before: x : ℝ≥0∞
y : ℝ
⊢ (x ^ y).log = ↑y * x.log
state_after: case inl
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
⊢ (x ^ y).log = ↑y * x.log

case inr.inl
x : ℝ≥0∞
⊢ (x ^ 0).log = ↑0 * x.log

case inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
⊢ (x ^ y).log = ↑y * x.log

tactic: rcases ENNReal.trichotomy x with (rfl | rfl | x_real)
state_before: case inl
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
⊢ (x ^ y).log = ↑y * x.log
state_after: case inl.inl
y : ℝ
y_neg : y < 0
⊢ (0 ^ y).log = ↑y * log 0

case inl.inr.inl
y : ℝ
y_neg : y < 0
⊢ (⊤ ^ y).log = ↑y * ⊤.log

case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
⊢ (x ^ y).log = ↑y * x.log

tactic: simp only [ENNReal.zero_rpow_def y, not_lt_of_lt y_neg, ne_of_lt y_neg, log_top, log_zero]
state_before: case inl.inl
y : ℝ
y_neg : y < 0
⊢ (0 ^ y).log = ↑y * log 0
state_after: case inl.inl
y : ℝ
y_neg : y < 0
⊢ (if False then 0 else if False then 1 else ⊤).log = ↑y * ⊥

tactic: exact Eq.symm (EReal.coe_mul_bot_of_neg y_neg)
state_before: case inl.inl
y : ℝ
y_neg : y < 0
⊢ (if False then 0 else if False then 1 else ⊤).log = ↑y * ⊥
state_after: no goals

tactic: rw [ENNReal.top_rpow_of_neg y_neg, log_zero, log_top]
state_before: case inl.inr.inl
y : ℝ
y_neg : y < 0
⊢ (⊤ ^ y).log = ↑y * ⊤.log
state_after: case inl.inr.inl
y : ℝ
y_neg : y < 0
⊢ ⊥ = ↑y * ⊤

tactic: exact Eq.symm (EReal.coe_mul_top_of_neg y_neg)
state_before: case inl.inr.inl
y : ℝ
y_neg : y < 0
⊢ ⊥ = ↑y * ⊤
state_after: no goals

tactic: have x_ne_zero := Ne.symm (LT.lt.ne (ENNReal.toReal_pos_iff.1 x_real).1)
state_before: case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
⊢ (x ^ y).log = ↑y * x.log
state_after: case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
⊢ (x ^ y).log = ↑y * x.log

tactic: have x_ne_top := LT.lt.ne (ENNReal.toReal_pos_iff.1 x_real).2
state_before: case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
⊢ (x ^ y).log = ↑y * x.log
state_after: case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ (x ^ y).log = ↑y * x.log

tactic: simp only [log, rpow_eq_zero_iff, x_ne_zero, false_and, x_ne_top, or_self, ↓reduceIte,
  rpow_eq_top_iff]
state_before: case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ (x ^ y).log = ↑y * x.log
state_after: case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ ↑(Real.log (x ^ y).toReal) = ↑y * ↑(Real.log x.toReal)

tactic: norm_cast
state_before: case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ ↑(Real.log (x ^ y).toReal) = ↑y * ↑(Real.log x.toReal)
state_after: case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ Real.log (x ^ y).toReal = y * Real.log x.toReal

tactic: exact ENNReal.toReal_rpow x y ▸ Real.log_rpow x_real y
state_before: case inl.inr.inr
x : ℝ≥0∞
y : ℝ
y_neg : y < 0
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ Real.log (x ^ y).toReal = y * Real.log x.toReal
state_after: no goals

tactic: simp
state_before: case inr.inl
x : ℝ≥0∞
⊢ (x ^ 0).log = ↑0 * x.log
state_after: no goals

tactic: rcases ENNReal.trichotomy x with (rfl | rfl | x_real)
state_before: case inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
⊢ (x ^ y).log = ↑y * x.log
state_after: case inr.inr.inl
y : ℝ
y_pos : 0 < y
⊢ (0 ^ y).log = ↑y * log 0

case inr.inr.inr.inl
y : ℝ
y_pos : 0 < y
⊢ (⊤ ^ y).log = ↑y * ⊤.log

case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
⊢ (x ^ y).log = ↑y * x.log

tactic: rw [ENNReal.zero_rpow_of_pos y_pos, log_zero, EReal.mul_bot_of_pos]
state_before: case inr.inr.inl
y : ℝ
y_pos : 0 < y
⊢ (0 ^ y).log = ↑y * log 0
state_after: case inr.inr.inl
y : ℝ
y_pos : 0 < y
⊢ 0 < ↑y

tactic: norm_cast
state_before: case inr.inr.inl
y : ℝ
y_pos : 0 < y
⊢ 0 < ↑y
state_after: no goals

tactic: rw [ENNReal.top_rpow_of_pos y_pos, log_top, EReal.mul_top_of_pos]
state_before: case inr.inr.inr.inl
y : ℝ
y_pos : 0 < y
⊢ (⊤ ^ y).log = ↑y * ⊤.log
state_after: case inr.inr.inr.inl
y : ℝ
y_pos : 0 < y
⊢ 0 < ↑y

tactic: norm_cast
state_before: case inr.inr.inr.inl
y : ℝ
y_pos : 0 < y
⊢ 0 < ↑y
state_after: no goals

tactic: have x_ne_zero := Ne.symm (LT.lt.ne (ENNReal.toReal_pos_iff.1 x_real).1)
state_before: case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
⊢ (x ^ y).log = ↑y * x.log
state_after: case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
⊢ (x ^ y).log = ↑y * x.log

tactic: have x_ne_top := LT.lt.ne (ENNReal.toReal_pos_iff.1 x_real).2
state_before: case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
⊢ (x ^ y).log = ↑y * x.log
state_after: case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ (x ^ y).log = ↑y * x.log

tactic: simp only [log, rpow_eq_zero_iff, x_ne_zero, false_and, x_ne_top, or_self, ↓reduceIte,
  rpow_eq_top_iff]
state_before: case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ (x ^ y).log = ↑y * x.log
state_after: case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ ↑(Real.log (x ^ y).toReal) = ↑y * ↑(Real.log x.toReal)

tactic: norm_cast
state_before: case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ ↑(Real.log (x ^ y).toReal) = ↑y * ↑(Real.log x.toReal)
state_after: case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ Real.log (x ^ y).toReal = y * Real.log x.toReal

tactic: exact ENNReal.toReal_rpow x y ▸ Real.log_rpow x_real y
state_before: case inr.inr.inr.inr
x : ℝ≥0∞
y : ℝ
y_pos : 0 < y
x_real : 0 < x.toReal
x_ne_zero : x ≠ 0
x_ne_top : x ≠ ⊤
⊢ Real.log (x ^ y).toReal = y * Real.log x.toReal
state_after: no goals