Module docstring
{"# Properties of the module α →₀ M
Finsupp.linearEquivFunOnFinite:α →₀ βanda → βare equivalent ifαis finite
Tags
function with finite support, module, linear algebra "}
{"# Properties of the module α →₀ M
Finsupp.linearEquivFunOnFinite: α →₀ β and a → β are equivalent if α is finitefunction with finite support, module, linear algebra "}
Finsupp.LinearEquiv.finsuppUnique
      definition
     : (α →₀ M) ≃ₗ[R] M
        /-- If `α` has a unique term, then the type of finitely supported functions `α →₀ M` is
`R`-linearly equivalent to `M`. -/
noncomputable def LinearEquiv.finsuppUnique : (α →₀ M) ≃ₗ[R] M :=
  { Finsupp.equivFunOnFinite.trans (Equiv.funUnique α M) with
    map_add' := fun _ _ => rfl
    map_smul' := fun _ _ => rfl }
        Finsupp.LinearEquiv.finsuppUnique_apply
      theorem
     (f : α →₀ M) : LinearEquiv.finsuppUnique R M α f = f default
        @[simp]
theorem LinearEquiv.finsuppUnique_apply (f : α →₀ M) :
    LinearEquiv.finsuppUnique R M α f = f default :=
  rfl
        Finsupp.LinearEquiv.finsuppUnique_symm_apply
      theorem
     (m : M) : (LinearEquiv.finsuppUnique R M α).symm m = Finsupp.single default m
        @[simp]
theorem LinearEquiv.finsuppUnique_symm_apply (m : M) :
    (LinearEquiv.finsuppUnique R M α).symm m = Finsupp.single default m := by
  ext; simp [LinearEquiv.finsuppUnique, Equiv.funUnique, single, Pi.single,
    equivFunOnFinite, Function.update]
        Finsupp.lcoeFun
      definition
     : (α →₀ M) →ₗ[R] α → M
        /-- Forget that a function is finitely supported.
This is the linear version of `Finsupp.toFun`. -/
@[simps]
def lcoeFun : (α →₀ M) →ₗ[R] α → M where
  toFun := (⇑)
  map_add' x y := by
    ext
    simp
  map_smul' x y := by
    ext
    simp
        LinearMap.splittingOfFunOnFintypeSurjective
      definition
     [Finite α] (f : M →ₗ[R] α → R) (s : Surjective f) : (α → R) →ₗ[R] M
        /-- A surjective linear map to functions on a finite type has a splitting. -/
def splittingOfFunOnFintypeSurjective [Finite α] (f : M →ₗ[R] α → R) (s : Surjective f) :
    (α → R) →ₗ[R] M :=
  (Finsupp.lift _ _ _ fun x : α => (s (Finsupp.single x 1)).choose).comp
    (linearEquivFunOnFinite R R α).symm.toLinearMap
        LinearMap.splittingOfFunOnFintypeSurjective_splits
      theorem
     [Finite α] (f : M →ₗ[R] α → R) (s : Surjective f) : f.comp (splittingOfFunOnFintypeSurjective f s) = LinearMap.id
        theorem splittingOfFunOnFintypeSurjective_splits [Finite α] (f : M →ₗ[R] α → R)
    (s : Surjective f) : f.comp (splittingOfFunOnFintypeSurjective f s) = LinearMap.id := by
  classical
  ext x y
  dsimp [splittingOfFunOnFintypeSurjective]
  rw [linearEquivFunOnFinite_symm_single, Finsupp.sum_single_index, one_smul,
    (s (Finsupp.single x 1)).choose_spec, Finsupp.single_eq_pi_single]
  rw [zero_smul]
        LinearMap.leftInverse_splittingOfFunOnFintypeSurjective
      theorem
     [Finite α] (f : M →ₗ[R] α → R) (s : Surjective f) : LeftInverse f (splittingOfFunOnFintypeSurjective f s)
        theorem leftInverse_splittingOfFunOnFintypeSurjective [Finite α] (f : M →ₗ[R] α → R)
    (s : Surjective f) : LeftInverse f (splittingOfFunOnFintypeSurjective f s) := fun g =>
  LinearMap.congr_fun (splittingOfFunOnFintypeSurjective_splits f s) g
        LinearMap.splittingOfFunOnFintypeSurjective_injective
      theorem
     [Finite α] (f : M →ₗ[R] α → R) (s : Surjective f) : Injective (splittingOfFunOnFintypeSurjective f s)
        theorem splittingOfFunOnFintypeSurjective_injective [Finite α] (f : M →ₗ[R] α → R)
    (s : Surjective f) : Injective (splittingOfFunOnFintypeSurjective f s) :=
  (leftInverse_splittingOfFunOnFintypeSurjective f s).injective