File: Mathlib/Algebra/Module/LinearMap/End.lean

full_name: Module.End
code: /-- Linear endomorphisms of a module, with associated ring structure
`Module.End.semiring` and algebra structure `Module.End.algebra`. -/
abbrev Module.End (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] 
goal: Type v

full_name: LinearMap.instOneEnd
code: instance : One (Module.End R M) 
goal: One (Module.End R M)

full_name: LinearMap.instMulEnd
code: instance : Mul (Module.End R M) 
goal: Mul (Module.End R M)

full_name: LinearMap.one_eq_id
code: theorem one_eq_id : (1 : Module.End R M) = id 
goal: 1 = LinearMap.id

full_name: LinearMap.mul_eq_comp
code: theorem mul_eq_comp (f g : Module.End R M) : f * g = f.comp g 
goal: f * g = f ∘ₗ g

full_name: LinearMap.one_apply
code: @[simp]
theorem one_apply (x : M) : (1 : Module.End R M) x = x 
goal: 1 x = x

full_name: LinearMap.mul_apply
code: @[simp]
theorem mul_apply (f g : Module.End R M) (x : M) : (f * g) x = f (g x) 
goal: (f * g) x = f (g x)

full_name: LinearMap.coe_one
code: theorem coe_one : ⇑(1 : Module.End R M) = _root_.id 
goal: ⇑1 = id

full_name: LinearMap.coe_mul
code: theorem coe_mul (f g : Module.End R M) : ⇑(f * g) = f ∘ g 
goal: ⇑(f * g) = ⇑f ∘ ⇑g

full_name: Module.End.instNontrivial
code: instance _root_.Module.End.instNontrivial [Nontrivial M] : Nontrivial (Module.End R M) 
goal: Nontrivial (Module.End R M)

full_name: Module.End.monoid
code: instance _root_.Module.End.monoid : Monoid (Module.End R M) 
goal: Monoid (Module.End R M)

full_name: Module.End.semiring
code: instance _root_.Module.End.semiring : Semiring (Module.End R M) 
goal: Semiring (Module.End R M)

full_name: Module.End.natCast_apply
code: /-- See also `Module.End.natCast_def`. -/
@[simp]
theorem _root_.Module.End.natCast_apply (n : ℕ) (m : M) : (↑n : Module.End R M) m = n • m 
goal: ↑n m = n • m

full_name: Module.End.ofNat_apply
code: @[simp]
theorem _root_.Module.End.ofNat_apply (n : ℕ) [n.AtLeastTwo] (m : M) :
    (no_index (OfNat.ofNat n) : Module.End R M) m = OfNat.ofNat n • m 
goal: (OfNat.ofNat n) m = OfNat.ofNat n • m

full_name: Module.End.ring
code: instance _root_.Module.End.ring : Ring (Module.End R N₁) 
goal: Ring (Module.End R N₁)

full_name: Module.End.intCast_apply
code: /-- See also `Module.End.intCast_def`. -/
@[simp]
theorem _root_.Module.End.intCast_apply (z : ℤ) (m : N₁) : (z : Module.End R N₁) m = z • m 
goal: ↑z m = z • m

full_name: Module.End.isScalarTower
code: instance _root_.Module.End.isScalarTower :
    IsScalarTower S (Module.End R M) (Module.End R M) 
goal: IsScalarTower S (Module.End R M) (Module.End R M)

full_name: Module.End.smulCommClass
code: instance _root_.Module.End.smulCommClass [SMul S R] [IsScalarTower S R M] :
    SMulCommClass S (Module.End R M) (Module.End R M) 
goal: SMulCommClass S (Module.End R M) (Module.End R M)

full_name: Module.End.smulCommClass'
code: instance _root_.Module.End.smulCommClass' [SMul S R] [IsScalarTower S R M] :
    SMulCommClass (Module.End R M) S (Module.End R M) 
goal: SMulCommClass (Module.End R M) S (Module.End R M)

full_name: Module.End_isUnit_apply_inv_apply_of_isUnit
code: theorem _root_.Module.End_isUnit_apply_inv_apply_of_isUnit
    {f : Module.End R M} (h : IsUnit f) (x : M) :
    f (h.unit.inv x) = x 
goal: f (h.unit.inv x) = x

full_name: Module.End_isUnit_inv_apply_apply_of_isUnit
code: theorem _root_.Module.End_isUnit_inv_apply_apply_of_isUnit
    {f : Module.End R M} (h : IsUnit f) (x : M) :
    h.unit.inv (f x) = x 
goal: h.unit.inv (f x) = x

full_name: LinearMap.coe_pow
code: theorem coe_pow (f : M →ₗ[R] M) (n : ℕ) : ⇑(f ^ n) = f^[n] 
goal: ⇑(f ^ n) = (⇑f)^[n]

full_name: LinearMap.pow_apply
code: theorem pow_apply (f : M →ₗ[R] M) (n : ℕ) (m : M) : (f ^ n) m = f^[n] m 
goal: (f ^ n) m = (⇑f)^[n] m

full_name: LinearMap.pow_map_zero_of_le
code: theorem pow_map_zero_of_le {f : Module.End R M} {m : M} {k l : ℕ} (hk : k ≤ l)
    (hm : (f ^ k) m = 0) : (f ^ l) m = 0 
goal: (f ^ l) m = 0

full_name: LinearMap.commute_pow_left_of_commute
code: theorem commute_pow_left_of_commute
    [Semiring R₂] [AddCommMonoid M₂] [Module R₂ M₂] {σ₁₂ : R →+* R₂}
    {f : M →ₛₗ[σ₁₂] M₂} {g : Module.End R M} {g₂ : Module.End R₂ M₂}
    (h : g₂.comp f = f.comp g) (k : ℕ) : (g₂ ^ k).comp f = f.comp (g ^ k) 
goal: LinearMap.comp (g₂ ^ k) f = f.comp (g ^ k)

full_name: LinearMap.id_pow
code: @[simp]
theorem id_pow (n : ℕ) : (id : M →ₗ[R] M) ^ n = id 
goal: LinearMap.id ^ n = LinearMap.id

full_name: LinearMap.iterate_succ
code: theorem iterate_succ (n : ℕ) : f' ^ (n + 1) = comp (f' ^ n) f' 
goal: f' ^ (n + 1) = (f' ^ n) ∘ₗ f'

full_name: LinearMap.iterate_surjective
code: theorem iterate_surjective (h : Surjective f') : ∀ n : ℕ, Surjective (f' ^ n)
  
goal: Function.Surjective ⇑(f' ^ n)

full_name: LinearMap.iterate_injective
code: theorem iterate_injective (h : Injective f') : ∀ n : ℕ, Injective (f' ^ n)
  
goal: Function.Injective ⇑(f' ^ n)

full_name: LinearMap.iterate_bijective
code: theorem iterate_bijective (h : Bijective f') : ∀ n : ℕ, Bijective (f' ^ n)
  
goal: Function.Bijective ⇑(f' ^ n)

full_name: LinearMap.injective_of_iterate_injective
code: theorem injective_of_iterate_injective {n : ℕ} (hn : n ≠ 0) (h : Injective (f' ^ n)) :
    Injective f' 
goal: Function.Injective ⇑f'

full_name: LinearMap.surjective_of_iterate_surjective
code: theorem surjective_of_iterate_surjective {n : ℕ} (hn : n ≠ 0) (h : Surjective (f' ^ n)) :
    Surjective f' 
goal: Function.Surjective ⇑f'

full_name: LinearMap.applyModule
code: /-- The tautological action by `Module.End R M` (aka `M →ₗ[R] M`) on `M`.

This generalizes `Function.End.applyMulAction`. -/
instance applyModule : Module (Module.End R M) M 
goal: Module (Module.End R M) M

full_name: LinearMap.smul_def
code: @[simp]
protected theorem smul_def (f : Module.End R M) (a : M) : f • a = f a 
goal: f • a = f a

full_name: LinearMap.apply_faithfulSMul
code: /-- `LinearMap.applyModule` is faithful. -/
instance apply_faithfulSMul : FaithfulSMul (Module.End R M) M 
goal: FaithfulSMul (Module.End R M) M

full_name: LinearMap.apply_smulCommClass
code: instance apply_smulCommClass : SMulCommClass R (Module.End R M) M 
goal: SMulCommClass R (Module.End R M) M

full_name: LinearMap.apply_smulCommClass'
code: instance apply_smulCommClass' : SMulCommClass (Module.End R M) R M 
goal: SMulCommClass (Module.End R M) R M

full_name: LinearMap.apply_isScalarTower
code: instance apply_isScalarTower {R M : Type*} [CommSemiring R] [AddCommMonoid M] [Module R M] :
    IsScalarTower R (Module.End R M) M 
goal: IsScalarTower R (Module.End R M) M

full_name: DistribMulAction.toLinearMap
code: /-- Each element of the monoid defines a linear map.

This is a stronger version of `DistribMulAction.toAddMonoidHom`. -/
@[simps]
def toLinearMap (s : S) : M →ₗ[R] M 
goal: M →ₗ[R] M

full_name: DistribMulAction.toLinearMap_apply
code: /-- Each element of the monoid defines a linear map.

This is a stronger version of `DistribMulAction.toAddMonoidHom`. -/
@[simps]
def toLinearMap (s : S) : M →ₗ[R] M 
goal: ∀ (a : M), (DistribMulAction.toLinearMap R M s) a = s • a

full_name: DistribMulAction.toModuleEnd_apply
code: /-- Each element of the monoid defines a module endomorphism.

This is a stronger version of `DistribMulAction.toAddMonoidEnd`. -/
@[simps]
def toModuleEnd : S →* Module.End R M 
goal: (DistribMulAction.toModuleEnd R M) s = DistribMulAction.toLinearMap R M s

full_name: DistribMulAction.toModuleEnd
code: /-- Each element of the monoid defines a module endomorphism.

This is a stronger version of `DistribMulAction.toAddMonoidEnd`. -/
@[simps]
def toModuleEnd : S →* Module.End R M 
goal: S →* Module.End R M

full_name: Module.toModuleEnd
code: /-- Each element of the semiring defines a module endomorphism.

This is a stronger version of `DistribMulAction.toModuleEnd`. -/
@[simps]
def toModuleEnd : S →+* Module.End R M 
goal: S →+* Module.End R M

full_name: Module.toModuleEnd_apply
code: /-- Each element of the semiring defines a module endomorphism.

This is a stronger version of `DistribMulAction.toModuleEnd`. -/
@[simps]
def toModuleEnd : S →+* Module.End R M 
goal: (Module.toModuleEnd R M) s = DistribMulAction.toLinearMap R M s

full_name: Module.moduleEndSelf_symm_apply
code: /-- The canonical (semi)ring isomorphism from `Rᵐᵒᵖ` to `Module.End R R` induced by the right
multiplication. -/
@[simps]
def moduleEndSelf : Rᵐᵒᵖ ≃+* Module.End R R 
goal: (Module.moduleEndSelf R).symm f = MulOpposite.op (f 1)

full_name: Module.moduleEndSelf_apply
code: /-- The canonical (semi)ring isomorphism from `Rᵐᵒᵖ` to `Module.End R R` induced by the right
multiplication. -/
@[simps]
def moduleEndSelf : Rᵐᵒᵖ ≃+* Module.End R R 
goal: (Module.moduleEndSelf R) s = DistribMulAction.toLinearMap R R s

full_name: Module.moduleEndSelf
code: /-- The canonical (semi)ring isomorphism from `Rᵐᵒᵖ` to `Module.End R R` induced by the right
multiplication. -/
@[simps]
def moduleEndSelf : Rᵐᵒᵖ ≃+* Module.End R R 
goal: Rᵐᵒᵖ ≃+* Module.End R R

full_name: Module.moduleEndSelfOp_symm_apply
code: /-- The canonical (semi)ring isomorphism from `R` to `Module.End Rᵐᵒᵖ R` induced by the left
multiplication. -/
@[simps]
def moduleEndSelfOp : R ≃+* Module.End Rᵐᵒᵖ R 
goal: (Module.moduleEndSelfOp R).symm f = f 1

full_name: Module.moduleEndSelfOp_apply
code: /-- The canonical (semi)ring isomorphism from `R` to `Module.End Rᵐᵒᵖ R` induced by the left
multiplication. -/
@[simps]
def moduleEndSelfOp : R ≃+* Module.End Rᵐᵒᵖ R 
goal: (Module.moduleEndSelfOp R) s = DistribMulAction.toLinearMap Rᵐᵒᵖ R s

full_name: Module.moduleEndSelfOp
code: /-- The canonical (semi)ring isomorphism from `R` to `Module.End Rᵐᵒᵖ R` induced by the left
multiplication. -/
@[simps]
def moduleEndSelfOp : R ≃+* Module.End Rᵐᵒᵖ R 
goal: R ≃+* Module.End Rᵐᵒᵖ R

full_name: Module.End.natCast_def
code: theorem End.natCast_def (n : ℕ) [AddCommMonoid N₁] [Module R N₁] :
    (↑n : Module.End R N₁) = Module.toModuleEnd R N₁ n 
goal: ↑n = (Module.toModuleEnd R N₁) n

full_name: Module.End.intCast_def
code: theorem End.intCast_def (z : ℤ) [AddCommGroup N₁] [Module R N₁] :
    (z : Module.End R N₁) = Module.toModuleEnd R N₁ z 
goal: ↑z = (Module.toModuleEnd R N₁) z

full_name: LinearMap.smulRight
code: /-- When `f` is an `R`-linear map taking values in `S`, then `fun b ↦ f b • x` is an `R`-linear
map. -/
def smulRight (f : M₁ →ₗ[R] S) (x : M) : M₁ →ₗ[R] M 
goal: M₁ →ₗ[R] M

full_name: LinearMap.coe_smulRight
code: @[simp]
theorem coe_smulRight (f : M₁ →ₗ[R] S) (x : M) : (smulRight f x : M₁ → M) = fun c => f c • x 
goal: ⇑(f.smulRight x) = fun c => f c • x

full_name: LinearMap.smulRight_apply
code: theorem smulRight_apply (f : M₁ →ₗ[R] S) (x : M) (c : M₁) : smulRight f x c = f c • x 
goal: (f.smulRight x) c = f c • x

full_name: LinearMap.smulRight_zero
code: @[simp]
lemma smulRight_zero (f : M₁ →ₗ[R] S) : f.smulRight (0 : M) = 0 
goal: f.smulRight 0 = 0

full_name: LinearMap.zero_smulRight
code: @[simp]
lemma zero_smulRight (x : M) : (0 : M₁ →ₗ[R] S).smulRight x = 0 
goal: LinearMap.smulRight 0 x = 0

full_name: LinearMap.smulRight_apply_eq_zero_iff
code: @[simp]
lemma smulRight_apply_eq_zero_iff {f : M₁ →ₗ[R] S} {x : M} [NoZeroSMulDivisors S M] :
    f.smulRight x = 0 ↔ f = 0 ∨ x = 0 
goal: f.smulRight x = 0 ↔ f = 0 ∨ x = 0

full_name: LinearMap.applyₗ'_apply_apply
code: /-- Applying a linear map at `v : M`, seen as `S`-linear map from `M →ₗ[R] M₂` to `M₂`.

 See `LinearMap.applyₗ` for a version where `S = R`. -/
@[simps]
def applyₗ' : M →+ (M →ₗ[R] M₂) →ₗ[S] M₂ 
goal: ((LinearMap.applyₗ' S) v) f = f v

full_name: LinearMap.applyₗ'
code: /-- Applying a linear map at `v : M`, seen as `S`-linear map from `M →ₗ[R] M₂` to `M₂`.

 See `LinearMap.applyₗ` for a version where `S = R`. -/
@[simps]
def applyₗ' : M →+ (M →ₗ[R] M₂) →ₗ[S] M₂ 
goal: M →+ (M →ₗ[R] M₂) →ₗ[S] M₂

full_name: LinearMap.compRight
code: /-- Composition by `f : M₂ → M₃` is a linear map from the space of linear maps `M → M₂`
to the space of linear maps `M → M₃`. -/
def compRight (f : M₂ →ₗ[R] M₃) : (M →ₗ[R] M₂) →ₗ[R] M →ₗ[R] M₃ 
goal: (M →ₗ[R] M₂) →ₗ[R] M →ₗ[R] M₃

full_name: LinearMap.compRight_apply
code: @[simp]
theorem compRight_apply (f : M₂ →ₗ[R] M₃) (g : M →ₗ[R] M₂) : compRight f g = f.comp g 
goal: f.compRight g = f ∘ₗ g

full_name: LinearMap.applyₗ
code: /-- Applying a linear map at `v : M`, seen as a linear map from `M →ₗ[R] M₂` to `M₂`.
See also `LinearMap.applyₗ'` for a version that works with two different semirings.

This is the `LinearMap` version of `toAddMonoidHom.eval`. -/
@[simps]
def applyₗ : M →ₗ[R] (M →ₗ[R] M₂) →ₗ[R] M₂ 
goal: M →ₗ[R] (M →ₗ[R] M₂) →ₗ[R] M₂

full_name: LinearMap.applyₗ_apply_apply
code: /-- Applying a linear map at `v : M`, seen as a linear map from `M →ₗ[R] M₂` to `M₂`.
See also `LinearMap.applyₗ'` for a version that works with two different semirings.

This is the `LinearMap` version of `toAddMonoidHom.eval`. -/
@[simps]
def applyₗ : M →ₗ[R] (M →ₗ[R] M₂) →ₗ[R] M₂ 
goal: (LinearMap.applyₗ v) f = f v

full_name: LinearMap.smulRightₗ
code: /--
The family of linear maps `M₂ → M` parameterised by `f ∈ M₂ → R`, `x ∈ M`, is linear in `f`, `x`.
-/
def smulRightₗ : (M₂ →ₗ[R] R) →ₗ[R] M →ₗ[R] M₂ →ₗ[R] M 
goal: (M₂ →ₗ[R] R) →ₗ[R] M →ₗ[R] M₂ →ₗ[R] M

full_name: LinearMap.smulRightₗ_apply
code: @[simp]
theorem smulRightₗ_apply (f : M₂ →ₗ[R] R) (x : M) (c : M₂) :
    (smulRightₗ : (M₂ →ₗ[R] R) →ₗ[R] M →ₗ[R] M₂ →ₗ[R] M) f x c = f c • x 
goal: ((LinearMap.smulRightₗ f) x) c = f c • x