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

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

tactic: intro x hex y _ hxy
state_before: x y a : ℝ
ha : 0 < a
⊢ ∀ ⦃a_1 : ℝ⦄, rexp (1 / a) ≤ a_1 → ∀ ⦃b : ℝ⦄, rexp (1 / a) ≤ b → a_1 ≤ b → log b / b ^ a ≤ log a_1 / a_1 ^ a
state_after: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
⊢ log y / y ^ a ≤ log x / x ^ a

tactic: have x_pos : 0 < x := lt_of_lt_of_le (exp_pos (1 / a)) hex
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
⊢ log y / y ^ a ≤ log x / x ^ a
state_after: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
⊢ log y / y ^ a ≤ log x / x ^ a

tactic: have y_pos : 0 < y := by linarith
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
⊢ log y / y ^ a ≤ log x / x ^ a
state_after: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
⊢ log y / y ^ a ≤ log x / x ^ a

tactic: have x_nonneg : 0 ≤ x := le_trans (le_of_lt (exp_pos (1 / a))) hex
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
⊢ log y / y ^ a ≤ log x / x ^ a
state_after: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
⊢ log y / y ^ a ≤ log x / x ^ a

tactic: have y_nonneg : 0 ≤ y := by linarith
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
⊢ log y / y ^ a ≤ log x / x ^ a
state_after: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ log y / y ^ a ≤ log x / x ^ a

tactic: nth_rw 1 [← rpow_one y]
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ log y / y ^ a ≤ log x / x ^ a
state_after: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ log (y ^ 1) / y ^ a ≤ log x / x ^ a

tactic: nth_rw 1 [← rpow_one x]
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ log (y ^ 1) / y ^ a ≤ log x / x ^ a
state_after: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ log (y ^ 1) / y ^ a ≤ log (x ^ 1) / x ^ a

tactic: rw [← div_self (ne_of_lt ha).symm, div_eq_mul_one_div a a, rpow_mul y_nonneg, rpow_mul x_nonneg,
  log_rpow (rpow_pos_of_pos y_pos a), log_rpow (rpow_pos_of_pos x_pos a), mul_div_assoc,
  mul_div_assoc, mul_le_mul_left (one_div_pos.mpr ha)]
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ log (y ^ 1) / y ^ a ≤ log (x ^ 1) / x ^ a
state_after: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ log (y ^ a) / y ^ a ≤ log (x ^ a) / x ^ a

tactic: refine log_div_self_antitoneOn ?_ ?_ ?_
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ log (y ^ a) / y ^ a ≤ log (x ^ a) / x ^ a
state_after: case refine_1
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ x ^ a ∈ {x | rexp 1 ≤ x}

case refine_2
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ y ^ a ∈ {x | rexp 1 ≤ x}

case refine_3
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ x ^ a ≤ y ^ a

tactic: gcongr
state_before: case refine_3
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ x ^ a ≤ y ^ a
state_after: no goals

tactic: linarith
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
⊢ 0 < y
state_after: no goals

tactic: linarith
state_before: x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
⊢ 0 ≤ y
state_after: no goals

tactic: simp only [Set.mem_setOf_eq]
state_before: case refine_1
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ x ^ a ∈ {x | rexp 1 ≤ x}
state_after: case refine_1
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ rexp 1 ≤ x ^ a

tactic: convert rpow_le_rpow _ hex (le_of_lt ha) using 1
state_before: case refine_1
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ rexp 1 ≤ x ^ a
state_after: case h.e'_3
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ rexp 1 = rexp (1 / a) ^ a

case refine_1
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ 0 ≤ rexp (1 / a)

tactic: exact le_of_lt (exp_pos (1 / a))
state_before: case refine_1
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ 0 ≤ rexp (1 / a)
state_after: no goals

tactic: rw [← exp_mul]
state_before: case h.e'_3
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ rexp 1 = rexp (1 / a) ^ a
state_after: case h.e'_3
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ rexp 1 = rexp (1 / a * a)

tactic: simp only [Real.exp_eq_exp]
state_before: case h.e'_3
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ rexp 1 = rexp (1 / a * a)
state_after: case h.e'_3
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ 1 = 1 / a * a

tactic: field_simp [(ne_of_lt ha).symm]
state_before: case h.e'_3
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ 1 = 1 / a * a
state_after: no goals

tactic: simp only [Set.mem_setOf_eq]
state_before: case refine_2
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ y ^ a ∈ {x | rexp 1 ≤ x}
state_after: case refine_2
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ rexp 1 ≤ y ^ a

tactic: convert rpow_le_rpow _ (_root_.trans hex hxy) (le_of_lt ha) using 1
state_before: case refine_2
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ rexp 1 ≤ y ^ a
state_after: case h.e'_3
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ rexp 1 = rexp (1 / a) ^ a

case refine_2
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ 0 ≤ rexp (1 / a)

tactic: exact le_of_lt (exp_pos (1 / a))
state_before: case refine_2
x✝¹ y✝ a : ℝ
ha : 0 < a
x : ℝ
hex : rexp (1 / a) ≤ x
y : ℝ
x✝ : rexp (1 / a) ≤ y
hxy : x ≤ y
x_pos : 0 < x
y_pos : 0 < y
x_nonneg : 0 ≤ x
y_nonneg : 0 ≤ y
⊢ 0 ≤ rexp (1 / a)
state_after: no goals