Theorem: isSemisimpleModule_biSup_of_isSemisimpleModule_submodule
File: Mathlib/RingTheory/SimpleModule.lean

Proof steps:
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
state_after: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
tactic: let q := ⨆ i ∈ s, p i
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
state_after: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
p' : ι → Submodule R ↥q := fun i => Submodule.comap q.subtype (p i)
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
tactic: let p' : ι → Submodule R q := fun i ↦ (p i).comap q.subtype
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
p' : ι → Submodule R ↥q := fun i => Submodule.comap q.subtype (p i)
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
state_after: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
p' : ι → Submodule R ↥q := fun i => Submodule.comap q.subtype (p i)
hp₀ : ∀ i ∈ s, p i ≤ LinearMap.range q.subtype
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
tactic: have hp₀ : ∀ i ∈ s, p i ≤ LinearMap.range q.subtype := fun i hi ↦ by
    simpa only [Submodule.range_subtype] using le_biSup _ hi
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
p' : ι → Submodule R ↥q := fun i => Submodule.comap q.subtype (p i)
hp₀ : ∀ i ∈ s, p i ≤ LinearMap.range q.subtype
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
state_after: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
p' : ι → Submodule R ↥q := fun i => Submodule.comap q.subtype (p i)
hp₀ : ∀ i ∈ s, p i ≤ LinearMap.range q.subtype
hp₁ : ∀ i ∈ s, IsSemisimpleModule R ↥(p' i)
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
tactic: have hp₁ : ∀ i ∈ s, IsSemisimpleModule R (p' i) := fun i hi ↦ by
    let e : p' i ≃ₗ[R] p i := (p i).comap_equiv_self_of_inj_of_le q.injective_subtype (hp₀ i hi)
    exact (Submodule.orderIsoMapComap e).complementedLattice_iff.mpr <| hp i hi
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
p' : ι → Submodule R ↥q := fun i => Submodule.comap q.subtype (p i)
hp₀ : ∀ i ∈ s, p i ≤ LinearMap.range q.subtype
hp₁ : ∀ i ∈ s, IsSemisimpleModule R ↥(p' i)
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
state_after: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
p' : ι → Submodule R ↥q := fun i => Submodule.comap q.subtype (p i)
hp₀ : ∀ i ∈ s, p i ≤ LinearMap.range q.subtype
hp₁ : ∀ i ∈ s, IsSemisimpleModule R ↥(p' i)
hp₂ : ⨆ i ∈ s, p' i = ⊤
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
tactic: have hp₂ : ⨆ i ∈ s, p' i = ⊤ := by
    apply Submodule.map_injective_of_injective q.injective_subtype
    simp_rw [Submodule.map_top, Submodule.range_subtype, Submodule.map_iSup]
    exact biSup_congr fun i hi ↦ Submodule.map_comap_eq_of_le (hp₀ i hi)
state_before: ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁵ : Ring R
inst✝⁴ : Ring S
M : Type u_4
inst✝³ : AddCommGroup M
inst✝² : Module R M
m : Submodule R M
N : Type u_5
inst✝¹ : AddCommGroup N
inst✝ : Module R N
s : Set ι
p : ι → Submodule R M
hp : ∀ i ∈ s, IsSemisimpleModule R ↥(p i)
q : Submodule R M := ⨆ i ∈ s, p i
p' : ι → Submodule R ↥q := fun i => Submodule.comap q.subtype (p i)
hp₀ : ∀ i ∈ s, p i ≤ LinearMap.range q.subtype
hp₁ : ∀ i ∈ s, IsSemisimpleModule R ↥(p' i)
hp₂ : ⨆ i ∈ s, p' i = ⊤
⊢ IsSemisimpleModule R ↥(⨆ i ∈ s, p i)
state_after: no goals
tactic: exact isSemisimpleModule_of_isSemisimpleModule_submodule hp₁ hp₂