Theorem: ConvexOn.slope_mono_adjacent
File: Mathlib/Analysis/Convex/Slope.lean

tactic: have hxz := hxy.trans hyz
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy : x < y
hyz : y < z
⊢ (f y - f x) / (y - x) ≤ (f z - f y) / (z - y)

tactic: rw [← sub_pos] at hxy hxz hyz
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy : x < y
hyz : y < z
hxz : x < z
⊢ (f y - f x) / (y - x) ≤ (f z - f y) / (z - y)

tactic: suffices f y / (y - x) + f y / (z - y) ≤ f x / (y - x) + f z / (z - y) by
  ring_nf  at this⊢
  linarith
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
⊢ (f y - f x) / (y - x) ≤ (f z - f y) / (z - y)

tactic: set a := (z - y) / (z - x)
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
⊢ f y / (y - x) + f y / (z - y) ≤ f x / (y - x) + f z / (z - y)

tactic: set b := (y - x) / (z - x)
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
⊢ f y / (y - x) + f y / (z - y) ≤ f x / (y - x) + f z / (z - y)

tactic: have hy : a • x + b • z = y := by
  field_simp
  rw [div_eq_iff] <;> [ring; linarith]
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
⊢ f y / (y - x) + f y / (z - y) ≤ f x / (y - x) + f z / (z - y)

tactic: have key :=
  hf.2 hx hz (show 0 ≤ a by apply div_nonneg <;> linarith)
    (show 0 ≤ b by apply div_nonneg <;> linarith)
    (show a + b = 1 by
      field_simp
      rw [div_eq_iff] <;> [ring; linarith])
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
⊢ f y / (y - x) + f y / (z - y) ≤ f x / (y - x) + f z / (z - y)

tactic: rw [hy] at key
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
key : f (a • x + b • z) ≤ a • f x + b • f z
⊢ f y / (y - x) + f y / (z - y) ≤ f x / (y - x) + f z / (z - y)

tactic: replace key := mul_le_mul_of_nonneg_left key hxz.le
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
key : f y ≤ a • f x + b • f z
⊢ f y / (y - x) + f y / (z - y) ≤ f x / (y - x) + f z / (z - y)

tactic: field_simp [hxy.ne', hyz.ne', hxz.ne', mul_comm (z - x) _]  at key⊢
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
key : (z - x) * f y ≤ (z - x) * (a • f x + b • f z)
⊢ f y / (y - x) + f y / (z - y) ≤ f x / (y - x) + f z / (z - y)

tactic: rw [div_le_div_right]
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
key : f y * (z - x) ≤ (z - y) * f x + (y - x) * f z
⊢ (f y * (z - y) + f y * (y - x)) / ((y - x) * (z - y)) ≤ (f x * (z - y) + f z * (y - x)) / ((y - x) * (z - y))

tactic: ring_nf  at this⊢
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
this : f y / (y - x) + f y / (z - y) ≤ f x / (y - x) + f z / (z - y)
⊢ (f y - f x) / (y - x) ≤ (f z - f y) / (z - y)

tactic: linarith
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
this : f y * (y - x)⁻¹ + f y * (-y + z)⁻¹ ≤ (y - x)⁻¹ * f x + (-y + z)⁻¹ * f z
⊢ f y * (y - x)⁻¹ - (y - x)⁻¹ * f x ≤ -(f y * (-y + z)⁻¹) + (-y + z)⁻¹ * f z

tactic: field_simp
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
⊢ a • x + b • z = y

tactic: rw [div_eq_iff] <;> [ring; linarith]
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
⊢ ((z - y) * x + (y - x) * z) / (z - x) = y

tactic: apply div_nonneg <;> linarith
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
⊢ 0 ≤ a

tactic: apply div_nonneg <;> linarith
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
⊢ 0 ≤ b

tactic: field_simp
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
⊢ a + b = 1

tactic: rw [div_eq_iff] <;> [ring; linarith]
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
⊢ (z - x) / (z - x) = 1

tactic: linarith
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
key : f y * (z - x) ≤ (z - y) * f x + (y - x) * f z
⊢ f y * (z - y) + f y * (y - x) ≤ f x * (z - y) + f z * (y - x)

tactic: nlinarith
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : ConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy✝ : x < y
hxy : 0 < y - x
hyz✝ : y < z
hyz : 0 < z - y
hxz✝ : x < z
hxz : 0 < z - x
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
key : f y * (z - x) ≤ (z - y) * f x + (y - x) * f z
⊢ 0 < (y - x) * (z - y)