Example (24.4)

 前回の結果とDIFF_CONV,更に微積分の基本定理(その1)FTC1を用いて,定積分の値を具体化します.

let lemma01 = MESON[REAL_LE; REAL_ARITH `&1 <= &n ==> &0 < &n`; REAL_LE_LDIV_EQ; REAL_LE_RDIV_EQ; PI_POS; REAL_LE_LMUL_EQ; REAL_MUL_AC]
`1 <= n
==> (&(k - 1) / &n <= x /\ x <= &k / &n
<=> &(k - 1) * pi <= &n * pi * x /\ &n * pi * x <= &k * pi)`;;

g `!n. 1 <= n
 ==> !k. 1 <= k /\ k <= n
 ==> ((!x. &(k - 1) / &n <= x /\ x <= &k / &n ==> &0 <= sin (&n * pi * x)) \/
 (!x. &(k - 1) / &n <= x /\ x <= &k / &n ==> &0 <= --sin (&n * pi * x)))`;;
e(REPEAT STRIP_TAC THEN ASM_SIMP_TAC[UNDISCH lemma01; GSYM REAL_OF_NUM_SUB] THEN DISJ_CASES_TAC (SPEC `k:num` EVEN_OR_ODD));;
e(FIRST_X_ASSUM MP_TAC THEN SIMP_TAC[EVEN_EXISTS] THEN STRIP_TAC THEN ASM_SIMP_TAC[GSYM REAL_MUL] THEN MESON_TAC[REAL_MUL_AC; SIN_NEG_PERIODIC]);;
e(FIRST_X_ASSUM MP_TAC THEN SIMP_TAC[ODD_EXISTS] THEN STRIP_TAC THEN ASM_SIMP_TAC[ADD1; GSYM REAL_ADD; GSYM REAL_MUL; ] THEN ASM_MESON_TAC[REAL_ADD_AC; REAL_ADD_SUB; REAL_MUL_AC; SIN_POS_PERIODIC]);;
let thm16 = top_thm();;

g `!n. 1 <= n
 ==> !k. 1 <= k /\ k <= n
 ==> !x. &(k - 1) / &n <= x /\ x <= &k / &n
 ==> abs (sin (&n * pi * x))= (-- &1 pow (k + 1) ) * sin (&n * pi * x)`;;
e(STRIP_TAC THEN STRIP_TAC THEN STRIP_TAC THEN STRIP_TAC THEN STRIP_TAC THEN ASM_SIMP_TAC[UNDISCH lemma01; GSYM REAL_OF_NUM_SUB;] THEN REPEAT STRIP_TAC THEN DISJ_CASES_TAC (SPEC `k:num` EVEN_OR_ODD));;

e(FIRST_X_ASSUM MP_TAC THEN SIMP_TAC[EVEN_EXISTS] THEN STRIP_TAC);;
e(MP_TAC(SPECL[`m:num`;`&n * pi * x`]SIN_NEG_PERIODIC) THEN FIRST_X_ASSUM SUBST_ALL_TAC THEN ASM_SIMP_TAC[REAL_MUL] THEN ONCE_ASM_SIMP_TAC[GSYM ABS_NEG] THEN STRIP_TAC);;
e(ASM_SIMP_TAC[real_abs; POW_ADD; POW_MINUS1; POW_1] THEN REAL_ARITH_TAC);;

e(FIRST_X_ASSUM MP_TAC THEN SIMP_TAC[ODD_EXISTS; ADD1; GSYM REAL_ADD] THEN STRIP_TAC);;
e(MP_TAC(SPECL[`m:num`;`&n * pi * x`]SIN_POS_PERIODIC) THEN FIRST_X_ASSUM SUBST_ALL_TAC THEN SIMP_TAC[REAL_ADD; REAL_MUL] THEN SUBGOAL_TAC""`&(2 * m + 1) - &1 = &(2 * m)`[ASM_MESON_TAC[REAL_OF_NUM_SUB; REAL_ADD_SUB; ADD_SUB;]]);;
e(FIRST_X_ASSUM SUBST_ALL_TAC THEN ASM_SIMP_TAC[] THEN STRIP_TAC);; 
e(ASM_SIMP_TAC[real_abs; ARITH_RULE`(2 * m + 1) + 1 = 2 * (m + 1)`; POW_MINUS1] THEN REAL_ARITH_TAC);;
let thm17 = top_thm();;
let thm17 = MESON[thm17]
`!n k x. 1 <= n /\ 1 <= k /\ k <= n /\ &(k - 1) / &n <= x /\ x <= &k / &n
 ==> abs (sin (&n * pi * x))= (-- &1 pow (k + 1) ) * sin (&n * pi * x)`;;


let lemma03 = MESON[FTC1; DEFINT_INTEGRAL]
`!f f' a b.
    a <= b /\ (!x. a <= x /\ x <= b ==> (f diffl f' x) x)
    ==> integral (a,b) f' = f b - f a`;;
let lemma04 = MESON
[DIFF_CONV`(\x. &1 / pi * &1 / &n * (--cos (&n * pi * x)))`;
REAL_SOSFIELD`&0 < pi /\ &1 <= &n ==> &0 * &1 / &n * --cos (&n * pi * x) +
(&0 * --cos (&n * pi * x) +
 --(--sin (&n * pi * x) * (&0 * pi * x + (&0 * x + &1 * pi) * &n)) *
 &1 / &n) *
&1 / pi = sin (&n * pi * x)`;
REAL_LE]
`&0 < pi /\ 1 <= n ==> !x. ((\x. &1 / pi * &1 / &n * (--cos (&n * pi * x))) diffl sin (&n * pi * x) ) x`;;

let lemma05 = prove(
`!x. (\x:real. f x) contl x <=> f contl x`,
SIMP_TAC[contl] THEN BETA_TAC THEN MESON_TAC[]);;

let lemma06 = prove(
`!a b f g. a <= b /\
            (!x. a <= x /\ x <= b ==> f x = g x) /\
            (!x. a <= x /\ x <= b ==> (\x:real. f x) contl x)
 ==> integral (a,b) f = integral (a,b) g`,
SIMP_TAC[lemma05] THEN MESON_TAC[INTEGRABLE_CONTINUOUS; INTEGRABLE_DEFINT; INTEGRAL_EQ; DEFINT_INTEGRAL]);;

let lemma07 = prove(
`!n a b x. a <= x /\ x <= b ==> (\x. abs( sin (&n * pi * x))) contl x`,
REPEAT STRIP_TAC THEN MATCH_MP_TAC CONT_ABS THEN SIMP_TAC[thm09]);;

g `!n k. 1 <= n /\ 1 <= k /\ k <= n
==> integral (&(k - 1) / &n,&k / &n) (\x. abs (sin (&n * pi * x))) = &2 / pi * &1 / &n`;;
e(ASSUME_TAC PI_POS THEN REPEAT STRIP_TAC THEN MP_TAC thm05 THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC THEN MP_TAC lemma04 THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);;
e(MP_TAC(SPECL[`(\x. &1 / pi * &1 / &n * --cos (&n * pi * x))`;`(\x. sin (&n * pi * x))`;`&(k - 1) / &n`;`&k / &n`]lemma03) THEN BETA_TAC THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);;
e(MAP_EVERY MP_TAC[SPECL[`n:num`;`k:num`]thm17; SPECL[`n:num`;`&(k - 1) / &n`;`&k / &n`]lemma07] THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);;

e(MP_TAC(SPECL[`&(k - 1) / &n`;`&k / &n`;`\x.  abs (sin (&n * pi * x))`;`\x. -- &1 pow (k + 1) * sin (&n * pi * x)`]lemma06) THEN BETA_TAC THEN ASM_SIMP_TAC[INTEGRABLE_CONTINUOUS; INTEGRAL_CMUL; thm09] THEN REPEAT STRIP_TAC);;

e(SUBGOAL_TAC""`&1 <= &n`[ASM_SIMP_TAC[REAL_LE]] THEN ASM_SIMP_TAC[UNDISCH(REAL_FIELD`&1 <= &n ==> &n * pi * &k / &n = &k * pi`); COS_NPI; REAL_SUB_LDISTRIB; ]);;

e(SIMP_TAC[SPEC`(-- &1 pow k)`REAL_NEG_MINUS1; REAL_MUL_AC; GSYM POW_ADD; UNDISCH(ARITH_RULE`1 <= k ==> k + k + 1 = 2 * k + 1 /\ k - 1 + k + 1 = 2 * k`);]);;

e(SIMP_TAC[ POW_ADD; POW_MINUS1; POW_1] THEN ASM_REAL_ARITH_TAC);;
let thm18 = top_thm();;