Documentation

Mathlib.Algebra.Polynomial.Splits

Split polynomials #

A polynomial f : K[X] splits over a field extension L of K if it is zero or all of its irreducible factors over L have degree 1.

Main definitions #

@[deprecated Polynomial.Splits.zero (since := "2025-11-24")]
theorem Polynomial.splits_zero {R : Type u_1} [Semiring R] :

Alias of Polynomial.Splits.zero.

@[deprecated "Use `Splits.C` instead." (since := "2025-11-24")]
theorem Polynomial.splits_of_map_eq_C {K : Type v} {L : Type w} [CommRing K] [Field L] (i : K →+* L) {f : Polynomial K} {a : L} (h : map i f = C a) :
(map i f).Splits
@[deprecated Polynomial.Splits.C (since := "2025-11-24")]
theorem Polynomial.splits_C {R : Type u_1} [Semiring R] (a : R) :
(C a).Splits

Alias of Polynomial.Splits.C.

@[deprecated Polynomial.Splits.of_degree_eq_one (since := "2025-11-24")]

Alias of Polynomial.Splits.of_degree_eq_one.

@[deprecated Polynomial.Splits.of_degree_le_one (since := "2025-11-24")]

Alias of Polynomial.Splits.of_degree_le_one.

@[deprecated Polynomial.Splits.of_degree_eq_one (since := "2025-11-24")]

Alias of Polynomial.Splits.of_degree_eq_one.

@[deprecated Polynomial.Splits.of_natDegree_le_one (since := "2025-11-24")]

Alias of Polynomial.Splits.of_natDegree_le_one.

@[deprecated Polynomial.Splits.of_natDegree_eq_one (since := "2025-11-24")]

Alias of Polynomial.Splits.of_natDegree_eq_one.

@[deprecated Polynomial.Splits.mul (since := "2025-11-25")]
theorem Polynomial.splits_mul {R : Type u_1} [Semiring R] {f g : Polynomial R} (hf : f.Splits) (hg : g.Splits) :
(f * g).Splits

Alias of Polynomial.Splits.mul.

@[deprecated Polynomial.splits_mul_iff (since := "2025-11-25")]
theorem Polynomial.splits_of_splits_mul' {R : Type u_1} [CommRing R] {f g : Polynomial R} [IsDomain R] (hf₀ : f 0) (hg₀ : g 0) :

Alias of Polynomial.splits_mul_iff.

@[deprecated "Use `Polynomial.map_map` instead." (since := "2025-11-24")]
theorem Polynomial.splits_map_iff {F : Type u} {K : Type v} [CommRing K] [Field F] {L : Type u_2} [CommRing L] (i : K →+* L) (j : L →+* F) {f : Polynomial K} :
(map j (map i f)).Splits (map (j.comp i) f).Splits
@[deprecated Polynomial.Splits.one (since := "2025-11-24")]
theorem Polynomial.splits_one {R : Type u_1} [Semiring R] :

Alias of Polynomial.Splits.one.

@[deprecated Polynomial.Splits.X_sub_C (since := "2025-11-24")]
theorem Polynomial.splits_X_sub_C {R : Type u_1} [Ring R] (a : R) :
(X - C a).Splits

Alias of Polynomial.Splits.X_sub_C.

@[deprecated Polynomial.Splits.X (since := "2025-11-24")]
theorem Polynomial.splits_X {R : Type u_1} [Semiring R] :

Alias of Polynomial.Splits.X.

@[deprecated Polynomial.Splits.prod (since := "2025-11-24")]
theorem Polynomial.splits_prod {R : Type u_1} [CommSemiring R] {ι : Type u_2} {f : ιPolynomial R} {s : Finset ι} (h : is, (f i).Splits) :
(∏ is, f i).Splits

Alias of Polynomial.Splits.prod.

@[deprecated Polynomial.Splits.pow (since := "2025-11-24")]
theorem Polynomial.splits_pow {R : Type u_1} [Semiring R] {f : Polynomial R} (hf : f.Splits) (n : ) :
(f ^ n).Splits

Alias of Polynomial.Splits.pow.

@[deprecated Polynomial.Splits.X_pow (since := "2025-11-24")]
theorem Polynomial.splits_X_pow {R : Type u_1} [Semiring R] (n : ) :
(X ^ n).Splits

Alias of Polynomial.Splits.X_pow.

@[deprecated "Use `Polynomial.map_id` instead." (since := "2025-11-24")]
theorem Polynomial.splits_id_iff_splits {K : Type v} {L : Type w} [CommRing K] [Field L] (i : K →+* L) {f : Polynomial K} :
(map (RingHom.id L) (map i f)).Splits (map i f).Splits
@[deprecated Polynomial.Splits.comp_of_degree_le_one (since := "2025-11-25")]
theorem Polynomial.Splits.comp_of_map_degree_le_one {R : Type u_1} [Field R] {f g : Polynomial R} (hf : f.Splits) (hg : g.degree 1) :
(f.comp g).Splits

Alias of Polynomial.Splits.comp_of_degree_le_one.

@[deprecated Polynomial.Splits.exists_eval_eq_zero (since := "2025-12-01")]
theorem Polynomial.exists_root_of_splits' {R : Type u_1} [CommRing R] {f : Polynomial R} (hf : f.Splits) (hf0 : f.degree 0) :
∃ (a : R), eval a f = 0

Alias of Polynomial.Splits.exists_eval_eq_zero.

@[deprecated Polynomial.Splits.roots_ne_zero (since := "2025-12-01")]
theorem Polynomial.roots_ne_zero_of_splits' {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) (hf0 : f.natDegree 0) :

Alias of Polynomial.Splits.roots_ne_zero.

@[deprecated Polynomial.rootOfSplits (since := "2025-12-01")]
def Polynomial.rootOfSplits' {R : Type u_1} [CommRing R] {f : Polynomial R} (hf : f.Splits) (hfd : f.degree 0) :
R

Alias of Polynomial.rootOfSplits.

Equations
Instances For
    @[deprecated Polynomial.eval_rootOfSplits (since := "2025-12-01")]
    theorem Polynomial.map_rootOfSplits' {R : Type u_1} [CommRing R] {f : Polynomial R} (hf : f.Splits) (hfd : f.degree 0) :
    eval (rootOfSplits hf hfd) f = 0

    Alias of Polynomial.eval_rootOfSplits.

    @[deprecated Polynomial.Splits.natDegree_eq_card_roots (since := "2025-12-01")]

    Alias of Polynomial.Splits.natDegree_eq_card_roots.

    @[deprecated Polynomial.Splits.degree_eq_card_roots (since := "2025-12-01")]
    theorem Polynomial.degree_eq_card_roots' {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) (hf0 : f 0) :

    Alias of Polynomial.Splits.degree_eq_card_roots.

    @[deprecated Polynomial.splits_iff_splits (since := "2025-11-30")]
    theorem Polynomial.splits_iff {R : Type u_1} [Field R] {f : Polynomial R} :
    f.Splits f = 0 ∀ {g : Polynomial R}, Irreducible gg fg.degree = 1

    This lemma is for polynomials over a field.

    @[deprecated Polynomial.splits_iff_splits (since := "2025-11-30")]
    theorem Polynomial.Splits.def {R : Type u_1} [Field R] {f : Polynomial R} :
    f.Splits f = 0 ∀ {g : Polynomial R}, Irreducible gg fg.degree = 1

    This lemma is for polynomials over a field.

    @[deprecated Polynomial.splits_mul_iff (since := "2025-11-25")]
    theorem Polynomial.splits_of_splits_mul {R : Type u_1} [CommRing R] {f g : Polynomial R} [IsDomain R] (hf₀ : f 0) (hg₀ : g 0) :

    Alias of Polynomial.splits_mul_iff.

    @[deprecated Polynomial.Splits.splits_of_dvd (since := "2025-11-25")]
    theorem Polynomial.splits_of_splits_of_dvd {R : Type u_1} [CommRing R] {f g : Polynomial R} [IsDomain R] (hg : g.Splits) (hg₀ : g 0) (hfg : f g) :

    Alias of Polynomial.Splits.splits_of_dvd.

    @[deprecated "Use `Splits.splits_of_dvd` directly." (since := "2025-11-30")]
    theorem Polynomial.splits_of_splits_gcd_left {K : Type v} [Field K] [DecidableEq K] {f g : Polynomial K} (hf0 : f 0) (hf : f.Splits) :
    @[deprecated "Use `Splits.splits_of_dvd` directly." (since := "2025-11-30")]
    theorem Polynomial.splits_of_splits_gcd_right {K : Type v} [Field K] [DecidableEq K] {f g : Polynomial K} (hg0 : g 0) (hg : g.Splits) :
    @[deprecated Polynomial.Splits.degree_eq_one_of_irreducible (since := "2025-11-30")]

    Alias of Polynomial.Splits.degree_eq_one_of_irreducible.

    @[deprecated Polynomial.Splits.exists_eval_eq_zero (since := "2025-12-01")]
    theorem Polynomial.exists_root_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} (hf : f.Splits) (hf0 : f.degree 0) :
    ∃ (a : R), eval a f = 0

    Alias of Polynomial.Splits.exists_eval_eq_zero.

    @[deprecated Polynomial.Splits.roots_ne_zero (since := "2025-12-01")]
    theorem Polynomial.roots_ne_zero_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) (hf0 : f.natDegree 0) :

    Alias of Polynomial.Splits.roots_ne_zero.

    @[deprecated Polynomial.eval_rootOfSplits (since := "2025-12-01")]
    theorem Polynomial.map_rootOfSplits {R : Type u_1} [CommRing R] {f : Polynomial R} (hf : f.Splits) (hfd : f.degree 0) :
    eval (rootOfSplits hf hfd) f = 0

    Alias of Polynomial.eval_rootOfSplits.

    @[deprecated "`rootOfSplits'` is now deprecated." (since := "2025-12-01")]
    theorem Polynomial.rootOfSplits'_eq_rootOfSplits {K : Type v} {L : Type w} [Field K] [Field L] (i : K →+* L) {f : Polynomial K} (hf : (map i f).Splits) (hfd : (map i f).degree 0) :

    rootOfSplits' is definitionally equal to rootOfSplits.

    @[deprecated Polynomial.Splits.natDegree_eq_card_roots (since := "2025-11-30")]

    Alias of Polynomial.Splits.natDegree_eq_card_roots.

    @[deprecated Polynomial.Splits.degree_eq_card_roots (since := "2025-11-30")]
    theorem Polynomial.degree_eq_card_roots {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) (hf0 : f 0) :

    Alias of Polynomial.Splits.degree_eq_card_roots.

    @[deprecated Polynomial.Splits.map_roots (since := "2025-12-02")]
    theorem Polynomial.roots_map {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] {S : Type u_2} [CommRing S] [IsDomain S] [IsSimpleRing R] (hf : f.Splits) (i : R →+* S) :
    (map i f).roots = Multiset.map (⇑i) f.roots

    Alias of Polynomial.Splits.map_roots.

    @[deprecated Polynomial.Splits.image_rootSet (since := "2025-12-02")]
    theorem Polynomial.image_rootSet {R : Type u_1} [CommRing R] {f : Polynomial R} {A : Type u_2} {B : Type u_3} [CommRing A] [CommRing B] [IsDomain A] [IsDomain B] [IsSimpleRing A] [Algebra R A] [Algebra R B] (hf : (map (algebraMap R A) f).Splits) (g : A →ₐ[R] B) :
    g '' f.rootSet A = f.rootSet B

    Alias of Polynomial.Splits.image_rootSet.

    @[deprecated Polynomial.Splits.adjoin_rootSet_eq_range (since := "2025-12-06")]
    theorem Polynomial.adjoin_rootSet_eq_range {R : Type u_1} [CommRing R] {f : Polynomial R} {A : Type u_2} {B : Type u_3} [CommRing A] [CommRing B] [IsDomain A] [IsDomain B] [IsSimpleRing A] [Algebra R A] [Algebra R B] (hf : (map (algebraMap R A) f).Splits) (g : A →ₐ[R] B) :

    Alias of Polynomial.Splits.adjoin_rootSet_eq_range.

    @[deprecated Polynomial.Splits.eq_prod_roots (since := "2025-11-25")]
    theorem Polynomial.eq_prod_roots_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) :
    f = C f.leadingCoeff * (Multiset.map (fun (x : R) => X - C x) f.roots).prod

    Alias of Polynomial.Splits.eq_prod_roots.

    @[deprecated Polynomial.Splits.eq_prod_roots (since := "2025-11-25")]
    theorem Polynomial.eq_prod_roots_of_splits_id {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) :
    f = C f.leadingCoeff * (Multiset.map (fun (x : R) => X - C x) f.roots).prod

    Alias of Polynomial.Splits.eq_prod_roots.

    @[deprecated Polynomial.Splits.aeval_eq_prod_aroots (since := "2025-12-06")]
    theorem Polynomial.aeval_eq_prod_aroots_sub_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} {A : Type u_2} [CommRing A] [IsDomain A] [IsSimpleRing R] [Algebra R A] (hf : (map (algebraMap R A) f).Splits) (x : A) :
    (aeval x) f = (algebraMap R A) f.leadingCoeff * (Multiset.map (fun (x_1 : A) => x - x_1) (f.aroots A)).prod

    Alias of Polynomial.Splits.aeval_eq_prod_aroots.

    @[deprecated Polynomial.Splits.eval_eq_prod_roots (since := "2025-12-06")]
    theorem Polynomial.eval_eq_prod_roots_sub_of_splits_id {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) (x : R) :
    eval x f = f.leadingCoeff * (Multiset.map (fun (x_1 : R) => x - x_1) f.roots).prod

    Alias of Polynomial.Splits.eval_eq_prod_roots.

    @[deprecated Polynomial.Splits.eq_prod_roots_of_monic (since := "2025-12-02")]
    theorem Polynomial.eq_prod_roots_of_monic_of_splits_id {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) (hm : f.Monic) :
    f = (Multiset.map (fun (x : R) => X - C x) f.roots).prod

    Alias of Polynomial.Splits.eq_prod_roots_of_monic.

    @[deprecated Polynomial.Splits.aeval_eq_prod_aroots_of_monic (since := "2025-12-06")]
    theorem Polynomial.aeval_eq_prod_aroots_sub_of_monic_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} {A : Type u_2} [CommRing A] [IsDomain A] [IsSimpleRing R] [Algebra R A] (hf : (map (algebraMap R A) f).Splits) (hm : f.Monic) (x : A) :
    (aeval x) f = (Multiset.map (fun (x_1 : A) => x - x_1) (f.aroots A)).prod

    Alias of Polynomial.Splits.aeval_eq_prod_aroots_of_monic.

    @[deprecated Polynomial.Splits.eval_eq_prod_roots_of_monic (since := "2025-12-06")]
    theorem Polynomial.eval_eq_prod_roots_sub_of_monic_of_splits_id {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) (hm : f.Monic) (x : R) :
    eval x f = (Multiset.map (fun (x_1 : R) => x - x_1) f.roots).prod

    Alias of Polynomial.Splits.eval_eq_prod_roots_of_monic.

    @[deprecated Polynomial.Splits.eq_X_sub_C_of_single_root (since := "2025-12-06")]
    theorem Polynomial.eq_X_sub_C_of_splits_of_single_root {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] (hf : f.Splits) {x : R} (hr : f.roots = {x}) :
    f = C f.leadingCoeff * (X - C x)

    Alias of Polynomial.Splits.eq_X_sub_C_of_single_root.

    theorem Polynomial.mem_lift_of_splits_of_roots_mem_range (R : Type u_1) {K : Type v} [CommRing R] [Field K] [Algebra R K] {f : Polynomial K} (hs : f.Splits) (hm : f.Monic) (hr : af.roots, a (algebraMap R K).range) :
    theorem Polynomial.splits_of_natDegree_eq_two {K : Type v} {L : Type w} [Field K] [Field L] (i : K →+* L) {f : Polynomial K} {x : L} (h₁ : f.natDegree = 2) (h₂ : eval₂ i x f = 0) :
    (map i f).Splits

    A polynomial of degree 2 with a root splits.

    theorem Polynomial.splits_of_degree_eq_two {K : Type v} {L : Type w} [Field K] [Field L] (i : K →+* L) {f : Polynomial K} {x : L} (h₁ : f.degree = 2) (h₂ : eval₂ i x f = 0) :
    (map i f).Splits
    @[deprecated Polynomial.splits_iff_exists_multiset (since := "2025-12-02")]
    theorem Polynomial.splits_of_exists_multiset {R : Type u_1} [CommRing R] {f : Polynomial R} :
    f.Splits ∃ (m : Multiset R), f = C f.leadingCoeff * (Multiset.map (fun (x : R) => X - C x) m).prod

    Alias of Polynomial.splits_iff_exists_multiset.

    @[deprecated Polynomial.Splits.map (since := "2025-11-30")]
    theorem Polynomial.splits_of_splits_id {R : Type u_1} [Semiring R] {f : Polynomial R} (hf : f.Splits) {S : Type u_2} [Semiring S] (i : R →+* S) :
    (map i f).Splits

    Alias of Polynomial.Splits.map.

    @[deprecated Polynomial.Splits.of_splits_map (since := "2025-12-09")]
    theorem Polynomial.splits_of_comp {R : Type u_1} [CommRing R] {f : Polynomial R} {S : Type u_2} [CommRing S] [IsDomain S] [IsSimpleRing R] (i : R →+* S) (hf : (map i f).Splits) (hi : a(map i f).roots, a i.range) :

    Alias of Polynomial.Splits.of_splits_map.

    @[deprecated Polynomial.Splits.of_splits_map (since := "2025-12-09")]
    theorem Polynomial.splits_id_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} {S : Type u_2} [CommRing S] [IsDomain S] [IsSimpleRing R] (i : R →+* S) (hf : (map i f).Splits) (hi : a(map i f).roots, a i.range) :

    Alias of Polynomial.Splits.of_splits_map.

    @[deprecated Polynomial.Splits.map (since := "2025-12-09")]
    theorem Polynomial.splits_comp_of_splits {R : Type u_1} [Semiring R] {f : Polynomial R} (hf : f.Splits) {S : Type u_2} [Semiring S] (i : R →+* S) :
    (map i f).Splits

    Alias of Polynomial.Splits.map.

    theorem Polynomial.splits_of_algHom {R : Type u_1} {K : Type v} {L : Type w} [CommRing R] [Field K] [Field L] [Algebra R K] [Algebra R L] {f : Polynomial R} (h : (map (algebraMap R K) f).Splits) (e : K →ₐ[R] L) :
    theorem Polynomial.splits_of_isScalarTower {R : Type u_1} {K : Type v} (L : Type w) [CommRing R] [Field K] [Field L] [Algebra R K] [Algebra R L] {f : Polynomial R} [Algebra K L] [IsScalarTower R K L] (h : (map (algebraMap R K) f).Splits) :
    @[deprecated Polynomial.Splits.eval_derivative (since := "2025-12-08")]
    theorem Polynomial.eval₂_derivative_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] [DecidableEq R] (hf : f.Splits) (x : R) :
    eval x (derivative f) = f.leadingCoeff * (Multiset.map (fun (a : R) => (Multiset.map (fun (x_1 : R) => x - x_1) (f.roots.erase a)).prod) f.roots).sum

    Alias of Polynomial.Splits.eval_derivative.

    @[deprecated Polynomial.Splits.eval_derivative (since := "2025-12-08")]
    theorem Polynomial.aeval_derivative_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] [DecidableEq R] (hf : f.Splits) (x : R) :
    eval x (derivative f) = f.leadingCoeff * (Multiset.map (fun (a : R) => (Multiset.map (fun (x_1 : R) => x - x_1) (f.roots.erase a)).prod) f.roots).sum

    Alias of Polynomial.Splits.eval_derivative.

    @[deprecated Polynomial.Splits.eval_derivative (since := "2025-12-08")]
    theorem Polynomial.eval_derivative_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] [DecidableEq R] (hf : f.Splits) (x : R) :
    eval x (derivative f) = f.leadingCoeff * (Multiset.map (fun (a : R) => (Multiset.map (fun (x_1 : R) => x - x_1) (f.roots.erase a)).prod) f.roots).sum

    Alias of Polynomial.Splits.eval_derivative.

    @[deprecated Polynomial.Splits.eval_root_derivative (since := "2025-12-08")]
    theorem Polynomial.aeval_root_derivative_of_splits {R : Type u_1} [CommRing R] {f : Polynomial R} [IsDomain R] [DecidableEq R] (hf : f.Splits) (hm : f.Monic) {x : R} (hx : x f.roots) :
    eval x (derivative f) = (Multiset.map (fun (x_1 : R) => x - x_1) (f.roots.erase x)).prod

    Alias of Polynomial.Splits.eval_root_derivative.

    @[deprecated Polynomial.Splits.eval_derivative_eq_eval_mul_sum (since := "2025-12-12")]
    theorem Polynomial.eval_derivative_eq_eval_mul_sum_of_splits {R : Type u_1} [Field R] {f : Polynomial R} (hf : f.Splits) {x : R} (hx : eval x f 0) :
    eval x (derivative f) = eval x f * (Multiset.map (fun (z : R) => 1 / (x - z)) f.roots).sum

    Alias of Polynomial.Splits.eval_derivative_eq_eval_mul_sum.

    @[deprecated Polynomial.Splits.eval_derivative_div_eval_of_ne_zero (since := "2025-12-12")]
    theorem Polynomial.eval_derivative_div_eval_of_ne_zero_of_splits {R : Type u_1} [Field R] {f : Polynomial R} (hf : f.Splits) {x : R} (hx : eval x f 0) :
    eval x (derivative f) / eval x f = (Multiset.map (fun (z : R) => 1 / (x - z)) f.roots).sum

    Alias of Polynomial.Splits.eval_derivative_div_eval_of_ne_zero.

    @[deprecated Polynomial.Splits.coeff_zero_eq_leadingCoeff_mul_prod_roots (since := "2025-12-12")]

    Alias of Polynomial.Splits.coeff_zero_eq_leadingCoeff_mul_prod_roots.

    @[deprecated Polynomial.Splits.coeff_zero_eq_prod_roots_of_monic (since := "2025-12-12")]

    Alias of Polynomial.Splits.coeff_zero_eq_prod_roots_of_monic.

    @[deprecated Polynomial.Splits.nextCoeff_eq_neg_sum_roots_mul_leadingCoeff (since := "2025-12-12")]

    Alias of Polynomial.Splits.nextCoeff_eq_neg_sum_roots_mul_leadingCoeff.

    @[deprecated Polynomial.Splits.nextCoeff_eq_neg_sum_roots_of_monic (since := "2025-12-12")]

    Alias of Polynomial.Splits.nextCoeff_eq_neg_sum_roots_of_monic.

    @[deprecated Polynomial.coeff_zero_eq_prod_roots_of_monic_of_splits (since := "2025-10-08")]

    Alias of Polynomial.Splits.coeff_zero_eq_prod_roots_of_monic.


    Alias of Polynomial.Splits.coeff_zero_eq_prod_roots_of_monic.

    @[deprecated Polynomial.nextCoeff_eq_neg_sum_roots_of_monic_of_splits (since := "2025-10-08")]

    Alias of Polynomial.Splits.nextCoeff_eq_neg_sum_roots_of_monic.


    Alias of Polynomial.Splits.nextCoeff_eq_neg_sum_roots_of_monic.