Theorem: Real.log_div_self_antitoneOn
File: Mathlib/Analysis/SpecialFunctions/Log/Monotone.lean

tactic: simp only [AntitoneOn, mem_setOf_eq]
state_before: x y : ℝ
⊢ AntitoneOn (fun x => log x / x) {x | rexp 1 ≤ x}
state_after: x y : ℝ
⊢ ∀ ⦃a : ℝ⦄, rexp 1 ≤ a → ∀ ⦃b : ℝ⦄, rexp 1 ≤ b → a ≤ b → log b / b ≤ log a / a

tactic: intro x hex y hey hxy
state_before: x y : ℝ
⊢ ∀ ⦃a : ℝ⦄, rexp 1 ≤ a → ∀ ⦃b : ℝ⦄, rexp 1 ≤ b → a ≤ b → log b / b ≤ log a / a
state_after: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
⊢ log y / y ≤ log x / x

tactic: have x_pos : 0 < x := (exp_pos 1).trans_le hex
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
⊢ log y / y ≤ log x / x
state_after: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
⊢ log y / y ≤ log x / x

tactic: have y_pos : 0 < y := (exp_pos 1).trans_le hey
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
⊢ log y / y ≤ log x / x
state_after: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
⊢ log y / y ≤ log x / x

tactic: have hlogx : 1 ≤ log x := by rwa [le_log_iff_exp_le x_pos]
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
⊢ log y / y ≤ log x / x
state_after: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
hlogx : 1 ≤ log x
⊢ log y / y ≤ log x / x

tactic: have hyx : 0 ≤ y / x - 1 := by rwa [le_sub_iff_add_le, le_div_iff x_pos, zero_add, one_mul]
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
hlogx : 1 ≤ log x
⊢ log y / y ≤ log x / x
state_after: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
hlogx : 1 ≤ log x
hyx : 0 ≤ y / x - 1
⊢ log y / y ≤ log x / x

tactic: rw [div_le_iff y_pos, ← sub_le_sub_iff_right (log x)]
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
hlogx : 1 ≤ log x
hyx : 0 ≤ y / x - 1
⊢ log y / y ≤ log x / x
state_after: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
hlogx : 1 ≤ log x
hyx : 0 ≤ y / x - 1
⊢ log y - log x ≤ log x / x * y - log x

tactic: calc
  log y - log x = log (y / x) := by rw [log_div y_pos.ne' x_pos.ne']
  _ ≤ y / x - 1 := log_le_sub_one_of_pos (div_pos y_pos x_pos)
  _ ≤ log x * (y / x - 1) := le_mul_of_one_le_left hyx hlogx
  _ = log x / x * y - log x := by ring
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
hlogx : 1 ≤ log x
hyx : 0 ≤ y / x - 1
⊢ log y - log x ≤ log x / x * y - log x
state_after: no goals

tactic: rwa [le_log_iff_exp_le x_pos]
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
⊢ 1 ≤ log x
state_after: no goals

tactic: rwa [le_sub_iff_add_le, le_div_iff x_pos, zero_add, one_mul]
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
hlogx : 1 ≤ log x
⊢ 0 ≤ y / x - 1
state_after: no goals

tactic: rw [log_div y_pos.ne' x_pos.ne']
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
hlogx : 1 ≤ log x
hyx : 0 ≤ y / x - 1
⊢ log y - log x = log (y / x)
state_after: no goals

tactic: ring
state_before: x✝ y✝ x : ℝ
hex : rexp 1 ≤ x
y : ℝ
hey : rexp 1 ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
hlogx : 1 ≤ log x
hyx : 0 ≤ y / x - 1
⊢ log x * (y / x - 1) = log x / x * y - log x
state_after: no goals