Theorem: Polynomial.degree_sum_eq_of_disjoint
File: Mathlib/Algebra/Polynomial/Degree/Lemmas.lean

tactic: induction' s using Finset.induction_on with x s hx IH
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
s : Finset S
h : {i | i ∈ s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
⊢ (s.sum f).degree = s.sup fun i => (f i).degree
state_after: case empty
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
h : {i | i ∈ ∅ ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
⊢ (∅.sum f).degree = ∅.sup fun i => (f i).degree

case insert
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
IH : {i | i ∈ s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f) → (s.sum f).degree = s.sup fun i => (f i).degree
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
⊢ ((insert x s).sum f).degree = (insert x s).sup fun i => (f i).degree

tactic: simp
state_before: case empty
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
h : {i | i ∈ ∅ ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
⊢ (∅.sum f).degree = ∅.sup fun i => (f i).degree
state_after: no goals

tactic: simp only [hx, Finset.sum_insert, not_false_iff, Finset.sup_insert]
state_before: case insert
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
IH : {i | i ∈ s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f) → (s.sum f).degree = s.sup fun i => (f i).degree
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
⊢ ((insert x s).sum f).degree = (insert x s).sup fun i => (f i).degree
state_after: case insert
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
IH : {i | i ∈ s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f) → (s.sum f).degree = s.sup fun i => (f i).degree
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

tactic: specialize IH (h.mono fun _ => by simp (config := { contextual := true }))
state_before: case insert
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
IH : {i | i ∈ s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f) → (s.sum f).degree = s.sup fun i => (f i).degree
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: case insert
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

tactic: rcases lt_trichotomy (degree (f x)) (degree (s.sum f)) with (H | H | H)
state_before: case insert
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: case insert.inl
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (f x).degree < (s.sum f).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

case insert.inr.inl
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (f x).degree = (s.sum f).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

case insert.inr.inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (s.sum f).degree < (f x).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

tactic: simp (config := { contextual := true })
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
IH : {i | i ∈ s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f) → (s.sum f).degree = s.sup fun i => (f i).degree
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
x✝ : S
⊢ x✝ ∈ {i | i ∈ s ∧ f i ≠ 0} → x✝ ∈ {i | i ∈ insert x s ∧ f i ≠ 0}
state_after: no goals

tactic: rw [← IH, sup_eq_right.mpr H.le, degree_add_eq_right_of_degree_lt H]
state_before: case insert.inl
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (f x).degree < (s.sum f).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: no goals

tactic: rcases s.eq_empty_or_nonempty with (rfl | hs)
state_before: case insert.inr.inl
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (f x).degree = (s.sum f).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: case insert.inr.inl.inl
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
hx : x ∉ ∅
h : {i | i ∈ insert x ∅ ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (∅.sum f).degree = ∅.sup fun i => (f i).degree
H : (f x).degree = (∅.sum f).degree
⊢ (f x + ∑ x ∈ ∅, f x).degree = (f x).degree ⊔ ∅.sup fun i => (f i).degree

case insert.inr.inl.inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (f x).degree = (s.sum f).degree
hs : s.Nonempty
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

tactic: obtain ⟨y, hy, hy'⟩ := Finset.exists_mem_eq_sup s hs fun i => degree (f i)
state_before: case insert.inr.inl.inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (f x).degree = (s.sum f).degree
hs : s.Nonempty
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: case insert.inr.inl.inr.intro.intro
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (f x).degree = (s.sum f).degree
hs : s.Nonempty
y : S
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

tactic: rw [IH, hy'] at H
state_before: case insert.inr.inl.inr.intro.intro
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (f x).degree = (s.sum f).degree
hs : s.Nonempty
y : S
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: case insert.inr.inl.inr.intro.intro
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

tactic: by_cases hx0 : f x = 0
state_before: case insert.inr.inl.inr.intro.intro
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: case pos
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : f x = 0
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

case neg
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

tactic: have hy0 : f y ≠ 0 := by
  contrapose! H
  simpa [H, degree_eq_bot] using hx0
state_before: case neg
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: case neg
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
hy0 : f y ≠ 0
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree

tactic: refine absurd H (h ?_ ?_ fun H => hx ?_)
state_before: case neg
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
hy0 : f y ≠ 0
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: case neg.refine_1
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
hy0 : f y ≠ 0
⊢ x ∈ {i | i ∈ insert x s ∧ f i ≠ 0}

case neg.refine_2
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
hy0 : f y ≠ 0
⊢ y ∈ {i | i ∈ insert x s ∧ f i ≠ 0}

case neg.refine_3
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H✝ : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
hy0 : f y ≠ 0
H : x = y
⊢ x ∈ s

tactic: simp
state_before: case insert.inr.inl.inl
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
hx : x ∉ ∅
h : {i | i ∈ insert x ∅ ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (∅.sum f).degree = ∅.sup fun i => (f i).degree
H : (f x).degree = (∅.sum f).degree
⊢ (f x + ∑ x ∈ ∅, f x).degree = (f x).degree ⊔ ∅.sup fun i => (f i).degree
state_after: no goals

tactic: simp [hx0, IH]
state_before: case pos
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : f x = 0
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: no goals

tactic: contrapose! H
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
⊢ f y ≠ 0
state_after: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
H : f y = 0
⊢ (f x).degree ≠ (f y).degree

tactic: simpa [H, degree_eq_bot] using hx0
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
H : f y = 0
⊢ (f x).degree ≠ (f y).degree
state_after: no goals

tactic: simp [hx0]
state_before: case neg.refine_1
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
hy0 : f y ≠ 0
⊢ x ∈ {i | i ∈ insert x s ∧ f i ≠ 0}
state_after: no goals

tactic: simp [hy, hy0]
state_before: case neg.refine_2
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
hy0 : f y ≠ 0
⊢ y ∈ {i | i ∈ insert x s ∧ f i ≠ 0}
state_after: no goals

tactic: exact H.symm ▸ hy
state_before: case neg.refine_3
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
hs : s.Nonempty
y : S
H✝ : (f x).degree = (f y).degree
hy : y ∈ s
hy' : (s.sup fun i => (f i).degree) = (f y).degree
hx0 : ¬f x = 0
hy0 : f y ≠ 0
H : x = y
⊢ x ∈ s
state_after: no goals

tactic: rw [← IH, sup_eq_left.mpr H.le, degree_add_eq_left_of_degree_lt H]
state_before: case insert.inr.inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝ : Semiring R
p q r : R[X]
f : S → R[X]
x : S
s : Finset S
hx : x ∉ s
h : {i | i ∈ insert x s ∧ f i ≠ 0}.Pairwise (Ne on degree ∘ f)
IH : (s.sum f).degree = s.sup fun i => (f i).degree
H : (s.sum f).degree < (f x).degree
⊢ (f x + ∑ x ∈ s, f x).degree = (f x).degree ⊔ s.sup fun i => (f i).degree
state_after: no goals