Theorem: HahnSeries.order_mul
File: Mathlib/RingTheory/HahnSeries/Multiplication.lean

tactic: apply le_antisymm
state_before: Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ (x * y).order = x.order + y.order
state_after: case a
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ (x * y).order ≤ x.order + y.order

case a
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ x.order + y.order ≤ (x * y).order

tactic: apply order_le_of_coeff_ne_zero
state_before: case a
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ (x * y).order ≤ x.order + y.order
state_after: case a.h
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ (x * y).coeff (x.order + y.order) ≠ 0

tactic: rw [mul_coeff_order_add_order x y]
state_before: case a.h
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ (x * y).coeff (x.order + y.order) ≠ 0
state_after: case a.h
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ x.coeff x.order * y.coeff y.order ≠ 0

tactic: exact mul_ne_zero (coeff_order_ne_zero hx) (coeff_order_ne_zero hy)
state_before: case a.h
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ x.coeff x.order * y.coeff y.order ≠ 0
state_after: no goals

tactic: rw [order_of_ne hx, order_of_ne hy, order_of_ne (mul_ne_zero hx hy), ← Set.IsWF.min_add]
state_before: case a
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ x.order + y.order ≤ (x * y).order
state_after: case a
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ ⋯.min ⋯ ≤ ⋯.min ⋯

tactic: exact Set.IsWF.min_le_min_of_subset support_mul_subset_add_support
state_before: case a
Γ✝ : Type u_1
Γ' : Type u_2
R : Type u_3
inst✝³ : OrderedCancelAddCommMonoid Γ✝
Γ : Type u_4
inst✝² : LinearOrderedCancelAddCommMonoid Γ
inst✝¹ : NonUnitalNonAssocSemiring R
inst✝ : NoZeroDivisors R
x y : HahnSeries Γ R
hx : x ≠ 0
hy : y ≠ 0
⊢ ⋯.min ⋯ ≤ ⋯.min ⋯
state_after: no goals