Theorem: Matrix.charpoly_monic
File: Mathlib/LinearAlgebra/Matrix/Charpoly/Coeff.lean

tactic: nontriviality R
state_before: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
⊢ M.charpoly.Monic
state_after: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
⊢ M.charpoly.Monic

tactic: by_cases h : Fintype.card n = 0
state_before: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
⊢ M.charpoly.Monic
state_after: case pos
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : Fintype.card n = 0
⊢ M.charpoly.Monic

case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
⊢ M.charpoly.Monic

tactic: have mon : (∏ i : n, (X - C (M i i))).Monic := by
  apply monic_prod_of_monic univ fun i : n => X - C (M i i)
  simp [monic_X_sub_C]
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
⊢ M.charpoly.Monic
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i))).Monic
⊢ M.charpoly.Monic

tactic: rw [← sub_add_cancel (∏ i : n, (X - C (M i i))) M.charpoly] at mon
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i))).Monic
⊢ M.charpoly.Monic
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).Monic
⊢ M.charpoly.Monic

tactic: rw [Monic] at *
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).Monic
⊢ M.charpoly.Monic
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ M.charpoly.leadingCoeff = 1

tactic: rwa [leadingCoeff_add_of_degree_lt] at mon
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ M.charpoly.leadingCoeff = 1
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (∏ i : n, (X - C (M i i)) - M.charpoly).degree < M.charpoly.degree

tactic: rw [charpoly_degree_eq_dim]
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (∏ i : n, (X - C (M i i)) - M.charpoly).degree < M.charpoly.degree
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (∏ i : n, (X - C (M i i)) - M.charpoly).degree < ↑(Fintype.card n)

tactic: rw [← neg_sub]
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (∏ i : n, (X - C (M i i)) - M.charpoly).degree < ↑(Fintype.card n)
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (-(M.charpoly - ∏ i : n, (X - C (M i i)))).degree < ↑(Fintype.card n)

tactic: rw [degree_neg]
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (-(M.charpoly - ∏ i : n, (X - C (M i i)))).degree < ↑(Fintype.card n)
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (M.charpoly - ∏ i : n, (X - C (M i i))).degree < ↑(Fintype.card n)

tactic: apply lt_trans (charpoly_sub_diagonal_degree_lt M)
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (M.charpoly - ∏ i : n, (X - C (M i i))).degree < ↑(Fintype.card n)
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ ↑(Fintype.card n - 1) < ↑(Fintype.card n)

tactic: rw [Nat.cast_lt]
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ ↑(Fintype.card n - 1) < ↑(Fintype.card n)
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ Fintype.card n - 1 < Fintype.card n

tactic: rw [← Nat.pred_eq_sub_one]
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ Fintype.card n - 1 < Fintype.card n
state_after: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (Fintype.card n).pred < Fintype.card n

tactic: apply Nat.pred_lt
state_before: case neg
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ (Fintype.card n).pred < Fintype.card n
state_after: case neg.a
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ Fintype.card n ≠ 0

tactic: apply h
state_before: case neg.a
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
mon : (∏ i : n, (X - C (M i i)) - M.charpoly + M.charpoly).leadingCoeff = 1
⊢ Fintype.card n ≠ 0
state_after: no goals

tactic: rw [charpoly, det_of_card_zero h]
state_before: case pos
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : Fintype.card n = 0
⊢ M.charpoly.Monic
state_after: case pos
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : Fintype.card n = 0
⊢ Monic 1

tactic: apply monic_one
state_before: case pos
R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : Fintype.card n = 0
⊢ Monic 1
state_after: no goals

tactic: apply monic_prod_of_monic univ fun i : n => X - C (M i i)
state_before: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
⊢ (∏ i : n, (X - C (M i i))).Monic
state_after: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
⊢ ∀ i ∈ univ, (X - C (M i i)).Monic

tactic: simp [monic_X_sub_C]
state_before: R : Type u
inst✝³ : CommRing R
n G : Type v
inst✝² : DecidableEq n
inst✝¹ : Fintype n
α β : Type v
inst✝ : DecidableEq α
M✝ M : Matrix n n R
a✝ : Nontrivial R
h : ¬Fintype.card n = 0
⊢ ∀ i ∈ univ, (X - C (M i i)).Monic
state_after: no goals