Documentation

Mathlib.Algebra.Polynomial.Bivariate

Bivariate polynomials #

This file introduces the notation R[X][Y] for the polynomial ring R[X][X] in two variables, and the notation Y for the second variable, in the Polynomial.Bivariate scope.

It also defines Polynomial.evalEval for the evaluation of a bivariate polynomial at a point on the affine plane, which is a ring homomorphism (Polynomial.evalEvalRingHom), as well as the abbreviation CC to view a constant in the base ring R as a bivariate polynomial.

The notation Y for X in the Polynomial scope.

Equations
    Instances For

      Pretty printer defined by notation3 command.

      Equations
        Instances For

          Pretty printer defined by notation3 command.

          Equations
            Instances For

              The notation R[X][Y] for R[X][X] in the Polynomial scope.

              Equations
                Instances For
                  @[reducible, inline]
                  abbrev Polynomial.evalEval {R : Type u_1} [Semiring R] (x y : R) (p : Polynomial (Polynomial R)) :
                  R

                  evalEval x y p is the evaluation p(x,y) of a two-variable polynomial p : R[X][Y].

                  Equations
                    Instances For
                      @[reducible, inline]
                      abbrev Polynomial.CC {R : Type u_1} [Semiring R] (r : R) :

                      A constant viewed as a polynomial in two variables.

                      Equations
                        Instances For
                          theorem Polynomial.evalEval_C {R : Type u_1} [Semiring R] (x y : R) (p : Polynomial R) :
                          evalEval x y (C p) = eval x p
                          @[simp]
                          theorem Polynomial.evalEval_CC {R : Type u_1} [Semiring R] (x y p : R) :
                          evalEval x y (CC p) = p
                          @[simp]
                          theorem Polynomial.evalEval_zero {R : Type u_1} [Semiring R] (x y : R) :
                          evalEval x y 0 = 0
                          @[simp]
                          theorem Polynomial.evalEval_one {R : Type u_1} [Semiring R] (x y : R) :
                          evalEval x y 1 = 1
                          @[simp]
                          theorem Polynomial.evalEval_natCast {R : Type u_1} [Semiring R] (x y : R) (n : ) :
                          evalEval x y n = n
                          @[simp]
                          theorem Polynomial.evalEval_X {R : Type u_1} [Semiring R] (x y : R) :
                          evalEval x y X = y
                          @[simp]
                          theorem Polynomial.evalEval_add {R : Type u_1} [Semiring R] (x y : R) (p q : Polynomial (Polynomial R)) :
                          evalEval x y (p + q) = evalEval x y p + evalEval x y q
                          theorem Polynomial.evalEval_sum {R : Type u_1} [Semiring R] (x y : R) (p : Polynomial R) (f : RPolynomial (Polynomial R)) :
                          evalEval x y (p.sum f) = p.sum fun (n : ) (a : R) => evalEval x y (f n a)
                          theorem Polynomial.evalEval_finset_sum {R : Type u_1} [Semiring R] {ι : Type u_3} (s : Finset ι) (x y : R) (f : ιPolynomial (Polynomial R)) :
                          evalEval x y (∑ is, f i) = is, evalEval x y (f i)
                          @[simp]
                          theorem Polynomial.evalEval_smul {R : Type u_1} {S : Type u_2} [Semiring R] [DistribSMul S R] [IsScalarTower S R R] (x y : R) (s : S) (p : Polynomial (Polynomial R)) :
                          evalEval x y (s p) = s evalEval x y p
                          @[simp]
                          theorem Polynomial.evalEval_neg {R : Type u_1} [Ring R] (x y : R) (p : Polynomial (Polynomial R)) :
                          evalEval x y (-p) = -evalEval x y p
                          @[simp]
                          theorem Polynomial.evalEval_sub {R : Type u_1} [Ring R] (x y : R) (p q : Polynomial (Polynomial R)) :
                          evalEval x y (p - q) = evalEval x y p - evalEval x y q
                          @[simp]
                          theorem Polynomial.evalEval_intCast {R : Type u_1} [Ring R] (x y : R) (n : ) :
                          evalEval x y n = n
                          @[simp]
                          theorem Polynomial.evalEval_mul {R : Type u_1} [CommSemiring R] (x y : R) (p q : Polynomial (Polynomial R)) :
                          evalEval x y (p * q) = evalEval x y p * evalEval x y q
                          theorem Polynomial.evalEval_prod {R : Type u_1} [CommSemiring R] {ι : Type u_3} (s : Finset ι) (x y : R) (p : ιPolynomial (Polynomial R)) :
                          evalEval x y (∏ js, p j) = js, evalEval x y (p j)
                          theorem Polynomial.evalEval_list_prod {R : Type u_1} [CommSemiring R] (x y : R) (l : List (Polynomial (Polynomial R))) :
                          @[simp]
                          theorem Polynomial.evalEval_pow {R : Type u_1} [CommSemiring R] (x y : R) (p : Polynomial (Polynomial R)) (n : ) :
                          evalEval x y (p ^ n) = evalEval x y p ^ n
                          theorem Polynomial.evalEval_dvd {R : Type u_1} [CommSemiring R] (x y : R) {p q : Polynomial (Polynomial R)} :
                          p qevalEval x y p evalEval x y q
                          @[reducible, inline]

                          evalEval x y as a ring homomorphism.

                          Equations
                            Instances For
                              @[simp]
                              theorem Polynomial.evalEvalRingHom_apply {R : Type u_1} [CommSemiring R] (x y : R) (a✝ : Polynomial (Polynomial R)) :
                              (evalEvalRingHom x y) a✝ = eval x (eval (C y) a✝)
                              theorem Polynomial.coe_evalEvalRingHom {R : Type u_1} [CommSemiring R] (x y : R) :
                              theorem Polynomial.map_evalRingHom_eval {R : Type u_1} [CommSemiring R] (x y : R) (p : Polynomial (Polynomial R)) :
                              eval y (map (evalRingHom x) p) = evalEval x y p
                              theorem Polynomial.map_mapRingHom_eval_map {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (f : R →+* S) (p : Polynomial (Polynomial R)) (q : Polynomial R) :
                              eval (map f q) (map (mapRingHom f) p) = map f (eval q p)
                              theorem Polynomial.map_mapRingHom_eval_map_eval {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (f : R →+* S) (p : Polynomial (Polynomial R)) (q : Polynomial R) (r : R) :
                              eval (f r) (eval (map f q) (map (mapRingHom f) p)) = f (eval r (eval q p))
                              theorem Polynomial.map_mapRingHom_evalEval {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (f : R →+* S) (p : Polynomial (Polynomial R)) (x y : R) :
                              evalEval (f x) (f y) (map (mapRingHom f) p) = f (evalEval x y p)

                              Two equivalent ways to express the evaluation of a bivariate polynomial over R at a point in the affine plane over an R-algebra S.

                              theorem Polynomial.eval₂_eval₂RingHom_apply {R : Type u_1} {S : Type u_2} [CommSemiring R] [CommSemiring S] (f : R →+* S) (x y : S) (p : Polynomial (Polynomial R)) :

                              Viewing R[X,Y,X'] as an R[X']-algebra, a polynomial p : R[X',Y'] can be evaluated at Y : R[X,Y,X'] (substitution of Y' by Y), obtaining another polynomial in R[X,Y,X']. When this polynomial is then evaluated at X' = X, the original polynomial p is recovered.

                              @[reducible, inline]
                              abbrev Polynomial.aevalAeval {R : Type u_1} {A : Type u_2} [CommRing R] [CommRing A] [Algebra R A] (x y : A) :

                              aevalAeval x y is the R-algebra evaluation morphism sending a two-variable polynomial p : R[X][Y] to p(x,y).

                              Equations
                                Instances For
                                  theorem Polynomial.coe_aevalAeval_eq_evalEval {A : Type u_2} [CommRing A] (x y : A) :
                                  (aevalAeval x y) = evalEval x y

                                  The R-algebra automorphism given by X ↦ Y and Y ↦ X.

                                  Equations
                                    Instances For
                                      @[simp]
                                      theorem Polynomial.Bivariate.swap_monomial_monomial {R : Type u_1} [CommRing R] (n m : ) (r : R) :
                                      swap ((monomial n) ((monomial m) r)) = (monomial m) ((monomial n) r)
                                      theorem Polynomial.Bivariate.aevalAeval_swap {R : Type u_1} {A : Type u_2} [CommRing R] [CommRing A] [Algebra R A] (x y : A) (p : Polynomial (Polynomial R)) :
                                      (aevalAeval x y) (swap p) = (aevalAeval y x) p

                                      Evaluating swap p at x, y is the same as evaluating p at y x.

                                      theorem Polynomial.Bivariate.aveal_eq_map_swap {R : Type u_1} {A : Type u_2} [CommRing R] [CommRing A] [Algebra R A] (x : A) (p : Polynomial (Polynomial R)) :
                                      (aeval (C x)) p = (mapAlgHom (aeval x)) (swap p)
                                      noncomputable def AdjoinRoot.evalEval {R : Type u_1} [CommRing R] {x y : R} {p : Polynomial (Polynomial R)} (h : Polynomial.evalEval x y p = 0) :

                                      If the evaluation (evalEval) of a bivariate polynomial p : R[X][Y] at a point (x,y) is zero, then Polynomial.evalEval x y factors through AdjoinRoot.evalEval, a ring homomorphism from AdjoinRoot p to R.

                                      Equations
                                        Instances For
                                          theorem AdjoinRoot.evalEval_mk {R : Type u_1} [CommRing R] {x y : R} {p : Polynomial (Polynomial R)} (h : Polynomial.evalEval x y p = 0) (g : Polynomial (Polynomial R)) :
                                          (evalEval h) ((mk p) g) = Polynomial.evalEval x y g