Module docstring
{"# Bases and scalar multiplication
This file defines the scalar multiplication of bases by multiplying each basis vector.
"}
{"# Bases and scalar multiplication
This file defines the scalar multiplication of bases by multiplying each basis vector.
"}
Basis.instSMul
instance
: SMul G (Basis ι R M)
/-- The action on a `Basis` by acting on each element.
See also `Basis.unitsSMul` and `Basis.groupSMul`, for the cases when a different action is applied
to each basis element. -/
instance : SMul G (Basis ι R M) where
smul g b := b.map <| DistribMulAction.toLinearEquiv _ _ g
Basis.smul_apply
theorem
(g : G) (b : Basis ι R M) (i : ι) : (g • b) i = g • b i
@[simp]
theorem smul_apply (g : G) (b : Basis ι R M) (i : ι) : (g • b) i = g • b i := rfl
Basis.coe_smul
theorem
(g : G) (b : Basis ι R M) : ⇑(g • b) = g • ⇑b
Basis.smul_eq_map
theorem
(g : M ≃ₗ[R] M) (b : Basis ι R M) : g • b = b.map g
/-- When the group in question is the automorphisms, `•` coincides with `Basis.map`. -/
@[simp]
theorem smul_eq_map (g : M ≃ₗ[R] M) (b : Basis ι R M) : g • b = b.map g := rfl
Basis.repr_smul
theorem
(g : G) (b : Basis ι R M) : (g • b).repr = (DistribMulAction.toLinearEquiv _ _ g).symm.trans b.repr
Basis.instMulAction
instance
: MulAction G (Basis ι R M)
instance : MulAction G (Basis ι R M) :=
Function.Injective.mulAction _ DFunLike.coe_injective coe_smul
Basis.instSMulCommClass
instance
[SMulCommClass G G' M] : SMulCommClass G G' (Basis ι R M)
instance [SMulCommClass G G' M] : SMulCommClass G G' (Basis ι R M) where
smul_comm _g _g' _b := DFunLike.ext _ _ fun _ => smul_comm _ _ _
Basis.instIsScalarTower
instance
[SMul G G'] [IsScalarTower G G' M] : IsScalarTower G G' (Basis ι R M)
instance [SMul G G'] [IsScalarTower G G' M] : IsScalarTower G G' (Basis ι R M) where
smul_assoc _g _g' _b := DFunLike.ext _ _ fun _ => smul_assoc _ _ _
Basis.groupSMul_span_eq_top
theorem
{G : Type*} [Group G] [SMul G R] [MulAction G M] [IsScalarTower G R M] {v : ι → M}
(hv : Submodule.span R (Set.range v) = ⊤) {w : ι → G} : Submodule.span R (Set.range (w • v)) = ⊤
theorem groupSMul_span_eq_top {G : Type*} [Group G] [SMul G R] [MulAction G M]
[IsScalarTower G R M] {v : ι → M} (hv : Submodule.span R (Set.range v) = ⊤) {w : ι → G} :
Submodule.span R (Set.range (w • v)) = ⊤ := by
rw [eq_top_iff]
intro j hj
rw [← hv] at hj
rw [Submodule.mem_span] at hj ⊢
refine fun p hp => hj p fun u hu => ?_
obtain ⟨i, rfl⟩ := hu
have : ((w i)⁻¹ • (1 : R)) • w i • v i ∈ p := p.smul_mem ((w i)⁻¹ • (1 : R)) (hp ⟨i, rfl⟩)
rwa [smul_one_smul, inv_smul_smul] at this
Basis.groupSMul
definition
{G : Type*} [Group G] [DistribMulAction G R] [DistribMulAction G M] [IsScalarTower G R M] [SMulCommClass G R M]
(v : Basis ι R M) (w : ι → G) : Basis ι R M
/-- Given a basis `v` and a map `w` such that for all `i`, `w i` are elements of a group,
`groupSMul` provides the basis corresponding to `w • v`. -/
def groupSMul {G : Type*} [Group G] [DistribMulAction G R] [DistribMulAction G M]
[IsScalarTower G R M] [SMulCommClass G R M] (v : Basis ι R M) (w : ι → G) : Basis ι R M :=
Basis.mk (LinearIndependent.group_smul v.linearIndependent w) (groupSMul_span_eq_top v.span_eq).ge
Basis.groupSMul_apply
theorem
{G : Type*} [Group G] [DistribMulAction G R] [DistribMulAction G M] [IsScalarTower G R M] [SMulCommClass G R M]
{v : Basis ι R M} {w : ι → G} (i : ι) : v.groupSMul w i = (w • (v : ι → M)) i
theorem groupSMul_apply {G : Type*} [Group G] [DistribMulAction G R] [DistribMulAction G M]
[IsScalarTower G R M] [SMulCommClass G R M] {v : Basis ι R M} {w : ι → G} (i : ι) :
v.groupSMul w i = (w • (v : ι → M)) i :=
mk_apply (LinearIndependent.group_smul v.linearIndependent w)
(groupSMul_span_eq_top v.span_eq).ge i
Basis.units_smul_span_eq_top
theorem
{v : ι → M} (hv : Submodule.span R (Set.range v) = ⊤) {w : ι → Rˣ} : Submodule.span R (Set.range (w • v)) = ⊤
theorem units_smul_span_eq_top {v : ι → M} (hv : Submodule.span R (Set.range v) = ⊤) {w : ι → Rˣ} :
Submodule.span R (Set.range (w • v)) = ⊤ :=
groupSMul_span_eq_top hv
Basis.unitsSMul
definition
(v : Basis ι R M) (w : ι → Rˣ) : Basis ι R M
/-- Given a basis `v` and a map `w` such that for all `i`, `w i` is a unit, `unitsSMul`
provides the basis corresponding to `w • v`. -/
def unitsSMul (v : Basis ι R M) (w : ι → Rˣ) : Basis ι R M :=
Basis.mk (LinearIndependent.units_smul v.linearIndependent w)
(units_smul_span_eq_top v.span_eq).ge
Basis.unitsSMul_apply
theorem
{v : Basis ι R M} {w : ι → Rˣ} (i : ι) : unitsSMul v w i = w i • v i
theorem unitsSMul_apply {v : Basis ι R M} {w : ι → Rˣ} (i : ι) : unitsSMul v w i = w i • v i :=
mk_apply (LinearIndependent.units_smul v.linearIndependent w)
(units_smul_span_eq_top v.span_eq).ge i
Basis.coord_unitsSMul
theorem
(e : Basis ι R₂ M) (w : ι → R₂ˣ) (i : ι) : (unitsSMul e w).coord i = (w i)⁻¹ • e.coord i
@[simp]
theorem coord_unitsSMul (e : Basis ι R₂ M) (w : ι → R₂ˣ) (i : ι) :
(unitsSMul e w).coord i = (w i)⁻¹ • e.coord i := by
classical
apply e.ext
intro j
trans ((unitsSMul e w).coord i) ((w j)⁻¹ • (unitsSMul e w) j)
· congr
simp [Basis.unitsSMul, ← mul_smul]
simp only [Basis.coord_apply, LinearMap.smul_apply, Basis.repr_self, Units.smul_def,
map_smul, Finsupp.single_apply]
split_ifs with h <;> simp [h]
Basis.repr_unitsSMul
theorem
(e : Basis ι R₂ M) (w : ι → R₂ˣ) (v : M) (i : ι) : (e.unitsSMul w).repr v i = (w i)⁻¹ • e.repr v i
@[simp]
theorem repr_unitsSMul (e : Basis ι R₂ M) (w : ι → R₂ˣ) (v : M) (i : ι) :
(e.unitsSMul w).repr v i = (w i)⁻¹ • e.repr v i :=
congr_arg (fun f : M →ₗ[R₂] R₂ => f v) (e.coord_unitsSMul w i)
Basis.isUnitSMul
definition
(v : Basis ι R M) {w : ι → R} (hw : ∀ i, IsUnit (w i)) : Basis ι R M
Basis.isUnitSMul_apply
theorem
{v : Basis ι R M} {w : ι → R} (hw : ∀ i, IsUnit (w i)) (i : ι) : v.isUnitSMul hw i = w i • v i
theorem isUnitSMul_apply {v : Basis ι R M} {w : ι → R} (hw : ∀ i, IsUnit (w i)) (i : ι) :
v.isUnitSMul hw i = w i • v i :=
unitsSMul_apply i
Basis.repr_isUnitSMul
theorem
{v : Basis ι R₂ M} {w : ι → R₂} (hw : ∀ i, IsUnit (w i)) (x : M) (i : ι) :
(v.isUnitSMul hw).repr x i = (hw i).unit⁻¹ • v.repr x i
theorem repr_isUnitSMul {v : Basis ι R₂ M} {w : ι → R₂} (hw : ∀ i, IsUnit (w i)) (x : M) (i : ι) :
(v.isUnitSMul hw).repr x i = (hw i).unit⁻¹ • v.repr x i :=
repr_unitsSMul _ _ _ _