Documentation

LeanPool.Stafford38.AlgebraicAnalysis.Ore.RightDivision

Right division in a coefficient-left derivation Ore model #

This file is the next structural layer after ore_derivation.lean. It does not identify a presented Weyl algebra with this model. It builds the finite normal-form algebra needed for that identification: the normal form of x^i * b, the right product of a normal polynomial by a monomial b*x^j, and the leading-term fact which drives right division by a monic polynomial.

The coefficient ring is allowed to be noncommutative. No commutative polynomial division theorem is used.

A derivation used to define a coefficient-left Ore normal form.

  • toFun : B → B

    The underlying additive derivation map.

  • map_zero' : self.toFun 0 = 0

    The derivation preserves zero.

  • map_add' (a b : B) : self.toFun (a + b) = self.toFun a + self.toFun b

    The derivation preserves addition.

  • leibniz' (a b : B) : self.toFun (a * b) = a * self.toFun b + self.toFun a * b

    The Leibniz rule.

Instances For
    @[simp]
    theorem AlgebraicAnalysis.OreDivisionDerivation.map_add {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (a b : B) :
    D.toFun (a + b) = D.toFun a + D.toFun b
    @[simp]
    theorem AlgebraicAnalysis.OreDivisionDerivation.leibniz {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (a b : B) :
    D.toFun (a * b) = a * D.toFun b + D.toFun a * b
    noncomputable def AlgebraicAnalysis.OreDivision.push {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (b : B) (i : ℕ) :

    The coefficient-left normal form of x^i*b under x*b=b*x+D(b).

    Equations
    Instances For
      theorem AlgebraicAnalysis.OreDivision.push_coeff {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (b : B) (i n : ℕ) :
      (push D b i).coeff n = ∑ k ∈ Finset.range (i + 1), if i - k = n then i.choose k • D.toFun^[k] b else 0
      theorem AlgebraicAnalysis.OreDivision.push_degree_le {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (b : B) (i : ℕ) :
      (push D b i).degree ≤ ↑i
      theorem AlgebraicAnalysis.OreDivision.push_coeff_top {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (b : B) (i : ℕ) :
      (push D b i).coeff i = b
      theorem AlgebraicAnalysis.OreDivision.push_eq_zero_of {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (b : B) (i : ℕ) (h : b = 0) :
      push D b i = 0
      noncomputable def AlgebraicAnalysis.OreDivision.rightTerm {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (i : ℕ) (a b : B) (j : ℕ) :

      Right multiplication of a normal polynomial by the monomial b*x^j.

      The definition is coefficientwise and finite. It is deliberately not the ordinary multiplication of Polynomial B: the inner push expansion is the derivation correction for moving b through powers of x.

      Equations
      Instances For
        noncomputable def AlgebraicAnalysis.OreDivision.rightMulMonomial {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (p : Polynomial B) (b : B) (j : ℕ) :

        Right multiplication by one coefficient-monomial.

        Equations
        Instances For
          theorem AlgebraicAnalysis.OreDivision.rightMulMonomial_coeff {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (p : Polynomial B) (b : B) (j n : ℕ) :
          (rightMulMonomial D p b j).coeff n = ∑ i ∈ p.support, ∑ k ∈ Finset.range (i + 1), if i - k + j = n then p.coeff i * i.choose k • D.toFun^[k] b else 0
          theorem AlgebraicAnalysis.OreDivision.rightTerm_zero {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (i : ℕ) (b : B) (j : ℕ) :
          rightTerm D i 0 b j = 0
          theorem AlgebraicAnalysis.OreDivision.rightTerm_add_left {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (i : ℕ) (a₁ a₂ b : B) (j : ℕ) :
          rightTerm D i (a₁ + a₂) b j = rightTerm D i a₁ b j + rightTerm D i a₂ b j
          theorem AlgebraicAnalysis.OreDivision.iterate_add {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (n : ℕ) (b₁ b₂ : B) :
          D.toFun^[n] (b₁ + b₂) = D.toFun^[n] b₁ + D.toFun^[n] b₂
          theorem AlgebraicAnalysis.OreDivision.rightMulMonomial_add_right {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (p : Polynomial B) (b₁ b₂ : B) (j : ℕ) :
          rightMulMonomial D p (b₁ + b₂) j = rightMulMonomial D p b₁ j + rightMulMonomial D p b₂ j
          noncomputable def AlgebraicAnalysis.OreDivision.rightMul {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (d q : Polynomial B) :

          The product d*q of a normal polynomial by a normal right quotient.

          Equations
          Instances For
            theorem AlgebraicAnalysis.OreDivision.rightMul_add {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (d q₁ q₂ : Polynomial B) :
            rightMul D d (q₁ + q₂) = rightMul D d q₁ + rightMul D d q₂

            The additive map given by right multiplication by a fixed normal form.

            Equations
            Instances For
              theorem AlgebraicAnalysis.OreDivision.rightMul_sub {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) (d q₁ q₂ : Polynomial B) :
              rightMul D d (q₁ - q₂) = rightMul D d q₁ - rightMul D d q₂

              The leading-degree theorem packages the strict filtered-intersection property needed by the relative principal-source construction. This is an Ore-polynomial filtration statement; it is deliberately not identified here with the Bernstein filtration on the Weyl algebra.

              theorem AlgebraicAnalysis.OreDivision.right_division_unique {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) [Nontrivial B] (d p q₁ q₂ r₁ r₂ : Polynomial B) (hd : d.Monic) (h₁ : p = rightMul D d q₁ + r₁) (h₂ : p = rightMul D d q₂ + r₂) (hr₁ : r₁ = 0 ∨ r₁.natDegree < d.natDegree) (hr₂ : r₂ = 0 ∨ r₂.natDegree < d.natDegree) :
              q₁ = q₂ ∧ r₁ = r₂
              theorem AlgebraicAnalysis.OreDivision.right_division_exists {B : Type u_1} [Ring B] (D : OreDivisionDerivation B) [Nontrivial B] (d p : Polynomial B) (hd : d.Monic) :
              ∃ (q : Polynomial B) (r : Polynomial B), p = rightMul D d q + r ∧ (r = 0 ∨ r.natDegree < d.natDegree)
              structure AlgebraicAnalysis.OreDivision.OreAmbient (B : Type u_2) (A : Type u_3) [Ring B] [Ring A] (D : OreDivisionDerivation B) :
              Type (max u_2 u_3)

              An ambient ring in which the Ore relation is represented.

              • embed : B →+* A

                The coefficient-ring embedding.

              • x : A

                The element representing the Ore variable.

              • relation (b : B) : self.x * self.embed b = self.embed b * self.x + self.embed (D.toFun b)

                The defining relation in the ambient ring.

              Instances For

                The inner derivation a ↦ p*a-a*p, used to formalize the iterated commutator expansion of a power of p.

                Equations
                Instances For

                  The ambient Ore presentation for an inner derivation.

                  Equations
                  Instances For
                    def AlgebraicAnalysis.OreDivision.OreAmbient.term {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (i j : ℕ) :
                    A

                    A term in the iterated commutator expansion.

                    Equations
                    Instances For
                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.push_term {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (i j : ℕ) :
                      O.x * term D O b i j = term D O b i (j + 1) + term D O b (i + 1) j
                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.mul_nsmul_left {A : Type u_3} [Ring A] (a u : A) (n : ℕ) :
                      a * n • u = n • (a * u)
                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.nsmul_mul_right {A : Type u_3} [Ring A] (a u : A) (n : ℕ) :
                      n • a * u = n • (a * u)
                      def AlgebraicAnalysis.OreDivision.OreAmbient.expansion {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (n : ℕ) :
                      A

                      The normal-order expansion of x^n * embed b.

                      Equations
                      Instances For
                        theorem AlgebraicAnalysis.OreDivision.OreAmbient.pow_mul {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (n : ℕ) :
                        O.x ^ n * O.embed b = expansion D O b n
                        def AlgebraicAnalysis.OreDivision.OreAmbient.reverseTerm {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (i j : ℕ) :
                        A

                        A single coefficient moved through a power of the Ore variable.

                        Equations
                        Instances For
                          def AlgebraicAnalysis.OreDivision.OreAmbient.reverseSignedTerm {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (i j : ℕ) :
                          A

                          A signed term for the reverse normal-order expansion.

                          Equations
                          Instances For
                            def AlgebraicAnalysis.OreDivision.OreAmbient.reverseExpansion {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (n : ℕ) :
                            A

                            The reverse normal-order expansion of x^n * embed b.

                            Equations
                            Instances For
                              theorem AlgebraicAnalysis.OreDivision.OreAmbient.reverseTerm_mul {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (i j : ℕ) :
                              reverseTerm D O b i j * O.x = reverseTerm D O b i (j + 1) - reverseTerm D O b (i + 1) j
                              theorem AlgebraicAnalysis.OreDivision.OreAmbient.reverseSignedTerm_mul {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (i j : ℕ) :
                              reverseSignedTerm D O b i j * O.x = reverseSignedTerm D O b i (j + 1) + reverseSignedTerm D O b (i + 1) j
                              theorem AlgebraicAnalysis.OreDivision.OreAmbient.reverse_mul {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (n : ℕ) :
                              O.embed b * O.x ^ n = reverseExpansion D O b n
                              theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_pow_mul_explicit {A : Type u_3} [Ring A] (p a : A) (m : ℕ) :
                              p ^ m * a = ∑ ij ∈ Finset.antidiagonal m, m.choose ij.1 • ((commutatorDerivation p).toFun^[ij.1] a * p ^ ij.2)
                              theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_pow_succ {A : Type u_3} [Ring A] (p x : A) (hpx : p * x - x * p = 1) (r : ℕ) :
                              p * x ^ (r + 1) - x ^ (r + 1) * p = (r + 1) • x ^ r
                              theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_iterate_pow_of_le {A : Type u_3} [Ring A] (p x : A) (hpx : p * x - x * p = 1) (j n : ℕ) (hjn : j ≤ n) :
                              theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_iterate_pow_of_lt {A : Type u_3} [Ring A] (p x : A) (hpx : p * x - x * p = 1) (j n : ℕ) (hnj : n < j) :
                              theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_iterate_pow {A : Type u_3} [Ring A] (p x : A) (hpx : p * x - x * p = 1) (j n : ℕ) :
                              theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_pow_mul_pow {A : Type u_3} [Ring A] (p x : A) (hpx : p * x - x * p = 1) (k r : ℕ) :
                              p ^ k * x ^ r = ∑ i ∈ Finset.range (k + 1), if i ≤ r then (k.choose i * r.descFactorial i) • (x ^ (r - i) * p ^ (k - i)) else 0

                              p-free monic corner #

                              The quotient by the image of right multiplication by p keeps only the p-free term of the normal-ordering expansion. The following theorem isolates the monic contribution; lower coefficient terms are handled by the separate Newton arithmetic lemmas in a2_newton_bound.lean.

                              The linear map given by right multiplication by p.

                              Equations
                              Instances For
                                theorem AlgebraicAnalysis.OreDivision.OreAmbient.pfree_power_of_le {k : Type u_4} {A : Type u_5} [Field k] [Ring A] [Algebra k A] (p x : A) (hpx : p * x - x * p = 1) (u n : ℕ) (hun : u ≤ n) :
                                (pRightMulRange p).mkQ (p ^ u * x ^ n) = ↑(n.descFactorial u) • (pRightMulRange p).mkQ (x ^ (n - u))
                                theorem AlgebraicAnalysis.OreDivision.OreAmbient.pfree_monic_corner {k : Type u_4} {A : Type u_5} [Field k] [Ring A] [Algebra k A] (p x : A) (hpx : p * x - x * p = 1) (m r : ℕ) :
                                (pRightMulRange p).mkQ (p ^ m * x ^ (m + r)) = (↑(m.choose m) * ↑((m + r).descFactorial m)) • (pRightMulRange p).mkQ (x ^ r)
                                theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_iterate_sum {A : Type u_3} [Ring A] (p : A) (j : ℕ) (s : Finset ℕ) (f : ℕ → A) :
                                (commutatorDerivation p).toFun^[j] (∑ i ∈ s, f i) = ∑ i ∈ s, (commutatorDerivation p).toFun^[j] (f i)
                                theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_iterate_eval_monomial_of_le {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (p b : B) (n j : ℕ) (hpb : ∀ (c : B), O.embed p * O.embed c = O.embed c * O.embed p) (hDp : D.toFun p = -1) (hjn : j ≤ n) :
                                (commutatorDerivation (O.embed p)).toFun^[j] (O.embed b * O.x ^ n) = O.embed b * n.descFactorial j • O.x ^ (n - j)
                                theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_iterate_eval_monomial {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (p b : B) (n j : ℕ) (hpb : ∀ (c : B), O.embed p * O.embed c = O.embed c * O.embed p) (hDp : D.toFun p = -1) :
                                (commutatorDerivation (O.embed p)).toFun^[j] (O.embed b * O.x ^ n) = if j ≤ n then O.embed b * n.descFactorial j • O.x ^ (n - j) else 0
                                def AlgebraicAnalysis.OreDivision.OreAmbient.eval {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (p : Polynomial B) :
                                A

                                Evaluation of a normal polynomial in an ambient Ore ring.

                                Equations
                                Instances For
                                  theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_iterate_eval {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (p : A) (q : Polynomial B) (j : ℕ) :
                                  (commutatorDerivation p).toFun^[j] (eval D O q) = ∑ i ∈ q.support, (commutatorDerivation p).toFun^[j] (O.embed (q.coeff i) * O.x ^ i)
                                  theorem AlgebraicAnalysis.OreDivision.OreAmbient.eval_zero {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) :
                                  eval D O 0 = 0
                                  theorem AlgebraicAnalysis.OreDivision.OreAmbient.eval_add {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (p q : Polynomial B) :
                                  eval D O (p + q) = eval D O p + eval D O q

                                  The additive evaluation homomorphism.

                                  Equations
                                  Instances For
                                    theorem AlgebraicAnalysis.OreDivision.OreAmbient.eval_monomial {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (j : ℕ) :
                                    eval D O ((Polynomial.monomial j) b) = O.embed b * O.x ^ j

                                    The coefficient-left normal form of an iterated commutator.

                                    Equations
                                    Instances For
                                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.commutator_iterate_eval_eq_eval_normal {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (p : B) (q : Polynomial B) (j : ℕ) (hpb : ∀ (c : B), O.embed p * O.embed c = O.embed c * O.embed p) (hDp : D.toFun p = -1) :
                                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.eval_push_eq_expansion {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (n : ℕ) :
                                      eval D O (push D b n) = expansion D O b n
                                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.eval_push {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (b : B) (n : ℕ) :
                                      eval D O (push D b n) = O.x ^ n * O.embed b
                                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.eval_rightTerm {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (i : ℕ) (a b : B) (j : ℕ) :
                                      eval D O (rightTerm D i a b j) = O.embed a * O.x ^ i * (O.embed b * O.x ^ j)
                                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.eval_rightMulMonomial {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (p : Polynomial B) (b : B) (j : ℕ) :
                                      eval D O (rightMulMonomial D p b j) = eval D O p * (O.embed b * O.x ^ j)
                                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.eval_rightMul {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) (d q : Polynomial B) :
                                      eval D O (rightMul D d q) = eval D O d * eval D O q
                                      theorem AlgebraicAnalysis.OreDivision.OreAmbient.eval_right_division_sound {B : Type u_2} {A : Type u_3} [Ring B] [Ring A] (D : OreDivisionDerivation B) (O : OreAmbient B A D) [Nontrivial B] (d p : Polynomial B) (hd : d.Monic) :
                                      ∃ (q : Polynomial B) (r : Polynomial B), eval D O p = eval D O d * eval D O q + eval D O r ∧ (r = 0 ∨ r.natDegree < d.natDegree)