Theorem: Submodule.inf_iSup_genEigenspace
File: Mathlib/LinearAlgebra/Eigenspace/Triangularizable.lean

tactic: simp_rw [← (f.genEigenspace _).mono.directed_le.inf_iSup_eq]
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
⊢ p ⊓ ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⨆ μ, ⨆ k, p ⊓ (f.genEigenspace μ) k
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
⊢ p ⊓ ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⨆ μ, p ⊓ ⨆ i, (f.genEigenspace μ) i

tactic: refine le_antisymm (fun m hm ↦ ?_)
  (le_inf_iff.mpr ⟨iSup_le fun μ ↦ inf_le_left, iSup_mono fun μ ↦ inf_le_right⟩)
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
⊢ p ⊓ ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⨆ μ, p ⊓ ⨆ i, (f.genEigenspace μ) i
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : V
hm : m ∈ p ⊓ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
⊢ m ∈ ⨆ μ, p ⊓ ⨆ i, (f.genEigenspace μ) i

tactic: obtain ⟨hm₀ : m ∈ p, hm₁ : m ∈ ⨆ μ, ⨆ k, f.genEigenspace μ k⟩ := hm
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : V
hm : m ∈ p ⊓ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
⊢ m ∈ ⨆ μ, p ⊓ ⨆ i, (f.genEigenspace μ) i
state_after: case intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : V
hm₀ : m ∈ p
hm₁ : m ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
⊢ m ∈ ⨆ μ, p ⊓ ⨆ i, (f.genEigenspace μ) i

tactic: obtain ⟨m, hm₂, rfl⟩ := (mem_iSup_iff_exists_finsupp _ _).mp hm₁
state_before: case intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : V
hm₀ : m ∈ p
hm₁ : m ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
⊢ m ∈ ⨆ μ, p ⊓ ⨆ i, (f.genEigenspace μ) i
state_after: case intro.intro.intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
⊢ (m.sum fun _i xi => xi) ∈ ⨆ μ, p ⊓ ⨆ i, (f.genEigenspace μ) i

tactic: suffices ∀ μ, (m μ : V) ∈ p by
  exact (mem_iSup_iff_exists_finsupp _ _).mpr ⟨m, fun μ ↦ mem_inf.mp ⟨this μ, hm₂ μ⟩, rfl⟩
state_before: case intro.intro.intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
⊢ (m.sum fun _i xi => xi) ∈ ⨆ μ, p ⊓ ⨆ i, (f.genEigenspace μ) i
state_after: case intro.intro.intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
⊢ ∀ (μ : K), m μ ∈ p

tactic: intro μ
state_before: case intro.intro.intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
⊢ ∀ (μ : K), m μ ∈ p
state_after: case intro.intro.intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
⊢ m μ ∈ p

tactic: by_cases hμ : μ ∈ m.support
state_before: case intro.intro.intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
⊢ m μ ∈ p
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
⊢ m μ ∈ p

case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∉ m.support
⊢ m μ ∈ p

tactic: swap
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
⊢ m μ ∈ p

case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∉ m.support
⊢ m μ ∈ p
state_after: case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∉ m.support
⊢ m μ ∈ p

case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
⊢ m μ ∈ p

tactic: have h_comm : ∀ (μ₁ μ₂ : K),
  Commute ((f - algebraMap K (End K V) μ₁) ^ finrank K V)
          ((f - algebraMap K (End K V) μ₂) ^ finrank K V) := fun μ₁ μ₂ ↦
  ((Commute.sub_right rfl <| Algebra.commute_algebraMap_right _ _).sub_left
    (Algebra.commute_algebraMap_left _ _)).pow_pow _ _
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
⊢ m μ ∈ p
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
⊢ m μ ∈ p

tactic: let g : End K V := (m.support.erase μ).noncommProd _ fun μ₁ _ μ₂ _ _ ↦ h_comm μ₁ μ₂
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
⊢ m μ ∈ p
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
⊢ m μ ∈ p

tactic: have hfg : Commute f g := Finset.noncommProd_commute _ _ _ _ fun μ' _ ↦
  (Commute.sub_right rfl <| Algebra.commute_algebraMap_right _ _).pow_right _
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
⊢ m μ ∈ p
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
⊢ m μ ∈ p

tactic: have hg₁ : MapsTo g p p := Finset.noncommProd_induction _ _ _ (fun g' : End K V ↦ MapsTo g' p p)
    (fun f₁ f₂ ↦ MapsTo.comp) (mapsTo_id _) fun μ' _ ↦ by
  suffices MapsTo (f - algebraMap K (End K V) μ') p p by
    simp only [LinearMap.coe_pow]; exact this.iterate (finrank K V)
  intro x hx
  rw [LinearMap.sub_apply, algebraMap_end_apply]
  exact p.sub_mem (h _ hx) (smul_mem p μ' hx)
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
⊢ m μ ∈ p
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
⊢ m μ ∈ p

tactic: have hg₂ : MapsTo g ↑(⨆ k, f.genEigenspace μ k) ↑(⨆ k, f.genEigenspace μ k) :=
  f.mapsTo_iSup_genEigenspace_of_comm hfg μ
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
⊢ m μ ∈ p
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
⊢ m μ ∈ p

tactic: have hg₃ : InjOn g ↑(⨆ k, f.genEigenspace μ k) := by
  apply LinearMap.injOn_of_disjoint_ker (subset_refl _)
  have this := f.independent_genEigenspace
  simp_rw [f.iSup_genEigenspace_eq_genEigenspace_finrank] at this ⊢
  rw [LinearMap.ker_noncommProd_eq_of_supIndep_ker _ _ <| this.supIndep' (m.support.erase μ),
    ← Finset.sup_eq_iSup]
  exact Finset.supIndep_iff_disjoint_erase.mp (this.supIndep' m.support) μ hμ
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
⊢ m μ ∈ p
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
⊢ m μ ∈ p

tactic: have hg₄ : SurjOn g
    ↑(p ⊓ ⨆ k, f.genEigenspace μ k) ↑(p ⊓ ⨆ k, f.genEigenspace μ k) := by
  have : MapsTo g
      ↑(p ⊓ ⨆ k, f.genEigenspace μ k) ↑(p ⊓ ⨆ k, f.genEigenspace μ k) :=
    hg₁.inter_inter hg₂
  rw [← LinearMap.injOn_iff_surjOn this]
  exact hg₃.mono inter_subset_right
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
⊢ m μ ∈ p
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
hg₄ : SurjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
⊢ m μ ∈ p

tactic: specialize hm₂ μ
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
hg₄ : SurjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
⊢ m μ ∈ p
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
hg₄ : SurjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
hm₂ : m μ ∈ ⨆ k, (f.genEigenspace μ) k
⊢ m μ ∈ p

tactic: obtain ⟨y, ⟨hy₀ : y ∈ p, hy₁ : y ∈ ⨆ k, f.genEigenspace μ k⟩, hy₂ : g y = g (m μ)⟩ :=
  hg₄ ⟨(hg₀ ▸ hg₁ hm₀), hg₂ hm₂⟩
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
hg₄ : SurjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
hm₂ : m μ ∈ ⨆ k, (f.genEigenspace μ) k
⊢ m μ ∈ p
state_after: case pos.intro.intro.intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
hg₄ : SurjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
hm₂ : m μ ∈ ⨆ k, (f.genEigenspace μ) k
y : V
hy₂ : g y = g (m μ)
hy₀ : y ∈ p
hy₁ : y ∈ ⨆ k, (f.genEigenspace μ) k
⊢ m μ ∈ p

tactic: rwa [← hg₃ hy₁ hm₂ hy₂]
state_before: case pos.intro.intro.intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
hg₄ : SurjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
hm₂ : m μ ∈ ⨆ k, (f.genEigenspace μ) k
y : V
hy₂ : g y = g (m μ)
hy₀ : y ∈ p
hy₁ : y ∈ ⨆ k, (f.genEigenspace μ) k
⊢ m μ ∈ p
state_after: no goals

tactic: exact (mem_iSup_iff_exists_finsupp _ _).mpr ⟨m, fun μ ↦ mem_inf.mp ⟨this μ, hm₂ μ⟩, rfl⟩
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
this : ∀ (μ : K), m μ ∈ p
⊢ (m.sum fun _i xi => xi) ∈ ⨆ μ, p ⊓ ⨆ i, (f.genEigenspace μ) i
state_after: no goals

tactic: simp only [Finsupp.not_mem_support_iff.mp hμ, p.zero_mem]
state_before: case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∉ m.support
⊢ m μ ∈ p
state_after: no goals

tactic: suffices ∀ μ' ∈ m.support, g (m μ') = if μ' = μ then g (m μ) else 0 by
  rw [map_finsupp_sum, Finsupp.sum_congr (g2 := fun μ' _ ↦ if μ' = μ then g (m μ) else 0) this,
    Finsupp.sum_ite_eq', if_pos hμ]
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
⊢ g (m.sum fun _μ mμ => mμ) = g (m μ)
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
⊢ ∀ μ' ∈ m.support, g (m μ') = if μ' = μ then g (m μ) else 0

tactic: rintro μ' hμ'
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
⊢ ∀ μ' ∈ m.support, g (m μ') = if μ' = μ then g (m μ) else 0
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
⊢ g (m μ') = if μ' = μ then g (m μ) else 0

tactic: split_ifs with hμμ'
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
⊢ g (m μ') = if μ' = μ then g (m μ) else 0
state_after: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : μ' = μ
⊢ g (m μ') = g (m μ)

case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : ¬μ' = μ
⊢ g (m μ') = 0

tactic: replace hm₂ : ((f - algebraMap K (End K V) μ') ^ finrank K V) (m μ') = 0 := by
  obtain ⟨k, hk⟩ := (mem_iSup_of_chain _ _).mp (hm₂ μ')
  exact Module.End.genEigenspace_le_genEigenspace_finrank _ _ k hk
state_before: case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : ¬μ' = μ
⊢ g (m μ') = 0
state_after: case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : ¬μ' = μ
hm₂ : ((f - (algebraMap K (End K V)) μ') ^ finrank K V) (m μ') = 0
⊢ g (m μ') = 0

tactic: have : _ = g := (m.support.erase μ).noncommProd_erase_mul (Finset.mem_erase.mpr ⟨hμμ', hμ'⟩)
  (fun μ ↦ (f - algebraMap K (End K V) μ) ^ finrank K V) (fun μ₁ _ μ₂ _ _ ↦ h_comm μ₁ μ₂)
state_before: case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : ¬μ' = μ
hm₂ : ((f - (algebraMap K (End K V)) μ') ^ finrank K V) (m μ') = 0
⊢ g (m μ') = 0
state_after: case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : ¬μ' = μ
hm₂ : ((f - (algebraMap K (End K V)) μ') ^ finrank K V) (m μ') = 0
this :
  ((m.support.erase μ).erase μ').noncommProd (fun μ => (f - (algebraMap K (End K V)) μ) ^ finrank K V) ⋯ *
      (f - (algebraMap K (End K V)) μ') ^ finrank K V =
    g
⊢ g (m μ') = 0

tactic: rw [← this, LinearMap.mul_apply, hm₂, _root_.map_zero]
state_before: case neg
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : ¬μ' = μ
hm₂ : ((f - (algebraMap K (End K V)) μ') ^ finrank K V) (m μ') = 0
this :
  ((m.support.erase μ).erase μ').noncommProd (fun μ => (f - (algebraMap K (End K V)) μ) ^ finrank K V) ⋯ *
      (f - (algebraMap K (End K V)) μ') ^ finrank K V =
    g
⊢ g (m μ') = 0
state_after: no goals

tactic: rw [map_finsupp_sum, Finsupp.sum_congr (g2 := fun μ' _ ↦ if μ' = μ then g (m μ) else 0) this,
  Finsupp.sum_ite_eq', if_pos hμ]
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
this : ∀ μ' ∈ m.support, g (m μ') = if μ' = μ then g (m μ) else 0
⊢ g (m.sum fun _μ mμ => mμ) = g (m μ)
state_after: no goals

tactic: rw [hμμ']
state_before: case pos
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : μ' = μ
⊢ g (m μ') = g (m μ)
state_after: no goals

tactic: obtain ⟨k, hk⟩ := (mem_iSup_of_chain _ _).mp (hm₂ μ')
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : ¬μ' = μ
⊢ ((f - (algebraMap K (End K V)) μ') ^ finrank K V) (m μ') = 0
state_after: case intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : ¬μ' = μ
k : ℕ
hk : m μ' ∈ (f.genEigenspace μ') k
⊢ ((f - (algebraMap K (End K V)) μ') ^ finrank K V) (m μ') = 0

tactic: exact Module.End.genEigenspace_le_genEigenspace_finrank _ _ k hk
state_before: case intro
K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
μ' : K
hμ' : μ' ∈ m.support
hμμ' : ¬μ' = μ
k : ℕ
hk : m μ' ∈ (f.genEigenspace μ') k
⊢ ((f - (algebraMap K (End K V)) μ') ^ finrank K V) (m μ') = 0
state_after: no goals

tactic: suffices MapsTo (f - algebraMap K (End K V) μ') p p by
  simp only [LinearMap.coe_pow]; exact this.iterate (finrank K V)
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
⊢ (fun g' => MapsTo ⇑g' ↑p ↑p) ((f - (algebraMap K (End K V)) μ') ^ finrank K V)
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
⊢ MapsTo ⇑(f - (algebraMap K (End K V)) μ') ↑p ↑p

tactic: intro x hx
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
⊢ MapsTo ⇑(f - (algebraMap K (End K V)) μ') ↑p ↑p
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
x : V
hx : x ∈ ↑p
⊢ (f - (algebraMap K (End K V)) μ') x ∈ ↑p

tactic: rw [LinearMap.sub_apply, algebraMap_end_apply]
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
x : V
hx : x ∈ ↑p
⊢ (f - (algebraMap K (End K V)) μ') x ∈ ↑p
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
x : V
hx : x ∈ ↑p
⊢ f x - μ' • x ∈ ↑p

tactic: exact p.sub_mem (h _ hx) (smul_mem p μ' hx)
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
x : V
hx : x ∈ ↑p
⊢ f x - μ' • x ∈ ↑p
state_after: no goals

tactic: simp only [LinearMap.coe_pow]
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
this : MapsTo ⇑(f - (algebraMap K (End K V)) μ') ↑p ↑p
⊢ (fun g' => MapsTo ⇑g' ↑p ↑p) ((f - (algebraMap K (End K V)) μ') ^ finrank K V)
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
this : MapsTo ⇑(f - (algebraMap K (End K V)) μ') ↑p ↑p
⊢ MapsTo (⇑(f - (algebraMap K (End K V)) μ'))^[finrank K V] ↑p ↑p

tactic: exact this.iterate (finrank K V)
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
μ' : K
x✝ : μ' ∈ m.support.erase μ
this : MapsTo ⇑(f - (algebraMap K (End K V)) μ') ↑p ↑p
⊢ MapsTo (⇑(f - (algebraMap K (End K V)) μ'))^[finrank K V] ↑p ↑p
state_after: no goals

tactic: apply LinearMap.injOn_of_disjoint_ker (subset_refl _)
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
⊢ InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
⊢ Disjoint (⨆ k, (f.genEigenspace μ) k) (LinearMap.ker g)

tactic: have this := f.independent_genEigenspace
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
⊢ Disjoint (⨆ k, (f.genEigenspace μ) k) (LinearMap.ker g)
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
this : CompleteLattice.Independent fun μ => ⨆ k, (f.genEigenspace μ) k
⊢ Disjoint (⨆ k, (f.genEigenspace μ) k) (LinearMap.ker g)

tactic: simp_rw [f.iSup_genEigenspace_eq_genEigenspace_finrank] at this ⊢
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
this : CompleteLattice.Independent fun μ => ⨆ k, (f.genEigenspace μ) k
⊢ Disjoint (⨆ k, (f.genEigenspace μ) k) (LinearMap.ker g)
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
this : CompleteLattice.Independent fun μ => (f.genEigenspace μ) (finrank K V)
⊢ Disjoint ((f.genEigenspace μ) (finrank K V)) (LinearMap.ker g)

tactic: rw [LinearMap.ker_noncommProd_eq_of_supIndep_ker _ _ <| this.supIndep' (m.support.erase μ),
  ← Finset.sup_eq_iSup]
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
this : CompleteLattice.Independent fun μ => (f.genEigenspace μ) (finrank K V)
⊢ Disjoint ((f.genEigenspace μ) (finrank K V)) (LinearMap.ker g)
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
this : CompleteLattice.Independent fun μ => (f.genEigenspace μ) (finrank K V)
⊢ Disjoint ((f.genEigenspace μ) (finrank K V))
    ((m.support.erase μ).sup fun i => LinearMap.ker ((f - (algebraMap K (End K V)) i) ^ finrank K V))

tactic: exact Finset.supIndep_iff_disjoint_erase.mp (this.supIndep' m.support) μ hμ
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
this : CompleteLattice.Independent fun μ => (f.genEigenspace μ) (finrank K V)
⊢ Disjoint ((f.genEigenspace μ) (finrank K V))
    ((m.support.erase μ).sup fun i => LinearMap.ker ((f - (algebraMap K (End K V)) i) ^ finrank K V))
state_after: no goals

tactic: have : MapsTo g
    ↑(p ⊓ ⨆ k, f.genEigenspace μ k) ↑(p ⊓ ⨆ k, f.genEigenspace μ k) :=
  hg₁.inter_inter hg₂
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
⊢ SurjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
this : MapsTo ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
⊢ SurjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)

tactic: rw [← LinearMap.injOn_iff_surjOn this]
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
this : MapsTo ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
⊢ SurjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
state_after: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
this : MapsTo ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
⊢ InjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)

tactic: exact hg₃.mono inter_subset_right
state_before: K : Type u_1
V : Type u_2
inst✝³ : Field K
inst✝² : AddCommGroup V
inst✝¹ : Module K V
p : Submodule K V
f : End K V
inst✝ : FiniteDimensional K V
h : ∀ x ∈ p, f x ∈ p
m : K →₀ V
hm₂ : ∀ (i : K), m i ∈ ⨆ k, (f.genEigenspace i) k
hm₀ : (m.sum fun _i xi => xi) ∈ p
hm₁ : (m.sum fun _i xi => xi) ∈ ⨆ μ, ⨆ k, (f.genEigenspace μ) k
μ : K
hμ : μ ∈ m.support
h_comm :
  ∀ (μ₁ μ₂ : K),
    Commute ((f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ((f - (algebraMap K (End K V)) μ₂) ^ finrank K V)
g : End K V := (m.support.erase μ).noncommProd (fun μ₁ => (f - (algebraMap K (End K V)) μ₁) ^ finrank K V) ⋯
hfg : Commute f g
hg₀ : g (m.sum fun _μ mμ => mμ) = g (m μ)
hg₁ : MapsTo ⇑g ↑p ↑p
hg₂ : MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)
hg₃ : InjOn ⇑g ↑(⨆ k, (f.genEigenspace μ) k)
this : MapsTo ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k) ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
⊢ InjOn ⇑g ↑(p ⊓ ⨆ k, (f.genEigenspace μ) k)
state_after: no goals