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

tactic: intro x y h
state_before: ⊢ StrictMono log
state_after: x y : ℝ≥0∞
h : x < y
⊢ x.log < y.log

tactic: unfold log
state_before: x y : ℝ≥0∞
h : x < y
⊢ x.log < y.log
state_after: x y : ℝ≥0∞
h : x < y
⊢ (if x = 0 then ⊥ else if x = ⊤ then ⊤ else ↑(Real.log x.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)

tactic: rcases ENNReal.trichotomy x with (rfl | rfl | x_real)
state_before: x y : ℝ≥0∞
h : x < y
⊢ (if x = 0 then ⊥ else if x = ⊤ then ⊤ else ↑(Real.log x.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)
state_after: case inl
y : ℝ≥0∞
h : 0 < y
⊢ (if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)

case inr.inl
y : ℝ≥0∞
h : ⊤ < y
⊢ (if ⊤ = 0 then ⊥ else if ⊤ = ⊤ then ⊤ else ↑(Real.log ⊤.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)

case inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
⊢ (if x = 0 then ⊥ else if x = ⊤ then ⊤ else ↑(Real.log x.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)

tactic: rcases ENNReal.trichotomy y with (rfl | rfl | y_real)
state_before: case inl
y : ℝ≥0∞
h : 0 < y
⊢ (if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)
state_after: case inl.inl
h : 0 < 0
⊢ (if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))) <
    if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))

case inl.inr.inl
h : 0 < ⊤
⊢ (if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))) <
    if ⊤ = 0 then ⊥ else if ⊤ = ⊤ then ⊤ else ↑(Real.log ⊤.toReal)

case inl.inr.inr
y : ℝ≥0∞
h : 0 < y
y_real : 0 < y.toReal
⊢ (if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)

tactic: exfalso
state_before: case inl.inl
h : 0 < 0
⊢ (if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))) <
    if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))
state_after: case inl.inl
h : 0 < 0
⊢ False

tactic: exact lt_irrefl 0 h
state_before: case inl.inl
h : 0 < 0
⊢ False
state_after: no goals

tactic: simp
state_before: case inl.inr.inl
h : 0 < ⊤
⊢ (if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))) <
    if ⊤ = 0 then ⊥ else if ⊤ = ⊤ then ⊤ else ↑(Real.log ⊤.toReal)
state_after: no goals

tactic: simp [Ne.symm (ne_of_lt (ENNReal.toReal_pos_iff.1 y_real).1),
ne_of_lt (ENNReal.toReal_pos_iff.1 y_real).2, EReal.bot_lt_coe]
state_before: case inl.inr.inr
y : ℝ≥0∞
h : 0 < y
y_real : 0 < y.toReal
⊢ (if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)
state_after: no goals

tactic: exfalso
state_before: case inr.inl
y : ℝ≥0∞
h : ⊤ < y
⊢ (if ⊤ = 0 then ⊥ else if ⊤ = ⊤ then ⊤ else ↑(Real.log ⊤.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)
state_after: case inr.inl
y : ℝ≥0∞
h : ⊤ < y
⊢ False

tactic: exact (ne_top_of_lt h) (Eq.refl ⊤)
state_before: case inr.inl
y : ℝ≥0∞
h : ⊤ < y
⊢ False
state_after: no goals

tactic: simp only [Ne.symm (ne_of_lt (ENNReal.toReal_pos_iff.1 x_real).1),
  ne_of_lt (ENNReal.toReal_pos_iff.1 x_real).2]
state_before: case inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
⊢ (if x = 0 then ⊥ else if x = ⊤ then ⊤ else ↑(Real.log x.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)
state_after: case inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
⊢ (if False then ⊥ else if False then ⊤ else ↑(Real.log x.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)

tactic: rcases ENNReal.trichotomy y with (rfl | rfl | y_real)
state_before: case inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
⊢ (if False then ⊥ else if False then ⊤ else ↑(Real.log x.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)
state_after: case inr.inr.inl
x : ℝ≥0∞
x_real : 0 < x.toReal
h : x < 0
⊢ (if False then ⊥ else if False then ⊤ else ↑(Real.log x.toReal)) <
    if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))

case inr.inr.inr.inl
x : ℝ≥0∞
x_real : 0 < x.toReal
h : x < ⊤
⊢ (if False then ⊥ else if False then ⊤ else ↑(Real.log x.toReal)) <
    if ⊤ = 0 then ⊥ else if ⊤ = ⊤ then ⊤ else ↑(Real.log ⊤.toReal)

case inr.inr.inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
y_real : 0 < y.toReal
⊢ (if False then ⊥ else if False then ⊤ else ↑(Real.log x.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)

tactic: exfalso
state_before: case inr.inr.inl
x : ℝ≥0∞
x_real : 0 < x.toReal
h : x < 0
⊢ (if False then ⊥ else if False then ⊤ else ↑(Real.log x.toReal)) <
    if 0 = 0 then ⊥ else if 0 = ⊤ then ⊤ else ↑(Real.log (ENNReal.toReal 0))
state_after: case inr.inr.inl
x : ℝ≥0∞
x_real : 0 < x.toReal
h : x < 0
⊢ False

tactic: rw [← ENNReal.bot_eq_zero] at h
state_before: case inr.inr.inl
x : ℝ≥0∞
x_real : 0 < x.toReal
h : x < 0
⊢ False
state_after: case inr.inr.inl
x : ℝ≥0∞
x_real : 0 < x.toReal
h : x < ⊥
⊢ False

tactic: exact not_lt_bot h
state_before: case inr.inr.inl
x : ℝ≥0∞
x_real : 0 < x.toReal
h : x < ⊥
⊢ False
state_after: no goals

tactic: simp
state_before: case inr.inr.inr.inl
x : ℝ≥0∞
x_real : 0 < x.toReal
h : x < ⊤
⊢ (if False then ⊥ else if False then ⊤ else ↑(Real.log x.toReal)) <
    if ⊤ = 0 then ⊥ else if ⊤ = ⊤ then ⊤ else ↑(Real.log ⊤.toReal)
state_after: no goals

tactic: simp only [Ne.symm (ne_of_lt (ENNReal.toReal_pos_iff.1 y_real).1), ↓reduceIte,
  ne_of_lt (ENNReal.toReal_pos_iff.1 y_real).2, EReal.coe_lt_coe_iff]
state_before: case inr.inr.inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
y_real : 0 < y.toReal
⊢ (if False then ⊥ else if False then ⊤ else ↑(Real.log x.toReal)) <
    if y = 0 then ⊥ else if y = ⊤ then ⊤ else ↑(Real.log y.toReal)
state_after: case inr.inr.inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
y_real : 0 < y.toReal
⊢ Real.log x.toReal < Real.log y.toReal

tactic: apply Real.log_lt_log x_real
state_before: case inr.inr.inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
y_real : 0 < y.toReal
⊢ Real.log x.toReal < Real.log y.toReal
state_after: case inr.inr.inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
y_real : 0 < y.toReal
⊢ x.toReal < y.toReal

tactic: exact (ENNReal.toReal_lt_toReal (ne_of_lt (ENNReal.toReal_pos_iff.1 x_real).2)
  (ne_of_lt (ENNReal.toReal_pos_iff.1 y_real).2)).2 h
state_before: case inr.inr.inr.inr
x y : ℝ≥0∞
h : x < y
x_real : 0 < x.toReal
y_real : 0 < y.toReal
⊢ x.toReal < y.toReal
state_after: no goals