Example (22.7)
同様に第2の和も表せることの証明です.thm8_2はthm7_2を含んだ形になりました.
g`!n xn k. n < 2 EXP SUC xn /\ 1 <= xn /\ 2 EXP xn + 1 <= k /\ k <= n ==> ?x y. &2 pow xn / &k = &x / &y /\ EVEN x /\ ODD y`;; e(REPEAT STRIP_TAC);; e(MP_TAC( prove(`2 EXP xn + 1 <= k /\ k <= n /\ n < 2 EXP SUC xn ==> 1 <= k /\ k < 2 EXP SUC xn /\ ~(k = 2 EXP xn)`, SIMP_TAC[EXP] THEN MP_TAC(MESON[TWO; ZERO_LESS_EXP]`0 < 2 EXP xn`) THEN CONV_TAC SOS_RULE) ) THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC);; e(MP_TAC (SPECL[`xn:num`;`k:num`]thm4) THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC THEN ASM_SIMP_TAC[GSYM REAL_MUL; GSYM REAL_OF_NUM_POW; REAL_FIELD`a/(b*c)=(a/b)/c`]);; e(ASSUME_TAC(ARITH_RULE`~(&2 = &0)`) THEN ASM_SIMP_TAC[REAL_DIV_POW2_ALT; REAL_OF_NUM_POW]);; e(ASM_MESON_TAC[ MESON[ARITH_RULE`EVEN(2)`; LE_1; EVEN_EXP]`!x. 0 < x ==> EVEN (2 EXP x)`; ARITH_RULE`a<b <=> 0<b-a`]);; let thm8_1 = top_thm();; g`!a b:num->real. !s m. (!k. s <= k /\ k <= m ==> ?x y. a k / b k = &x / &y /\ EVEN x /\ ODD y) ==> ?x y. sum (s..m) (\k. a k / b k) = &x / &y /\ EVEN x /\ ODD y`;; e(STRIP_TAC THEN STRIP_TAC THEN STRIP_TAC);; e(INDUCT_TAC);; e(SIMP_TAC[my; ARITH] THEN DISCH_THEN(MP_TAC o (SPEC`0`)) THEN SIMP_TAC[ARITH_RULE`s <= 0 /\ 0 <= 0 <=> s = 0`] THEN MESON_TAC[REAL_FIELD`&0 = &0 / &1`; ARITH_RULE`EVEN 0 /\ ODD 1`]);; e(DISJ_CASES_THEN ASSUME_TAC (ARITH_RULE`SUC m < s \/ s <= SUC m`));; e(ASM_MESON_TAC[SUM_TRIV_NUMSEG; REAL_FIELD`&0 = &0 / &1`; ARITH_RULE`EVEN 0 /\ ODD 1`]);; let lemma = MESON[ARITH_RULE`k <= m ==> k <= SUC m`; LE_REFL] `s <= SUC m /\ (!k. s <= k /\ k <= SUC m ==> (?x y. a k / b k = &x / &y /\ EVEN x /\ ODD y)) ==> (!k. s <= k /\ k <= m ==> (?x y. a k / b k = &x / &y /\ EVEN x /\ ODD y)) /\ (?x y. a (SUC m) / b (SUC m) = &x / &y /\ EVEN x /\ ODD y)`;; e(STRIP_TAC THEN MP_TAC lemma THEN ASM_SIMP_TAC[my; ARITH] THEN STRIP_TAC THEN UNDISCH_TAC `(!k. s <= k /\ k <= m ==> (?x y. a k / b k = &x / &y /\ EVEN x /\ ODD y)) ==> (?x y. sum (s..m) (\k. a k / b k) = &x / &y /\ EVEN x /\ ODD y)` THEN ASM_SIMP_TAC[] THEN STRIP_TAC THEN ASM_SIMP_TAC[]);; e(ASM_MESON_TAC[thm6]);; let thm8_2 = top_thm();; g`!xn. 1 <= xn /\ n < 2 EXP SUC xn ==> ?x y. sum (2 EXP xn + 1..n) (\k. &2 pow xn / &k) = &x / &y /\ EVEN x /\ ODD y`;; e(REPEAT STRIP_TAC);; e(MP_TAC(SPECL[`\k:num. &2 pow xn`;`\k. &k`;`2 EXP xn + 1`;`n:num`]thm8_2) THEN BETA_TAC THEN ASM_MESON_TAC[thm8_1]);; let thm8 = top_thm();;