File: Mathlib/Algebra/Polynomial/Module/AEval.lean

full_name: Module.AEval
code: /--
Suppose `a` is an element of an `R`-algebra `A` and `M` is an `A`-module.
Loosely speaking, `Module.AEval R M a` is the `R[X]`-module with elements `m : M`,
where the action of a polynomial $f$ is given by $f • m = f(a) • m$.

More precisely, `Module.AEval R M a` has elements `Module.AEval.of R M a m` for `m : M`,
and the action of `f` is `f • (of R M a m) = of R M a ((aeval a f) • m)`.
-/
@[nolint unusedArguments]
def AEval (R M : Type*) {A : Type*} [CommSemiring R] [Semiring A] [Algebra R A]
    [AddCommMonoid M] [Module A M] [Module R M] [IsScalarTower R A M] (_ : A) 
goal: A → Type u_2

full_name: Module.AEval.instAddCommGroup
code: instance AEval.instAddCommGroup {R A M} [CommSemiring R] [Semiring A] (a : A) [Algebra R A]
    [AddCommGroup M] [Module A M] [Module R M] [IsScalarTower R A M] :
    AddCommGroup <| AEval R M a 
goal: AddCommGroup (Module.AEval R M a)

full_name: Module.AEval.instAddCommMonoid
code: instance instAddCommMonoid : AddCommMonoid <| AEval R M a 
goal: AddCommMonoid (Module.AEval R M a)

full_name: Module.AEval.instModuleOrig
code: instance instModuleOrig : Module R <| AEval R M a 
goal: Module R (Module.AEval R M a)

full_name: Module.AEval.instFiniteOrig
code: instance instFiniteOrig [Finite R M] : Finite R <| AEval R M a 
goal: Module.Finite R (Module.AEval R M a)

full_name: Module.AEval.instModulePolynomial
code: instance instModulePolynomial : Module R[X] <| AEval R M a 
goal: Module R[X] (Module.AEval R M a)

full_name: Module.AEval.of
code: /--
The canonical linear equivalence between `M` and `Module.AEval R M a` as an `R`-module.
-/
def of : M ≃ₗ[R] AEval R M a 
goal: M ≃ₗ[R] Module.AEval R M a

full_name: Module.AEval.of_aeval_smul
code: lemma of_aeval_smul (f : R[X]) (m : M) : of R M a (aeval a f • m) = f • of R M a m 
goal: (Module.AEval.of R M a) ((Polynomial.aeval a) f • m) = f • (Module.AEval.of R M a) m

full_name: Module.AEval.of_symm_smul
code: @[simp] lemma of_symm_smul (f : R[X]) (m : AEval R M a) :
    (of R M a).symm (f • m) = aeval a f • (of R M a).symm m 
goal: (Module.AEval.of R M a).symm (f • m) = (Polynomial.aeval a) f • (Module.AEval.of R M a).symm m

full_name: Module.AEval.C_smul
code: @[simp] lemma C_smul (t : R) (m : AEval R M a) : C t • m = t • m 
goal: Polynomial.C t • m = t • m

full_name: Module.AEval.X_smul_of
code: lemma X_smul_of (m : M) : (X : R[X]) • (of R M a m) = of R M a (a • m) 
goal: Polynomial.X • (Module.AEval.of R M a) m = (Module.AEval.of R M a) (a • m)

full_name: Module.AEval.of_symm_X_smul
code: lemma of_symm_X_smul (m : AEval R M a) :
    (of R M a).symm ((X : R[X]) • m) = a • (of R M a).symm m 
goal: (Module.AEval.of R M a).symm (Polynomial.X • m) = a • (Module.AEval.of R M a).symm m

full_name: Module.AEval.instIsScalarTowerOrigPolynomial
code: instance instIsScalarTowerOrigPolynomial : IsScalarTower R R[X] <| AEval R M a 
goal: IsScalarTower R R[X] (Module.AEval R M a)

full_name: Module.AEval.instFinitePolynomial
code: instance instFinitePolynomial [Finite R M] : Finite R[X] <| AEval R M a 
goal: Module.Finite R[X] (Module.AEval R M a)

full_name: LinearMap.ofAEval
code: /-- Construct an `R[X]`-linear map out of `AEval R M a` from a `R`-linear map out of `M`. -/
def _root_.LinearMap.ofAEval {N} [AddCommMonoid N] [Module R N] [Module R[X] N]
    [IsScalarTower R R[X] N] (f : M →ₗ[R] N) (hf : ∀ m : M, f (a • m) = (X : R[X]) • f m) :
    AEval R M a →ₗ[R[X]] N 
goal: Module.AEval R M a →ₗ[R[X]] N

full_name: Module.AEval.annihilator_eq_ker_aeval
code: lemma annihilator_eq_ker_aeval [FaithfulSMul A M] :
    annihilator R[X] (AEval R M a) = RingHom.ker (aeval a) 
goal: Module.annihilator R[X] (Module.AEval R M a) = RingHom.ker (Polynomial.aeval a)

full_name: Module.AEval.annihilator_top_eq_ker_aeval
code: @[simp]
lemma annihilator_top_eq_ker_aeval [FaithfulSMul A M] :
    (⊤ : Submodule R[X] <| AEval R M a).annihilator = RingHom.ker (aeval a) 
goal: ⊤.annihilator = RingHom.ker (Polynomial.aeval a)

full_name: Module.AEval.comapSubmodule
code: /-- We can turn an `R[X]`-submodule into an `R`-submodule by forgetting the action of `X`. -/
def comapSubmodule :
    CompleteLatticeHom (Submodule R[X] <| AEval R M a) (Submodule R M) 
goal: CompleteLatticeHom (Submodule R[X] (Module.AEval R M a)) (Submodule R M)

full_name: Module.AEval.mem_comapSubmodule
code: @[simp] lemma mem_comapSubmodule {x : M} :
    x ∈ comapSubmodule R M a q ↔ of R M a x ∈ q 
goal: x ∈ (Module.AEval.comapSubmodule R M a) q ↔ (Module.AEval.of R M a) x ∈ q

full_name: Module.AEval.comapSubmodule_le_comap
code: @[simp] lemma comapSubmodule_le_comap :
    comapSubmodule R M a q ≤ (comapSubmodule R M a q).comap (Algebra.lsmul R R M a) 
goal: (Module.AEval.comapSubmodule R M a) q ≤
  Submodule.comap ((Algebra.lsmul R R M) a) ((Module.AEval.comapSubmodule R M a) q)

full_name: Module.AEval.mapSubmodule
code: /-- An `R`-submodule which is stable under the action of `a` can be promoted to an
`R[X]`-submodule. -/
def mapSubmodule : Submodule R[X] <| AEval R M a 
goal: Submodule R[X] (Module.AEval R M a)

full_name: Module.AEval.mem_mapSubmodule
code: @[simp] lemma mem_mapSubmodule {m : AEval R M a} :
    m ∈ mapSubmodule a hp ↔ (of R M a).symm m ∈ p 
goal: m ∈ Module.AEval.mapSubmodule a hp ↔ (Module.AEval.of R M a).symm m ∈ p

full_name: Module.AEval.mapSubmodule_comapSubmodule
code: @[simp] lemma mapSubmodule_comapSubmodule (h := comapSubmodule_le_comap a) :
    mapSubmodule a (p := comapSubmodule R M a q) h = q 
goal: Module.AEval.mapSubmodule a h = q

full_name: Module.AEval.comapSubmodule_mapSubmodule
code: @[simp] lemma comapSubmodule_mapSubmodule :
    comapSubmodule R M a (mapSubmodule a hp) = p 
goal: (Module.AEval.comapSubmodule R M a) (Module.AEval.mapSubmodule a hp) = p

full_name: Module.AEval.injective_comapSubmodule
code: lemma injective_comapSubmodule : Injective (comapSubmodule R M a) 
goal: Function.Injective ⇑(Module.AEval.comapSubmodule R M a)

full_name: Module.AEval.range_comapSubmodule
code: lemma range_comapSubmodule :
    range (comapSubmodule R M a) = {p | p ≤ p.comap (Algebra.lsmul R R M a)} 
goal: Set.range ⇑(Module.AEval.comapSubmodule R M a) = {p | p ≤ Submodule.comap ((Algebra.lsmul R R M) a) p}

full_name: Module.AEval'
code: /--
Given and `R`-module `M` and a linear map `φ : M →ₗ[R] M`, `Module.AEval' φ` is loosely speaking
the `R[X]`-module with elements `m : M`, where the action of a polynomial $f$ is given by
$f • m = f(a) • m$.

More precisely, `Module.AEval' φ` has elements `Module.AEval'.of φ m` for `m : M`,
and the action of `f` is `f • (of φ m) = of φ ((aeval φ f) • m)`.

`Module.AEval'` is defined as a special case of `Module.AEval` in which the `R`-algebra is
`M →ₗ[R] M`. Lemmas involving `Module.AEval` may be applied to `Module.AEval'`.
-/
abbrev AEval' 
goal: Type u_2

full_name: Module.AEval'.of
code: /--
The canonical linear equivalence between `M` and `Module.AEval' φ` as an `R`-module,
where `φ : M →ₗ[R] M`.
-/
abbrev AEval'.of : M ≃ₗ[R] AEval' φ 
goal: M ≃ₗ[R] Module.AEval' φ

full_name: Module.AEval'_def
code: lemma AEval'_def : AEval' φ = AEval R M φ 
goal: Module.AEval' φ = Module.AEval R M φ

full_name: Module.AEval'.X_smul_of
code: lemma AEval'.X_smul_of (m : M) : (X : R[X]) • AEval'.of φ m = AEval'.of φ (φ m) 
goal: Polynomial.X • (Module.AEval'.of φ) m = (Module.AEval'.of φ) (φ m)

full_name: Module.AEval'.of_symm_X_smul
code: lemma AEval'.of_symm_X_smul (m : AEval' φ) :
    (AEval'.of φ).symm ((X : R[X]) • m) = φ ((AEval'.of φ).symm m) 
goal: (Module.AEval'.of φ).symm (Polynomial.X • m) = φ ((Module.AEval'.of φ).symm m)

full_name: Module.instFinitePolynomialAEval'
code: instance [Finite R M] : Finite R[X] <| AEval' φ 
goal: Module.Finite R[X] (Module.AEval' φ)