DEL_TAC
ASM 系のタクティックの負担軽減の為,不要な仮定を消去する目的で作りました.
for HOL Light
let DEL_TAC n = ASSUM_LIST (fun al-> UNDISCH_THEN ( concl ((el((length al)-1-n)al)) ) (K ALL_TAC) );;
for HOL4
fun DEL_TAC n = ASSUM_LIST (fn al => UNDISCH_THEN ( concl ((el((length al)-n)al)) ) (K ALL_TAC) );
例えば
> val it = 0 <= (b − a) * (b pow n − a pow n) * s * t ------------------------------------ 0. 0 <= s 1. 0 <= t 2. s + t = 1 3. 0 <= a 4. 0 <= b 5. (s * a + t * b) pow n <= s * a pow n + t * b pow n : proof - - e( METIS_TAC [POW_LE, REAL_SUB_LE, REAL_LE_MUL, REAL_LE_TOTAL, REAL_NEG_MUL2, REAL_NEG_SUB] ); OK.. metis: r[+0+16]+0+0+0+0+0+0+0+2+0+0+0+0+0+0+2+0+1+0+0+5+1+1+7+2+0+2+1+1+1+0+0+1+2+1+1#
だったものが
> val it = 0 <= (b − a) * (b pow n − a pow n) * s * t ------------------------------------ 0. 0 <= s 1. 0 <= t 2. s + t = 1 3. 0 <= a 4. 0 <= b 5. (s * a + t * b) pow n <= s * a pow n + t * b pow n : proof - e( MAP_EVERY DEL_TAC [5, 2] ); OK.. 1 subgoal: > val it = 0 <= (b − a) * (b pow n − a pow n) * s * t ------------------------------------ 0. 0 <= s 1. 0 <= t 2. 0 <= a 3. 0 <= b : proof - e( METIS_TAC [POW_LE, REAL_SUB_LE, REAL_LE_MUL, REAL_LE_TOTAL, REAL_NEG_MUL2, REAL_NEG_SUB] ); OK.. metis: r[+0+14]+0+0+0+0+0+0+0+2+0+0+0+0+2+0+1+0+0+5+1+1+7+2+2+1+2+1+1+0+2+1+1+1#
になります.リストで番号を指定するときは値の大きい順に.