Theorem: Module.End.isSemisimple_of_squarefree_aeval_eq_zero
File: Mathlib/LinearAlgebra/Semisimple.lean

tactic: rw [← RingHom.mem_ker, ← AEval.annihilator_eq_ker_aeval (M := M), mem_annihilator,
    ← IsTorsionBy, ← isTorsionBySet_singleton_iff, isTorsionBySet_iff_is_torsion_by_span] at hpf
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : (aeval f) p = 0
⊢ f.IsSemisimple
state_after: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
⊢ f.IsSemisimple

tactic: let R := K[X] ⧸ Ideal.span {p}
state_before: R : Type u_1
M : Type u_2
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
⊢ f.IsSemisimple
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
⊢ f.IsSemisimple

tactic: have : IsReduced R :=
  (Ideal.isRadical_iff_quotient_reduced _).mp (isRadical_iff_span_singleton.mp hp.isRadical)
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
⊢ f.IsSemisimple
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this : IsReduced R
⊢ f.IsSemisimple

tactic: have : FiniteDimensional K R := (AdjoinRoot.powerBasis hp.ne_zero).finite
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this : IsReduced R
⊢ f.IsSemisimple
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝ : IsReduced R
this : FiniteDimensional K R
⊢ f.IsSemisimple

tactic: have : IsArtinianRing R := .of_finite K R
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝ : IsReduced R
this : FiniteDimensional K R
⊢ f.IsSemisimple
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝¹ : IsReduced R
this✝ : FiniteDimensional K R
this : IsArtinianRing R
⊢ f.IsSemisimple

tactic: have : IsSemisimpleRing R := IsArtinianRing.isSemisimpleRing_of_isReduced R
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝¹ : IsReduced R
this✝ : FiniteDimensional K R
this : IsArtinianRing R
⊢ f.IsSemisimple
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝² : IsReduced R
this✝¹ : FiniteDimensional K R
this✝ : IsArtinianRing R
this : IsSemisimpleRing R
⊢ f.IsSemisimple

tactic: letI : Module R (AEval' f) := Module.IsTorsionBySet.module hpf
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝² : IsReduced R
this✝¹ : FiniteDimensional K R
this✝ : IsArtinianRing R
this : IsSemisimpleRing R
⊢ f.IsSemisimple
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝³ : IsReduced R
this✝² : FiniteDimensional K R
this✝¹ : IsArtinianRing R
this✝ : IsSemisimpleRing R
this : Module R (AEval' f) := hpf.module
⊢ f.IsSemisimple

tactic: let e : AEval' f →ₛₗ[Ideal.Quotient.mk (Ideal.span {p})] AEval' f :=
  { AddMonoidHom.id _ with map_smul' := fun _ _ ↦ rfl }
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝³ : IsReduced R
this✝² : FiniteDimensional K R
this✝¹ : IsArtinianRing R
this✝ : IsSemisimpleRing R
this : Module R (AEval' f) := hpf.module
⊢ f.IsSemisimple
state_after: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝³ : IsReduced R
this✝² : FiniteDimensional K R
this✝¹ : IsArtinianRing R
this✝ : IsSemisimpleRing R
this : Module R (AEval' f) := hpf.module
e : AEval' f →ₛₗ[Ideal.Quotient.mk (Ideal.span {p})] AEval' f :=
  let __src := AddMonoidHom.id (AEval' f);
  { toFun := (↑__src).toFun, map_add' := ⋯, map_smul' := ⋯ }
⊢ f.IsSemisimple

tactic: exact (e.isSemisimpleModule_iff_of_bijective bijective_id).mpr inferInstance
state_before: R✝ : Type u_1
M : Type u_2
inst✝⁴ : CommRing R✝
inst✝³ : AddCommGroup M
inst✝² : Module R✝ M
K : Type u_3
inst✝¹ : Field K
inst✝ : Module K M
f g : End K M
p : K[X]
hp : Squarefree p
hpf : IsTorsionBySet K[X] (AEval K M f) ↑(Ideal.span {p})
R : Type u_3 := K[X] ⧸ Ideal.span {p}
this✝³ : IsReduced R
this✝² : FiniteDimensional K R
this✝¹ : IsArtinianRing R
this✝ : IsSemisimpleRing R
this : Module R (AEval' f) := hpf.module
e : AEval' f →ₛₗ[Ideal.Quotient.mk (Ideal.span {p})] AEval' f :=
  let __src := AddMonoidHom.id (AEval' f);
  { toFun := (↑__src).toFun, map_add' := ⋯, map_smul' := ⋯ }
⊢ f.IsSemisimple
state_after: no goals