2013年東京大学理科前期第5問 by HOL Light.
f は次数,主係数が正の整数係数一変数多項式なら十分ですが,原題の3次式にしました.N は任意の自然数です.
let lemma01 = prove (`!x f. f 0 < x /\ (!n. f n < x ==> f (SUC n) < x) ==> !n. f n < x`, REPEAT GEN_TAC THEN STRIP_TAC THEN INDUCT_TAC THEN ASM_MESON_TAC []);; let lemma02 = MESON [REAL_NOT_LT; lemma01 ] `!x f. f 0 < x /\ (?m. x <= f m) ==> (?m. f m < x /\ x <= f (SUC m))` ;; let lemma03 = MESON [REAL_NOT_LE; lemma02] `!x y f. x<y ==> f 0 < x /\ (?m. x <= f m) ==> (!m. ~(x <= f m /\ f m < y) ) ==> (?m. f m < x /\ y <= f (SUC m))` ;; let lemma04 = MESON[REAL_ARCH_SIMPLE; REAL_POS; REAL_SOS `&0<= &m ==> &m <= &m*(&1+ &m)*(&2+ &m)`; REAL_LE_TRANS] `!x. ?m. x <= &m*(&1+ &m)*(&2+ &m)` ;; g `!x y. &0<x /\ x<y ==> (!m. ~(x <= &m*(&1+ &m)*(&2+ &m) /\ &m*(&1+ &m)*(&2+ &m) < y) ) ==> (?m. &m*(&1+ &m)*(&2+ &m) < x /\ y <= &(SUC m)*(&1+ &(SUC m))*(&2+ &(SUC m)))` ;; e( REPEAT STRIP_TAC );; e( SUBST_ALL_TAC (REAL_ARITH`&0 = &0*(&1+ &0)*(&2+ &0)`) );; e( ASSUME_TAC (SPEC `x:real` lemma04) );; e( ASM_MESON_TAC [SPECL [`x:real`; `y:real`; `(\m. &m*(&1+ &m)*(&2+ &m))`] lemma03] );; let lemma05 = top_thm () ;; let lemma0505 = SPECL[`(&N)*(&10 pow n)`;`(&N+ &1)*(&10 pow n)`]lemma05;; g `!N n. 0<N ==> &0 < &N * &10 pow n /\ &N * &10 pow n < (&N + &1) * &10 pow n` ;; e( REPEAT STRIP_TAC );; e( ASM_MESON_TAC [REAL_POW_LT;REAL_OF_NUM_LT;REAL_ARITH `&0< &10`;REAL_LT_MUL] );; e( ASM_MESON_TAC [REAL_POW_LT;REAL_ARITH`&N< &N+ &1`;REAL_ARITH `&0< &10`;REAL_LT_RMUL] );; let lemma051 = top_thm () ;; let lemma055 = MESON [REAL_ARCH; REAL_ARITH `&0< &N + &1`; REAL_MUL_AC] `!N. ?n. &6 + &33 * &N + &54 * ( &N pow 2) + &27 *(&N pow 3) < (&N + &1)*( &n)` ;; g `!n. &n+ &1 <= &10 pow n` ;; e( INDUCT_TAC );; e( REWRITE_TAC [pow] THEN ARITH_TAC );; e( REWRITE_TAC [pow] THEN REWRITE_TAC [REAL] THEN ASM_REAL_ARITH_TAC );; let lemma056 = top_thm () ;; g `!N n. (&N+ &1)*(&n)<(&N+ &1)*(&10 pow n)` ;; e( REPEAT GEN_TAC );; e( MATCH_MP_TAC REAL_LT_LMUL );; e( CONJ_TAC );; e( REAL_ARITH_TAC );; e( MP_TAC (SPEC`n:num`lemma056) THEN REAL_ARITH_TAC );; let lemma057 = top_thm () ;; let lemma058 = MESON [lemma055; lemma057; REAL_LT_TRANS] `!N. 0<N ==> ?n. &6 + &33 * &N + &54 * ( &N pow 2) + &27 *(&N pow 3) < (&N + &1)*(&10 pow n)` ;; g `!N n. 0<N ==> &6 + &33 * &N + &54 * ( &N pow 2) + &27 *(&N pow 3) < (&N + &1)*(&10 pow n) ==> (!m. ~(&N * &10 pow n <= &m * (&1 + &m) * (&2 + &m) /\ &m * (&1 + &m) * (&2 + &m) < (&N + &1) * &10 pow n)) ==> (?m. &m * (&1 + &m) * (&2 + &m) < &N * &10 pow n /\ (&N + &1) * &10 pow n <= &(SUC m) * (&1 + &(SUC m)) * (&2 + &(SUC m)))` ;; e( MESON_TAC [lemma0505; lemma051] );; let lemma059 = top_thm () ;; let lemma06 = REAL_SOS `&0<= &m /\ &0<= &N ==> &m*(&1+ &m)*(&2+ &m) < &N * (&10 pow n) /\ (&N+ &1)*(&10 pow n) <= &(SUC m)*(&1+ &(SUC m))*(&2+ &(SUC m)) ==> (&N+ &1)*(&m)*(&1+ &m)*(&2+ &m)< &N*(&(SUC m))*(&1+ &(SUC m))*(&2+ &(SUC m))` ;; let lemma065 = MESON [REAL] `&(SUC m)*(&1+ &(SUC m))*(&2+ &(SUC m)) = (&m+ &1)*(&1+ (&m+ &1))*(&2+ (&m+ &1))`;; let lemma07 = REAL_SOS `&0<= &m /\ &0<= &N /\ (&N+ &1)*(&m)*(&1+ &m)*(&2+ &m)< &N*((&m+ &1)*(&1+ (&m+ &1))*(&2+ (&m+ &1))) ==> &m < &3* &N` ;; let lemma08 = REAL_SOS `&0<= &m /\ &0<= &N /\ &m < &3* &N ==> (&m+ &1)*(&1+ (&m+ &1))*(&2+ (&m+ &1)) < &6 + &33 * &N + &54 * ( &N pow 2) + &27 *(&N pow 3)` ;; let lemma0679 =MESON[lemma06;lemma065;lemma07;lemma08;REAL_POS] `&m*(&1+ &m)*(&2+ &m) < &N * (&10 pow n) ==> (&N+ &1)*(&10 pow n) <= &(SUC m)*(&1+ &(SUC m))*(&2+ &(SUC m)) ==> &(SUC m)*(&1+ &(SUC m))*(&2+ &(SUC m)) < &6 + &33 * &N + &54 * ( &N pow 2) + &27 *(&N pow 3)`;; (* *) g `!N. 0<N ==> ?n m. &N * (&10 pow n) <= (&m)*(&1+ &m)*(&2+ &m) /\ (&m)*(&1+ &m)*(&2+ &m) < (&N + &1) * (&10 pow n)` ;; e( REPEAT STRIP_TAC );; e( MP_TAC (UNDISCH(SPEC`N:num`lemma058)) THEN STRIP_TAC );; e( REWRITE_TAC [MESON[] `(?n m. P m n) <=> ~(!n m. ~(P m n))`] );; e( STRIP_TAC );; e( POP_ASSUM (ASSUME_TAC o (SPEC`n:num`) ) );; e( ASSUME_TAC (UNDISCH_ALL (SPECL[ `N:num`; `n:num`] lemma059 ) ) );; e( POP_ASSUM MP_TAC THEN STRIP_TAC );; e( ASSUME_TAC (UNDISCH_ALL lemma0679 ) );; e( ASM_REAL_ARITH_TAC );; let thm1 = top_thm () ;; g `!N. ?n m. &N * (&10 pow n) <= (&m)*(&1+ &m)*(&2+ &m) /\ (&m)*(&1+ &m)*(&2+ &m) < (&N + &1) * (&10 pow n)` ;; e( GEN_TAC );; e( DISJ_CASES_TAC (ARITH_RULE `0<N \/ N=0` ) );; e( ASM_SIMP_TAC [thm1] );; e( EXISTS_TAC `0` THEN EXISTS_TAC `0` THEN ASM_REWRITE_TAC [pow] );; e( ASM_REAL_ARITH_TAC );; let thm = top_thm () ;; val thm : thm = |- !N. ?n m. &N * &10 pow n <= &m * (&1 + &m) * (&2 + &m) /\ &m * (&1 + &m) * (&2 + &m) < (&N + &1) * &10 pow n
一般の場合は,次のような構成になります.
# MESON [REAL_ARITH `a<=L /\ L<x /\ x<y /\ y<=a:real ==> F`;] ` (?M. !m. (&N + &1) * f m - &N * f (SUC m) < &0 ==> m <= M) /\ (!M. ?L. !m. m <= M ==> f (SUC m) <= L) /\ (!L. ?n. f 0 < &N * &10 pow n /\ L < &N * &10 pow n) /\ (!n. ?m. &N * &10 pow n <= f m) /\ (!n. &N * &10 pow n < (&N + &1) * &10 pow n) /\ (!x y. x < y ==> f 0 < x ==> (?m. x <= f m) ==> (!m. ~(x <= f m /\ f m < y)) ==> (?m. f m < x /\ y <= f (SUC m))) /\ (!z m. f m < &N * z /\ (&N + &1) * z <= f (SUC m) ==> (&N + &1) * f m - &N * f (SUC m) < &0) ==> (?n m. &N * &10 pow n <= f m /\ f m < (&N + &1) * &10 pow n) `;; 0..0..0..2..4..11..26..41..64..87..110..137..164..191..220..301..382..706..1040. .1374..1784..2206..2628..3094..3660..4226..5271..6558..7845..10360..12896..15432 ..18437..21535..24633..28413..32300..36187..41173..46224..51275..57051..63003..6 8955..76613..solved at 81869 val it : thm = |- (?M. !m. (&N + &1) * f m - &N * f (SUC m) < &0 ==> m <= M) /\ (!M. ?L. !m. m <= M ==> f (SUC m) <= L) /\ (!L. ?n. f 0 < &N * &10 pow n /\ L < &N * &10 pow n) /\ (!n. ?m. &N * &10 pow n <= f m) /\ (!n. &N * &10 pow n < (&N + &1) * &10 pow n) /\ (!x y. x < y ==> f 0 < x ==> (?m. x <= f m) ==> (!m. ~(x <= f m /\ f m < y)) ==> (?m. f m < x /\ y <= f (SUC m))) /\ (!z m. f m < &N * z /\ (&N + &1) * z <= f (SUC m) ==> (&N + &1) * f m - &N * f (SUC m) < &0) ==> (?n m. &N * &10 pow n <= f m /\ f m < (&N + &1) * &10 pow n)
従って,この前件の各式を
`0<N /\ 0<d /\ &0<a d /\ (!m. f m = sum (0..d) (\k. a k * &m pow k))`
から導けば
`!N d a f. 0 < N /\ 0 < d /\ &0 < a d /\ (!m. f m = sum (0..d) (\k. a k * &m pow k)) ==> (?n m. &N * &10 pow n <= f m /\ f m < (&N + &1) * &10 pow n)`