Theorem: Polynomial.card_nthRoots
File: Mathlib/Algebra/Polynomial/Roots.lean

tactic: classical exact
(if hn : n = 0 then
  if h : (X : R[X]) ^ n - C a = 0 then by
    simp [Nat.zero_le, nthRoots, roots, h, dif_pos rfl, empty_eq_zero, Multiset.card_zero]
  else
    WithBot.coe_le_coe.1
      (le_trans (card_roots h)
        (by
          rw [hn, pow_zero, ← C_1, ← RingHom.map_sub]
          exact degree_C_le))
else by
  rw [← Nat.cast_le (α := WithBot ℕ)]
  rw [← degree_X_pow_sub_C (Nat.pos_of_ne_zero hn) a]
  exact card_roots (X_pow_sub_C_ne_zero (Nat.pos_of_ne_zero hn) a))
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
⊢ Multiset.card (nthRoots n a) ≤ n
state_after: no goals

tactic: exact
(if hn : n = 0 then
if h : (X : R[X]) ^ n - C a = 0 then by
simp [Nat.zero_le, nthRoots, roots, h, dif_pos rfl, empty_eq_zero, Multiset.card_zero]
else
WithBot.coe_le_coe.1
(le_trans (card_roots h)
(by
rw [hn, pow_zero, ← C_1, ← RingHom.map_sub]
exact degree_C_le))
else by
rw [← Nat.cast_le (α := WithBot ℕ)]
rw [← degree_X_pow_sub_C (Nat.pos_of_ne_zero hn) a]
exact card_roots (X_pow_sub_C_ne_zero (Nat.pos_of_ne_zero hn) a))
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
⊢ Multiset.card (nthRoots n a) ≤ n
state_after: no goals

tactic: simp [Nat.zero_le, nthRoots, roots, h, dif_pos rfl, empty_eq_zero, Multiset.card_zero]
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
hn : n = 0
h : X ^ n - C a = 0
⊢ Multiset.card (nthRoots n a) ≤ n
state_after: no goals

tactic: rw [hn, pow_zero, ← C_1, ← RingHom.map_sub]
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
hn : n = 0
h : ¬X ^ n - C a = 0
⊢ (X ^ n - C a).degree ≤ ↑n
state_after: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
hn : n = 0
h : ¬X ^ n - C a = 0
⊢ (C (1 - a)).degree ≤ ↑0

tactic: exact degree_C_le
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
hn : n = 0
h : ¬X ^ n - C a = 0
⊢ (C (1 - a)).degree ≤ ↑0
state_after: no goals

tactic: rw [← Nat.cast_le (α := WithBot ℕ)]
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
hn : ¬n = 0
⊢ Multiset.card (nthRoots n a) ≤ n
state_after: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
hn : ¬n = 0
⊢ ↑(Multiset.card (nthRoots n a)) ≤ ↑n

tactic: rw [← degree_X_pow_sub_C (Nat.pos_of_ne_zero hn) a]
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
hn : ¬n = 0
⊢ ↑(Multiset.card (nthRoots n a)) ≤ ↑n
state_after: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
hn : ¬n = 0
⊢ ↑(Multiset.card (nthRoots n a)) ≤ (X ^ n - C a).degree

tactic: exact card_roots (X_pow_sub_C_ne_zero (Nat.pos_of_ne_zero hn) a)
state_before: R : Type u
S : Type v
T : Type w
a✝ b : R
n✝ : ℕ
inst✝¹ : CommRing R
inst✝ : IsDomain R
p q : R[X]
n : ℕ
a : R
hn : ¬n = 0
⊢ ↑(Multiset.card (nthRoots n a)) ≤ (X ^ n - C a).degree
state_after: no goals