Example (22.8)
以上を利用して次に至ります.
g`~(?n N. 2 <= n /\ sum(1..n)(\k. &1 / &k) = &N)`;; e(REPEAT STRIP_TAC);; e(MP_TAC (SPEC_ALL floor2) THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);; e(MP_TAC (SPEC`xn:num`thm4) THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);; e(MP_TAC (SPEC_ALL thm5) THEN ASM_SIMP_TAC[]);; e(MAP_EVERY (MP_TAC o SPEC_ALL) [thm7; thm8] THEN ASM_SIMP_TAC[] THEN STRIP_TAC THEN STRIP_TAC THEN ASM_SIMP_TAC[]);; e(MP_TAC (SPECL[`x:num`;`y:num`;`x':num`;`y':num`]thm6) THEN ASM_SIMP_TAC[] THEN STRIP_TAC THEN ASM_SIMP_TAC[REAL_ARITH`&x' / &y' + &1 + &x / &y = &1 + &x / &y + &x' / &y'`; REAL_OF_NUM_POW; REAL_MUL]);; let lemma = prove(`ODD y'' ==> (&(2 * m) = &1 + &x'' / &y'' <=> 2 * m * y'' = x'' + y'')`,STRIP_TAC THEN MP_TAC(UNDISCH(SPEC`y'':num`lemma01)) THEN SIMP_TAC[GSYM REAL_INJ; GSYM REAL_MUL; GSYM REAL_ADD;] THEN (CONV_TAC REAL_SOSFIELD));; e(MP_TAC (MESON[ARITH_RULE`EVEN(2)`; LE_1; EVEN_EXP; EVEN_MULT]`1 <= xn ==> EVEN (2 EXP xn * N)`) THEN ASM_SIMP_TAC[EVEN_EXISTS] THEN STRIP_TAC THEN ASM_SIMP_TAC[UNDISCH lemma]);; e(ASM_MESON_TAC[ARITH_RULE`EVEN 2`; EVEN_MULT; EVEN_ADD; EVEN_AND_ODD]);;
更にintegerを用いて
MESON[top_thm(); integer; ABS_REFL; ARITH_RULE`1 <= x ==> 0 <= x`; REAL_LE; REAL_LE_INV; SUM_POS_LE_NUMSEG; REAL_INV_1OVER] `!n. 2 <= n ==> ~(integer (sum (1..n) (\k. &1 / &k)))`;;
となります.