Documentation

Mathlib.Algebra.Module.Submodule.Pointwise

Pointwise instances on Submodules #

This file provides:

and the actions

which matches the action of Set.mulActionSet.

This file also provides:

These actions are available in the Pointwise locale.

Implementation notes #

For an R-module M, the action of a subset of R acting on a submodule of M introduced in section set_acting_on_submodules does not have a counterpart in the files Mathlib/Algebra/Group/Submonoid/Pointwise.lean and Mathlib/Algebra/GroupWithZero/Submonoid/Pointwise.lean.

Other than section set_acting_on_submodules, most of the lemmas in this file are direct copies of lemmas from the file Mathlib/Algebra/Group/Submonoid/Pointwise.lean.

@[implicit_reducible]
def Submodule.pointwiseNeg {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] :
Neg (Submodule R M)

The submodule with every element negated. Note if R is a ring and not just a semiring, this is a no-op, as shown by Submodule.neg_eq_self.

Recall that When R is the semiring corresponding to the nonnegative elements of R', Submodule R' M is the type of cones of M. This instance reflects such cones about 0.

This is available as an instance in the Pointwise locale.

Instances For
    @[simp]
    theorem Submodule.coe_set_neg {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] (S : Submodule R M) :
    ↑(-S) = -↑S
    @[simp]
    theorem Submodule.mem_neg {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] {g : M} {S : Submodule R M} :
    g ∈ -S ↔ -g ∈ S
    @[implicit_reducible]

    Submodule.pointwiseNeg is involutive.

    This is available as an instance in the Pointwise locale.

    Instances For
      @[simp]
      theorem Submodule.neg_le_neg {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] {S T : Submodule R M} :
      -S ≀ -T ↔ S ≀ T
      theorem Submodule.neg_le {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] {S T : Submodule R M} :
      -S ≀ T ↔ S ≀ -T
      theorem Submodule.neg_eq_self_iff_neg_le {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] {S : Submodule R M} :
      -S = S ↔ -S ≀ S
      def Submodule.negOrderIso {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] :

      Submodule.pointwiseNeg as an order isomorphism.

      Instances For
        theorem Submodule.span_neg_eq_neg {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] (s : Set M) :
        span R (-s) = -span R s
        @[simp]
        theorem Submodule.neg_inf {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] (S T : Submodule R M) :
        -(S βŠ“ T) = -S βŠ“ -T
        @[simp]
        theorem Submodule.neg_sup {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] (S T : Submodule R M) :
        -(S βŠ” T) = -S βŠ” -T
        @[simp]
        theorem Submodule.neg_bot {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] :
        @[simp]
        theorem Submodule.neg_top {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] :
        @[simp]
        theorem Submodule.neg_iInf {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] {ΞΉ : Sort u_4} (S : ΞΉ β†’ Submodule R M) :
        -β¨… (i : ΞΉ), S i = β¨… (i : ΞΉ), -S i
        @[simp]
        theorem Submodule.neg_iSup {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommGroup M] [Module R M] {ΞΉ : Sort u_4} (S : ΞΉ β†’ Submodule R M) :
        -⨆ (i : ΞΉ), S i = ⨆ (i : ΞΉ), -S i
        @[simp]
        theorem Submodule.neg_eq_self {R : Type u_2} {M : Type u_3} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) :
        -p = p
        @[implicit_reducible]
        instance Submodule.pointwiseZero {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] :
        Zero (Submodule R M)
        @[implicit_reducible]
        instance Submodule.pointwiseAdd {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] :
        Add (Submodule R M)
        @[implicit_reducible]
        @[simp]
        theorem Submodule.add_eq_sup {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] (p q : Submodule R M) :
        p + q = p βŠ” q
        @[simp]
        theorem Submodule.zero_eq_bot {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] :
        @[implicit_reducible]
        def Submodule.pointwiseDistribMulAction {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] :

        The action on a submodule corresponding to applying the action to every element.

        This is available as an instance in the Pointwise locale.

        Instances For
          theorem Submodule.pointwise_smul_def {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] {a : Ξ±} {S : Submodule R M} :
          a β€’ S = map (DistribSMul.toLinearMap R M a) S
          @[simp]
          theorem Submodule.coe_pointwise_smul {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (a : Ξ±) (S : Submodule R M) :
          ↑(a β€’ S) = a β€’ ↑S
          @[simp]
          theorem Submodule.pointwise_smul_toAddSubmonoid {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (a : Ξ±) (S : Submodule R M) :
          (a β€’ S).toAddSubmonoid = a β€’ S.toAddSubmonoid
          @[simp]
          theorem Submodule.pointwise_smul_toAddSubgroup {Ξ± : Type u_1} [Monoid Ξ±] {R : Type u_4} {M : Type u_5} [Ring R] [AddCommGroup M] [DistribMulAction Ξ± M] [Module R M] [SMulCommClass Ξ± R M] (a : Ξ±) (S : Submodule R M) :
          (a β€’ S).toAddSubgroup = a β€’ S.toAddSubgroup
          theorem Submodule.mem_smul_pointwise_iff_exists {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (m : M) (a : Ξ±) (S : Submodule R M) :
          m ∈ a β€’ S ↔ βˆƒ b ∈ S, a β€’ b = m
          theorem Submodule.smul_mem_pointwise_smul {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (m : M) (a : Ξ±) (S : Submodule R M) :
          m ∈ S β†’ a β€’ m ∈ a β€’ S
          instance Submodule.instCovariantClassHSMulLe {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] :
          CovariantClass Ξ± (Submodule R M) HSMul.hSMul LE.le
          @[simp]
          theorem Submodule.smul_bot' {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (a : Ξ±) :
          a β€’ βŠ₯ = βŠ₯

          See also Submodule.smul_bot.

          theorem Submodule.smul_sup' {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (a : Ξ±) (S T : Submodule R M) :
          a β€’ (S βŠ” T) = a β€’ S βŠ” a β€’ T

          See also Submodule.smul_sup.

          theorem Submodule.smul_iSup' {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (a : Ξ±) {ΞΉ : Sort u_4} (f : ΞΉ β†’ Submodule R M) :
          a β€’ ⨆ (i : ΞΉ), f i = ⨆ (i : ΞΉ), a β€’ f i

          See also Submodule.smul_iSup.

          theorem Submodule.smul_span {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (a : Ξ±) (s : Set M) :
          a β€’ span R s = span R (a β€’ s)
          theorem Submodule.smul_def {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (a : Ξ±) (S : Submodule R M) :
          a β€’ S = span R (a β€’ ↑S)
          theorem Submodule.span_smul {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Monoid Ξ±] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] (a : Ξ±) (s : Set M) :
          span R (a β€’ s) = a β€’ span R s
          @[simp]
          theorem Submodule.smul_le_self_of_tower {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {Ξ± : Type u_4} [Monoid Ξ±] [SMul Ξ± R] [DistribMulAction Ξ± M] [SMulCommClass Ξ± R M] [IsScalarTower Ξ± R M] (a : Ξ±) (S : Submodule R M) :
          a β€’ S ≀ S
          @[implicit_reducible]
          def Submodule.pointwiseMulActionWithZero {Ξ± : Type u_1} {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [Semiring Ξ±] [Module Ξ± M] [SMulCommClass Ξ± R M] :

          The action on a submodule corresponding to applying the action to every element.

          This is available as an instance in the Pointwise locale.

          This is a stronger version of Submodule.pointwiseDistribMulAction. Note that add_smul does not hold so this cannot be stated as a Module.

          Instances For

            Sets acting on Submodules #

            Let R be a (semi)ring and M an R-module. Let S be a monoid which acts on M distributively, then subsets of S can act on submodules of M. For subset s βŠ† S and submodule N ≀ M, we define s β€’ N to be the smallest submodule containing all r β€’ n where r ∈ s and n ∈ N.

            Results #

            For arbitrary monoids S acting distributively on M, there is an induction principle for s β€’ N: To prove P holds for all s β€’ N, it is enough to prove:

            To invoke this induction principle, use induction x, hx using Submodule.set_smul_inductionOn where x : M and hx : x ∈ s β€’ N

            When we consider subset of R acting on M

            Notes #

            @[implicit_reducible]
            def Submodule.pointwiseSetSMul {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] :
            SMul (Set S) (Submodule R M)

            Let s βŠ† R be a set and N ≀ M be a submodule, then s β€’ N is the smallest submodule containing all r β€’ n where r ∈ s and n ∈ N.

            Instances For
              theorem Submodule.mem_set_smul_def {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (s : Set S) (N : Submodule R M) (x : M) :
              x ∈ s β€’ N ↔ x ∈ sInf {p : Submodule R M | βˆ€ ⦃r : S⦄ {n : M}, r ∈ s β†’ n ∈ N β†’ r β€’ n ∈ p}
              theorem Submodule.mem_set_smul_of_mem_mem {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] {s : Set S} {N : Submodule R M} {r : S} {m : M} (mem1 : r ∈ s) (mem2 : m ∈ N) :
              r β€’ m ∈ s β€’ N
              theorem Submodule.set_smul_le {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (s : Set S) (N p : Submodule R M) (closed_under_smul : βˆ€ ⦃r : S⦄ ⦃n : M⦄, r ∈ s β†’ n ∈ N β†’ r β€’ n ∈ p) :
              s β€’ N ≀ p
              theorem Submodule.set_smul_le_iff {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (s : Set S) (N p : Submodule R M) :
              s β€’ N ≀ p ↔ βˆ€ ⦃r : S⦄ ⦃n : M⦄, r ∈ s β†’ n ∈ N β†’ r β€’ n ∈ p
              theorem Submodule.set_smul_eq_of_le {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (s : Set S) (N p : Submodule R M) (closed_under_smul : βˆ€ ⦃r : S⦄ ⦃n : M⦄, r ∈ s β†’ n ∈ N β†’ r β€’ n ∈ p) (le : p ≀ s β€’ N) :
              s β€’ N = p
              theorem Submodule.set_smul_mono_left {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (N : Submodule R M) {s t : Set S} (le : s ≀ t) :
              s β€’ N ≀ t β€’ N
              theorem Submodule.set_smul_le_of_le_le {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] {s t : Set S} {p q : Submodule R M} (le_set : s ≀ t) (le_submodule : p ≀ q) :
              s β€’ p ≀ t β€’ q
              theorem Submodule.set_smul_eq_iSup {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] [SMulCommClass S R M] (s : Set S) (N : Submodule R M) :
              s β€’ N = ⨆ a ∈ s, a β€’ N
              theorem Submodule.set_smul_span {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] [SMulCommClass S R M] (s : Set S) (t : Set M) :
              s β€’ span R t = span R (s β€’ t)
              theorem Submodule.span_set_smul {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] [SMulCommClass S R M] (s : Set S) (t : Set M) :
              span R (s β€’ t) = s β€’ span R t
              theorem Submodule.set_smul_inductionOn {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] {s : Set S} {N : Submodule R M} {motive : (x : M) β†’ x ∈ s β€’ N β†’ Prop} (x : M) (hx : x ∈ s β€’ N) (smulβ‚€ : βˆ€ ⦃r : S⦄ ⦃n : M⦄ (mem₁ : r ∈ s) (memβ‚‚ : n ∈ N), motive (r β€’ n) β‹―) (smul₁ : βˆ€ (r : R) ⦃m : M⦄ (mem : m ∈ s β€’ N), motive m mem β†’ motive (r β€’ m) β‹―) (add : βˆ€ ⦃m₁ mβ‚‚ : M⦄ (mem₁ : m₁ ∈ s β€’ N) (memβ‚‚ : mβ‚‚ ∈ s β€’ N), motive m₁ mem₁ β†’ motive mβ‚‚ memβ‚‚ β†’ motive (m₁ + mβ‚‚) β‹―) (zero : motive 0 β‹―) :
              motive x hx

              Induction principle for set acting on submodules. To prove P holds for all s β€’ N, it is enough to prove:

              • for all r ∈ s and n ∈ N, P (r β€’ n);
              • for all r and m ∈ s β€’ N, P (r β€’ n);
              • for all m₁, mβ‚‚, P m₁ and P mβ‚‚ implies P (m₁ + mβ‚‚);
              • P 0.

              To invoke this induction principle, use induction x, hx using Submodule.set_smul_inductionOn where x : M and hx : x ∈ s β€’ N

              theorem Submodule.set_smul_eq_map {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] (sR : Set R) (N : Submodule R M) [SMulCommClass R R β†₯N] :
              sR β€’ N = map (N.subtype βˆ˜β‚— (Finsupp.lsum R) (DistribSMul.toLinearMap R β†₯N)) (Finsupp.supported (β†₯N) R sR)
              theorem Submodule.mem_set_smul {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] (sR : Set R) (N : Submodule R M) (x : M) [SMulCommClass R R β†₯N] :
              x ∈ sR β€’ N ↔ βˆƒ (c : R β†’β‚€ β†₯N), ↑c.support βŠ† sR ∧ x = ↑(c.sum fun (r : R) (m : β†₯N) => r β€’ m)
              @[simp]
              theorem Submodule.empty_set_smul {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (N : Submodule R M) :
              βˆ… β€’ N = βŠ₯
              @[simp]
              theorem Submodule.set_smul_bot {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (s : Set S) :
              s β€’ βŠ₯ = βŠ₯
              theorem Submodule.singleton_set_smul {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (N : Submodule R M) [SMulCommClass S R M] (r : S) :
              {r} β€’ N = r β€’ N
              theorem Submodule.mem_singleton_set_smul {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (N : Submodule R M) [SMulCommClass R S M] (r : S) (x : M) :
              x ∈ {r} β€’ N ↔ βˆƒ m ∈ N, x = r β€’ m
              theorem Submodule.smul_inductionOn_pointwise {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (N : Submodule R M) [SMulCommClass S R M] {a : S} {p : (x : M) β†’ x ∈ a β€’ N β†’ Prop} (smulβ‚€ : βˆ€ (s : M) (hs : s ∈ N), p (a β€’ s) β‹―) (smul₁ : βˆ€ (r : R) (m : M) (mem : m ∈ a β€’ N), p m mem β†’ p (r β€’ m) β‹―) (add : βˆ€ (x y : M) (hx : x ∈ a β€’ N) (hy : y ∈ a β€’ N), p x hx β†’ p y hy β†’ p (x + y) β‹―) (zero : p 0 β‹―) {x : M} (hx : x ∈ a β€’ N) :
              p x hx
              @[implicit_reducible]
              noncomputable def Submodule.pointwiseSetMulAction {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [SMulCommClass R R M] :

              A subset of a ring R has a multiplicative action on submodules of a module over R.

              Instances For
                @[implicit_reducible]
                noncomputable def Submodule.pointwiseSetDistribMulAction {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [SMulCommClass R R M] :

                In a ring, sets acts on submodules.

                Instances For
                  theorem Submodule.sup_set_smul {R : Type u_2} {M : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_4} [Monoid S] [DistribMulAction S M] (N : Submodule R M) (s t : Set S) :
                  (s βŠ” t) β€’ N = s β€’ N βŠ” t β€’ N
                  theorem Submodule.mem_stabilizer_submodule_iff_map_eq {R : Type u_4} {G : Type u_5} {M : Type u_6} [Semiring R] [AddCommMonoid M] [Module R M] [Group G] [DistribMulAction G M] [SMulCommClass G R M] {S : Submodule R M} {e : G} :
                  e ∈ MulAction.stabilizer G S ↔ map (DistribSMul.toLinearMap R M e) S = S