Pi instances for modules #
This file defines instances for module and related structures on Pi types.
We also define the natural maps LinearMap.pi and LinearMap.proj on Pi types in the domain and
codomain, respectively.
theorem IsSMulRegular.pi {I : Type u} {f : I → Type v} {α : Type u_1} [(i : I) → SMul α (f i)] {k : α} (hk : ∀ (i : I), IsSMulRegular (f i) k) :
IsSMulRegular ((i : I) → f i) k
@[instance_reducible]
instance Pi.Function.module (I : Type u) (α : Type u_1) (β : Type u_2) [Semiring α] [AddCommMonoid β] [Module α β] :
Module α (I → β)
A special case of Pi.module for non-dependent types. Lean struggles to elaborate
definitions elsewhere in the library without this.
Equations
- Pi.Function.module I α β = Pi.module I (fun (a : I) => β) α
@[instance_reducible]
instance Pi.module' {I : Type u} {f : I → Type v} {g : I → Type u_1} {r : (i : I) → Semiring (f i)} {m : (i : I) → AddCommMonoid (g i)} [(i : I) → Module (f i) (g i)] :
Module ((i : I) → f i) ((i : I) → g i)
Equations
- Pi.module' = { toDistribMulAction := Pi.distribMulAction', add_smul := ⋯, zero_smul := ⋯ }
def LinearMap.pi {R : Type u_1} {M₂ : Type u_3} {ι : Type u_5} [Semiring R] [AddCommMonoid M₂] [Module R M₂] {φ : ι → Type u_7} [(i : ι) → AddCommMonoid (φ i)] [(i : ι) → Module R (φ i)] (f : (i : ι) → M₂ →ₗ[R] φ i) :
pi construction for linear functions. From a family of linear functions it produces a linear
function into a family of modules.
Equations
- LinearMap.pi f = { toFun := fun (c : M₂) (i : ι) => (f i) c, map_add' := ⋯, map_smul' := ⋯ }
Instances For
@[simp]
theorem LinearMap.pi_apply {R : Type u_1} {M₂ : Type u_3} {ι : Type u_5} [Semiring R] [AddCommMonoid M₂] [Module R M₂] {φ : ι → Type u_7} [(i : ι) → AddCommMonoid (φ i)] [(i : ι) → Module R (φ i)] (f : (i : ι) → M₂ →ₗ[R] φ i) (c : M₂) (i : ι) :
theorem LinearMap.pi_zero {R : Type u_1} {M₂ : Type u_3} {ι : Type u_5} [Semiring R] [AddCommMonoid M₂] [Module R M₂] {φ : ι → Type u_7} [(i : ι) → AddCommMonoid (φ i)] [(i : ι) → Module R (φ i)] :
theorem LinearMap.pi_comp {R : Type u_1} {M₂ : Type u_3} {M₃ : Type u_4} {ι : Type u_5} [Semiring R] [AddCommMonoid M₂] [Module R M₂] [AddCommMonoid M₃] [Module R M₃] {φ : ι → Type u_7} [(i : ι) → AddCommMonoid (φ i)] [(i : ι) → Module R (φ i)] (f : (i : ι) → M₂ →ₗ[R] φ i) (g : M₃ →ₗ[R] M₂) :
def LinearMap.const {R : Type u_1} {M₂ : Type u_3} {ι : Type u_5} [Semiring R] [AddCommMonoid M₂] [Module R M₂] :
The constant linear map, taking x to Function.const ι x.
Equations
- LinearMap.const = LinearMap.pi fun (x : ι) => LinearMap.id
Instances For
@[simp]
theorem LinearMap.const_apply {R : Type u_1} {M₂ : Type u_3} {ι : Type u_5} [Semiring R] [AddCommMonoid M₂] [Module R M₂] (x : M₂) :
def LinearMap.proj {R : Type u_1} {ι : Type u_5} [Semiring R] {φ : ι → Type u_7} [(i : ι) → AddCommMonoid (φ i)] [(i : ι) → Module R (φ i)] (i : ι) :
The projections from a family of modules are linear maps.
Note: this definition would be called Pi.evalLinearMap if we followed the pattern established by
Pi.evalAddHom, Pi.evalMonoidHom, Pi.evalRingHom, ...
Equations
- LinearMap.proj i = { toFun := Function.eval i, map_add' := ⋯, map_smul' := ⋯ }
Instances For
@[simp]
theorem LinearMap.coe_proj {R : Type u_1} {ι : Type u_5} [Semiring R] {φ : ι → Type u_7} [(i : ι) → AddCommMonoid (φ i)] [(i : ι) → Module R (φ i)] (i : ι) :
@[simp]
theorem LinearMap.toAddMonoidHom_proj {R : Type u_1} {ι : Type u_5} [Semiring R] {φ : ι → Type u_7} [(i : ι) → AddCommMonoid (φ i)] [(i : ι) → Module R (φ i)] (i : ι) :
theorem LinearMap.proj_apply {R : Type u_1} {ι : Type u_5} [Semiring R] {φ : ι → Type u_7} [(i : ι) → AddCommMonoid (φ i)] [(i : ι) → Module R (φ i)] (i : ι) (b : (i : ι) → φ i) :
theorem LinearMap.proj_surjective {R : Type u_1} {ι : Type u_5} [Semiring R] {φ : ι → Type u_7} [(i : ι) → AddCommMonoid (φ i)] [(i : ι) → Module R (φ i)] (i : ι) :
Function.Surjective ⇑(proj i)