Theorem: mul_add_mul_lt_mul_add_mul
File: Mathlib/Algebra/Order/Ring/Unbundled/Basic.lean

Proof steps:
state_before: α : Type u
β : Type u_1
inst✝⁶ : Semiring α
inst✝⁵ : PartialOrder α
a b c d : α
inst✝⁴ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝³ : ExistsAddOfLE α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
hab : a < b
hcd : c < d
⊢ a * d + b * c < a * c + b * d
state_after: case intro
α : Type u
β : Type u_1
inst✝⁶ : Semiring α
inst✝⁵ : PartialOrder α
a c d : α
inst✝⁴ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝³ : ExistsAddOfLE α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
hcd : c < d
b : α
hab : a < a + b
⊢ a * d + (a + b) * c < a * c + (a + b) * d
tactic: obtain ⟨b, rfl⟩ := exists_add_of_le hab.le
state_before: case intro
α : Type u
β : Type u_1
inst✝⁶ : Semiring α
inst✝⁵ : PartialOrder α
a c d : α
inst✝⁴ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝³ : ExistsAddOfLE α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
hcd : c < d
b : α
hab : a < a + b
⊢ a * d + (a + b) * c < a * c + (a + b) * d
state_after: case intro.intro
α : Type u
β : Type u_1
inst✝⁶ : Semiring α
inst✝⁵ : PartialOrder α
a c : α
inst✝⁴ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝³ : ExistsAddOfLE α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
b : α
hab : a < a + b
d : α
hcd : c < c + d
⊢ a * (c + d) + (a + b) * c < a * c + (a + b) * (c + d)
tactic: obtain ⟨d, rfl⟩ := exists_add_of_le hcd.le
state_before: case intro.intro
α : Type u
β : Type u_1
inst✝⁶ : Semiring α
inst✝⁵ : PartialOrder α
a c : α
inst✝⁴ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝³ : ExistsAddOfLE α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
b : α
hab : a < a + b
d : α
hcd : c < c + d
⊢ a * (c + d) + (a + b) * c < a * c + (a + b) * (c + d)
state_after: case intro.intro
α : Type u
β : Type u_1
inst✝⁶ : Semiring α
inst✝⁵ : PartialOrder α
a c : α
inst✝⁴ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝³ : ExistsAddOfLE α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
b : α
hab : a < a + b
d : α
hcd : c < c + d
⊢ a * c + (a + b) * c + a * d < a * c + (a + b) * c + (a + b) * d
tactic: rw [mul_add, add_right_comm, mul_add, ← add_assoc]
state_before: case intro.intro
α : Type u
β : Type u_1
inst✝⁶ : Semiring α
inst✝⁵ : PartialOrder α
a c : α
inst✝⁴ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝³ : ExistsAddOfLE α
inst✝² : MulPosStrictMono α
inst✝¹ : CovariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
inst✝ : ContravariantClass α α (fun x x_1 => x + x_1) fun x x_1 => x < x_1
b : α
hab : a < a + b
d : α
hcd : c < c + d
⊢ a * c + (a + b) * c + a * d < a * c + (a + b) * c + (a + b) * d
state_after: no goals
tactic: exact add_lt_add_left (mul_lt_mul_of_pos_right hab <| (lt_add_iff_pos_right _).1 hcd) _