(* Title: LnSum5.thy
Author: Jeremy Avigad
*)
header {* Identities involving sums and ln, part 5 *}
theory LnSum5 = LnSum4:;
lemma aux1: "(%n. ln(real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) =o
((%n. (real n + 1) * (ln (real n + 1))^2) - (%n. (real n) * ln (real n + 1)))
+o O(%n. (ln (real n + 1))^2)";
proof -;
have "(%n. ln(real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) =
(%n. ln(real n + 1)) * (%n. sumr 0 (n + 1) (%i. ln (real i + 1)))";
by (simp add: func_times);
also from identity_three have "... =o (%n. ln(real n + 1)) *o
(((%n. (real n + 1) * ln(real n + 1)) - (λn. real n)) +o
O(λn. ln (real n + 1)))";
by auto;
also have "... = (%n. ln(real n + 1)) *
((%n. (real n + 1) * ln(real n + 1)) - (λn. real n)) +o
(%n. ln(real n + 1)) *o O(λn. ln (real n + 1))";
by (simp add: set_times_plus_distribs);
also have "(%n. ln(real n + 1)) *
((%n. (real n + 1) * ln(real n + 1)) - (λn. real n)) =
((%n. (real n + 1) * (ln(real n + 1))^2) -
(λn. (real n) * ln(real n + 1)))";
by (simp add: func_times diff_minus func_minus func_plus ring_distrib
realpow_two2 [THEN sym] mult_ac);
also; have "((%n. (real n + 1) * ln (real n + 1) ^ 2) -
(%n. real n * ln (real n + 1))) +o
(%n. ln (real n + 1)) *o O(%n. ln (real n + 1)) =s
((%n. (real n + 1) * ln (real n + 1) ^ 2) -
(%n. real n * ln (real n + 1))) +o O(%n. (ln (real n + 1))^2)";
apply (auto simp add: func_times realpow_two2 [THEN sym]);
apply (subgoal_tac "(%n. ln (real n + 1)) *o O(%n. ln (real n + 1))
=s O((%n. ln (real n + 1)) * (%n. ln (real n + 1)))");
apply (simp add: func_times);
by auto;
finally show ?thesis;.;
qed;
lemma aux2: "(%n. 2 * ln(real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) =o
((%n. 2 * (real n + 1) * (ln (real n + 1))^2) - (%n. 2 * (real n) *
ln (real n + 1))) +o O(%n. (ln (real n + 1))^2)"
(is "?LHS =o ?RHS");
proof -;
from aux1 have
"(%n. 2) * (%n. ln(real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) =o
(%n. 2) *o (((%n. (real n + 1) * (ln (real n + 1))^2) -
(%n. (real n) * ln (real n + 1))) +o O(%n. (ln (real n + 1))^2))"
(is "?LHS1 =o ?RHS1");
by auto;
also have "?LHS1 = ?LHS";
by (simp add: func_times mult_ac);
also have "?RHS1 = ?RHS";
by (simp add: func_times diff_minus func_minus func_plus
ring_distrib set_times_plus_distribs mult_ac);
finally show ?thesis;.;
qed;
lemma aux2a: "-(%n. 2 * ln(real n + 1) * sumr 0 (n + 1)
(%i. ln (real i + 1))) =o
(- (%n. 2 * (real n + 1) * (ln (real n + 1))^2) + (%n. 2 * (real n) *
ln (real n + 1))) +o O(%n. (ln (real n + 1))^2)";
proof -;
from aux2 have "-(%n. 2 * ln(real n + 1) * sumr 0 (n + 1)
(%i. ln (real i + 1))) =o
- ((%n. 2 * (real n + 1) * (ln (real n + 1))^2) - (%n. 2 * (real n) *
ln (real n + 1))) +o O(%n. (ln (real n + 1))^2)";
by (rule bigo_minus2);
then show ?thesis;
by (simp add: minus_add_distrib diff_minus);
qed;
lemma aux3: "((x::real) - y)^2 = x^2 - 2 * x * y + y^2";
by (simp add: realpow_two2 [THEN sym] ring_distrib mult_ac
diff_minus);
lemma aux4: "(%n. sumr 0 (n + 1) (%i. (ln ((real n + 1) / (real i + 1)))^2)) =
(%n. (real n+1) * ln(real n + 1)^2) -
(%n. 2 * ln(real n + 1) * sumr 0 (n+1) (%i. ln(real i + 1))) +
(%n. sumr 0 (n + 1) (%i. (ln (real i + 1))^2))";
apply (simp only: diff_minus func_minus func_plus);
apply (rule ext);
proof -;
fix n;
show "sumr 0 (n + 1) (%i. ln ((real n + 1) / (real i + 1)) ^ 2) =
(real n + 1) * ln (real n + 1) ^ 2 +
- (2 * ln (real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) +
sumr 0 (n + 1) (%i. (ln (real i + 1)) ^ 2)";
proof -;
have "(%i::nat. (ln ((real n + 1) / (real i + 1)))^2) =
(%i. (ln (real n + 1) - ln(real i + 1))^2)";
apply (rule ext);
apply (subst ln_div);
apply (rule real_nat_plus_one_gt_zero)+;
by (rule refl);
also have "... = (%i. (ln (real n + 1))^2 -
2 * ln (real n + 1) * ln (real i + 1) + ln(real i + 1)^2)";
apply (rule ext);
by (rule aux3);
finally; have "(%i::nat.
ln ((real (n::nat) + (1::real)) / (real i + (1::real))) ^ 2) =
(%i::nat. ln (real n + (1::real)) ^ 2 -
(2::real) * ln (real n + (1::real)) * ln (real i + (1::real)) +
ln (real i + (1::real)) ^ 2)" (is "?LHS = ?RHS");.;
then have "sumr 0 (n + 1) (?LHS) = sumr 0 (n + 1) (?RHS)";
by auto;
also have "... = sumr 0 (n+1) (%i. ln (real n + 1) ^ 2) -
sumr 0 (n+1) (%i. 2 * ln (real n + 1) * ln (real i + 1)) +
sumr 0 (n+1) (%i. ln (real i + 1) ^ 2)";
by (simp only: sumr_add diff_minus func_minus func_plus
sumr_minus [THEN sym]);
also have "sumr 0 (n+1) (%i. ln (real n + 1) ^ 2) =
real (n + 1) * ln (real n + 1) ^ 2";
by (rule sumr_const);
also have "real (n + 1) = real n + 1";
by (rule real_nat_plus_one);
also; have "sumr 0 (n + 1) (%i. 2 * ln (real n + 1) * ln (real i + 1))
= 2 * ln (real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))";
by (subst sumr_mult, rule refl);
finally show ?thesis;
by (simp only: diff_minus);
qed;
qed;
lemma aux5: "(%n. (real n+1) * ln(real n + 1)^2) -
(%n. 2 * ln(real n + 1) * sumr 0 (n+1) (%i. ln(real i + 1))) =o
((%n. - (real n + 1) * ln (real n + 1)^2) +
(%n. 2 * (real n) * ln(real n + 1))) +o O(%n. ln(real n + 1)^2)";
proof -;
have "(%n. (real n+1) * ln(real n + 1)^2) -
(%n. 2 * ln(real n + 1) * sumr 0 (n+1) (%i. ln(real i + 1))) =
(%n. (real n+1) * ln(real n + 1)^2) + -
(%n. 2 * ln(real n + 1) * sumr 0 (n+1) (%i. ln(real i + 1)))";
by (simp only: diff_minus);
also from aux2a have "... =o (%n. (real n+1) * ln(real n + 1)^2) +o
((- (%n. 2 * (real n + 1) * (ln (real n + 1))^2) + (%n. 2 * (real n) *
ln (real n + 1))) +o O(%n. (ln (real n + 1))^2))";
by auto;
also have "... = ((%n. (real n+1) * ln(real n + 1)^2) +
(- (%n. 2 * (real n + 1) * (ln (real n + 1))^2)) + (%n. 2 * (real n) *
ln (real n + 1))) +o O(%n. (ln (real n + 1))^2)";
by (simp add: set_plus_rearranges plus_ac0);
also have "(%n. (real n+1) * ln(real n + 1)^2) +
(- (%n. 2 * (real n + 1) * (ln (real n + 1))^2)) + (%n. 2 * (real n) *
ln (real n + 1)) = (%n. - (real n + 1) * ln (real n + 1)^2) +
(%n. 2 * (real n) * ln(real n + 1))";
apply (subgoal_tac "(%n. (real n+1) * ln(real n + 1)^2) +
(- (%n. 2 * (real n + 1) * (ln (real n + 1))^2)) =
(%n. - (real n + 1) * ln (real n + 1)^2)");
apply (erule ssubst, rule refl);
apply (auto simp add: func_plus func_minus);
apply (rule ext);
apply (subgoal_tac "(real x + 1) * ln (real x + 1) ^ 2 +
- ((2 * real x + 2) * ln (real x + 1) ^ 2) =
((real x + 1) + - (2 * real x + 2)) * ln (real x + 1)^2");
apply force;
by (simp add: ring_distrib);
finally show ?thesis;.;
qed;
lemma aux6: "(λn::nat. ln(real n + 1)) ∈ O(λn. (ln(real n + 1)^2))";
apply (rule bigo_bounded_alt);
apply auto;
apply (subgoal_tac "ln (real x + 1) ≤ (1 / ln 2) * (ln (real x + 1))^2");
apply assumption;
apply (simp add: realpow_two2 [THEN sym]);
apply (rule real_mult_le_imp_le_div_pos);
apply auto;
apply (case_tac "x = 0");
apply auto;
done;
theorem almost_there:
"(%n. sumr 0 (n+1) (%i. ln((real n + 1)/(real i + 1))^2)) =o
(%n. 2 * (real n)) +o O(%n. ln(real n + 1)^2)";
proof -;
from aux4 identity_six have
"(%n. sumr 0 (n + 1) (%i. (ln ((real n + 1) / (real i + 1)))^2)) =o
((%n. (real n+1) * ln(real n + 1)^2) -
(%n. 2 * ln(real n + 1) * sumr 0 (n+1) (%i. ln(real i + 1)))) +o
(((λn. (real n + 1) * (ln(real n + 1))^2) -
(λn. 2 * (real n + 1) * ln(real n + 1)) + (λn. 2 * (real n)))
+o O(λn. (ln (real n + 1))^2))";
by auto;
also have "… = ((%n. (real n + 1) * (ln(real n + 1))^2) -
(%n. 2 * (real n + 1) * ln(real n + 1)) + (%n. 2 * (real n))) +o
(((%n. (real n+1) * ln(real n + 1)^2) -
(%n. 2 * ln(real n + 1) * sumr 0 (n+1) (%i. ln(real i + 1)))) +o
O(%n. (ln (real n + 1))^2))";
by (simp add: set_plus_rearranges plus_ac0);
also from aux5 have "… =s ((%n. (real n + 1) * (ln(real n + 1))^2) -
(%n. 2 * (real n + 1) * ln(real n + 1)) + (%n. 2 * (real n))) +o
(((%n. - (real n + 1) * ln (real n + 1)^2) +
(%n. 2 * (real n) * ln(real n + 1))) +o O(%n. ln(real n + 1)^2)
+ O(%n. ln(real n + 1)^2))";
by auto;
also have "… = ((%n. (real n + 1) * (ln(real n + 1))^2) -
(%n. 2 * (real n + 1) * ln(real n + 1)) + (%n. 2 * (real n)) +
(%n. - (real n + 1) * ln (real n + 1)^2) +
(%n. 2 * (real n) * ln(real n + 1))) +o O(%n. ln(real n + 1)^2)";
by (simp add: diff_minus plus_ac0 set_plus_rearranges
set_plus_rearrange4);
also have "((%n. (real n + 1) * (ln(real n + 1))^2) -
(%n. 2 * (real n + 1) * ln(real n + 1)) + (%n. 2 * (real n)) +
(%n. - (real n + 1) * ln (real n + 1)^2) +
(%n. 2 * (real n) * ln(real n + 1))) = (%n. 2 * (real n)) -
(%n. 2 * ln(real n + 1))";
apply (simp add: diff_minus func_minus func_plus);
apply (rule ext);
by (auto simp add: plus_ac0 ring_distrib);
also have "((%n. 2 * real n) - (%n. 2 * ln (real n + 1))) +o
O(%n. (ln (real n + 1))^2) = (%n. 2 * real n) +o
(- (%n. 2 * ln (real n + 1)) +o O(%n. (ln (real n + 1))^2))";
by (auto simp add: diff_minus set_plus_rearranges);
also have
"… =s (%n. 2 * real (n::nat)) +o O(%n. (ln (real n + 1))^2)";
proof -;
from aux6 have "- (%n::nat. 2 * ln (real n + 1)) =o
O(%n. (ln (real n + 1))^2)";
by auto;
thus ?thesis; by auto;
qed;
finally show ?thesis;.;
qed;
end;
lemma aux1:
(%n. ln (real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) ∈ ((%n. (real n + 1) * (ln (real n + 1))²) - (%n. real n * ln (real n + 1))) + O(%n. (ln (real n + 1))²)
lemma aux2:
(%n. 2 * ln (real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) ∈ ((%n. 2 * (real n + 1) * (ln (real n + 1))²) - (%n. 2 * real n * ln (real n + 1))) + O(%n. (ln (real n + 1))²)
lemma aux2a:
- (%n. 2 * ln (real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) ∈ (- (%n. 2 * (real n + 1) * (ln (real n + 1))²) + (%n. 2 * real n * ln (real n + 1))) + O(%n. (ln (real n + 1))²)
lemma aux3:
(x - y)² = x² - 2 * x * y + y²
lemma aux4:
(%n. sumr 0 (n + 1) (%i. (ln ((real n + 1) / (real i + 1)))²)) = (%n. (real n + 1) * (ln (real n + 1))²) - (%n. 2 * ln (real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) + (%n. sumr 0 (n + 1) (%i. (ln (real i + 1))²))
lemma aux5:
(%n. (real n + 1) * (ln (real n + 1))²) - (%n. 2 * ln (real n + 1) * sumr 0 (n + 1) (%i. ln (real i + 1))) ∈ ((%n. - (real n + 1) * (ln (real n + 1))²) + (%n. 2 * real n * ln (real n + 1))) + O(%n. (ln (real n + 1))²)
lemma aux6:
(%n. ln (real n + 1)) ∈ O(%n. (ln (real n + 1))²)
theorem almost_there:
(%n. sumr 0 (n + 1) (%i. (ln ((real n + 1) / (real i + 1)))²)) ∈ (%n. 2 * real n) + O(%n. (ln (real n + 1))²)