Documentation

Mathlib.LinearAlgebra.Span.Defs

The span of a set of vectors, as a submodule #

Notation #

def Submodule.span (R : Type u_1) {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s : Set M) :

The span of a set s ⊆ M is the smallest submodule of M that contains s.

Equations
Instances For
    class Submodule.IsPrincipal {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (S : Submodule R M) :

    An R-submodule of M is principal if it is generated by one element.

    • principal : ∃ (a : M), S = R a
    Instances
      theorem Submodule.isPrincipal_iff {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (S : Submodule R M) :
      S.IsPrincipal ∃ (a : M), S = R a
      noncomputable def Submodule.IsPrincipal.generator {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (S : Submodule R M) [S.IsPrincipal] :
      M

      generator I, if I is a principal submodule, is an x ∈ M such that span R {x} = I

      Equations
      Instances For
        theorem Submodule.mem_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x : M} {s : Set M} :
        x span R s ∀ (p : Submodule R M), spx p
        @[simp]
        theorem Submodule.subset_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
        s(span R s)
        theorem Submodule.mem_span_of_mem {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} {x : M} (hx : x s) :
        x span R s
        theorem Submodule.span_le {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} {p : Submodule R M} :
        span R s p sp
        theorem Submodule.span_mono {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s t : Set M} (h : st) :
        span R s span R t
        theorem Submodule.span_monotone {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] :
        theorem Submodule.span_eq_of_le {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p : Submodule R M) {s : Set M} (h₁ : sp) (h₂ : p span R s) :
        span R s = p
        theorem Submodule.span_eq {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p : Submodule R M) :
        span R p = p
        theorem Submodule.span_eq_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s t : Set M} (hs : s(span R t)) (ht : t(span R s)) :
        span R s = span R t
        theorem Submodule.coe_span_eq_self {R : Type u_1} {M : Type u_2} {S : Type u_5} [Semiring R] [AddCommMonoid M] [Module R M] [SetLike S M] [AddSubmonoidClass S M] [SMulMemClass S R M] (s : S) :
        (span R s) = s

        A version of Submodule.span_eq for subobjects closed under addition and scalar multiplication and containing zero. In general, this should not be used directly, but can be used to quickly generate proofs for specific types of subobjects.

        @[simp]
        theorem Submodule.span_insert_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
        span R (insert 0 s) = span R s
        @[simp]
        theorem Submodule.span_sdiff_singleton_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
        span R (s \ {0}) = span R s
        theorem Submodule.closure_subset_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
        (AddSubmonoid.closure s)(span R s)
        @[simp]
        theorem Submodule.span_closure {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
        theorem Submodule.span_induction {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} {p : (x : M) → x span R sProp} (mem : ∀ (x : M) (h : x s), p x ) (zero : p 0 ) (add : ∀ (x y : M) (hx : x span R s) (hy : y span R s), p x hxp y hyp (x + y) ) (smul : ∀ (a : R) (x : M) (hx : x span R s), p x hxp (a x) ) {x : M} (hx : x span R s) :
        p x hx

        An induction principle for span membership. If p holds for 0 and all elements of s, and is preserved under addition and scalar multiplication, then p holds for all elements of the span of s.

        theorem Submodule.span_induction₂ {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} {N : Type u_6} [AddCommMonoid N] [Module R N] {t : Set N} {p : (x : M) → (y : N) → x span R sy span R tProp} (mem_mem : ∀ (x : M) (y : N) (hx : x s) (hy : y t), p x y ) (zero_left : ∀ (y : N) (hy : y span R t), p 0 y hy) (zero_right : ∀ (x : M) (hx : x span R s), p x 0 hx ) (add_left : ∀ (x y : M) (z : N) (hx : x span R s) (hy : y span R s) (hz : z span R t), p x z hx hzp y z hy hzp (x + y) z hz) (add_right : ∀ (x : M) (y z : N) (hx : x span R s) (hy : y span R t) (hz : z span R t), p x y hx hyp x z hx hzp x (y + z) hx ) (smul_left : ∀ (r : R) (x : M) (y : N) (hx : x span R s) (hy : y span R t), p x y hx hyp (r x) y hy) (smul_right : ∀ (r : R) (x : M) (y : N) (hx : x span R s) (hy : y span R t), p x y hx hyp x (r y) hx ) {a : M} {b : N} (ha : a span R s) (hb : b span R t) :
        p a b ha hb

        An induction principle for span membership. This is a version of Submodule.span_induction for binary predicates.

        theorem Submodule.closure_induction {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} {p : (x : M) → x span R sProp} (zero : p 0 ) (add : ∀ (x y : M) (hx : x span R s) (hy : y span R s), p x hxp y hyp (x + y) ) (smul_mem : ∀ (r : R) (x : M) (h : x s), p (r x) ) {x : M} (hx : x span R s) :
        p x hx

        A variant of span_induction that combines ∀ x ∈ s, p x and ∀ r x, p x → p (r • x) into a single condition ∀ r, ∀ x ∈ s, p (r • x), which can be easier to verify.

        @[simp]
        theorem Submodule.span_span_coe_preimage {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
        @[simp]
        theorem Submodule.span_setOfPred_mem_eq_top {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
        span R {x : (span R s) | x s} =
        @[deprecated Submodule.span_setOfPred_mem_eq_top (since := "2026-07-09")]
        theorem Submodule.span_setOf_mem_eq_top {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
        span R {x : (span R s) | x s} =

        Alias of Submodule.span_setOfPred_mem_eq_top.

        @[simp]
        @[simp]
        theorem Submodule.span_int_eq {M : Type u_6} [AddCommGroup M] (s : AddSubgroup M) :
        theorem Disjoint.of_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s t : Set M} (hst : Disjoint (Submodule.span R s) (Submodule.span R t)) :
        Disjoint (s \ {0}) t
        theorem Disjoint.of_span₀ {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s t : Set M} (hst : Disjoint (Submodule.span R s) (Submodule.span R t)) (h0s : 0s) :

        span forms a Galois insertion with the coercion from submodule to set.

        Equations
        Instances For
          @[simp]
          theorem Submodule.span_empty {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] :
          @[simp]
          theorem Submodule.span_univ {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] :
          @[simp]
          theorem Submodule.span_inter {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (S S' : Submodule R M) :
          span R (S S') = SS'
          theorem Submodule.span_sInf_le {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s : Set (Set M)) :
          span R (⋂₀ s) sInf (span R '' s)
          theorem Submodule.span_sInf {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s : Set (Submodule R M)) :
          span R (sInf s) = sInf s
          theorem Submodule.span_biInter {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s : Set (Submodule R M)) :
          span R (⋂ Ss, S) = sInf s
          @[simp]
          theorem Submodule.span_union {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s t : Set M) :
          span R (s t) = span R sspan R t
          theorem Submodule.span_sSup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s : Set (Set M)) :
          span R (⋃₀ s) = sSup (span R '' s)
          theorem Submodule.span_sSup' {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s : Set (Submodule R M)) :
          span R (sSup s) = sSup s
          theorem Submodule.span_iUnion {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {ι : Sort u_6} (s : ιSet M) :
          span R (⋃ (i : ι), s i) = ⨆ (i : ι), span R (s i)
          theorem Submodule.span_iUnion₂ {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {ι : Sort u_7} {κ : ιSort u_6} (s : (i : ι) → κ iSet M) :
          span R (⋃ (i : ι), ⋃ (j : κ i), s i j) = ⨆ (i : ι), ⨆ (j : κ i), span R (s i j)
          theorem Submodule.span_biUnion {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s : Set (Submodule R M)) :
          span R (⋃ Ss, S) = sSup s
          theorem Submodule.span_attach_biUnion {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] [DecidableEq M] {α : Type u_6} (s : Finset α) (f : sFinset M) :
          span R (s.attach.biUnion f) = ⨆ (x : s), span R (f x)
          theorem Submodule.sup_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p : Submodule R M) {s : Set M} :
          pspan R s = span R (p s)
          theorem Submodule.span_sup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p : Submodule R M) {s : Set M} :
          span R sp = span R (s p)

          Unexpander for R ∙ x notation. This needs to be defined separately because the {_} notation is ambiguous, so we have to specify that it is the «term{_}» notation.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            theorem Submodule.span_eq_iSup_of_singleton_spans {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s : Set M) :
            span R s = xs, R x
            theorem Submodule.span_range_eq_iSup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {ι : Sort u_6} {v : ιM} :
            span R (Set.range v) = ⨆ (i : ι), R v i
            theorem Submodule.span_smul_le {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (s : Set M) (r : R) :
            span R (r s) span R s
            theorem Submodule.subset_span_trans {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {U V W : Set M} (hUV : U(span R V)) (hVW : V(span R W)) :
            U(span R W)
            @[simp]
            theorem Submodule.coe_iSup_of_directed {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {ι : Sort u_6} [Nonempty ι] (S : ιSubmodule R M) (H : Directed (fun (x1 x2 : Submodule R M) => x1 x2) S) :
            (iSup S) = ⋃ (i : ι), (S i)
            @[simp]
            theorem Submodule.mem_iSup_of_directed {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {ι : Sort u_6} [Nonempty ι] (S : ιSubmodule R M) (H : Directed (fun (x1 x2 : Submodule R M) => x1 x2) S) {x : M} :
            x iSup S ∃ (i : ι), x S i
            theorem Submodule.mem_sSup_of_directed {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set (Submodule R M)} {z : M} (hs : s.Nonempty) (hdir : DirectedOn (fun (x1 x2 : Submodule R M) => x1 x2) s) :
            z sSup s ys, z y
            @[simp]
            theorem Submodule.coe_iSup_of_chain {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (a : →o Submodule R M) :
            (⨆ (k : ), a k) = ⋃ (k : ), (a k)
            @[simp]
            theorem Submodule.mem_iSup_of_chain {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (a : →o Submodule R M) (m : M) :
            m ⨆ (k : ), a k ∃ (k : ), m a k
            theorem Submodule.mem_sup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x : M} {p p' : Submodule R M} :
            x pp' yp, zp', y + z = x
            theorem Submodule.mem_sup' {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x : M} {p p' : Submodule R M} :
            x pp' ∃ (y : p) (z : p'), y + z = x
            theorem Submodule.codisjoint_iff_exists_add_eq {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {p p' : Submodule R M} :
            Codisjoint p p' ∀ (z : M), ∃ (x : M) (y : M), x p y p' x + y = z
            theorem Submodule.coe_sup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p p' : Submodule R M) :
            (pp') = p + p'
            theorem Submodule.sup_toAddSubmonoid {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p p' : Submodule R M) :
            theorem Submodule.sup_eq_top_iff {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p p' : Submodule R M) :
            pp' = ∀ (m : M), up, vp', m = u + v
            @[simp]
            theorem Submodule.forall_mem_sup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p p' : Submodule R M) {P : MProp} :
            (∀ xpp', P x) x₁p, x₂p', P (x₁ + x₂)
            @[simp]
            theorem Submodule.exists_mem_sup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p p' : Submodule R M) {P : MProp} :
            (∃ xpp', P x) x₁p, x₂p', P (x₁ + x₂)
            @[simp]
            theorem Submodule.mem_span_singleton_self {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (x : M) :
            x R x
            theorem Submodule.nontrivial_span_singleton {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x : M} (h : x 0) :
            Nontrivial ↥(R x)
            theorem Submodule.mem_span_singleton {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x y : M} :
            x R y ∃ (a : R), a y = x
            theorem Submodule.le_span_singleton_iff {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Submodule R M} {v₀ : M} :
            s R v₀ vs, ∃ (r : R), r v₀ = v
            theorem Submodule.eq_span_singleton_of_surjective {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Submodule R M} {f : R →ₗ[R] s} (hf : Function.Surjective f) :
            s = R (f 1)
            theorem Submodule.span_singleton_eq_top_iff (R : Type u_1) {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (x : M) :
            R x = ∀ (v : M), ∃ (r : R), r x = v
            @[simp]
            theorem Submodule.span_zero_singleton (R : Type u_1) {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] :
            R 0 =
            theorem Submodule.span_singleton_eq_range (R : Type u_1) {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (y : M) :
            ↑(R y) = Set.range fun (x : R) => x y
            theorem Submodule.span_singleton_smul_le (R : Type u_1) {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {S : Type u_6} [SMul S R] [SMul S M] [IsScalarTower S R M] (r : S) (x : M) :
            R r x R x
            theorem Submodule.span_singleton_group_smul_eq (R : Type u_1) {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {G : Type u_6} [Group G] [SMul G R] [MulAction G M] [IsScalarTower G R M] (g : G) (x : M) :
            R g x = R x
            theorem Submodule.span_singleton_smul_eq {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {r : R} (hr : IsUnit r) (x : M) :
            R r x = R x
            theorem Submodule.mem_span_singleton_trans {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x y z : M} (hxy : x R y) (hyz : y R z) :
            x R z
            theorem Submodule.span_insert {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (x : M) (s : Set M) :
            span R (insert x s) = R xspan R s
            theorem Submodule.span_insert_eq_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x : M} {s : Set M} (h : x span R s) :
            span R (insert x s) = span R s
            theorem Submodule.span_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
            span R (span R s) = span R s
            theorem Submodule.mem_span_insert {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x : M} {s : Set M} {y : M} :
            x span R (insert y s) ∃ (a : R), zspan R s, x = a y + z
            theorem Submodule.mem_span_pair {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x y z : M} :
            z span R {x, y} ∃ (a : R) (b : R), a x + b y = z
            theorem Submodule.mem_span_triple {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {w x y z : M} :
            w span R {x, y, z} ∃ (a : R) (b : R) (c : R), a x + b y + c z = w
            @[simp]
            theorem Submodule.span_eq_bot {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} :
            span R s = xs, x = 0
            theorem Submodule.span_singleton_eq_bot {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {x : M} :
            R x = x = 0
            @[simp]
            theorem Submodule.span_zero {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] :
            span R 0 =
            @[simp]
            theorem Submodule.span_singleton_le_iff_mem {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (m : M) (p : Submodule R M) :
            R m p m p
            theorem Submodule.iSup_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {ι : Sort u_6} (p : ιSet M) :
            ⨆ (i : ι), span R (p i) = span R (⋃ (i : ι), p i)
            theorem Submodule.iSup_eq_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {ι : Sort u_6} (p : ιSubmodule R M) :
            ⨆ (i : ι), p i = span R (⋃ (i : ι), (p i))
            theorem Submodule.iSup_eq_span' {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {ι : Sort u_6} (p : ιSubmodule R M) (h : ιProp) :
            ⨆ (i : ι), ⨆ (_ : h i), p i = span R (⋃ (i : ι), ⋃ (_ : h i), (p i))
            theorem Submodule.submodule_eq_sSup_le_nonzero_spans {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] (p : Submodule R M) :
            p = sSup {T : Submodule R M | mp, m 0 T = R m}

            A submodule is equal to the supremum of the spans of the submodule's nonzero elements.

            theorem Submodule.lt_sup_iff_notMem {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {I : Submodule R M} {a : M} :
            I < IR a aI
            theorem Submodule.mem_iSup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {ι : Sort u_6} (p : ιSubmodule R M) {m : M} :
            m ⨆ (i : ι), p i ∀ (N : Submodule R M), (∀ (i : ι), p i N)m N
            theorem Submodule.mem_sSup {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set (Submodule R M)} {m : M} :
            m sSup s ∀ (N : Submodule R M), (∀ ps, p N)m N
            theorem Submodule.mem_span_finite_of_mem_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {S : Set M} {x : M} (hx : x span R S) :
            ∃ (T : Finset M), TS x span R T

            For every element in the span of a set, there exists a finite subset of the set such that the element is contained in the span of the subset.

            theorem Submodule.subset_span_finite_of_subset_span {R : Type u_1} {M : Type u_2} [Semiring R] [AddCommMonoid M] [Module R M] {s : Set M} {t : Finset M} (ht : t(span R s)) :
            ∃ (T : Finset M), Ts t(span R T)
            theorem Submodule.sup_toAddSubgroup {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p p' : Submodule R M) :
            theorem Submodule.mem_span_insert' {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {x y : M} {s : Set M} :
            x span R (insert y s) ∃ (a : R), x + a y span R s
            theorem Submodule.span_range_update_add_smul {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {ι : Type u_6} [DecidableEq ι] {i j : ι} (hij : i j) (v : ιM) (r : R) :
            span R (Set.range (Function.update v j (v j + r v i))) = span R (Set.range v)
            theorem Submodule.span_range_update_sub_smul {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] {ι : Type u_6} [DecidableEq ι] {i j : ι} (hij : i j) (v : ιM) (r : R) :
            span R (Set.range (Function.update v j (v j - r v i))) = span R (Set.range v)
            @[reducible, inline]
            abbrev Module.IsPrincipal (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] :

            A module is principal if it is generated by a single element.

            Equations
            Instances For
              theorem Module.IsPrincipal.of_surjective {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [AddCommMonoid M₂] [Module R M₂] (f : M →ₗ[R] M₂) (hf : Function.Surjective f) [IsPrincipal R M] :
              theorem LinearEquiv.isPrincipal_iff {R : Type u_1} {M : Type u_2} {M₂ : Type u_3} [Semiring R] [AddCommMonoid M] [Module R M] [AddCommMonoid M₂] [Module R M₂] (e : M ≃ₗ[R] M₂) :
              theorem Commute.span_left {R : Type u_6} {A : Type u_7} [Semiring R] [NonUnitalNonAssocSemiring A] [Module R A] [IsScalarTower R A A] [SMulCommClass R A A] {s : Set A} {x : A} (h : ys, Commute y x) (y : A) :
              y Submodule.span R sCommute y x

              In a non-unital algebra, if every element of a set s commutes with x, then every element of Submodule.span R s commutes with x.

              theorem Commute.span_right {R : Type u_6} {A : Type u_7} [Semiring R] [NonUnitalNonAssocSemiring A] [Module R A] [IsScalarTower R A A] [SMulCommClass R A A] {s : Set A} {x : A} (h : ys, Commute x y) (y : A) :
              y Submodule.span R sCommute x y

              In a non-unital algebra, if x commutes with every element of a set s, then x commutes with every element of Submodule.span R s.