Theorem: Module.End.IsSemisimple.restrict
File: Mathlib/LinearAlgebra/Semisimple.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : f.IsSemisimple
⊢ IsSemisimple (LinearMap.restrict f hp)
state_after: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
⊢ ∀ p_1 ≤ Submodule.comap (LinearMap.restrict f hp) p_1,
    ∃ q ≤ Submodule.comap (LinearMap.restrict f hp) q, IsCompl p_1 q
tactic: simp only [isSemisimple_iff] at hf ⊢
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
⊢ ∀ p_1 ≤ Submodule.comap (LinearMap.restrict f hp) p_1,
    ∃ q ≤ Submodule.comap (LinearMap.restrict f hp) q, IsCompl p_1 q
state_after: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : q ≤ Submodule.comap (LinearMap.restrict f hp) q
⊢ ∃ q_1 ≤ Submodule.comap (LinearMap.restrict f hp) q_1, IsCompl q q_1
tactic: intro q hq
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : q ≤ Submodule.comap (LinearMap.restrict f hp) q
⊢ ∃ q_1 ≤ Submodule.comap (LinearMap.restrict f hp) q_1, IsCompl q q_1
state_after: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : MapsTo ⇑f ↑(Submodule.map p.subtype q) ↑(Submodule.map p.subtype q)
⊢ ∃ q_1 ≤ Submodule.comap (LinearMap.restrict f hp) q_1, IsCompl q q_1
tactic: replace hq : MapsTo f (q.map p.subtype) (q.map p.subtype) := by
    rintro - ⟨⟨x, hx⟩, hx', rfl⟩; exact ⟨⟨f x, hp hx⟩, by simpa using hq hx', rfl⟩
state_before: R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : MapsTo ⇑f ↑(Submodule.map p.subtype q) ↑(Submodule.map p.subtype q)
⊢ ∃ q_1 ≤ Submodule.comap (LinearMap.restrict f hp) q_1, IsCompl q q_1
state_after: case intro.intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : MapsTo ⇑f ↑(Submodule.map p.subtype q) ↑(Submodule.map p.subtype q)
r : Submodule R M
hr₁ : r ≤ Submodule.comap f r
hr₂ : IsCompl (Submodule.map p.subtype q) r
⊢ ∃ q_1 ≤ Submodule.comap (LinearMap.restrict f hp) q_1, IsCompl q q_1
tactic: obtain ⟨r, hr₁, hr₂⟩ := hf _ hq
state_before: case intro.intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : MapsTo ⇑f ↑(Submodule.map p.subtype q) ↑(Submodule.map p.subtype q)
r : Submodule R M
hr₁ : r ≤ Submodule.comap f r
hr₂ : IsCompl (Submodule.map p.subtype q) r
⊢ ∃ q_1 ≤ Submodule.comap (LinearMap.restrict f hp) q_1, IsCompl q q_1
state_after: case intro.intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : MapsTo ⇑f ↑(Submodule.map p.subtype q) ↑(Submodule.map p.subtype q)
r : Submodule R M
hr₁ : r ≤ Submodule.comap f r
hr₂ : IsCompl (Submodule.map p.subtype q) r
⊢ IsCompl q (Submodule.comap p.subtype r)
tactic: refine ⟨r.comap p.subtype, fun x hx ↦ hr₁ hx, ?_⟩
state_before: case intro.intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : MapsTo ⇑f ↑(Submodule.map p.subtype q) ↑(Submodule.map p.subtype q)
r : Submodule R M
hr₁ : r ≤ Submodule.comap f r
hr₂ : IsCompl (Submodule.map p.subtype q) r
⊢ IsCompl q (Submodule.comap p.subtype r)
state_after: case intro.intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : MapsTo ⇑f ↑(Submodule.map p.subtype q) ↑(Submodule.map p.subtype q)
r : Submodule R M
hr₁ : r ≤ Submodule.comap f r
hr₂ : IsCompl (Submodule.map p.subtype q) r
⊢ IsCompl (Submodule.comap p.subtype (Submodule.map p.subtype q)) (Submodule.comap p.subtype r)
tactic: rw [← q.comap_map_eq_of_injective p.injective_subtype]
state_before: case intro.intro
R : Type u_1
M : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
f g : End R M
p : Submodule R M
hp : MapsTo ⇑f ↑p ↑p
hf : ∀ p ≤ Submodule.comap f p, ∃ q ≤ Submodule.comap f q, IsCompl p q
q : Submodule R ↥p
hq : MapsTo ⇑f ↑(Submodule.map p.subtype q) ↑(Submodule.map p.subtype q)
r : Submodule R M
hr₁ : r ≤ Submodule.comap f r
hr₂ : IsCompl (Submodule.map p.subtype q) r
⊢ IsCompl (Submodule.comap p.subtype (Submodule.map p.subtype q)) (Submodule.comap p.subtype r)
state_after: no goals
tactic: exact p.isCompl_comap_subtype_of_isCompl_of_le hr₂ <| p.map_subtype_le q