File: Mathlib/LinearAlgebra/Eigenspace/Basic.lean

full_name: Module.End.eigenspace
code: /-- The submodule `eigenspace f μ` for a linear map `f` and a scalar `μ` consists of all vectors `x`
    such that `f x = μ • x`. (Def 5.36 of [axler2015])-/
def eigenspace (f : End R M) (μ : R) : Submodule R M 
goal: Submodule R M

full_name: Module.End.eigenspace_zero
code: @[simp]
theorem eigenspace_zero (f : End R M) : f.eigenspace 0 = LinearMap.ker f 
goal: f.eigenspace 0 = LinearMap.ker f

full_name: Module.End.HasEigenvector
code: /-- A nonzero element of an eigenspace is an eigenvector. (Def 5.7 of [axler2015]) -/
def HasEigenvector (f : End R M) (μ : R) (x : M) : Prop 
goal: Prop

full_name: Module.End.HasEigenvalue
code: /-- A scalar `μ` is an eigenvalue for a linear map `f` if there are nonzero vectors `x`
    such that `f x = μ • x`. (Def 5.5 of [axler2015]) -/
def HasEigenvalue (f : End R M) (a : R) : Prop 
goal: Prop

full_name: Module.End.Eigenvalues
code: /-- The eigenvalues of the endomorphism `f`, as a subtype of `R`. -/
def Eigenvalues (f : End R M) : Type _ 
goal: Type v

full_name: Module.End.Eigenvalues.val
code: @[coe]
def Eigenvalues.val (f : Module.End R M) : Eigenvalues f → R 
goal: f.Eigenvalues → R

full_name: Module.End.Eigenvalues.instCoeOut
code: instance Eigenvalues.instCoeOut {f : Module.End R M} : CoeOut (Eigenvalues f) R 
goal: CoeOut f.Eigenvalues R

full_name: Module.End.Eigenvalues.instDecidableEq
code: instance Eigenvalues.instDecidableEq [DecidableEq R] (f : Module.End R M) :
    DecidableEq (Eigenvalues f) 
goal: DecidableEq f.Eigenvalues

full_name: Module.End.hasEigenvalue_of_hasEigenvector
code: theorem hasEigenvalue_of_hasEigenvector {f : End R M} {μ : R} {x : M} (h : HasEigenvector f μ x) :
    HasEigenvalue f μ 
goal: f.HasEigenvalue μ

full_name: Module.End.mem_eigenspace_iff
code: theorem mem_eigenspace_iff {f : End R M} {μ : R} {x : M} : x ∈ eigenspace f μ ↔ f x = μ • x 
goal: x ∈ f.eigenspace μ ↔ f x = μ • x

full_name: Module.End.HasEigenvector.apply_eq_smul
code: theorem HasEigenvector.apply_eq_smul {f : End R M} {μ : R} {x : M} (hx : f.HasEigenvector μ x) :
    f x = μ • x 
goal: f x = μ • x

full_name: Module.End.HasEigenvector.pow_apply
code: theorem HasEigenvector.pow_apply {f : End R M} {μ : R} {v : M} (hv : f.HasEigenvector μ v) (n : ℕ) :
    (f ^ n) v = μ ^ n • v 
goal: (f ^ n) v = μ ^ n • v

full_name: Module.End.HasEigenvalue.exists_hasEigenvector
code: theorem HasEigenvalue.exists_hasEigenvector {f : End R M} {μ : R} (hμ : f.HasEigenvalue μ) :
    ∃ v, f.HasEigenvector μ v 
goal: ∃ v, f.HasEigenvector μ v

full_name: Module.End.HasEigenvalue.pow
code: lemma HasEigenvalue.pow {f : End R M} {μ : R} (h : f.HasEigenvalue μ) (n : ℕ) :
    (f ^ n).HasEigenvalue (μ ^ n) 
goal: (f ^ n).HasEigenvalue (μ ^ n)

full_name: Module.End.HasEigenvalue.isNilpotent_of_isNilpotent
code: /-- A nilpotent endomorphism has nilpotent eigenvalues.

See also `LinearMap.isNilpotent_trace_of_isNilpotent`. -/
lemma HasEigenvalue.isNilpotent_of_isNilpotent [NoZeroSMulDivisors R M] {f : End R M}
    (hfn : IsNilpotent f) {μ : R} (hf : f.HasEigenvalue μ) :
    IsNilpotent μ 
goal: IsNilpotent μ

full_name: Module.End.HasEigenvalue.mem_spectrum
code: theorem HasEigenvalue.mem_spectrum {f : End R M} {μ : R} (hμ : HasEigenvalue f μ) :
    μ ∈ spectrum R f 
goal: μ ∈ spectrum R f

full_name: Module.End.hasEigenvalue_iff_mem_spectrum
code: theorem hasEigenvalue_iff_mem_spectrum [FiniteDimensional K V] {f : End K V} {μ : K} :
    f.HasEigenvalue μ ↔ μ ∈ spectrum K f 
goal: f.HasEigenvalue μ ↔ μ ∈ spectrum K f

full_name: Module.End.eigenspace_div
code: theorem eigenspace_div (f : End K V) (a b : K) (hb : b ≠ 0) :
    eigenspace f (a / b) = LinearMap.ker (b • f - algebraMap K (End K V) a) 
goal: f.eigenspace (a / b) = LinearMap.ker (b • f - (algebraMap K (Module.End K V)) a)

full_name: Module.End.genEigenspace
code: /-- The generalized eigenspace for a linear map `f`, a scalar `μ`, and an exponent `k ∈ ℕ` is the
kernel of `(f - μ • id) ^ k`. (Def 8.10 of [axler2015]). Furthermore, a generalized eigenspace for
some exponent `k` is contained in the generalized eigenspace for exponents larger than `k`. -/
def genEigenspace (f : End R M) (μ : R) : ℕ →o Submodule R M 
goal: ℕ →o Submodule R M

full_name: Module.End.mem_genEigenspace
code: @[simp]
theorem mem_genEigenspace (f : End R M) (μ : R) (k : ℕ) (m : M) :
    m ∈ f.genEigenspace μ k ↔ ((f - μ • (1 : End R M)) ^ k) m = 0 
goal: m ∈ (f.genEigenspace μ) k ↔ ((f - μ • 1) ^ k) m = 0

full_name: Module.End.genEigenspace_zero
code: @[simp]
theorem genEigenspace_zero (f : End R M) (k : ℕ) :
    f.genEigenspace 0 k = LinearMap.ker (f ^ k) 
goal: (f.genEigenspace 0) k = LinearMap.ker (f ^ k)

full_name: Module.End.HasGenEigenvector
code: /-- A nonzero element of a generalized eigenspace is a generalized eigenvector.
    (Def 8.9 of [axler2015])-/
def HasGenEigenvector (f : End R M) (μ : R) (k : ℕ) (x : M) : Prop 
goal: Prop

full_name: Module.End.HasGenEigenvalue
code: /-- A scalar `μ` is a generalized eigenvalue for a linear map `f` and an exponent `k ∈ ℕ` if there
    are generalized eigenvectors for `f`, `k`, and `μ`. -/
def HasGenEigenvalue (f : End R M) (μ : R) (k : ℕ) : Prop 
goal: Prop

full_name: Module.End.genEigenrange
code: /-- The generalized eigenrange for a linear map `f`, a scalar `μ`, and an exponent `k ∈ ℕ` is the
    range of `(f - μ • id) ^ k`. -/
def genEigenrange (f : End R M) (μ : R) (k : ℕ) : Submodule R M 
goal: Submodule R M

full_name: Module.End.exp_ne_zero_of_hasGenEigenvalue
code: /-- The exponent of a generalized eigenvalue is never 0. -/
theorem exp_ne_zero_of_hasGenEigenvalue {f : End R M} {μ : R} {k : ℕ}
    (h : f.HasGenEigenvalue μ k) : k ≠ 0 
goal: k ≠ 0

full_name: Module.End.maxGenEigenspace
code: /-- The union of the kernels of `(f - μ • id) ^ k` over all `k`. -/
def maxGenEigenspace (f : End R M) (μ : R) : Submodule R M 
goal: Submodule R M

full_name: Module.End.genEigenspace_le_maximal
code: theorem genEigenspace_le_maximal (f : End R M) (μ : R) (k : ℕ) :
    f.genEigenspace μ k ≤ f.maxGenEigenspace μ 
goal: (f.genEigenspace μ) k ≤ f.maxGenEigenspace μ

full_name: Module.End.mem_maxGenEigenspace
code: @[simp]
theorem mem_maxGenEigenspace (f : End R M) (μ : R) (m : M) :
    m ∈ f.maxGenEigenspace μ ↔ ∃ k : ℕ, ((f - μ • (1 : End R M)) ^ k) m = 0 
goal: m ∈ f.maxGenEigenspace μ ↔ ∃ k, ((f - μ • 1) ^ k) m = 0

full_name: Module.End.maxGenEigenspaceIndex
code: /-- If there exists a natural number `k` such that the kernel of `(f - μ • id) ^ k` is the
maximal generalized eigenspace, then this value is the least such `k`. If not, this value is not
meaningful. -/
noncomputable def maxGenEigenspaceIndex (f : End R M) (μ : R) 
goal: ℕ

full_name: Module.End.maxGenEigenspace_eq
code: /-- For an endomorphism of a Noetherian module, the maximal eigenspace is always of the form kernel
`(f - μ • id) ^ k` for some `k`. -/
theorem maxGenEigenspace_eq [h : IsNoetherian R M] (f : End R M) (μ : R) :
    maxGenEigenspace f μ =
      f.genEigenspace μ (maxGenEigenspaceIndex f μ) 
goal: f.maxGenEigenspace μ = (f.genEigenspace μ) (f.maxGenEigenspaceIndex μ)

full_name: Module.End.hasGenEigenvalue_of_hasGenEigenvalue_of_le
code: /-- A generalized eigenvalue for some exponent `k` is also
    a generalized eigenvalue for exponents larger than `k`. -/
theorem hasGenEigenvalue_of_hasGenEigenvalue_of_le {f : End R M} {μ : R} {k : ℕ}
    {m : ℕ} (hm : k ≤ m) (hk : f.HasGenEigenvalue μ k) :
    f.HasGenEigenvalue μ m 
goal: f.HasGenEigenvalue μ m

full_name: Module.End.eigenspace_le_genEigenspace
code: /-- The eigenspace is a subspace of the generalized eigenspace. -/
theorem eigenspace_le_genEigenspace {f : End R M} {μ : R} {k : ℕ} (hk : 0 < k) :
    f.eigenspace μ ≤ f.genEigenspace μ k 
goal: f.eigenspace μ ≤ (f.genEigenspace μ) k

full_name: Module.End.hasGenEigenvalue_of_hasEigenvalue
code: /-- All eigenvalues are generalized eigenvalues. -/
theorem hasGenEigenvalue_of_hasEigenvalue {f : End R M} {μ : R} {k : ℕ} (hk : 0 < k)
    (hμ : f.HasEigenvalue μ) : f.HasGenEigenvalue μ k 
goal: f.HasGenEigenvalue μ k

full_name: Module.End.hasEigenvalue_of_hasGenEigenvalue
code: /-- All generalized eigenvalues are eigenvalues. -/
theorem hasEigenvalue_of_hasGenEigenvalue {f : End R M} {μ : R} {k : ℕ}
    (hμ : f.HasGenEigenvalue μ k) : f.HasEigenvalue μ 
goal: f.HasEigenvalue μ

full_name: Module.End.hasGenEigenvalue_iff_hasEigenvalue
code: /-- Generalized eigenvalues are actually just eigenvalues. -/
@[simp]
theorem hasGenEigenvalue_iff_hasEigenvalue {f : End R M} {μ : R} {k : ℕ} (hk : 0 < k) :
    f.HasGenEigenvalue μ k ↔ f.HasEigenvalue μ 
goal: f.HasGenEigenvalue μ k ↔ f.HasEigenvalue μ

full_name: Module.End.genEigenspace_le_genEigenspace_finrank
code: /-- Every generalized eigenvector is a generalized eigenvector for exponent `finrank K V`.
    (Lemma 8.11 of [axler2015]) -/
theorem genEigenspace_le_genEigenspace_finrank [FiniteDimensional K V] (f : End K V)
    (μ : K) (k : ℕ) : f.genEigenspace μ k ≤ f.genEigenspace μ (finrank K V) 
goal: (f.genEigenspace μ) k ≤ (f.genEigenspace μ) (FiniteDimensional.finrank K V)

full_name: Module.End.iSup_genEigenspace_eq_genEigenspace_finrank
code: @[simp] theorem iSup_genEigenspace_eq_genEigenspace_finrank
    [FiniteDimensional K V] (f : End K V) (μ : K) :
    ⨆ k, f.genEigenspace μ k = f.genEigenspace μ (finrank K V) 
goal: ⨆ k, (f.genEigenspace μ) k = (f.genEigenspace μ) (FiniteDimensional.finrank K V)

full_name: Module.End.genEigenspace_eq_genEigenspace_finrank_of_le
code: /-- Generalized eigenspaces for exponents at least `finrank K V` are equal to each other. -/
theorem genEigenspace_eq_genEigenspace_finrank_of_le [FiniteDimensional K V]
    (f : End K V) (μ : K) {k : ℕ} (hk : finrank K V ≤ k) :
    f.genEigenspace μ k = f.genEigenspace μ (finrank K V) 
goal: (f.genEigenspace μ) k = (f.genEigenspace μ) (FiniteDimensional.finrank K V)

full_name: Module.End.mapsTo_genEigenspace_of_comm
code: lemma mapsTo_genEigenspace_of_comm {f g : End R M} (h : Commute f g) (μ : R) (k : ℕ) :
    MapsTo g (f.genEigenspace μ k) (f.genEigenspace μ k) 
goal: Set.MapsTo ⇑g ↑((f.genEigenspace μ) k) ↑((f.genEigenspace μ) k)

full_name: Module.End.mapsTo_iSup_genEigenspace_of_comm
code: lemma mapsTo_iSup_genEigenspace_of_comm {f g : End R M} (h : Commute f g) (μ : R) :
    MapsTo g ↑(⨆ k, f.genEigenspace μ k) ↑(⨆ k, f.genEigenspace μ k) 
goal: Set.MapsTo ⇑g ↑(⨆ k, (f.genEigenspace μ) k) ↑(⨆ k, (f.genEigenspace μ) k)

full_name: Module.End.isNilpotent_restrict_sub_algebraMap
code: /-- The restriction of `f - μ • 1` to the `k`-fold generalized `μ`-eigenspace is nilpotent. -/
lemma isNilpotent_restrict_sub_algebraMap (f : End R M) (μ : R) (k : ℕ)
    (h : MapsTo (f - algebraMap R (End R M) μ)
      (f.genEigenspace μ k) (f.genEigenspace μ k) :=
      mapsTo_genEigenspace_of_comm (Algebra.mul_sub_algebraMap_commutes f μ) μ k) :
    IsNilpotent ((f - algebraMap R (End R M) μ).restrict h) 
goal: IsNilpotent (LinearMap.restrict (f - (algebraMap R (Module.End R M)) μ) h)

full_name: Module.End.isNilpotent_restrict_iSup_sub_algebraMap
code: /-- The restriction of `f - μ • 1` to the generalized `μ`-eigenspace is nilpotent. -/
lemma isNilpotent_restrict_iSup_sub_algebraMap [IsNoetherian R M] (f : End R M) (μ : R)
    (h : MapsTo (f - algebraMap R (End R M) μ)
      ↑(⨆ k, f.genEigenspace μ k) ↑(⨆ k, f.genEigenspace μ k) :=
      mapsTo_iSup_genEigenspace_of_comm (Algebra.mul_sub_algebraMap_commutes f μ) μ) :
    IsNilpotent ((f - algebraMap R (End R M) μ).restrict h) 
goal: IsNilpotent (LinearMap.restrict (f - (algebraMap R (Module.End R M)) μ) h)

full_name: Module.End.disjoint_genEigenspace
code: lemma disjoint_genEigenspace [NoZeroSMulDivisors R M]
    (f : End R M) {μ₁ μ₂ : R} (hμ : μ₁ ≠ μ₂) (k l : ℕ) :
    Disjoint (f.genEigenspace μ₁ k) (f.genEigenspace μ₂ l) 
goal: Disjoint ((f.genEigenspace μ₁) k) ((f.genEigenspace μ₂) l)

full_name: Module.End.disjoint_iSup_genEigenspace
code: lemma disjoint_iSup_genEigenspace [NoZeroSMulDivisors R M]
    (f : End R M) {μ₁ μ₂ : R} (hμ : μ₁ ≠ μ₂) :
    Disjoint (⨆ k, f.genEigenspace μ₁ k) (⨆ k, f.genEigenspace μ₂ k) 
goal: Disjoint (⨆ k, (f.genEigenspace μ₁) k) (⨆ k, (f.genEigenspace μ₂) k)

full_name: Module.End.injOn_genEigenspace
code: lemma injOn_genEigenspace [NoZeroSMulDivisors R M] (f : End R M) :
    InjOn (⨆ k, f.genEigenspace · k) {μ | ⨆ k, f.genEigenspace μ k ≠ ⊥} 
goal: Set.InjOn (fun x => ⨆ k, (f.genEigenspace x) k) {μ | ⨆ k, (f.genEigenspace μ) k ≠ ⊥}

full_name: Module.End.independent_genEigenspace
code: theorem independent_genEigenspace [NoZeroSMulDivisors R M] (f : End R M) :
    CompleteLattice.Independent (fun μ ↦ ⨆ k, f.genEigenspace μ k) 
goal: CompleteLattice.Independent fun μ => ⨆ k, (f.genEigenspace μ) k

full_name: Module.End.eigenspaces_independent
code: /-- The eigenspaces of a linear operator form an independent family of subspaces of `M`.  That is,
any eigenspace has trivial intersection with the span of all the other eigenspaces. -/
theorem eigenspaces_independent [NoZeroSMulDivisors R M] (f : End R M) :
    CompleteLattice.Independent f.eigenspace 
goal: CompleteLattice.Independent f.eigenspace

full_name: Module.End.eigenvectors_linearIndependent
code: /-- Eigenvectors corresponding to distinct eigenvalues of a linear operator are linearly
    independent. (Lemma 5.10 of [axler2015])

    We use the eigenvalues as indexing set to ensure that there is only one eigenvector for each
    eigenvalue in the image of `xs`. -/
theorem eigenvectors_linearIndependent [NoZeroSMulDivisors R M]
    (f : End R M) (μs : Set R) (xs : μs → M)
    (h_eigenvec : ∀ μ : μs, f.HasEigenvector μ (xs μ)) : LinearIndependent R xs 
goal: LinearIndependent (ι := ↑μs) R xs

full_name: Module.End.genEigenspace_restrict
code: /-- If `f` maps a subspace `p` into itself, then the generalized eigenspace of the restriction
    of `f` to `p` is the part of the generalized eigenspace of `f` that lies in `p`. -/
theorem genEigenspace_restrict (f : End R M) (p : Submodule R M) (k : ℕ) (μ : R)
    (hfp : ∀ x : M, x ∈ p → f x ∈ p) :
    genEigenspace (LinearMap.restrict f hfp) μ k =
      Submodule.comap p.subtype (f.genEigenspace μ k) 
goal: (Module.End.genEigenspace (LinearMap.restrict f hfp) μ) k = Submodule.comap p.subtype ((f.genEigenspace μ) k)

full_name: Submodule.inf_genEigenspace
code: lemma _root_.Submodule.inf_genEigenspace (f : End R M) (p : Submodule R M) {k : ℕ} {μ : R}
    (hfp : ∀ x : M, x ∈ p → f x ∈ p) :
    p ⊓ f.genEigenspace μ k =
      (genEigenspace (LinearMap.restrict f hfp) μ k).map p.subtype 
goal: p ⊓ (f.genEigenspace μ) k = Submodule.map p.subtype ((Module.End.genEigenspace (LinearMap.restrict f hfp) μ) k)

full_name: Module.End.eigenspace_restrict_le_eigenspace
code: /-- If `p` is an invariant submodule of an endomorphism `f`, then the `μ`-eigenspace of the
restriction of `f` to `p` is a submodule of the `μ`-eigenspace of `f`. -/
theorem eigenspace_restrict_le_eigenspace (f : End R M) {p : Submodule R M} (hfp : ∀ x ∈ p, f x ∈ p)
    (μ : R) : (eigenspace (f.restrict hfp) μ).map p.subtype ≤ f.eigenspace μ 
goal: Submodule.map p.subtype (Module.End.eigenspace (LinearMap.restrict f hfp) μ) ≤ f.eigenspace μ

full_name: Module.End.generalized_eigenvec_disjoint_range_ker
code: /-- Generalized eigenrange and generalized eigenspace for exponent `finrank K V` are disjoint. -/
theorem generalized_eigenvec_disjoint_range_ker [FiniteDimensional K V] (f : End K V) (μ : K) :
    Disjoint (f.genEigenrange μ (finrank K V))
      (f.genEigenspace μ (finrank K V)) 
goal: Disjoint (f.genEigenrange μ (FiniteDimensional.finrank K V)) ((f.genEigenspace μ) (FiniteDimensional.finrank K V))

full_name: Module.End.eigenspace_restrict_eq_bot
code: /-- If an invariant subspace `p` of an endomorphism `f` is disjoint from the `μ`-eigenspace of `f`,
then the restriction of `f` to `p` has trivial `μ`-eigenspace. -/
theorem eigenspace_restrict_eq_bot {f : End R M} {p : Submodule R M} (hfp : ∀ x ∈ p, f x ∈ p)
    {μ : R} (hμp : Disjoint (f.eigenspace μ) p) : eigenspace (f.restrict hfp) μ = ⊥ 
goal: Module.End.eigenspace (LinearMap.restrict f hfp) μ = ⊥

full_name: Module.End.pos_finrank_genEigenspace_of_hasEigenvalue
code: /-- The generalized eigenspace of an eigenvalue has positive dimension for positive exponents. -/
theorem pos_finrank_genEigenspace_of_hasEigenvalue [FiniteDimensional K V] {f : End K V}
    {k : ℕ} {μ : K} (hx : f.HasEigenvalue μ) (hk : 0 < k) :
    0 < finrank K (f.genEigenspace μ k) 
goal: 0 < FiniteDimensional.finrank K ↥((f.genEigenspace μ) k)

full_name: Module.End.map_genEigenrange_le
code: /-- A linear map maps a generalized eigenrange into itself. -/
theorem map_genEigenrange_le {f : End K V} {μ : K} {n : ℕ} :
    Submodule.map f (f.genEigenrange μ n) ≤ f.genEigenrange μ n 
goal: Submodule.map f (f.genEigenrange μ n) ≤ f.genEigenrange μ n

full_name: Module.End.iSup_genEigenspace_le_smul
code: lemma iSup_genEigenspace_le_smul (f : Module.End R M) (μ t : R) :
    (⨆ k, f.genEigenspace μ k) ≤ ⨆ k, (t • f).genEigenspace (t * μ) k 
goal: ⨆ k, (f.genEigenspace μ) k ≤ ⨆ k, ((t • f).genEigenspace (t * μ)) k

full_name: Module.End.iSup_genEigenspace_inf_le_add
code: lemma iSup_genEigenspace_inf_le_add
    (f₁ f₂ : End R M) (μ₁ μ₂ : R) (h : Commute f₁ f₂) :
    (⨆ k, f₁.genEigenspace μ₁ k) ⊓ (⨆ k, f₂.genEigenspace μ₂ k) ≤
    ⨆ k, (f₁ + f₂).genEigenspace (μ₁ + μ₂) k 
goal: (⨆ k, (f₁.genEigenspace μ₁) k) ⊓ ⨆ k, (f₂.genEigenspace μ₂) k ≤ ⨆ k, ((f₁ + f₂).genEigenspace (μ₁ + μ₂)) k

full_name: Module.End.map_smul_of_iInf_genEigenspace_ne_bot
code: lemma map_smul_of_iInf_genEigenspace_ne_bot [NoZeroSMulDivisors R M]
    {L F : Type*} [SMul R L] [FunLike F L (End R M)] [MulActionHomClass F R L (End R M)] (f : F)
    (μ : L → R) (h_ne : ⨅ x, ⨆ k, (f x).genEigenspace (μ x) k ≠ ⊥)
    (t : R) (x : L) :
    μ (t • x) = t • μ x 
goal: μ (t • x) = t • μ x

full_name: Module.End.map_add_of_iInf_genEigenspace_ne_bot_of_commute
code: lemma map_add_of_iInf_genEigenspace_ne_bot_of_commute [NoZeroSMulDivisors R M]
    {L F : Type*} [Add L] [FunLike F L (End R M)] [AddHomClass F L (End R M)] (f : F)
    (μ : L → R) (h_ne : ⨅ x, ⨆ k, (f x).genEigenspace (μ x) k ≠ ⊥)
    (h : ∀ x y, Commute (f x) (f y)) (x y : L) :
    μ (x + y) = μ x + μ y 
goal: μ (x + y) = μ x + μ y