Theorem: LinearMap.trace_eq_sum_trace_restrict_of_eq_biSup
File: Mathlib/Algebra/DirectSum/LinearMap.lean

tactic: classical
let N' : s → Submodule R p := fun i ↦ (N i).comap p.subtype
replace h : IsInternal N' := hp ▸ isInternal_biSup_submodule_of_independent (s : Set ι) h
have hf' : ∀ i, MapsTo (restrict f hp') (N' i) (N' i) := fun i x hx' ↦ by simpa using hf i hx'
let e : (i : s) → N' i ≃ₗ[R] N i := fun ⟨i, hi⟩ ↦ (N i).comapSubtypeEquivOfLe (hp ▸ le_biSup N hi)
have _i1 : ∀ i, Module.Finite R (N' i) := fun i ↦ Module.Finite.equiv (e i).symm
have _i2 : ∀ i, Module.Free R (N' i) := fun i ↦ Module.Free.of_equiv (e i).symm
rw [trace_eq_sum_trace_restrict h hf', ← s.sum_coe_sort]
have : ∀ i : s, f.restrict (hf i) = (e i).conj ((f.restrict hp').restrict (hf' i)) := fun _ ↦ rfl
simp [this]
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
h : CompleteLattice.Independent fun i => N ↑i
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)
state_after: no goals

tactic: let N' : s → Submodule R p := fun i ↦ (N i).comap p.subtype
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
h : CompleteLattice.Independent fun i => N ↑i
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
h : CompleteLattice.Independent fun i => N ↑i
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)

tactic: replace h : IsInternal N' := hp ▸ isInternal_biSup_submodule_of_independent (s : Set ι) h
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
h : CompleteLattice.Independent fun i => N ↑i
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)

tactic: have hf' : ∀ i, MapsTo (restrict f hp') (N' i) (N' i) := fun i x hx' ↦ by simpa using hf i hx'
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)

tactic: let e : (i : s) → N' i ≃ₗ[R] N i := fun ⟨i, hi⟩ ↦ (N i).comapSubtypeEquivOfLe (hp ▸ le_biSup N hi)
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)

tactic: have _i1 : ∀ i, Module.Finite R (N' i) := fun i ↦ Module.Finite.equiv (e i).symm
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
_i1 : ∀ (i : { x // x ∈ s }), Module.Finite R ↥(N' i)
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)

tactic: have _i2 : ∀ i, Module.Free R (N' i) := fun i ↦ Module.Free.of_equiv (e i).symm
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
_i1 : ∀ (i : { x // x ∈ s }), Module.Finite R ↥(N' i)
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
_i1 : ∀ (i : { x // x ∈ s }), Module.Finite R ↥(N' i)
_i2 : ∀ (i : { x // x ∈ s }), Module.Free R ↥(N' i)
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)

tactic: rw [trace_eq_sum_trace_restrict h hf', ← s.sum_coe_sort]
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
_i1 : ∀ (i : { x // x ∈ s }), Module.Finite R ↥(N' i)
_i2 : ∀ (i : { x // x ∈ s }), Module.Free R ↥(N' i)
⊢ (trace R ↥p) (restrict f hp') = ∑ i ∈ s, (trace R ↥(N i)) (restrict f ⋯)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
_i1 : ∀ (i : { x // x ∈ s }), Module.Finite R ↥(N' i)
_i2 : ∀ (i : { x // x ∈ s }), Module.Free R ↥(N' i)
⊢ ∑ i : { x // x ∈ s }, (trace R ↥(N' i)) ((restrict f hp').restrict ⋯) =
    ∑ i : { x // x ∈ s }, (trace R ↥(N ↑i)) (restrict f ⋯)

tactic: have : ∀ i : s, f.restrict (hf i) = (e i).conj ((f.restrict hp').restrict (hf' i)) := fun _ ↦ rfl
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
_i1 : ∀ (i : { x // x ∈ s }), Module.Finite R ↥(N' i)
_i2 : ∀ (i : { x // x ∈ s }), Module.Free R ↥(N' i)
⊢ ∑ i : { x // x ∈ s }, (trace R ↥(N' i)) ((restrict f hp').restrict ⋯) =
    ∑ i : { x // x ∈ s }, (trace R ↥(N ↑i)) (restrict f ⋯)
state_after: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
_i1 : ∀ (i : { x // x ∈ s }), Module.Finite R ↥(N' i)
_i2 : ∀ (i : { x // x ∈ s }), Module.Free R ↥(N' i)
this : ∀ (i : { x // x ∈ s }), restrict f ⋯ = (e i).conj ((restrict f hp').restrict ⋯)
⊢ ∑ i : { x // x ∈ s }, (trace R ↥(N' i)) ((restrict f hp').restrict ⋯) =
    ∑ i : { x // x ∈ s }, (trace R ↥(N ↑i)) (restrict f ⋯)

tactic: simp [this]
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
hf' : ∀ (i : { x // x ∈ s }), MapsTo ⇑(restrict f hp') ↑(N' i) ↑(N' i)
e : (i : { x // x ∈ s }) → ↥(N' i) ≃ₗ[R] ↥(N ↑i) :=
  fun x =>
    match x with
    | ⟨i, hi⟩ => Submodule.comapSubtypeEquivOfLe ⋯
_i1 : ∀ (i : { x // x ∈ s }), Module.Finite R ↥(N' i)
_i2 : ∀ (i : { x // x ∈ s }), Module.Free R ↥(N' i)
this : ∀ (i : { x // x ∈ s }), restrict f ⋯ = (e i).conj ((restrict f hp').restrict ⋯)
⊢ ∑ i : { x // x ∈ s }, (trace R ↥(N' i)) ((restrict f hp').restrict ⋯) =
    ∑ i : { x // x ∈ s }, (trace R ↥(N ↑i)) (restrict f ⋯)
state_after: no goals

tactic: simpa using hf i hx'
state_before: ι : Type u_1
R : Type u_2
M : Type u_3
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
N : ι → Submodule R M
inst✝¹ : ∀ (i : ι), Module.Finite R ↥(N i)
inst✝ : ∀ (i : ι), Module.Free R ↥(N i)
s : Finset ι
f : Module.End R M
hf : ∀ (i : ι), MapsTo ⇑f ↑(N i) ↑(N i)
p : Submodule R M
hp : p = ⨆ i ∈ s, N i
hp' : optParam (MapsTo ⇑f ↑p ↑p) ⋯
N' : { x // x ∈ s } → Submodule R ↥p := fun i => Submodule.comap p.subtype (N ↑i)
h : IsInternal N'
i : { x // x ∈ s }
x : ↥p
hx' : x ∈ ↑(N' i)
⊢ (restrict f hp') x ∈ ↑(N' i)
state_after: no goals