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

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 : 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: 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
⊢ ∀ 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: 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 : 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: obtain ⟨r, hr₁, hr₂⟩ := hf _ 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 : 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: 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
⊢ ∃ 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: 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 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: exact p.isCompl_comap_subtype_of_isCompl_of_le hr₂ <| p.map_subtype_le q
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: rintro - ⟨⟨x, hx⟩, 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 : q ≤ Submodule.comap (LinearMap.restrict f hp) q
⊢ MapsTo ⇑f ↑(Submodule.map p.subtype q) ↑(Submodule.map p.subtype q)
state_after: case intro.mk.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 : q ≤ Submodule.comap (LinearMap.restrict f hp) q
x : M
hx : x ∈ p
hx' : ⟨x, hx⟩ ∈ ↑q
⊢ f (p.subtype ⟨x, hx⟩) ∈ ↑(Submodule.map p.subtype q)

tactic: exact ⟨⟨f x, hp hx⟩, by simpa using hq hx', rfl⟩
state_before: case intro.mk.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 : q ≤ Submodule.comap (LinearMap.restrict f hp) q
x : M
hx : x ∈ p
hx' : ⟨x, hx⟩ ∈ ↑q
⊢ f (p.subtype ⟨x, hx⟩) ∈ ↑(Submodule.map p.subtype q)
state_after: no goals

tactic: simpa using hq hx'
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
x : M
hx : x ∈ p
hx' : ⟨x, hx⟩ ∈ ↑q
⊢ ⟨f x, ⋯⟩ ∈ ↑q
state_after: no goals