Module docstring
{"# Bases for the product of modules "}
{"# Bases for the product of modules "}
Basis.prod
definition
: Basis (ι ⊕ ι') R (M × M')
/-- `Basis.prod` maps an `ι`-indexed basis for `M` and an `ι'`-indexed basis for `M'`
to an `ι ⊕ ι'`-index basis for `M × M'`.
For the specific case of `R × R`, see also `Basis.finTwoProd`. -/
protected def prod : Basis (ι ⊕ ι') R (M × M') :=
ofRepr ((b.repr.prodCongr b'.repr).trans (Finsupp.sumFinsuppLEquivProdFinsupp R).symm)
Basis.prod_repr_inl
theorem
(x) (i) : (b.prod b').repr x (Sum.inl i) = b.repr x.1 i
Basis.prod_repr_inr
theorem
(x) (i) : (b.prod b').repr x (Sum.inr i) = b'.repr x.2 i
Basis.prod_apply_inl_fst
theorem
(i) : (b.prod b' (Sum.inl i)).1 = b i
theorem prod_apply_inl_fst (i) : (b.prod b' (Sum.inl i)).1 = b i :=
b.repr.injective <| by
ext j
simp only [Basis.prod, Basis.coe_ofRepr, LinearEquiv.symm_trans_apply,
LinearEquiv.prodCongr_symm, LinearEquiv.prodCongr_apply, b.repr.apply_symm_apply,
LinearEquiv.symm_symm, repr_self, Equiv.toFun_as_coe, Finsupp.fst_sumFinsuppLEquivProdFinsupp]
apply Finsupp.single_apply_left Sum.inl_injective
Basis.prod_apply_inr_fst
theorem
(i) : (b.prod b' (Sum.inr i)).1 = 0
theorem prod_apply_inr_fst (i) : (b.prod b' (Sum.inr i)).1 = 0 :=
b.repr.injective <| by
ext i
simp only [Basis.prod, Basis.coe_ofRepr, LinearEquiv.symm_trans_apply,
LinearEquiv.prodCongr_symm, LinearEquiv.prodCongr_apply, b.repr.apply_symm_apply,
LinearEquiv.symm_symm, repr_self, Equiv.toFun_as_coe, Finsupp.fst_sumFinsuppLEquivProdFinsupp,
LinearEquiv.map_zero, Finsupp.zero_apply]
apply Finsupp.single_eq_of_ne Sum.inr_ne_inl
Basis.prod_apply_inl_snd
theorem
(i) : (b.prod b' (Sum.inl i)).2 = 0
theorem prod_apply_inl_snd (i) : (b.prod b' (Sum.inl i)).2 = 0 :=
b'.repr.injective <| by
ext j
simp only [Basis.prod, Basis.coe_ofRepr, LinearEquiv.symm_trans_apply,
LinearEquiv.prodCongr_symm, LinearEquiv.prodCongr_apply, b'.repr.apply_symm_apply,
LinearEquiv.symm_symm, repr_self, Equiv.toFun_as_coe, Finsupp.snd_sumFinsuppLEquivProdFinsupp,
LinearEquiv.map_zero, Finsupp.zero_apply]
apply Finsupp.single_eq_of_ne Sum.inl_ne_inr
Basis.prod_apply_inr_snd
theorem
(i) : (b.prod b' (Sum.inr i)).2 = b' i
theorem prod_apply_inr_snd (i) : (b.prod b' (Sum.inr i)).2 = b' i :=
b'.repr.injective <| by
ext i
simp only [Basis.prod, Basis.coe_ofRepr, LinearEquiv.symm_trans_apply,
LinearEquiv.prodCongr_symm, LinearEquiv.prodCongr_apply, b'.repr.apply_symm_apply,
LinearEquiv.symm_symm, repr_self, Equiv.toFun_as_coe, Finsupp.snd_sumFinsuppLEquivProdFinsupp]
apply Finsupp.single_apply_left Sum.inr_injective
Basis.prod_apply
theorem
(i) : b.prod b' i = Sum.elim (LinearMap.inl R M M' ∘ b) (LinearMap.inr R M M' ∘ b') i
@[simp]
theorem prod_apply (i) :
b.prod b' i = Sum.elim (LinearMap.inlLinearMap.inl R M M' ∘ b) (LinearMap.inrLinearMap.inr R M M' ∘ b') i := by
ext <;> cases i <;>
simp only [prod_apply_inl_fst, Sum.elim_inl, LinearMap.inl_apply, prod_apply_inr_fst,
Sum.elim_inr, LinearMap.inr_apply, prod_apply_inl_snd, prod_apply_inr_snd, Function.comp]
Free.prod
instance
[Module.Free R M] [Module.Free R N] : Module.Free R (M × N)
instance prod [Module.Free R M] [Module.Free R N] : Module.Free R (M × N) :=
.of_basis <| (Module.Free.chooseBasis R M).prod (Module.Free.chooseBasis R N)