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

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)
⊢ 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 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
⊢ 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: 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)
⊢ 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, 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
⊢ 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, 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)
⊢ 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: exact isSemisimpleModule_of_isSemisimpleModule_submodule hp₁ hp₂
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: 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)
i : ι
hi : i ∈ s
⊢ p i ≤ LinearMap.range q.subtype
state_after: no goals

tactic: let e : p' i ≃ₗ[R] p i := (p i).comap_equiv_self_of_inj_of_le q.injective_subtype (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
i : ι
hi : i ∈ s
⊢ IsSemisimpleModule R ↥(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
i : ι
hi : i ∈ s
e : ↥(p' i) ≃ₗ[R] ↥(p i) := Submodule.comap_equiv_self_of_inj_of_le ⋯ ⋯
⊢ IsSemisimpleModule R ↥(p' i)

tactic: 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
i : ι
hi : i ∈ s
e : ↥(p' i) ≃ₗ[R] ↥(p i) := Submodule.comap_equiv_self_of_inj_of_le ⋯ ⋯
⊢ IsSemisimpleModule R ↥(p' i)
state_after: no goals

tactic: apply Submodule.map_injective_of_injective q.injective_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)
hp₀ : ∀ i ∈ s, p i ≤ LinearMap.range q.subtype
hp₁ : ∀ i ∈ s, IsSemisimpleModule R ↥(p' i)
⊢ ⨆ i ∈ s, p' i = ⊤
state_after: case a
ι : 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)
⊢ Submodule.map q.subtype (⨆ i ∈ s, p' i) = Submodule.map q.subtype ⊤

tactic: simp_rw [Submodule.map_top, Submodule.range_subtype, Submodule.map_iSup]
state_before: case a
ι : 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)
⊢ Submodule.map q.subtype (⨆ i ∈ s, p' i) = Submodule.map q.subtype ⊤
state_after: case a
ι : 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)
⊢ ⨆ i ∈ s, Submodule.map q.subtype (p' i) = q

tactic: exact biSup_congr fun i hi ↦ Submodule.map_comap_eq_of_le (hp₀ i hi)
state_before: case a
ι : 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)
⊢ ⨆ i ∈ s, Submodule.map q.subtype (p' i) = q
state_after: no goals