Theorem: Module.Projective.of_split
File: Mathlib/Algebra/Module/Projective.lean

tactic: obtain ⟨g, hg⟩ := projective_lifting_property (Finsupp.total P P R id) s
  (fun x ↦ ⟨Finsupp.single x 1, by simp⟩)
state_before: R : Type u
inst✝¹¹ : Ring R
P : Type v
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : Module R P
R₀ : Type ?u.49289
M : Type u_1
N : Type ?u.52581
inst✝⁸ : CommRing R₀
inst✝⁷ : Algebra R₀ R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R₀ M
inst✝⁴ : Module R M
inst✝³ : IsScalarTower R₀ R M
inst✝² : AddCommGroup N
inst✝¹ : Module R₀ N
inst✝ : Projective R M
i : P →ₗ[R] M
s : M →ₗ[R] P
H : s ∘ₗ i = LinearMap.id
⊢ Projective R P
state_after: case intro
R : Type u
inst✝¹¹ : Ring R
P : Type v
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : Module R P
R₀ : Type ?u.49289
M : Type u_1
N : Type ?u.52581
inst✝⁸ : CommRing R₀
inst✝⁷ : Algebra R₀ R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R₀ M
inst✝⁴ : Module R M
inst✝³ : IsScalarTower R₀ R M
inst✝² : AddCommGroup N
inst✝¹ : Module R₀ N
inst✝ : Projective R M
i : P →ₗ[R] M
s : M →ₗ[R] P
H : s ∘ₗ i = LinearMap.id
g : M →ₗ[R] P →₀ R
hg : Finsupp.total P P R id ∘ₗ g = s
⊢ Projective R P

tactic: refine ⟨g.comp i, fun x ↦ ?_⟩
state_before: case intro
R : Type u
inst✝¹¹ : Ring R
P : Type v
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : Module R P
R₀ : Type ?u.49289
M : Type u_1
N : Type ?u.52581
inst✝⁸ : CommRing R₀
inst✝⁷ : Algebra R₀ R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R₀ M
inst✝⁴ : Module R M
inst✝³ : IsScalarTower R₀ R M
inst✝² : AddCommGroup N
inst✝¹ : Module R₀ N
inst✝ : Projective R M
i : P →ₗ[R] M
s : M →ₗ[R] P
H : s ∘ₗ i = LinearMap.id
g : M →ₗ[R] P →₀ R
hg : Finsupp.total P P R id ∘ₗ g = s
⊢ Projective R P
state_after: case intro
R : Type u
inst✝¹¹ : Ring R
P : Type v
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : Module R P
R₀ : Type ?u.49289
M : Type u_1
N : Type ?u.52581
inst✝⁸ : CommRing R₀
inst✝⁷ : Algebra R₀ R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R₀ M
inst✝⁴ : Module R M
inst✝³ : IsScalarTower R₀ R M
inst✝² : AddCommGroup N
inst✝¹ : Module R₀ N
inst✝ : Projective R M
i : P →ₗ[R] M
s : M →ₗ[R] P
H : s ∘ₗ i = LinearMap.id
g : M →ₗ[R] P →₀ R
hg : Finsupp.total P P R id ∘ₗ g = s
x : P
⊢ (Finsupp.total P P R id) ((g ∘ₗ i) x) = x

tactic: rw [LinearMap.comp_apply, ← LinearMap.comp_apply, hg,
  ← LinearMap.comp_apply, H, LinearMap.id_apply]
state_before: case intro
R : Type u
inst✝¹¹ : Ring R
P : Type v
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : Module R P
R₀ : Type ?u.49289
M : Type u_1
N : Type ?u.52581
inst✝⁸ : CommRing R₀
inst✝⁷ : Algebra R₀ R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R₀ M
inst✝⁴ : Module R M
inst✝³ : IsScalarTower R₀ R M
inst✝² : AddCommGroup N
inst✝¹ : Module R₀ N
inst✝ : Projective R M
i : P →ₗ[R] M
s : M →ₗ[R] P
H : s ∘ₗ i = LinearMap.id
g : M →ₗ[R] P →₀ R
hg : Finsupp.total P P R id ∘ₗ g = s
x : P
⊢ (Finsupp.total P P R id) ((g ∘ₗ i) x) = x
state_after: no goals

tactic: simp
state_before: R : Type u
inst✝¹¹ : Ring R
P : Type v
inst✝¹⁰ : AddCommGroup P
inst✝⁹ : Module R P
R₀ : Type ?u.49289
M : Type u_1
N : Type ?u.52581
inst✝⁸ : CommRing R₀
inst✝⁷ : Algebra R₀ R
inst✝⁶ : AddCommGroup M
inst✝⁵ : Module R₀ M
inst✝⁴ : Module R M
inst✝³ : IsScalarTower R₀ R M
inst✝² : AddCommGroup N
inst✝¹ : Module R₀ N
inst✝ : Projective R M
i : P →ₗ[R] M
s : M →ₗ[R] P
H : s ∘ₗ i = LinearMap.id
x : P
⊢ (Finsupp.total P P R id) (Finsupp.single x 1) = x
state_after: no goals