Example (17.1)
前回の実行結果です.
# g`!a b c d. &0<a /\ &0<b ==> ( a*c<b*d <=> c/b<d/a )`;; val it : goalstack = 1 subgoal (1 total) `!a b c d. &0 < a /\ &0 < b ==> (a * c < b * d <=> c / b < d / a)` # e(REPEAT STRIP_TAC);; val it : goalstack = 1 subgoal (1 total) 0 [`&0 < a`] 1 [`&0 < b`] `a * c < b * d <=> c / b < d / a` # e(ONCE_REWRITE_TAC[ARITH_RULE`x<y<=>x-y< &0`; ]);; val it : goalstack = 1 subgoal (1 total) 0 [`&0 < a`] 1 [`&0 < b`] `a * c - b * d < &0 <=> c / b - d / a < &0` # e(ASM_SIMP_TAC[RAT_LEMMA3]);; val it : goalstack = 1 subgoal (1 total) 0 [`&0 < a`] 1 [`&0 < b`] `a * c - b * d < &0 <=> (c * a - d * b) * inv b * inv a < &0` # e(ASM_SIMP_TAC[REAL_SOSFIELD`&0<x ==>(a*b* inv(x)< &0 <=> a*b< &0)`]);; 1 basis elements and 0 critical pairs Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Searching with depth limit 4 Translating proof certificate to HOL 1 basis elements and 0 critical pairs Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Searching with depth limit 4 Searching with depth limit 5 Translating proof certificate to HOL val it : goalstack = 1 subgoal (1 total) 0 [`&0 < a`] 1 [`&0 < b`] `a * c - b * d < &0 <=> (c * a - d * b) * inv b < &0` # e(ASM_SIMP_TAC[REAL_SOSFIELD`&0<x ==>(a* inv(x)< &0 <=> a< &0)`] THEN REAL_ARI TH_TAC);; 1 basis elements and 0 critical pairs Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Translating proof certificate to HOL 1 basis elements and 0 critical pairs Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Searching with depth limit 4 Translating proof certificate to HOL val it : goalstack = No subgoals # let lemma1=top_thm();; val lemma1 : thm = |- !a b c d. &0 < a /\ &0 < b ==> (a * c < b * d <=> c / b < d / a) # let lemma2=MESON[ REAL_FIELD`&0< &n ==> (!x. &n <= x /\ x <= &n + &1 ==> &0<x /\ ~(x= &0))`; DIFF_CONV`(\x. ln x / x)`; ]`&0< &n ==> (!x. &n <= x /\ x <= &n + &1 ==> ((\x. ln x / x) diffl ((inv x * &1) * x - &1 * ln x) / x pow 2) x)`;; 2 basis elements and 0 critical pairs 2 basis elements and 0 critical pairs 1 basis elements and 0 critical pairs 0..0..1..2..4..10..21..38..60..86..solved at 143 val lemma2 : thm = |- &0 < &n ==> (!x. &n <= x /\ x <= &n + &1 ==> ((\x. ln x / x) diffl ((inv x * &1) * x - &1 * ln x) / x pow 2) x) # let lemma3=REAL_SOSFIELD`&0<z ==>(((&n + &1) - &n) * ((inv z * &1) * z - &1 * ln z) / z pow 2 < &0<=> &1 < ln z)`;; 1 basis elements and 0 critical pairs Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Searching with depth limit 4 Searching with depth limit 5 Translating proof certificate to HOL 1 basis elements and 0 critical pairs Searching with depth limit 0 Searching with depth limit 1 Searching with depth limit 2 Searching with depth limit 3 Searching with depth limit 4 Searching with depth limit 5 Searching with depth limit 6 csdp warning: Reduced accuracy Searching with depth limit 7 Translating proof certificate to HOL val lemma3 : thm = |- &0 < z ==> (((&n + &1) - &n) * ((inv z * &1) * z - &1 * ln z) / z pow 2 < &0 <=> &1 < ln z) # let lemma4=MESON [ REAL_FIELD`inv (&2) <= ln (&2)<=> &1<= &2*ln(&2)`; MP (GSYM(SPECL[`2`;`&2`]LN_POW)) (REAL_FIELD`&0< &2`); REAL_FIELD`&2 pow 2 = &4`; ]`inv (&2) <= ln (&2)<=> &1<=ln(&4)`;; 1 basis elements and 0 critical pairs 1 basis elements and 0 critical pairs 0..0..1..2..3..7..13..21..39..solved at 49 0..0..solved at 2 0..0..solved at 4 0..0..3..6..9..21..37..55..89..125..solved at 148 val lemma4 : thm = |- inv (&2) <= ln (&2) <=> &1 <= ln (&4) # g`!n. 3<=n ==> (&n + &1) pow n < &n pow (n + 1)`;; val it : goalstack = 1 subgoal (1 total) `!n. 3 <= n ==> (&n + &1) pow n < &n pow (n + 1)` # e(REPEAT STRIP_TAC);; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] `(&n + &1) pow n < &n pow (n + 1)` # e(DISJ_CASES_TAC(UNDISCH(ARITH_RULE`3<=n==>(n=3 \/ 4<=n)`)));; val it : goalstack = 2 subgoals (2 total) 0 [`3 <= n`] 1 [`4 <= n`] `(&n + &1) pow n < &n pow (n + 1)` 0 [`3 <= n`] 1 [`n = 3`] `(&n + &1) pow n < &n pow (n + 1)` # e(ASM_SIMP_TAC[ARITH] THEN CONV_TAC REAL_RAT_REDUCE_CONV);; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] `(&n + &1) pow n < &n pow (n + 1)` # e(DISJ_CASES_TAC(UNDISCH(ARITH_RULE`4<=n==>(n=4 \/ 5<=n)`)));; val it : goalstack = 2 subgoals (2 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] `(&n + &1) pow n < &n pow (n + 1)` 0 [`3 <= n`] 1 [`4 <= n`] 2 [`n = 4`] `(&n + &1) pow n < &n pow (n + 1)` # e(ASM_SIMP_TAC[ARITH] THEN CONV_TAC REAL_RAT_REDUCE_CONV);; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] `(&n + &1) pow n < &n pow (n + 1)` # e(MP_TAC (ARITH_RULE`&3<= &n==> &3<= &n /\ &0< &n + &1 /\ &0< &n /\ &n < &n + &1`) THEN ASM_SIMP_TAC[REAL_LE] THEN REPEAT STRIP_TAC);; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] 3 [`&0 < &n + &1`] 4 [`&0 < &n`] 5 [`&n < &n + &1`] `(&n + &1) pow n < &n pow (n + 1)` # e(MP_TAC (MESON[REAL_POW_LT]`&0< &n + &1 /\ &0< &n ==> &0 < (&n + &1) pow n /\ &0 < &n pow (n + 1)`) THEN ASM_SIMP_TAC[] THEN REPEAT STRIP_TAC THEN ASM_SIMP_T AC[GSYM LN_MONO_LT; LN_POW; GSYM REAL_ADD; lemma1]);; 0..0..1..solved at 4 0..0..1..solved at 4 val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] 3 [`&0 < &n + &1`] 4 [`&0 < &n`] 5 [`&n < &n + &1`] 6 [`&0 < (&n + &1) pow n`] 7 [`&0 < &n pow (n + 1)`] `ln (&n + &1) / (&n + &1) < ln (&n) / &n` # e(ASM_SIMP_TAC[lemma1]);; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] 3 [`&0 < &n + &1`] 4 [`&0 < &n`] 5 [`&n < &n + &1`] 6 [`&0 < (&n + &1) pow n`] 7 [`&0 < &n pow (n + 1)`] `ln (&n + &1) / (&n + &1) < ln (&n) / &n` # e(MP_TAC (SPECL[`\x. ln x /x`;`\x. ((inv x * &1) * x - &1 * ln x) / x pow 2`;` &n:real`;`&n+ &1`]MVT_ALT) THEN BETA_TAC THEN ASM_SIMP_TAC[]);; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] 3 [`&0 < &n + &1`] 4 [`&0 < &n`] 5 [`&n < &n + &1`] 6 [`&0 < (&n + &1) pow n`] 7 [`&0 < &n pow (n + 1)`] `((!x. &n <= x /\ x <= &n + &1 ==> ((\x. ln x / x) diffl ((inv x * &1) * x - &1 * ln x) / x pow 2) x) ==> (?z. &n < z /\ z < &n + &1 /\ ln (&n + &1) / (&n + &1) - ln (&n) / &n = ((&n + &1) - &n) * ((inv z * &1) * z - &1 * ln z) / z pow 2)) ==> ln (&n + &1) / (&n + &1) < ln (&n) / &n` # e(ASSUME_TAC(UNDISCH lemma2) THEN ASM_SIMP_TAC[] THEN FIRST_X_ASSUM(fun t->ALL _TAC) THEN REPEAT STRIP_TAC THEN ONCE_REWRITE_TAC[ARITH_RULE`x<y<=>x-y< &0`] THE N ASM_SIMP_TAC[]);; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] 3 [`&0 < &n + &1`] 4 [`&0 < &n`] 5 [`&n < &n + &1`] 6 [`&0 < (&n + &1) pow n`] 7 [`&0 < &n pow (n + 1)`] 8 [`&n < z`] 9 [`z < &n + &1`] 10 [`ln (&n + &1) / (&n + &1) - ln (&n) / &n = ((&n + &1) - &n) * ((inv z * &1) * z - &1 * ln z) / z pow 2`] `((&n + &1) - &n) * ((inv z * &1) * z - &1 * ln z) / z pow 2 < &0` # e(MP_TAC (REAL_ARITH`&0< &n /\ &n<z ==> &0<z`) THEN ASM_SIMP_TAC[] THEN STRIP_ TAC THEN ASM_REWRITE_TAC[UNDISCH lemma3]);; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] 3 [`&0 < &n + &1`] 4 [`&0 < &n`] 5 [`&n < &n + &1`] 6 [`&0 < (&n + &1) pow n`] 7 [`&0 < &n pow (n + 1)`] 8 [`&n < z`] 9 [`z < &n + &1`] 10 [`ln (&n + &1) / (&n + &1) - ln (&n) / &n = ((&n + &1) - &n) * ((inv z * &1) * z - &1 * ln z) / z pow 2`] 11 [`&0 < z`] `&1 < ln z` # e(MP_TAC (SPEC`inv(&2)`REAL_EXP_BOUND_LEMMA) THEN SIMP_TAC[REAL_ARITH`&0 <= in v (&2) /\ inv (&2) <= inv (&2) /\ &1 + &2 * inv (&2) = &2`] );; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] 3 [`&0 < &n + &1`] 4 [`&0 < &n`] 5 [`&n < &n + &1`] 6 [`&0 < (&n + &1) pow n`] 7 [`&0 < &n pow (n + 1)`] 8 [`&n < z`] 9 [`z < &n + &1`] 10 [`ln (&n + &1) / (&n + &1) - ln (&n) / &n = ((&n + &1) - &n) * ((inv z * &1) * z - &1 * ln z) / z pow 2`] 11 [`&0 < z`] `exp (inv (&2)) <= &2 ==> &1 < ln z` # e(REWRITE_TAC[MESON[REAL_ARITH`&0< &2`; EXP_LN; ]`x<= &2<=>x<=exp(ln(&2))`; RE AL_EXP_MONO_LE; lemma4]);; 0..0..1..2..3..7..13..21..solved at 34 0..0..1..2..3..7..solved at 14 val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] 3 [`&0 < &n + &1`] 4 [`&0 < &n`] 5 [`&n < &n + &1`] 6 [`&0 < (&n + &1) pow n`] 7 [`&0 < &n pow (n + 1)`] 8 [`&n < z`] 9 [`z < &n + &1`] 10 [`ln (&n + &1) / (&n + &1) - ln (&n) / &n = ((&n + &1) - &n) * ((inv z * &1) * z - &1 * ln z) / z pow 2`] 11 [`&0 < z`] `&1 <= ln (&4) ==> &1 < ln z` # let lemma5=MESON[REAL_ARITH`&0< &4 /\ &0< &5 /\ &4< &5`; LN_MONO_LT]`ln(&4)<ln (&5)`;; 0..0..1..2..3..solved at 9 val lemma5 : thm = |- ln (&4) < ln (&5) # e(ASSUME_TAC lemma5);; val it : goalstack = 1 subgoal (1 total) 0 [`3 <= n`] 1 [`4 <= n`] 2 [`5 <= n`] 3 [`&0 < &n + &1`] 4 [`&0 < &n`] 5 [`&n < &n + &1`] 6 [`&0 < (&n + &1) pow n`] 7 [`&0 < &n pow (n + 1)`] 8 [`&n < z`] 9 [`z < &n + &1`] 10 [`ln (&n + &1) / (&n + &1) - ln (&n) / &n = ((&n + &1) - &n) * ((inv z * &1) * z - &1 * ln z) / z pow 2`] 11 [`&0 < z`] 12 [`ln (&4) < ln (&5)`] `&1 <= ln (&4) ==> &1 < ln z` # e(ASSUME_TAC (REAL_ARITH`&0< &5`) THEN MP_TAC (MESON[ GSYM REAL_LE; REAL_LET_TRANS; LN_MONO_LT] `5 <= n /\ &n<z /\ &0< &5 /\ &0<z ==> ln(&5)<ln(z)`) THEN ASM_SIMP_TAC[] THEN ASM_REAL_ARITH_TAC);; 0..0..1..2..4..10..17..25..solved at 37 val it : goalstack = No subgoals