Example (24.1)

 まずは,区間の等分です.単調列での分割を帰納法で示した後,nを固定した列により等分します.

needs "Library/transc.ml";;

g `!n f x i. (!j k. j <= k /\ k <= n ==> x j <= x k) /\
             (!k. 1 <= k /\ k <= n ==> defint (x (k -1),x k) f (i k))
             ==> defint (x 0,x n) f (sum (1,n) i)`;;
e(INDUCT_TAC);;
e(SIMP_TAC[INTEGRAL_NULL; sum]);;
e(REPEAT STRIP_TAC THEN SIMP_TAC[sum] THEN MATCH_MP_TAC DEFINT_COMBINE);;
e(FIRST_ASSUM(MP_TAC o (SPEC`SUC n`)) THEN SIMP_TAC[LE_REFL; my]);;
e(FIRST_ASSUM(MP_TAC o (SPECL[`n:num`;`SUC n`])) THEN SIMP_TAC[LESS_EQ_SUC_REFL; LE_REFL]);;
e(FIRST_ASSUM(MP_TAC o (SPECL[`0`;`n:num`])) THEN SIMP_TAC[LE_0; LESS_EQ_SUC_REFL; SUC_SUB1; ADD1; ADD_AC]);;
e(FIRST_X_ASSUM(MP_TAC o (SPECL[`f:real->real`;`x:num->real`;`i':num->real`])));;
e(ASM_MESON_TAC[LE_TRANS; LESS_EQ_SUC_REFL]);;
let thm01 = top_thm();;

let thm02 = prove
 (`!n j k. 1 <= n /\ j <= k /\ k <= n ==> &j / &n <= &k / &n`,
  REPEAT GEN_TAC THEN SIMP_TAC[GSYM REAL_LE] THEN CONV_TAC REAL_SOSFIELD);;

let thm03 = SPECL[`n:num`;`f:real->real`;`(\k:num. &k / &n)`;`i:num->real`]thm01;;

g `!n f i. 1 <= n /\ 
          (!k. 1 <= k /\ k <= n ==> defint (&(k - 1) / &n,&k / &n) f (i k))
          ==> defint (&0,&1) f (sum (1,n) i)`;;
e(REPEAT STRIP_TAC THEN MP_TAC thm03);;
e(ASM_MESON_TAC[thm02; REAL_DIV_LZERO; LE_1; REAL_INJ; REAL_DIV_REFL]);;
let thm04 = top_thm();;
let thm04 = 
SPECL[`n:num`;`f:real->real`;`(\k. integral (&(k - 1) / &n,&k / &n) f)`]thm04;;

g `1 <= n ==> 1 <= k /\ k <= n ==> &0 <= &(k - 1) / &n /\  &(k - 1) / &n <= &k / &n /\ &k / &n <= &1`;;
e(SIMP_TAC[GSYM REAL_OF_NUM_SUB; GSYM REAL_LE] THEN CONV_TAC REAL_SOSFIELD);;
let thm05 = top_thm();;

let thm06 = MESON[thm05;INTEGRABLE_CONTINUOUS;INTEGRABLE_SUBINTERVAL;]
`(!x. &0 <= x /\ x <= &1 ==> f contl x)
    ==> integrable (&0,&1) f /\
        (1 <= n
             ==> (!k. 1 <= k /\ k <= n
                      ==> integrable (&(k - 1) / &n,&k / &n) f))`;;

g `1 <= n ==> &(k - 1) / &n <= &k / &n /\ &0 <= &1`;;
e(MP_TAC(ARITH_RULE`k-1<=k`) THEN SIMP_TAC[GSYM REAL_OF_NUM_SUB; GSYM REAL_LE] THEN CONV_TAC REAL_SOSFIELD);;
let thm07 = top_thm();;

g `!f. (!x. &0 <= x /\ x <= &1 ==> f contl x)
       ==> (!n. 1 <= n
                ==> integral (&0,&1) f =
                    sum (1,n) (\k. integral (&(k - 1) / &n,&k / &n) f))`;;
e(REPEAT STRIP_TAC);;
e(MP_TAC thm06 THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);;
e(ASM_MESON_TAC[thm04; thm07; INTEGRABLE_DEFINT; DINT_UNIQ]);;
let thm08 = top_thm();;

# thm08;;
val it : thm =
  |- !f. (!x. &0 <= x /\ x <= &1 ==> f contl x)
         ==> (!n. 1 <= n
                  ==> integral (&0,&1) f =
                      sum (1,n) (\k. integral (&(k - 1) / &n,&k / &n) f))

 この定理を適用して,次を得ます.

let thm09 = MESON[DIFF_CONT; DIFF_CONV`\x. sin (&n * pi * x)`]`(\x. sin (&n * pi * x)) contl x`;;

g `f contl x ==> (\x. f x * abs (sin (&n * pi * x))) contl x`;;
e(STRIP_TAC THEN MATCH_MP_TAC CONT_MUL);;
e(ASSUME_TAC(MATCH_MP CONT_ABS thm09) THEN ASM_MESON_TAC[]);;
let thm10 = top_thm();;


g `(!x. &0 <= x /\ x <= &1 ==> f contl x)
          ==> !n. 1 <= n 
          ==> integral (&0,&1) (\x. f x * abs (sin (&n * pi * x))) =
              sum (1,n)
              (\k. integral (&(k - 1) / &n,&k / &n)
                   (\x. f x * abs (sin (&n * pi * x))))`;;
e(REPEAT STRIP_TAC);;
e(SUBGOAL_TAC""`(!x. &0 <= x /\ x <= &1 ==> (\x. f x * abs (sin (&n * pi * x))) contl x)`[ASM_MESON_TAC[thm10]]);;
e(FIRST_X_ASSUM(MP_TAC o (MATCH_MP thm08)) THEN DISCH_THEN(MP_TAC o (SPEC`n:num`)) THEN ASM_SIMP_TAC[]);;
let thm11 = top_thm();;

val thm11 : thm =
  |- (!x. &0 <= x /\ x <= &1 ==> f contl x)
     ==> (!n. 1 <= n
              ==> integral (&0,&1) (\x. f x * abs (sin (&n * pi * x))) =
                  sum (1,n)
                  (\k. integral (&(k - 1) / &n,&k / &n)
                       (\x. f x * abs (sin (&n * pi * x)))))