Documentation

Mathlib.LinearAlgebra.Multilinear.DFinsupp

Interactions between finitely-supported functions and multilinear maps #

Main definitions #

theorem MultilinearMap.dfinsupp_ext {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : Type uN} [Finite ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [AddCommMonoid N] [(i : ι) → (k : κ i) → Module R (M i k)] [Module R N] [(i : ι) → DecidableEq (κ i)] f g : MultilinearMap R (fun (i : ι) => Π₀ (j : κ i), M i j) N (h : ∀ (p : (i : ι) → κ i), (f.compLinearMap fun (i : ι) => DFinsupp.lsingle (p i)) = g.compLinearMap fun (i : ι) => DFinsupp.lsingle (p i)) :
f = g

Two multilinear maps from finitely supported functions are equal if they agree on the generators.

This is a multilinear version of DFinsupp.lhom_ext'.

theorem MultilinearMap.dfinsupp_ext_iff {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : Type uN} [Finite ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [AddCommMonoid N] [(i : ι) → (k : κ i) → Module R (M i k)] [Module R N] [(i : ι) → DecidableEq (κ i)] {f g : MultilinearMap R (fun (i : ι) => Π₀ (j : κ i), M i j) N} :
f = g ∀ (p : (i : ι) → κ i), (f.compLinearMap fun (i : ι) => DFinsupp.lsingle (p i)) = g.compLinearMap fun (i : ι) => DFinsupp.lsingle (p i)
def MultilinearMap.dfinsuppFamily {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) :
MultilinearMap R (fun (i : ι) => Π₀ (j : κ i), M i j) (Π₀ (t : (i : ι) → κ i), N t)

Given a family of indices κ and a multilinear map f p for each way p to select one index from each family, dfinsuppFamily f maps a family of finitely-supported functions (one for each domain κ i) into a finitely-supported function from each selection of indices (with domain Π i, κ i).

Strictly this doesn't need multilinearity, only the fact that f p m = 0 whenever m i = 0 for some i.

This is the DFinsupp version of MultilinearMap.piFamily.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    @[simp]
    theorem MultilinearMap.dfinsuppFamily_apply_toFun {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) (x : (i : ι) → Π₀ (j : κ i), M i j) (p : (i : ι) → κ i) :
    ((dfinsuppFamily f) x) p = (f p) fun (i : ι) => (x i) (p i)
    @[simp]
    theorem MultilinearMap.dfinsuppFamily_apply_support' {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) (x : (i : ι) → Π₀ (j : κ i), M i j) :
    ((dfinsuppFamily f) x).support' = Trunc.map (fun (s : (i : ι) → { s : Multiset (κ i) // ∀ (i_1 : κ i), i_1 s (x i).toFun i_1 = 0 }) => Multiset.map (fun (f : (a : ι) → a Finset.univ.valκ a) (i : ι) => f i ) (Finset.univ.val.pi fun (i : ι) => (s i)), ) (Trunc.finChoice fun (i : ι) => (x i).support')
    theorem MultilinearMap.support_dfinsuppFamily_subset {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] [(i : ι) → DecidableEq (κ i)] [(i : ι) → (j : κ i) → (x : M i j) → Decidable (x 0)] [(i : (i : ι) → κ i) → (x : N i) → Decidable (x 0)] (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) (x : (i : ι) → Π₀ (j : κ i), M i j) :
    ((dfinsuppFamily f) x).support Fintype.piFinset fun (i : ι) => (x i).support
    @[simp]
    theorem MultilinearMap.dfinsuppFamily_single {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] [(i : ι) → DecidableEq (κ i)] (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) (p : (i : ι) → κ i) (m : (i : ι) → M i (p i)) :
    ((dfinsuppFamily f) fun (i : ι) => DFinsupp.single (p i) (m i)) = DFinsupp.single p ((f p) m)

    When applied to a family of finitely-supported functions each supported on a single element, dfinsuppFamily is itself supported on a single element, with value equal to the map f applied at that point.

    @[simp]
    theorem MultilinearMap.dfinsuppFamily_single_left_apply {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] [(i : ι) → DecidableEq (κ i)] (p : (i : ι) → κ i) (f : MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) (x : (i : ι) → Π₀ (j : κ i), M i j) :
    (dfinsuppFamily (Pi.single p f)) x = DFinsupp.single p (f fun (i : ι) => (x i) (p i))

    When only one member of the family of multilinear maps is nonzero, the result consists only of the component from that member.

    theorem MultilinearMap.dfinsuppFamily_single_left {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] [(i : ι) → DecidableEq (κ i)] (p : (i : ι) → κ i) (f : MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) :
    @[simp]
    theorem MultilinearMap.dfinsuppFamily_compLinearMap_lsingle {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] [(i : ι) → DecidableEq (κ i)] (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) (p : (i : ι) → κ i) :
    @[simp]
    theorem MultilinearMap.dfinsuppFamily_zero {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] :
    @[simp]
    theorem MultilinearMap.dfinsuppFamily_add {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] (f g : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) :
    @[simp]
    theorem MultilinearMap.dfinsuppFamily_smul {ι : Type uι} {κ : ιType} {S : Type uS} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [Semiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] [Monoid S] [(p : (i : ι) → κ i) → DistribMulAction S (N p)] [∀ (p : (i : ι) → κ i), SMulCommClass R S (N p)] (s : S) (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) :
    def MultilinearMap.dfinsuppFamilyₗ {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] :
    ((p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) →ₗ[R] MultilinearMap R (fun (i : ι) => Π₀ (j : κ i), M i j) (Π₀ (t : (i : ι) → κ i), N t)

    MultilinearMap.dfinsuppFamily as a linear map.

    Equations
    Instances For
      @[simp]
      theorem MultilinearMap.dfinsuppFamilyₗ_apply {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} {N : ((i : ι) → κ i)Type uN} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(p : (i : ι) → κ i) → AddCommMonoid (N p)] [(i : ι) → (k : κ i) → Module R (M i k)] [(p : (i : ι) → κ i) → Module R (N p)] (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) (N p)) :
      def MultilinearMap.fromDFinsuppEquiv {ι : Type uι} (κ : ιType) (R : Type uR) {M : (i : ι) → κ iType uM} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(i : ι) → (k : κ i) → Module R (M i k)] {N : Type u_1} [AddCommMonoid N] [Module R N] [(i : ι) → DecidableEq (κ i)] :
      ((p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) N) ≃ₗ[R] MultilinearMap R (fun (i : ι) => Π₀ (j : κ i), M i j) N

      The linear equivalence between families indexed by p : Π i : ι, κ i of multilinear maps on the fun i ↦ M i (p i) and the space of multilinear map on fun i ↦ Π₀ j : κ i, M i j.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]
        theorem MultilinearMap.fromDFinsuppEquiv_single {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(i : ι) → (k : κ i) → Module R (M i k)] {N : Type u_1} [AddCommMonoid N] [Module R N] [(i : ι) → DecidableEq (κ i)] (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) N) (p : (i : ι) → κ i) (x : (i : ι) → M i (p i)) :
        (((fromDFinsuppEquiv κ R) f) fun (i : ι) => DFinsupp.single (p i) (x i)) = (f p) x
        theorem MultilinearMap.fromDFinsuppEquiv_apply {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(i : ι) → (k : κ i) → Module R (M i k)] {N : Type u_1} [AddCommMonoid N] [Module R N] [(i : ι) → DecidableEq (κ i)] [(i : ι) → (j : κ i) → (x : M i j) → Decidable (x 0)] (f : (p : (i : ι) → κ i) → MultilinearMap R (fun (i : ι) => M i (p i)) N) (x : (i : ι) → Π₀ (j : κ i), M i j) :
        ((fromDFinsuppEquiv κ R) f) x = pFintype.piFinset fun (i : ι) => (x i).support, (f p) fun (i : ι) => (x i) (p i)
        @[simp]
        theorem MultilinearMap.fromDFinsuppEquiv_symm_apply {ι : Type uι} {κ : ιType} {R : Type uR} {M : (i : ι) → κ iType uM} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → (k : κ i) → AddCommMonoid (M i k)] [(i : ι) → (k : κ i) → Module R (M i k)] {N : Type u_1} [AddCommMonoid N] [Module R N] [(i : ι) → DecidableEq (κ i)] (f : MultilinearMap R (fun (i : ι) => Π₀ (j : κ i), M i j) N) (p : (i : ι) → κ i) :
        (fromDFinsuppEquiv κ R).symm f p = f.compLinearMap fun (i : ι) => DFinsupp.lsingle (p i)
        def MultilinearMap.freeDFinsuppEquiv {ι : Type uι} {κ : ιType} {R : Type uR} {ι' : Type u_1} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → Fintype (κ i)] [(i : ι) → DecidableEq (κ i)] :
        (Π₀ (x : ((i : ι) → κ i) × ι'), R) ≃ₗ[R] MultilinearMap R (fun (i : ι) => Π₀ (x : κ i), R) (Π₀ (x : ι'), R)

        The linear equivalence of multilinear maps on free modules over R indexed by fun i => κ i on the domain and ι' on the codomain and the dependent, finitely supported maps from (Π i, κ i) × ι' into R.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem MultilinearMap.freeDFinsuppEquiv_def {ι : Type uι} {κ : ιType} {R : Type uR} {ι' : Type u_1} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → Fintype (κ i)] [(i : ι) → DecidableEq (κ i)] (f : Π₀ (x : ((i : ι) → κ i) × ι'), R) :
          @[simp]
          theorem MultilinearMap.freeDFinsuppEquiv_single {ι : Type uι} {κ : ιType} {R : Type uR} {ι' : Type u_1} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → Fintype (κ i)] [(i : ι) → DecidableEq (κ i)] [DecidableEq ι'] (p : ((i : ι) → κ i) × ι') (r : R) (x : (i : ι) → Π₀ (x : κ i), R) :
          (freeDFinsuppEquiv (DFinsupp.single p r)) x = r DFinsupp.single p.2 (∏ i : ι, (x i) (p.1 i))

          When freeDFinsuppEquiv is applied to a map with a single value of one the resulting multilinear map sends inputs to a single value in the codomain, taking a product over images from each component of the domain.

          theorem MultilinearMap.freeDFinsuppEquiv_apply {ι : Type uι} {κ : ιType} {R : Type uR} {ι' : Type u_1} [DecidableEq ι] [Fintype ι] [CommSemiring R] [(i : ι) → Fintype (κ i)] [(i : ι) → DecidableEq (κ i)] [DecidableEq ι'] [Fintype ι'] (f : Π₀ (x : ((i : ι) → κ i) × ι'), R) (x : (i : ι) → Π₀ (x : κ i), R) :
          (freeDFinsuppEquiv f) x = p : ((i : ι) → κ i) × ι', f p DFinsupp.single p.2 (∏ i : ι, (x i) (p.1 i))