Limits related to polynomial and rational functions #
This file proves basic facts about limits of polynomial and rational functions.
The main result is Polynomial.isEquivalent_atTop_lead, which states that for
any polynomial P of degree n with leading coefficient a, the corresponding
polynomial function is equivalent to a * x^n as x goes to +β.
We can then use this result to prove various limits for polynomial and rational functions, depending on the degrees and leading coefficients of the considered polynomials.
theorem
Polynomial.eventually_atTop_not_isRoot
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
(hP : P β 0)
:
@[deprecated Polynomial.eventually_atTop_not_isRoot (since := "2026-02-05")]
theorem
Polynomial.eventually_no_roots
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
(hP : P β 0)
:
Alias of Polynomial.eventually_atTop_not_isRoot.
theorem
Polynomial.eventually_atBot_not_isRoot
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
(hP : P β 0)
:
theorem
Polynomial.isEquivalent_atTop_lead
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
:
Asymptotics.IsEquivalent Filter.atTop (fun (x : π) => eval x P) fun (x : π) => P.leadingCoeff * x ^ P.natDegree
theorem
Polynomial.tendsto_atTop_of_leadingCoeff_nonneg
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
(hdeg : 0 < P.degree)
(hnng : 0 β€ P.leadingCoeff)
:
Filter.Tendsto (fun (x : π) => eval x P) Filter.atTop Filter.atTop
theorem
Polynomial.tendsto_atTop_iff_leadingCoeff_nonneg
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
:
Filter.Tendsto (fun (x : π) => eval x P) Filter.atTop Filter.atTop β 0 < P.degree β§ 0 β€ P.leadingCoeff
theorem
Polynomial.tendsto_atBot_iff_leadingCoeff_nonpos
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
:
Filter.Tendsto (fun (x : π) => eval x P) Filter.atTop Filter.atBot β 0 < P.degree β§ P.leadingCoeff β€ 0
theorem
Polynomial.tendsto_atBot_of_leadingCoeff_nonpos
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
(hdeg : 0 < P.degree)
(hnps : P.leadingCoeff β€ 0)
:
Filter.Tendsto (fun (x : π) => eval x P) Filter.atTop Filter.atBot
theorem
Polynomial.abs_tendsto_atTop
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
(hdeg : 0 < P.degree)
:
Filter.Tendsto (fun (x : π) => |eval x P|) Filter.atTop Filter.atTop
theorem
Polynomial.isBoundedUnder_abs_atTop_iff
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
:
(Filter.IsBoundedUnder (fun (x1 x2 : π) => x1 β€ x2) Filter.atTop fun (x : π) => |eval x P|) β P.degree β€ 0
@[deprecated Polynomial.isBoundedUnder_abs_atTop_iff (since := "2026-02-05")]
theorem
Polynomial.abs_isBoundedUnder_iff
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
:
(Filter.IsBoundedUnder (fun (x1 x2 : π) => x1 β€ x2) Filter.atTop fun (x : π) => |eval x P|) β P.degree β€ 0
Alias of Polynomial.isBoundedUnder_abs_atTop_iff.
theorem
Polynomial.abs_tendsto_atTop_iff
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
:
theorem
Polynomial.tendsto_nhds_iff
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
{c : π}
:
Filter.Tendsto (fun (x : π) => eval x P) Filter.atTop (nhds c) β P.leadingCoeff = c β§ P.degree β€ 0
theorem
Polynomial.isEquivalent_atBot_lead
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
:
Asymptotics.IsEquivalent Filter.atBot (fun (x : π) => eval x P) fun (x : π) => P.leadingCoeff * x ^ P.natDegree
theorem
Polynomial.abs_tendsto_atBot
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
(hdeg : 0 < P.degree)
:
Filter.Tendsto (fun (x : π) => |eval x P|) Filter.atBot Filter.atTop
theorem
Polynomial.isBoundedUnder_abs_atBot_iff
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
:
(Filter.IsBoundedUnder (fun (x1 x2 : π) => x1 β€ x2) Filter.atBot fun (x : π) => |eval x P|) β P.degree β€ 0
theorem
Polynomial.abs_tendsto_atBot_iff
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P : Polynomial π)
[OrderTopology π]
:
theorem
Polynomial.isEquivalent_atTop_div
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
:
Asymptotics.IsEquivalent Filter.atTop (fun (x : π) => eval x P / eval x Q) fun (x : π) =>
P.leadingCoeff / Q.leadingCoeff * x ^ (βP.natDegree - βQ.natDegree)
theorem
Polynomial.div_tendsto_atTop_zero_of_degree_lt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : P.degree < Q.degree)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop (nhds 0)
@[deprecated Polynomial.div_tendsto_atTop_zero_of_degree_lt (since := "2026-02-05")]
theorem
Polynomial.div_tendsto_zero_of_degree_lt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : P.degree < Q.degree)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop (nhds 0)
theorem
Polynomial.div_tendsto_atTop_zero_iff_degree_lt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hQ : Q β 0)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop (nhds 0) β P.degree < Q.degree
@[deprecated Polynomial.div_tendsto_atTop_zero_iff_degree_lt (since := "2026-02-05")]
theorem
Polynomial.div_tendsto_zero_iff_degree_lt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hQ : Q β 0)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop (nhds 0) β P.degree < Q.degree
theorem
Polynomial.div_tendsto_atTop_leadingCoeff_div_of_degree_eq
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : P.degree = Q.degree)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop (nhds (P.leadingCoeff / Q.leadingCoeff))
@[deprecated Polynomial.div_tendsto_atTop_leadingCoeff_div_of_degree_eq (since := "2026-02-05")]
theorem
Polynomial.div_tendsto_leadingCoeff_div_of_degree_eq
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : P.degree = Q.degree)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop (nhds (P.leadingCoeff / Q.leadingCoeff))
Alias of Polynomial.div_tendsto_atTop_leadingCoeff_div_of_degree_eq.
theorem
Polynomial.div_tendsto_atTop_of_degree_gt'
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : Q.degree < P.degree)
(hpos : 0 < P.leadingCoeff / Q.leadingCoeff)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop Filter.atTop
theorem
Polynomial.div_tendsto_atTop_of_degree_gt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : Q.degree < P.degree)
(hQ : Q β 0)
(hnng : 0 β€ P.leadingCoeff / Q.leadingCoeff)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop Filter.atTop
theorem
Polynomial.div_tendsto_atBot_of_degree_gt'
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : Q.degree < P.degree)
(hneg : P.leadingCoeff / Q.leadingCoeff < 0)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop Filter.atBot
theorem
Polynomial.div_tendsto_atBot_of_degree_gt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : Q.degree < P.degree)
(hQ : Q β 0)
(hnps : P.leadingCoeff / Q.leadingCoeff β€ 0)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atTop Filter.atBot
theorem
Polynomial.abs_div_tendsto_atTop_atTop_of_degree_gt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : Q.degree < P.degree)
(hQ : Q β 0)
:
Filter.Tendsto (fun (x : π) => |eval x P / eval x Q|) Filter.atTop Filter.atTop
@[deprecated Polynomial.abs_div_tendsto_atTop_atTop_of_degree_gt (since := "2026-02-05")]
theorem
Polynomial.abs_div_tendsto_atTop_of_degree_gt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : Q.degree < P.degree)
(hQ : Q β 0)
:
Filter.Tendsto (fun (x : π) => |eval x P / eval x Q|) Filter.atTop Filter.atTop
Alias of Polynomial.abs_div_tendsto_atTop_atTop_of_degree_gt.
theorem
Polynomial.isEquivalent_atBot_div
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
:
Asymptotics.IsEquivalent Filter.atBot (fun (x : π) => eval x P / eval x Q) fun (x : π) =>
P.leadingCoeff / Q.leadingCoeff * x ^ (βP.natDegree - βQ.natDegree)
theorem
Polynomial.div_tendsto_atBot_zero_of_degree_lt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : P.degree < Q.degree)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atBot (nhds 0)
theorem
Polynomial.div_tendsto_atBot_zero_iff_degree_lt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hQ : Q β 0)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atBot (nhds 0) β P.degree < Q.degree
theorem
Polynomial.div_tendsto_atBot_leadingCoeff_div_of_degree_eq
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : P.degree = Q.degree)
:
Filter.Tendsto (fun (x : π) => eval x P / eval x Q) Filter.atBot (nhds (P.leadingCoeff / Q.leadingCoeff))
theorem
Polynomial.abs_div_tendsto_atBot_atTop_of_degree_gt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(hdeg : Q.degree < P.degree)
(hQ : Q β 0)
:
Filter.Tendsto (fun (x : π) => |eval x P / eval x Q|) Filter.atBot Filter.atTop
theorem
Polynomial.isLittleO_atTop_of_degree_lt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(h : P.degree < Q.degree)
:
theorem
Polynomial.isLittleO_atBot_of_degree_lt
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(h : P.degree < Q.degree)
:
theorem
Polynomial.isBigO_atTop_of_degree_le
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(h : P.degree β€ Q.degree)
:
theorem
Polynomial.isBigO_atBot_of_degree_le
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(h : P.degree β€ Q.degree)
:
@[deprecated Polynomial.isBigO_atTop_of_degree_le (since := "2026-02-05")]
theorem
Polynomial.isBigO_of_degree_le
{π : Type u_1}
[NormedField π]
[LinearOrder π]
[IsStrictOrderedRing π]
(P Q : Polynomial π)
[OrderTopology π]
(h : P.degree β€ Q.degree)
:
Alias of Polynomial.isBigO_atTop_of_degree_le.
theorem
Polynomial.eventually_cofinite_not_isRoot
{R : Type u_2}
[CommRing R]
[IsDomain R]
{P : Polynomial R}
(hP : P β 0)
:
theorem
Polynomial.isEquivalent_cobounded_leading_monomial
{R : Type u_2}
[NormedRing R]
[NormMulClass R]
{P : Polynomial R}
:
Asymptotics.IsEquivalent (Bornology.cobounded R) (fun (x : R) => eval x P) fun (x : R) =>
P.leadingCoeff * x ^ P.natDegree
theorem
Polynomial.isLittleO_cobounded_of_degree_lt
{R : Type u_2}
[NormedRing R]
[NormMulClass R]
{P Q : Polynomial R}
(h : P.degree < Q.degree)
:
theorem
Polynomial.isBigO_cobounded_of_degree_le
{R : Type u_2}
[NormedRing R]
[NormMulClass R]
{P Q : Polynomial R}
(h : P.degree β€ Q.degree)
: