Theorem: LinearMap.splittingOfFinsuppSurjective_splits
File: Mathlib/LinearAlgebra/Finsupp.lean

tactic: refine lhom_ext' fun x => ext_ring <| Finsupp.ext fun y => ?_
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
⊢ f ∘ₗ f.splittingOfFinsuppSurjective s = id
state_after: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ (((f ∘ₗ f.splittingOfFinsuppSurjective s) ∘ₗ lsingle x) 1) y = ((id ∘ₗ lsingle x) 1) y

tactic: dsimp [splittingOfFinsuppSurjective]
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ (((f ∘ₗ f.splittingOfFinsuppSurjective s) ∘ₗ lsingle x) 1) y = ((id ∘ₗ lsingle x) 1) y
state_after: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ (f ((Finsupp.single x 1).sum fun x r => r • ⋯.choose)) y = (Finsupp.single x 1) y

tactic: congr
state_before: R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ (f ((Finsupp.single x 1).sum fun x r => r • ⋯.choose)) y = (Finsupp.single x 1) y
state_after: case e_a
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ f ((Finsupp.single x 1).sum fun x r => r • ⋯.choose) = Finsupp.single x 1

tactic: rw [sum_single_index, one_smul]
state_before: case e_a
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ f ((Finsupp.single x 1).sum fun x r => r • ⋯.choose) = Finsupp.single x 1
state_after: case e_a
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ f ⋯.choose = Finsupp.single x 1

case e_a
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ 0 • ⋯.choose = 0

tactic: exact (s (Finsupp.single x 1)).choose_spec
state_before: case e_a
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ f ⋯.choose = Finsupp.single x 1
state_after: no goals

tactic: rw [zero_smul]
state_before: case e_a
R : Type u_1
M : Type u_2
N : Type u_3
inst✝⁴ : Semiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
inst✝¹ : AddCommMonoid N
inst✝ : Module R N
α : Type u_4
f : M →ₗ[R] α →₀ R
s : Surjective ⇑f
x y : α
⊢ 0 • ⋯.choose = 0
state_after: no goals