Imports

CLRS Section 4.6 - All-input Master-theorem bridge

Section 4.5 proves the exact-power Master-theorem core for values T(b^i). The full CLRS theorem needs a second bridge from exact powers to arbitrary natural input sizes, including floor and ceiling recurrences.

This file proves the reusable transfer layer for that bridge. It first keeps the power-sandwich facts as explicit hypotheses, then gives a reusable way to discharge them from a monotonicity hypothesis plus a one-step scale bound between adjacent powers of the base. It also proves a real-log comparison bridge that connects the discrete scale a^(⌊log_b n⌋) to the textbook scale n^(log_b a) for all a ≥ 1 and b > 1.

namespace CLRSnamespace Chapter04

Monotone and sandwich interfaces

Absolute-value monotonicity for a cost function.

def MonotoneAbs (T : ) : Prop := {m n : }, m n |T m| |T n|

Eventual one-step control for a comparison scale across one multiplication by the Master-theorem base. This is the local regularity assumption that turns the adjacent-power interval b^i ≤ n < b^(i+1) into the global power-sandwich hypotheses below.

def EventuallyPowerStepBound (b : ) (g : ) : Prop := A : , 0 < A n₀ : , n, n₀ n |g (b * n)| A * |g n|

Discrete critical-power scale for the exact-power Master theorem case 1. On exact powers it satisfies criticalPowerScale a b (b^i) = a^i; between exact powers it is the step function determined by Nat.log b n.

This, criticalPowerLogScale, and tailDominatedScale are deliberately weaker and cleaner than the analytic scales n^(log_b a), but it is enough to make the exact-power-to-all-input bridge concrete for the three Master cases.

def criticalPowerScale (a b : ) (n : ) : := (a : ) ^ Nat.log b n

Discrete case-2 Master scale. On exact powers this is (i+1) a^i; between exact powers it is the step function determined by Nat.log b n.

def criticalPowerLogScale (a b : ) (n : ) : := ((Nat.log b n : ) + 1) * criticalPowerScale a b n

Discrete case-3 Master scale. On exact powers this is the scale from master_case3_tail_dominated; between exact powers it is again the step function determined by Nat.log b n.

noncomputable def tailDominatedScale (a b : ) (f : ) (n : ) : := (if Nat.log b n = 0 then 1 else normalizedForcing a b f (Nat.log b n - 1)) * criticalPowerScale a b n
theorem criticalPowerScale_exactPower (a b i : ) (hb : 1 < b) : criticalPowerScale a b (b ^ i) = (a : ) ^ i := theorem criticalPowerLogScale_exactPower (a b i : ) (hb : 1 < b) : criticalPowerLogScale a b (b ^ i) = ((i : ) + 1) * ((a : ) ^ i) := theorem tailDominatedScale_exactPower (a b : ) (f : ) (i : ) (hb : 1 < b) : tailDominatedScale a b f (b ^ i) = (if i = 0 then 1 else normalizedForcing a b f (i - 1)) * ((a : ) ^ i) := theorem criticalPowerLogScale_nonneg (a b n : ) : 0 criticalPowerLogScale a b n := exact mul_le_mul hlog_real hpow (pow_nonneg ha_nonneg _) ( )

Polynomial comparison scales

The usual polynomial comparison scale n^p. This is the textbook-facing specialization of the critical Master scale when a = b^p.

noncomputable def polynomialScale (p : ) (n : ) : := (n : ) ^ p

The polynomial-logarithmic comparison scale (⌊log_b n⌋ + 1)n^p. It is a discrete-log version of the CLRS case-2 scale n^p log n, chosen so that it connects directly to the all-input exact-power bridge.

noncomputable def polynomialLogScale (b p : ) (n : ) : := ((Nat.log b n : ) + 1) * polynomialScale p n
private theorem one_le_base_pow_of_one_lt (b p : ) (hb : 1 < b) : 1 b ^ p :=

When a = b^p, the discrete critical-power scale is asymptotic to the ordinary polynomial scale n^p. This is the main comparison lemma that turns case-1 all-input Master wrappers into textbook-looking statements whenever log_b a is a natural number.

When a = b^p, the discrete case-2 Master scale is asymptotic to (⌊log_b n⌋ + 1)n^p. This keeps the statement discrete while matching the standard n^p log n shape used in CLRS.

Real-logarithmic comparison scales

The real-valued exponent log_b a = log a / log b. This is the exponent that appears in the standard CLRS Master-theorem statement as n^(log_b a).

When a = b^p for natural p, this reduces to (p : ℝ), and the criticalPowerScale_isBigTheta_polynomialScale comparison above is a special case of the general comparison proved here.

noncomputable def realLogExponent (a b : ) : := Real.log (a : ) / Real.log (b : )

The real-log comparison scale n^(log_b a). This is the textbook scale used in the standard CLRS statement of the Master theorem: the homogeneous-solution growth rate without floors and ceilings.

For integer exponents it coincides with the ordinary polynomial scale polynomialScale.

noncomputable def realLogScale (a b : ) (n : ) : := (n : ) ^ (realLogExponent a b)

The textbook case-2 Master scale n^(log_b a) log n.

noncomputable def realLogLogScale (a b : ) (n : ) : := realLogScale a b n * Real.log (n : )

When 1 ≤ a and 1 < b, the discrete critical-power scale a^(⌊log_b n⌋) is asymptotically equivalent to the real-log scale n^(log_b a).

This is the main bridge between the discrete all-input Master-theorem proof and the standard CLRS statement in terms of n^(log_b a). The constant factor is at most a in the Ω direction and 1 in the O direction, so the asymptotic class is exact.

When 1 ≤ a and 1 < b, the discrete case-2 scale (⌊log_b n⌋+1)a^(⌊log_b n⌋) is asymptotically equivalent to the textbook scale n^(log_b a) log n.

Floor/ceiling recurrence interfaces

All-input floor-division form of the Master-theorem recurrence: T(n) = a T(⌊n / b⌋) + f(n).

structure FloorDivideRecurrence (a b : ) (f T : ) : Prop where step : n : , T n = (a : ) * T (n / b) + f n

All-input ceiling-division form of the Master-theorem recurrence: T(n) = a T(⌈n / b⌉) + f(n), represented over natural numbers as (n + b - 1) / b.

structure CeilDivideRecurrence (a b : ) (f T : ) : Prop where step : n : , T n = (a : ) * T ((n + (b - 1)) / b) + f n

Eventually every large input can be bounded above by a large enough exact power, with the comparison scale at that power controlled by the scale at the original input.

def EventuallyPowerUpperSandwich (b : ) (g : ) : Prop := A : , 0 < A i₀ : , n₀ : , n, n n₀ i : , i i₀ n b ^ i |g (b ^ i)| A * |g n|

Eventually every large input has a large enough exact power below it, with the comparison scale at the original input controlled by the scale at that power.

def EventuallyPowerLowerSandwich (b : ) (g : ) : Prop := A : , 0 < A i₀ : , n₀ : , n, n n₀ i : , i i₀ b ^ i n |g n| A * |g (b ^ i)|

Adjacent powers generate sandwich witnesses

Every positive natural input lies between adjacent powers of a base b > 1. This is the arithmetic step that CLRS uses implicitly when it extends exact-power recurrence bounds to all input sizes.

theorem powerInterval_of_pos (b n : ) (hb : 1 < b) (hn : n 0) : b ^ Nat.log b n n n < b ^ (Nat.log b n + 1) := Nat.pow_log_le_self b hn,
private theorem power_log_ge_step_threshold {b step n j₀ : } (hb : 1 < b) (hj₀_step : Nat.log b step + 1 j₀) (hj₀_log : j₀ Nat.log b n) : step b ^ Nat.log b n :=

Monotone scales with eventual one-step control automatically satisfy the upper power-sandwich hypothesis: for every large n, choose the next exact power above it.

calc |g (b ^ i)| = |g (b * b ^ Nat.log b n)| := _ A * |g (b ^ Nat.log b n)| := hlocal _ A * |g n| :=

Monotone scales with eventual one-step control automatically satisfy the lower power-sandwich hypothesis: for every large n, choose the previous exact power below it.

calc |g n| |g (b ^ (Nat.log b n + 1))| := hg_mono hn_le_next _ = |g (b * b ^ Nat.log b n)| := _ A * |g (b ^ Nat.log b n)| := hlocal _ = A * |g (b ^ i)| :=

Exact powers to all inputs

Transfer an exact-power big-O bound to all natural inputs, provided the cost is monotone in absolute value and the comparison function admits an eventual upper power sandwich.

theorem allInput_bigO_of_power_upper_sandwich (b : ) (T g : ) (hT_mono : MonotoneAbs T) (hg_sandwich : EventuallyPowerUpperSandwich b g) (h_power : Chapter03.isBigO (fun i : => T (b ^ i)) (fun i : => g (b ^ i))) : Chapter03.isBigO T g := calc |T n| |T (b ^ i)| := hT_mono hn_le_pow _ C * |g (b ^ i)| := hC i hi_ge _ C * (A * |g n|) := _ = (C * A) * |g n| :=

Transfer an exact-power big-Omega bound to all natural inputs, provided the cost is monotone in absolute value and the comparison function admits an eventual lower power sandwich.

theorem allInput_bigOmega_of_power_lower_sandwich (b : ) (T g : ) (hT_mono : MonotoneAbs T) (hg_sandwich : EventuallyPowerLowerSandwich b g) (h_power : Chapter03.isBigOmega (fun i : => T (b ^ i)) (fun i : => g (b ^ i))) : Chapter03.isBigOmega T g := calc (c / A) * |g n| (c / A) * (A * |g (b ^ i)|) := _ = c * |g (b ^ i)| := _ |T (b ^ i)| := hc i hi_ge _ |T n| := hT_mono hpow_le_n

Transfer an exact-power big-Theta bound to all natural inputs using both power sandwich directions.

theorem allInput_bigTheta_of_power_sandwich (b : ) (T g : ) (hT_mono : MonotoneAbs T) (hg_upper : EventuallyPowerUpperSandwich b g) (hg_lower : EventuallyPowerLowerSandwich b g) (h_power : Chapter03.isBigTheta (fun i : => T (b ^ i)) (fun i : => g (b ^ i))) : Chapter03.isBigTheta T g :=

Direct all-input transfer theorem from exact powers using adjacent-power regularity of the comparison scale. This packages the CLRS proof step: choose the exact power immediately below or above an arbitrary input n, use monotonicity for T, and use one-step regularity for g.

theorem allInput_bigTheta_of_powerStep (b : ) (T g : ) (hb : 1 < b) (hT_mono : MonotoneAbs T) (hg_mono : MonotoneAbs g) (hg_step : EventuallyPowerStepBound b g) (h_power : Chapter03.isBigTheta (fun i : => T (b ^ i)) (fun i : => g (b ^ i))) : Chapter03.isBigTheta T g := allInput_bigTheta_of_power_sandwich b T g hT_mono (eventuallyPowerUpperSandwich_of_powerStep b g hb hg_mono hg_step) (eventuallyPowerLowerSandwich_of_powerStep b g hb hg_mono hg_step) h_power

Concrete all-input bridge for the first exact-power Master scale. If the exact-power sequence T(b^i) is Θ(a^i) and the cost is monotone in absolute value, then the all-input cost is Θ(a^(⌊log_b n⌋)), represented by criticalPowerScale.

This theorem is intentionally discrete: a later analytic comparison can relate criticalPowerScale to n^(log_b a) when that real-valued scale is needed.

Packaged all-input Master case 1 wrappers

All-input wrapper for exact-power Master case 1, using the discrete critical scale. This packages three already-proved layers:

  • exact-power Master case 1;

  • adjacent-power all-input transfer;

  • the concrete scale criticalPowerScale.

Floor-division all-input Master case 1 wrapper. The theorem starts from the all-input recurrence T(n) = a T(⌊n/b⌋) + f(n), extracts the exact-power recurrence, applies exact-power case 1, and transfers the result back to every natural input.

theorem floorDivide_allInput_masterCase1_criticalPowerScale (a b : ) (f T : ) (h_rec : FloorDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_pos : 0 < normalizedValue a b T 0) (h_term_nonneg : k, 0 normalizedForcing a b f k) {r C : } (hr_nonneg : 0 r) (hr_lt_one : r < 1) (hC_pos : 0 < C) (h_term_upper : k, normalizedForcing a b f k C * r ^ k) : Chapter03.isBigTheta T (criticalPowerScale a b) :=

Ceiling-division all-input Master case 1 wrapper. This is the ceiling analogue of floorDivide_allInput_masterCase1_criticalPowerScale, using the natural-number encoding ⌈n/b⌉ = (n + b - 1) / b.

theorem ceilDivide_allInput_masterCase1_criticalPowerScale (a b : ) (f T : ) (h_rec : CeilDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_pos : 0 < normalizedValue a b T 0) (h_term_nonneg : k, 0 normalizedForcing a b f k) {r C : } (hr_nonneg : 0 r) (hr_lt_one : r < 1) (hC_pos : 0 < C) (h_term_upper : k, normalizedForcing a b f k C * r ^ k) : Chapter03.isBigTheta T (criticalPowerScale a b) :=

Exact-power all-input Master case 1 stated in the textbook real-log scale n^(log_b a).

theorem exactPower_allInput_masterCase1_realLogScale (a b : ) (f T : ) (h_rec : ExactPowerRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_pos : 0 < normalizedValue a b T 0) (h_term_nonneg : k, 0 normalizedForcing a b f k) {r C : } (hr_nonneg : 0 r) (hr_lt_one : r < 1) (hC_pos : 0 < C) (h_term_upper : k, normalizedForcing a b f k C * r ^ k) : Chapter03.isBigTheta T (realLogScale a b) :=

Floor-division all-input Master case 1 stated in the textbook real-log scale n^(log_b a).

theorem floorDivide_allInput_masterCase1_realLogScale (a b : ) (f T : ) (h_rec : FloorDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_pos : 0 < normalizedValue a b T 0) (h_term_nonneg : k, 0 normalizedForcing a b f k) {r C : } (hr_nonneg : 0 r) (hr_lt_one : r < 1) (hC_pos : 0 < C) (h_term_upper : k, normalizedForcing a b f k C * r ^ k) : Chapter03.isBigTheta T (realLogScale a b) :=

Ceiling-division all-input Master case 1 stated in the textbook real-log scale n^(log_b a).

theorem ceilDivide_allInput_masterCase1_realLogScale (a b : ) (f T : ) (h_rec : CeilDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_pos : 0 < normalizedValue a b T 0) (h_term_nonneg : k, 0 normalizedForcing a b f k) {r C : } (hr_nonneg : 0 r) (hr_lt_one : r < 1) (hC_pos : 0 < C) (h_term_upper : k, normalizedForcing a b f k C * r ^ k) : Chapter03.isBigTheta T (realLogScale a b) :=

Exact-power all-input Master case 1 specialized to a = b^p, with the result stated directly as Θ(n^p).

theorem exactPower_allInput_masterCase1_polynomialScale (b p : ) (f T : ) (h_rec : ExactPowerRecurrence (b ^ p) b f T) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_pos : 0 < normalizedValue (b ^ p) b T 0) (h_term_nonneg : k, 0 normalizedForcing (b ^ p) b f k) {r C : } (hr_nonneg : 0 r) (hr_lt_one : r < 1) (hC_pos : 0 < C) (h_term_upper : k, normalizedForcing (b ^ p) b f k C * r ^ k) : Chapter03.isBigTheta T (polynomialScale p) :=

Floor-division all-input Master case 1 specialized to a = b^p, with the result stated directly as Θ(n^p).

theorem floorDivide_allInput_masterCase1_polynomialScale (b p : ) (f T : ) (h_rec : FloorDivideRecurrence (b ^ p) b f T) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_pos : 0 < normalizedValue (b ^ p) b T 0) (h_term_nonneg : k, 0 normalizedForcing (b ^ p) b f k) {r C : } (hr_nonneg : 0 r) (hr_lt_one : r < 1) (hC_pos : 0 < C) (h_term_upper : k, normalizedForcing (b ^ p) b f k C * r ^ k) : Chapter03.isBigTheta T (polynomialScale p) :=

Ceiling-division all-input Master case 1 specialized to a = b^p, with the result stated directly as Θ(n^p).

theorem ceilDivide_allInput_masterCase1_polynomialScale (b p : ) (f T : ) (h_rec : CeilDivideRecurrence (b ^ p) b f T) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_pos : 0 < normalizedValue (b ^ p) b T 0) (h_term_nonneg : k, 0 normalizedForcing (b ^ p) b f k) {r C : } (hr_nonneg : 0 r) (hr_lt_one : r < 1) (hC_pos : 0 < C) (h_term_upper : k, normalizedForcing (b ^ p) b f k C * r ^ k) : Chapter03.isBigTheta T (polynomialScale p) :=

Packaged all-input Master case 2 wrappers

All-input wrapper for exact-power Master case 2, using the discrete criticalPowerLogScale. This is the all-input analogue of the exact power theorem T(b^i) = Θ((i+1)a^i).

Floor-division all-input Master case 2 wrapper. It extracts the exact-power recurrence from T(n) = a T(⌊n/b⌋) + f(n), applies exact-power case 2, and transfers the result to every natural input through the discrete log scale.

theorem floorDivide_allInput_masterCase2_criticalPowerLogScale (a b : ) (f T : ) (h_rec : FloorDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_nonneg : 0 normalizedValue a b T 0) {c C : } (hc_pos : 0 < c) (hC_pos : 0 < C) (h_term_lower : k, c normalizedForcing a b f k) (h_term_upper : k, normalizedForcing a b f k C) : Chapter03.isBigTheta T (criticalPowerLogScale a b) :=

Ceiling-division all-input Master case 2 wrapper. This is the ceiling analogue of floorDivide_allInput_masterCase2_criticalPowerLogScale.

theorem ceilDivide_allInput_masterCase2_criticalPowerLogScale (a b : ) (f T : ) (h_rec : CeilDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_nonneg : 0 normalizedValue a b T 0) {c C : } (hc_pos : 0 < c) (hC_pos : 0 < C) (h_term_lower : k, c normalizedForcing a b f k) (h_term_upper : k, normalizedForcing a b f k C) : Chapter03.isBigTheta T (criticalPowerLogScale a b) :=

Exact-power all-input Master case 2 stated in the textbook real-log-log scale n^(log_b a) log n.

theorem exactPower_allInput_masterCase2_realLogLogScale (a b : ) (f T : ) (h_rec : ExactPowerRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_nonneg : 0 normalizedValue a b T 0) {c C : } (hc_pos : 0 < c) (hC_pos : 0 < C) (h_term_lower : k, c normalizedForcing a b f k) (h_term_upper : k, normalizedForcing a b f k C) : Chapter03.isBigTheta T (realLogLogScale a b) :=

Floor-division all-input Master case 2 stated in the textbook real-log-log scale n^(log_b a) log n.

theorem floorDivide_allInput_masterCase2_realLogLogScale (a b : ) (f T : ) (h_rec : FloorDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_nonneg : 0 normalizedValue a b T 0) {c C : } (hc_pos : 0 < c) (hC_pos : 0 < C) (h_term_lower : k, c normalizedForcing a b f k) (h_term_upper : k, normalizedForcing a b f k C) : Chapter03.isBigTheta T (realLogLogScale a b) :=

Ceiling-division all-input Master case 2 stated in the textbook real-log-log scale n^(log_b a) log n.

theorem ceilDivide_allInput_masterCase2_realLogLogScale (a b : ) (f T : ) (h_rec : CeilDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_nonneg : 0 normalizedValue a b T 0) {c C : } (hc_pos : 0 < c) (hC_pos : 0 < C) (h_term_lower : k, c normalizedForcing a b f k) (h_term_upper : k, normalizedForcing a b f k C) : Chapter03.isBigTheta T (realLogLogScale a b) :=

Exact-power all-input Master case 2 specialized to a = b^p, with the result stated directly as Θ((⌊log_b n⌋+1)n^p).

theorem exactPower_allInput_masterCase2_polynomialLogScale (b p : ) (f T : ) (h_rec : ExactPowerRecurrence (b ^ p) b f T) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_nonneg : 0 normalizedValue (b ^ p) b T 0) {c C : } (hc_pos : 0 < c) (hC_pos : 0 < C) (h_term_lower : k, c normalizedForcing (b ^ p) b f k) (h_term_upper : k, normalizedForcing (b ^ p) b f k C) : Chapter03.isBigTheta T (polynomialLogScale b p) :=

Floor-division all-input Master case 2 specialized to a = b^p, with the result stated directly as Θ((⌊log_b n⌋+1)n^p).

theorem floorDivide_allInput_masterCase2_polynomialLogScale (b p : ) (f T : ) (h_rec : FloorDivideRecurrence (b ^ p) b f T) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_nonneg : 0 normalizedValue (b ^ p) b T 0) {c C : } (hc_pos : 0 < c) (hC_pos : 0 < C) (h_term_lower : k, c normalizedForcing (b ^ p) b f k) (h_term_upper : k, normalizedForcing (b ^ p) b f k C) : Chapter03.isBigTheta T (polynomialLogScale b p) :=

Ceiling-division all-input Master case 2 specialized to a = b^p, with the result stated directly as Θ((⌊log_b n⌋+1)n^p).

theorem ceilDivide_allInput_masterCase2_polynomialLogScale (b p : ) (f T : ) (h_rec : CeilDivideRecurrence (b ^ p) b f T) (hb : 1 < b) (hT_mono : MonotoneAbs T) (h_base_nonneg : 0 normalizedValue (b ^ p) b T 0) {c C : } (hc_pos : 0 < c) (hC_pos : 0 < C) (h_term_lower : k, c normalizedForcing (b ^ p) b f k) (h_term_upper : k, normalizedForcing (b ^ p) b f k C) : Chapter03.isBigTheta T (polynomialLogScale b p) :=

Packaged all-input Master case 3 wrappers

All-input wrapper for exact-power Master case 3, using the discrete tailDominatedScale. The last-forcing scale depends on the concrete forcing function, so its monotonicity and adjacent-power regularity are explicit hypotheses rather than built-in facts.

Floor-division all-input Master case 3 wrapper. It extracts the exact-power recurrence from the all-input floor recurrence, applies the tail-dominated exact-power theorem, and transfers the result through tailDominatedScale.

theorem floorDivide_allInput_masterCase3_tailDominatedScale (a b : ) (f T : ) (h_rec : FloorDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (hscale_mono : MonotoneAbs (tailDominatedScale a b f)) (hscale_step : EventuallyPowerStepBound b (tailDominatedScale a b f)) (h_base_nonneg : 0 normalizedValue a b T 0) (h_term_nonneg : k, 0 normalizedForcing a b f k) (h_tail_upper : C : , 0 < C n₀ : , i, i n₀ 1 i normalizedValue a b T i C * normalizedForcing a b f (i - 1)) : Chapter03.isBigTheta T (tailDominatedScale a b f) :=

Ceiling-division all-input Master case 3 wrapper. This is the ceiling analogue of floorDivide_allInput_masterCase3_tailDominatedScale.

theorem ceilDivide_allInput_masterCase3_tailDominatedScale (a b : ) (f T : ) (h_rec : CeilDivideRecurrence a b f T) (ha : 1 a) (hb : 1 < b) (hT_mono : MonotoneAbs T) (hscale_mono : MonotoneAbs (tailDominatedScale a b f)) (hscale_step : EventuallyPowerStepBound b (tailDominatedScale a b f)) (h_base_nonneg : 0 normalizedValue a b T 0) (h_term_nonneg : k, 0 normalizedForcing a b f k) (h_tail_upper : C : , 0 < C n₀ : , i, i n₀ 1 i normalizedValue a b T i C * normalizedForcing a b f (i - 1)) : Chapter03.isBigTheta T (tailDominatedScale a b f) :=
end Chapter04end CLRS