Theorem: MonoidAlgebra.exists_leftInverse_of_injective
File: Mathlib/RepresentationTheory/Maschke.lean

tactic: let A := MonoidAlgebra k G
state_before: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
⊢ ∃ g, g ∘ₗ f = LinearMap.id
state_after: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
⊢ ∃ g, g ∘ₗ f = LinearMap.id

tactic: letI : Module k W := .compHom W (algebraMap k A)
state_before: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
⊢ ∃ g, g ∘ₗ f = LinearMap.id
state_after: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this : Module k W := Module.compHom W (algebraMap k A)
⊢ ∃ g, g ∘ₗ f = LinearMap.id

tactic: letI : Module k V := .compHom V (algebraMap k A)
state_before: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this : Module k W := Module.compHom W (algebraMap k A)
⊢ ∃ g, g ∘ₗ f = LinearMap.id
state_after: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝ : Module k W := Module.compHom W (algebraMap k A)
this : Module k V := Module.compHom V (algebraMap k A)
⊢ ∃ g, g ∘ₗ f = LinearMap.id

tactic: have := IsScalarTower.of_compHom k A W
state_before: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝ : Module k W := Module.compHom W (algebraMap k A)
this : Module k V := Module.compHom V (algebraMap k A)
⊢ ∃ g, g ∘ₗ f = LinearMap.id
state_after: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝¹ : Module k W := Module.compHom W (algebraMap k A)
this✝ : Module k V := Module.compHom V (algebraMap k A)
this : IsScalarTower k A W
⊢ ∃ g, g ∘ₗ f = LinearMap.id

tactic: have := IsScalarTower.of_compHom k A V
state_before: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝¹ : Module k W := Module.compHom W (algebraMap k A)
this✝ : Module k V := Module.compHom V (algebraMap k A)
this : IsScalarTower k A W
⊢ ∃ g, g ∘ₗ f = LinearMap.id
state_after: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝² : Module k W := Module.compHom W (algebraMap k A)
this✝¹ : Module k V := Module.compHom V (algebraMap k A)
this✝ : IsScalarTower k A W
this : IsScalarTower k A V
⊢ ∃ g, g ∘ₗ f = LinearMap.id

tactic: obtain ⟨φ, hφ⟩ := (f.restrictScalars k).exists_leftInverse_of_injective <| by
  simp only [hf, Submodule.restrictScalars_bot, LinearMap.ker_restrictScalars]
state_before: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝² : Module k W := Module.compHom W (algebraMap k A)
this✝¹ : Module k V := Module.compHom V (algebraMap k A)
this✝ : IsScalarTower k A W
this : IsScalarTower k A V
⊢ ∃ g, g ∘ₗ f = LinearMap.id
state_after: case intro
k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝² : Module k W := Module.compHom W (algebraMap k A)
this✝¹ : Module k V := Module.compHom V (algebraMap k A)
this✝ : IsScalarTower k A W
this : IsScalarTower k A V
φ : W →ₗ[k] V
hφ : φ ∘ₗ ↑k f = LinearMap.id
⊢ ∃ g, g ∘ₗ f = LinearMap.id

tactic: refine ⟨φ.equivariantProjection G, DFunLike.ext _ _ ?_⟩
state_before: case intro
k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝² : Module k W := Module.compHom W (algebraMap k A)
this✝¹ : Module k V := Module.compHom V (algebraMap k A)
this✝ : IsScalarTower k A W
this : IsScalarTower k A V
φ : W →ₗ[k] V
hφ : φ ∘ₗ ↑k f = LinearMap.id
⊢ ∃ g, g ∘ₗ f = LinearMap.id
state_after: case intro
k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝² : Module k W := Module.compHom W (algebraMap k A)
this✝¹ : Module k V := Module.compHom V (algebraMap k A)
this✝ : IsScalarTower k A W
this : IsScalarTower k A V
φ : W →ₗ[k] V
hφ : φ ∘ₗ ↑k f = LinearMap.id
⊢ ∀ (x : V), (LinearMap.equivariantProjection G φ ∘ₗ f) x = LinearMap.id x

tactic: exact φ.equivariantProjection_condition G _ <| DFunLike.congr_fun hφ
state_before: case intro
k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝² : Module k W := Module.compHom W (algebraMap k A)
this✝¹ : Module k V := Module.compHom V (algebraMap k A)
this✝ : IsScalarTower k A W
this : IsScalarTower k A V
φ : W →ₗ[k] V
hφ : φ ∘ₗ ↑k f = LinearMap.id
⊢ ∀ (x : V), (LinearMap.equivariantProjection G φ ∘ₗ f) x = LinearMap.id x
state_after: no goals

tactic: simp only [hf, Submodule.restrictScalars_bot, LinearMap.ker_restrictScalars]
state_before: k : Type u
inst✝⁷ : Field k
G : Type u
inst✝⁶ : Fintype G
inst✝⁵ : Invertible ↑(Fintype.card G)
inst✝⁴ : Group G
V : Type u
inst✝³ : AddCommGroup V
inst✝² : Module (MonoidAlgebra k G) V
W : Type u
inst✝¹ : AddCommGroup W
inst✝ : Module (MonoidAlgebra k G) W
f : V →ₗ[MonoidAlgebra k G] W
hf : LinearMap.ker f = ⊥
A : Type u := MonoidAlgebra k G
this✝² : Module k W := Module.compHom W (algebraMap k A)
this✝¹ : Module k V := Module.compHom V (algebraMap k A)
this✝ : IsScalarTower k A W
this : IsScalarTower k A V
⊢ LinearMap.ker (↑k f) = ⊥
state_after: no goals