Theorem: StrictConvexOn.slope_strict_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 : StrictConvexOn 𝕜 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: have hxz' := hxz.ne
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConvexOn 𝕜 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: rw [← sub_pos] at hxy hxz hyz
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConvexOn 𝕜 s f
x y z : 𝕜
hx : x ∈ s
hz : z ∈ s
hxy : x < y
hyz : y < z
hxz : x < 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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
⊢ (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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
⊢ 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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 hxz' (div_pos hyz hxz) (div_pos hxy hxz)
    (show a + b = 1 by
      field_simp
      rw [div_eq_iff] <;> [ring; linarith])
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
key : f (((z - y) / (z - x)) • x + ((y - x) / (z - x)) • z) < ((z - y) / (z - x)) • f x + ((y - x) / (z - x)) • f z
⊢ f y / (y - x) + f y / (z - y) < f x / (y - x) + f z / (z - y)

tactic: replace key := mul_lt_mul_of_pos_left key hxz
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConvexOn 𝕜 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
hxz' : x ≠ z
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
key : f y < ((z - y) / (z - x)) • f x + ((y - x) / (z - x)) • 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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
hy : a • x + b • z = y
key : (z - x) * f y < (z - x) * (((z - y) / (z - x)) • f x + ((y - x) / (z - x)) • f z)
⊢ f y / (y - x) + f y / (z - y) < f x / (y - x) + f z / (z - y)

tactic: rw [div_lt_div_right]
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
a : 𝕜 := (z - y) / (z - x)
b : 𝕜 := (y - x) / (z - x)
⊢ ((z - y) * x + (y - x) * z) / (z - x) = y

tactic: field_simp
state_before: 𝕜 : Type u_1
inst✝ : LinearOrderedField 𝕜
s : Set 𝕜
f : 𝕜 → 𝕜
hf : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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 : StrictConvexOn 𝕜 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
hxz' : x ≠ z
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)