Compfiles/Usa1993P5.lean

GitHub source file

Explanation legend Lean4 Domain Explanation Language (L4DEL)

L4DEL explanations are a separate layer. They do not change the Lean source. Intuition is explanatory prose; numbered items are a reading path; sources link the wording back to evidence.

L4DEL
Lean4 Domain Explanation Language

Credit: The upstream authors and contributors retain credit for the project and mathematics. lean4-explainer only renders their pinned source and adds the separately disclosed explanation layer.

Project sources: Pinned compfiles documentation, Pinned compfiles corpus index

12 declarations, 0 contain sorry, 0 declared as axioms

USA Mathematical Olympiad 1993, Problem 5

A sequence xₙ of positive reals satisfies xₙ₋₁xₙ₊₁ ≤ xₙ². Let aₙ be the average of the terms x₀, x₁, ..., xₙ and bₙ be the average of the terms x₁, x₂, ..., xₙ. Show that aₙbₙ₋₁ ≥ aₙ₋₁bₙ.

Imports (2)
Imported by 1 file
  1. def Usa1993P5.a_avg a_avg x n is the average of the terms x 0, x 1, ..., x n line 28 source

    Source documentation

    a_avg x n is the average of the terms x 0, x 1, ..., x n.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real

    Proof uses: HDiv.hDiv, Finset.sum, Finset.range, HAdd.hAdd, OfNat.ofNat

    12 instances, coercions and auxiliary constants left out.

    noncomputable def a_avg (x : ℕ → ℝ) (n : ℕ) : ℝ := (∑ i ∈ Finset.range (n + 1), x i) / (n + 1)
  2. def Usa1993P5.b_avg b_avg x n is the average of the terms x 1, x 2, ..., x n line 31 source

    Source documentation

    b_avg x n is the average of the terms x 1, x 2, ..., x n.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real

    Proof uses: HDiv.hDiv, Finset.sum, Finset.range, HAdd.hAdd, OfNat.ofNat

    9 instances, coercions and auxiliary constants left out.

    noncomputable def b_avg (x : ℕ → ℝ) (n : ℕ) : ℝ := (∑ i ∈ Finset.range n, x (i + 1)) / n
    …
  3. theorem Usa1993P5.two_mul_sqrt_le_add Two-variable AM–GM line 47 source

    Source documentation

    Two-variable AM–GM.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Real, LE.le, OfNat.ofNat, HMul.hMul, Nat, Real.sqrt, HAdd.hAdd

    Proof uses: Eq.mpr, id, Eq, congrArg, Real.sqrt_mul, le_of_not_gt, LT.lt, Mathlib.Tactic.Linarith.lt_irrefl, Eq.mp, HSub.hSub, HPow.hPow, Mathlib.Tactic.Ring.of_eq, Mathlib.Tactic.Ring.Common.add_congr, Nat.rawCast, Int.rawCast, inferInstance, Ring, Int.negOfNat, Mathlib.Meta.NormNum.instAddMonoidWithOne, Mathlib.Tactic.Ring.Common.sub_congr and 62 more

    82 instances, coercions and auxiliary constants left out.

    Tactic trace: 2 steps

    Open to load the checked before-and-after goal states.

    theorem two_mul_sqrt_le_add {u v : ℝ} (hu : 0 ≤ u) (hv : 0 ≤ v) :
        2 * Real.sqrt (u * v) ≤ u + v := by
    …
  4. theorem Usa1993P5.ratio_antitone The consecutive ratios are nonincreasing line 53 source

    Source documentation

    The consecutive ratios are nonincreasing.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real, LT.lt, OfNat.ofNat, LE.le, HMul.hMul, HAdd.hAdd, HPow.hPow, Antitone, HDiv.hDiv

    Proof uses: antitone_nat_of_succ_le, id, Eq.mpr, Eq, congrArg, propext, div_le_div_iff₀, mul_comm, Eq.mp, pow_two

    64 instances, coercions and auxiliary constants left out.

    Tactic trace: 8 steps

    Open to load the checked before-and-after goal states.

    theorem ratio_antitone (x : ℕ → ℝ) (hx : ∀ n, 0 < x n)
        (h : ∀ n, x n * x (n + 2) ≤ x (n + 1) ^ 2) :
        Antitone (fun j ↦ x (j + 1) / x j) := by
    …

    Mentions: h

  5. theorem Usa1993P5.prod_le_of_le Moving two indices apart weakly decreases the product line 66 source

    Source documentation

    Moving two indices apart weakly decreases the product.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real, LT.lt, OfNat.ofNat, LE.le, HMul.hMul, HAdd.hAdd, HPow.hPow, HSub.hSub

    Proof uses: HDiv.hDiv, Usa1993P5.ratio_antitone, Eq.mp, congrArg, mul_comm, propext, div_le_div_iff₀, Nat.sub_add_cancel

    63 instances, coercions and auxiliary constants left out.

    Tactic trace: 7 steps

    Open to load the checked before-and-after goal states.

    theorem prod_le_of_le (x : ℕ → ℝ) (hx : ∀ n, 0 < x n)
        (h : ∀ n, x n * x (n + 2) ≤ x (n + 1) ^ 2)
        {a b : ℕ} (ha : 1 ≤ a) (hab : a ≤ b) :
        x (a - 1) * x (b + 1) ≤ x a * x b := by
    …

    Mentions: h

  6. theorem Usa1993P5.x0_mul_xn_le Symmetric products: x 0 * x n ≤ x i * x (n - i) line 78 source

    Source documentation

    Symmetric products: x 0 * x n ≤ x i * x (n - i).

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real, LT.lt, OfNat.ofNat, LE.le, HMul.hMul, HAdd.hAdd, HPow.hPow, HSub.hSub

    Proof uses: Nat.recAux, of_eq_true, Eq.trans, True, congrArg, tsub_zero, Usa1993P5.prod_le_of_le, Eq.mpr, id, Eq, le_trans, Eq.mp, Nat.add_sub_cancel

    45 instances, coercions and auxiliary constants left out.

    Tactic trace: 15 steps

    Open to load the checked before-and-after goal states.

    theorem x0_mul_xn_le (x : ℕ → ℝ) (hx : ∀ n, 0 < x n)
        (h : ∀ n, x n * x (n + 2) ≤ x (n + 1) ^ 2) :
        ∀ {i n : ℕ}, 2 * i ≤ n → x 0 * x n ≤ x i * x (n - i) := by
    …

    Mentions: h

  7. theorem Usa1993P5.pair_ge Each paired sum x i + x (n - i) is at least 2 * √(x 0 * x n) line 93 source

    Source documentation

    Each paired sum x i + x (n - i) is at least 2 * √(x 0 * x n).

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real, LT.lt, OfNat.ofNat, LE.le, HMul.hMul, HAdd.hAdd, HPow.hPow, Real.sqrt, HSub.hSub

    Proof uses: dite, Usa1993P5.x0_mul_xn_le, Not, Eq.mp, congrArg, mul_comm, Eq, Real.sqrt_le_sqrt, Usa1993P5.two_mul_sqrt_le_add, LT.lt.le, le_of_not_gt, Mathlib.Tactic.Linarith.lt_irrefl, Mathlib.Tactic.Ring.of_eq, Mathlib.Tactic.Ring.Common.add_congr, Nat.rawCast, Int.rawCast, inferInstance, Ring, Int.negOfNat, Mathlib.Tactic.Ring.Common.mul_congr and 48 more

    95 instances, coercions and auxiliary constants left out.

    Tactic trace: 13 steps

    Open to load the checked before-and-after goal states.

    theorem pair_ge (x : ℕ → ℝ) (hx : ∀ n, 0 < x n)
        (h : ∀ n, x n * x (n + 2) ≤ x (n + 1) ^ 2)
        {i n : ℕ} (hi : i ≤ n) :
        2 * Real.sqrt (x 0 * x n) ≤ x i + x (n - i) := by
    …

    Mentions: h

  8. theorem Usa1993P5.sum_pair_ge The key estimate: k ≥ (n - 1) * √(x 0 * x n), in doubled form line 110 source

    Source documentation

    The key estimate: k ≥ (n - 1) * √(x 0 * x n), in doubled form.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real, LT.lt, OfNat.ofNat, LE.le, HMul.hMul, HAdd.hAdd, HPow.hPow, HSub.hSub, Real.sqrt, Finset.sum, Finset.range

    Proof uses: Eq, Eq.mpr, id, congrArg, Eq.symm, Finset.sum_range_reflect, Finset.sum_congr, rfl, Finset, Membership.mem, Eq.rec, Eq.refl, Eq.mp, propext, Finset.mem_range, Trans.trans, HSMul.hSMul, Finset.card, Finset.sum_const, Finset.card_range and 27 more

    94 instances, coercions and auxiliary constants left out.

    Tactic trace: 18 steps

    Open to load the checked before-and-after goal states.

    theorem sum_pair_ge (x : ℕ → ℝ) (hx : ∀ n, 0 < x n)
        (h : ∀ n, x n * x (n + 2) ≤ x (n + 1) ^ 2)
        {n : ℕ} (hn : 2 ≤ n) :
        ((n : ℝ) - 1) * (2 * Real.sqrt (x 0 * x n)) ≤
          2 * ∑ i ∈ Finset.range (n - 1), x (i + 1) := by
    …

    Mentions: h

  9. theorem Usa1993P5.sum_decomp Peeling off the first and last terms of a range sum line 137 source

    Source documentation

    Peeling off the first and last terms of a range sum.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real, Eq, Finset.sum, Finset.range, HAdd.hAdd, OfNat.ofNat

    Proof uses: Eq.mpr, id, congrArg, rfl, Finset.sum_range_succ', Finset.sum_range_succ, Mathlib.Tactic.Ring.of_eq, HMul.hMul, HPow.hPow, Nat.rawCast, Mathlib.Tactic.Ring.Common.add_congr, Mathlib.Tactic.Ring.Common.atom_pf, Eq.symm, Eq.refl, Mathlib.Tactic.Ring.Common.add_pf_add_lt, Mathlib.Tactic.Ring.Common.add_pf_zero_add, Mathlib.Tactic.Ring.Common.add_pf_add_gt, Mathlib.Tactic.Ring.Common.add_pf_add_zero

    31 instances, coercions and auxiliary constants left out.

    Tactic trace: 2 steps

    Open to load the checked before-and-after goal states.

    theorem sum_decomp (x : ℕ → ℝ) (m : ℕ) :
        ∑ i ∈ Finset.range (m + 2), x i =
          x 0 + (∑ i ∈ Finset.range m, x (i + 1)) + x (m + 1) := by
    …
  10. theorem Usa1993P5.final_algebra The algebraic heart of the proof line 144 source

    Source documentation

    The algebraic heart of the proof.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Real, LE.le, OfNat.ofNat, Nat, LT.lt, HSub.hSub, HMul.hMul, HPow.hPow, HAdd.hAdd, HDiv.hDiv

    Proof uses: lt_of_not_ge, Mathlib.Tactic.Linarith.lt_irrefl, Eq.mp, Neg.neg, congrArg, Mathlib.Tactic.Ring.of_eq, Mathlib.Tactic.Ring.Common.add_congr, Nat.rawCast, Int.rawCast, inferInstance, Ring, Int.negOfNat, Mathlib.Tactic.Ring.Common.mul_congr, Mathlib.Tactic.Ring.cast_pos, Mathlib.Meta.NormNum.isNat_ofNat, Eq.refl, Mathlib.Meta.NormNum.instAtLeastTwo, Mathlib.Tactic.Ring.Common.neg_congr, Nat.cast_one, Mathlib.Tactic.Ring.Common.neg_add and 62 more

    117 instances, coercions and auxiliary constants left out.

    Tactic trace: 6 steps

    Open to load the checked before-and-after goal states.

    theorem final_algebra {N k x0 xn : ℝ} (hN : 2 ≤ N) (hN1 : 0 < N - 1)
        (hkey : (N ^ 2 - 1) * (x0 * xn) ≤ k * (k + x0 + xn)) :
        (x0 + k) / N * ((k + xn) / N) ≤ (x0 + k + xn) / (N + 1) * (k / (N - 1)) := by
    …
  11. theorem Usa1993P5.key_ineq The inequality k * (k + x 0 + x n) ≥ (n ^ 2 - 1) * x 0 * x n line 154 source

    Source documentation

    The inequality k * (k + x 0 + x n) ≥ (n ^ 2 - 1) * x 0 * x n.

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real, LT.lt, OfNat.ofNat, LE.le, HMul.hMul, HAdd.hAdd, HPow.hPow, HSub.hSub, Finset.sum, Finset.range

    Proof uses: Eq.mpr, id, Eq, congrArg, rfl, Real.sqrt, Real.sqrt_nonneg, Real.sq_sqrt, mul_nonneg, LT.lt.le, cast, Eq.symm, Finset.sum_nonneg, Membership.mem, Finset, Usa1993P5.sum_pair_ge, le_of_not_gt, Mathlib.Tactic.Linarith.lt_irrefl, Eq.mp, Mathlib.Tactic.Ring.of_eq and 77 more

    112 instances, coercions and auxiliary constants left out.

    Tactic trace: 20 steps

    Open to load the checked before-and-after goal states.

    theorem key_ineq (x : ℕ → ℝ) (hx : ∀ n, 0 < x n)
        (h : ∀ n, x n * x (n + 2) ≤ x (n + 1) ^ 2)
        {n : ℕ} (hn : 2 ≤ n) :
        ((n : ℝ) ^ 2 - 1) * (x 0 * x n) ≤
          (∑ i ∈ Finset.range (n - 1), x (i + 1)) *
            ((∑ i ∈ Finset.range (n - 1), x (i + 1)) + x 0 + x n) := by
    …

    Mentions: h

  12. problem Usa1993P5.usa1993_p5 line 183 source

    standard axioms: Classical.choice, Quot.sound, propext what this means

    Statement uses: Nat, Real, LT.lt, OfNat.ofNat, LE.le, HMul.hMul, HAdd.hAdd, HPow.hPow, GE.ge, Usa1993P5.a_avg, Usa1993P5.b_avg, HSub.hSub

    Proof uses: cast, Eq.symm, lt_of_not_ge, Mathlib.Tactic.Linarith.lt_irrefl, Eq.mp, Neg.neg, congrArg, Mathlib.Tactic.Ring.of_eq, Mathlib.Tactic.Ring.Common.add_congr, Nat.rawCast, Mathlib.Meta.NormNum.instAddMonoidWithOne, inferInstance, Ring, Int.rawCast, Int.negOfNat, Mathlib.Tactic.Ring.Common.neg_congr, Mathlib.Tactic.Ring.cast_pos, Mathlib.Meta.NormNum.isNat_ofNat, Nat.cast_one, Mathlib.Tactic.Ring.Common.neg_add and 46 more

    105 instances, coercions and auxiliary constants left out.

    Tactic trace: 24 steps

    Open to load the checked before-and-after goal states.