Example (24.5)
得られた結果をもとの式に適用します.
g `!f n k. 1 <= n /\ 1 <= k /\ k <= n /\ (!x. &(k - 1) / &n <= x /\ x <= &k / &n ==> f contl x) ==> ?z. &(k - 1) / &n <= z /\ z <= &k / &n /\ integral (&(k - 1) / &n,&k / &n) (\x. f x * abs (sin (&n * pi * x))) = f z * integral (&(k - 1) / &n,&k / &n) (\x. abs (sin (&n * pi * x)))`;; e(REPEAT STRIP_TAC THEN MATCH_MP_TAC thm15 THEN MP_TAC(SPEC_ALL thm18));; e(ASM_SIMP_TAC[thm05; ABS_POS; CONV_RULE(ONCE_DEPTH_CONV BETA_CONV)(MATCH_MP CONT_ABS thm09)]);; e(SUBGOAL_TAC""`&1 <= &n`[ASM_SIMP_TAC[REAL_LE]] THEN ASSUME_TAC PI_POS THEN MP_TAC (REAL_SOSFIELD`&1 <= &n /\ &0 < pi ==> &0 < &2 / pi * &1 / &n`) THEN ASM_SIMP_TAC[]);; let thm19 = top_thm();; g`!f n k. 1 <= n /\ 1 <= k /\ k <= n /\ (!x. &(k - 1) / &n <= x /\ x <= &k / &n ==> f contl x) ==> ?z. &(k - 1) / &n <= z /\ z <= &k / &n /\ integral (&(k - 1) / &n,&k / &n) (\x. f x * abs (sin (&n * pi * x))) = &2 / pi * &1 / &n * f z`;; e(REPEAT STRIP_TAC THEN MP_TAC(SPEC_ALL thm18) THEN ASM_SIMP_TAC[]);; e(REPEAT STRIP_TAC THEN MP_TAC(SPEC_ALL thm19) THEN ASM_MESON_TAC[REAL_MUL_AC]);; let thm20 = top_thm();; (* thm20 ここまで *) let lemma08 = prove( `!n f. 1 <= n ==> sum (1,n) f = sum (1..n) f`, REPEAT STRIP_TAC THEN MP_TAC(SPECL[`f:num->real`;`1`;`n:num`]PSUM_SUM_NUMSEG) THEN ASM_SIMP_TAC[UNDISCH(ARITH_RULE`1 <= n ==> ~(m = 0 /\ n = 0) /\ (1 + n) - 1 = n`)]);; let thm21 = MESON[thm05; REAL_LE_TRANS; thm20] `!f n k. 1 <= n /\ 1 <= k /\ k <= n /\ (!x. &0 <= x /\ x <= &1 ==> f contl x) ==> (?z. &(k - 1) / &n <= z /\ z <= &k / &n /\ integral (&(k - 1) / &n,&k / &n) (\x. f x * abs (sin (&n * pi * x))) = &2 / pi * &1 / &n * f z)`;; let thm22 = prove( `!f n. 1 <= n /\ (!x. &0 <= x /\ x <= &1 ==> f contl x) ==> ?z. !k. 1 <= k /\ k <= n ==> &(k - 1) / &n <= z k /\ z k <= &k / &n /\ integral (&(k - 1) / &n,&k / &n) (\x. f x * abs (sin (&n * pi * x))) = &2 / pi * &1 / &n * f (z k)`, REPEAT STRIP_TAC THEN MP_TAC(SPECL[`f:real->real`;`n:num`]thm21) THEN ASM_SIMP_TAC[] THEN MESON_TAC[]);; g `!f. (!x. &0 <= x /\ x <= &1 ==> f contl x) ==> (!n. ?z. 1 <= n ==> ( (!k. 1 <= k /\ k <= n ==> &(k - 1) / &n <= z k /\ z k <= &k / &n) /\ integral (&0,&1) (\x. f x * abs (sin (&n * pi * x))) = &2 / pi * &1 / &n * sum (1..n) (\k. f (z k))))`;; e(SIMP_TAC[RIGHT_EXISTS_IMP_THM] THEN REPEAT STRIP_TAC THEN MP_TAC thm11 THEN ASM_SIMP_TAC[lemma08; GSYM SUM_LMUL] THEN DISCH_THEN(MP_TAC o (SPEC`n:num`)) THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC THEN ASM_SIMP_TAC[] THEN MP_TAC(SPECL[`f:real->real`;`n:num`]thm22) THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);; e(SUBGOAL_TAC"" `sum (1..n) (\k. integral (&(k - 1) / &n,&k / &n) (\x. f x * abs (sin (&n * pi * x)))) = sum (1..n) (\k. &2 / pi * &1 / &n * f (z k))` [ASM_MESON_TAC[SUM_EQ_NUMSEG;]]);; e(ASM_MESON_TAC[]);; let thm23 = top_thm();; g `!f. (!x. &0 <= x /\ x <= &1 ==> f contl x) ==> (?z. !n. 1 <= n ==> (!k. 1 <= k /\ k <= n ==> &(k - 1) / &n <= z n k /\ z n k <= &k / &n) /\ integral (&0,&1) (\x. f x * abs (sin (&n * pi * x))) = &2 / pi * &1 / &n * sum (1..n) (\k. f (z n k)))`;; e(REPEAT STRIP_TAC THEN MP_TAC(SPEC`f:real->real`thm23) THEN ASM_SIMP_TAC[SKOLEM_THM] THEN REPEAT STRIP_TAC THEN ASM_MESON_TAC[]);; let thm24 = top_thm();; g`!f. (!x. &0 <= x /\ x <= &1 ==> f contl x) ==> (?z. !n. 1 <= n ==> (!k. k < n ==> &k / &n <= z n k /\ z n k <= &(k + 1) / &n) /\ integral (&0,&1) (\x. f x * abs (sin (&n * pi * x))) = &2 / pi * &1 / &n * sum (0..n - 1) (\k. f (z n k)))`;; e(REPEAT STRIP_TAC THEN MP_TAC(SPEC`f:real->real`thm24) THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);; e(EXISTS_TAC`(\n. \k:num. (z:num->num->real) n (k+1))`);; e(GEN_TAC THEN STRIP_TAC THEN FIRST_X_ASSUM(MP_TAC o (SPEC`n:num`)) THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);; e(DISJ_CASES_TAC(ARITH_RULE`k = 0 \/ 1 <= k`) );; e(ASM_SIMP_TAC[ADD] THEN FIRST_X_ASSUM(MP_TAC o (SPEC`1`)) THEN ASM_SIMP_TAC[LE_REFL; SUB_REFL]);; e(FIRST_X_ASSUM(MP_TAC o (SPEC`k+1`)) THEN ASM_SIMP_TAC[ARITH_RULE`k < n ==> 1 <= k+1 /\ k+1 <= n`; ARITH_RULE`(k + 1) - 1 = k`]);; e(SIMP_TAC[ARITH_RULE`1 <= k + 1`]);; e(FIRST_X_ASSUM(MP_TAC o (SPEC`k+1`)) THEN ASM_SIMP_TAC[ARITH_RULE`k < n ==> k+1 <= n`] THEN SIMP_TAC[ARITH_RULE`1 <= k + 1`]);; e(ASM_SIMP_TAC[SUM_OFFSET_0]);; let thm25 = top_thm();;