src/ZF/AC/recfunAC16.ML
changeset 2469 b50b8c0eec01
parent 1461 6bcb44e4d6e5
child 3731 71366483323b
equal deleted inserted replaced
2468:428efffe8599 2469:b50b8c0eec01
    31 (* ********************************************************************** *)
    31 (* ********************************************************************** *)
    32 (* Monotonicity of transrec2                                              *)
    32 (* Monotonicity of transrec2                                              *)
    33 (* ********************************************************************** *)
    33 (* ********************************************************************** *)
    34 
    34 
    35 val [prem1, prem2] = goal thy 
    35 val [prem1, prem2] = goal thy 
    36     "[| !!g r. r <= B(g,r); Ord(i) |]  \
    36     "[| !!g r. r <= B(g,r);  Ord(i) |]  \
    37 \       ==> j<i --> transrec2(j, 0, B) <= transrec2(i, 0, B)";
    37 \       ==> j<i --> transrec2(j, 0, B) <= transrec2(i, 0, B)";
    38 by (resolve_tac [prem2 RS trans_induct] 1);
    38 by (resolve_tac [prem2 RS trans_induct] 1);
    39 by (rtac Ord_cases 1 THEN (REPEAT (assume_tac 1)));
    39 by (rtac Ord_cases 1 THEN (REPEAT (assume_tac 1)));
    40 by (fast_tac lt_cs 1);
    40 by (Fast_tac 1);
    41 by (asm_simp_tac (AC_ss addsimps [transrec2_succ]) 1);
    41 by (Asm_simp_tac 1);
    42 by (fast_tac (FOL_cs addSIs [succI1, prem1]
    42 by (fast_tac (FOL_cs addSIs [succI1, prem1]
    43         addSEs [ballE, leE, prem1 RSN (2, subset_trans)]) 1);
    43         addSEs [ballE, leE, prem1 RSN (2, subset_trans)]) 1);
    44 by (fast_tac (AC_cs addIs [OUN_I, ltI]
    44 by (fast_tac (!claset addIs [OUN_I, ltI]
    45         addSEs [Limit_has_succ RS ltE, succI1 RSN (2, Ord_in_Ord) RS le_refl,
    45         addSEs [Limit_has_succ RS ltE, succI1 RSN (2, Ord_in_Ord) RS le_refl,
    46                 transrec2_Limit RS ssubst]) 1);
    46                 transrec2_Limit RS ssubst]) 1);
    47 val transrec2_mono_lemma = result();
    47 val transrec2_mono_lemma = result();
    48 
    48 
    49 val [prem1, prem2] = goal thy "[| !!g r. r <= B(g,r); j le i |]  \
    49 val [prem1, prem2] = goal thy "[| !!g r. r <= B(g,r); j le i |]  \
    50 \       ==> transrec2(j, 0, B) <= transrec2(i, 0, B)";
    50 \       ==> transrec2(j, 0, B) <= transrec2(i, 0, B)";
    51 by (resolve_tac [prem2 RS leE] 1);
    51 by (resolve_tac [prem2 RS leE] 1);
    52 by (resolve_tac [transrec2_mono_lemma RS impE] 1);
    52 by (resolve_tac [transrec2_mono_lemma RS impE] 1);
    53 by (TRYALL (fast_tac (AC_cs addSIs [prem1, prem2, lt_Ord2])));
    53 by (TRYALL (fast_tac (!claset addSIs [prem1, prem2, lt_Ord2])));
    54 val transrec2_mono = result();
    54 val transrec2_mono = result();
    55 
    55 
    56 (* ********************************************************************** *)
    56 (* ********************************************************************** *)
    57 (* Monotonicity of recfunAC16                                             *)
    57 (* Monotonicity of recfunAC16                                             *)
    58 (* ********************************************************************** *)
    58 (* ********************************************************************** *)
    59 
    59 
    60 goalw thy [recfunAC16_def]
    60 goalw thy [recfunAC16_def]
    61         "!!i. i le j ==> recfunAC16(f, g, i, a) <= recfunAC16(f, g, j, a)";
    61         "!!i. i le j ==> recfunAC16(f, g, i, a) <= recfunAC16(f, g, j, a)";
    62 by (rtac transrec2_mono 1);
    62 by (rtac transrec2_mono 1);
    63 by (REPEAT (fast_tac (AC_cs addIs [expand_if RS iffD2]) 1));
    63 by (REPEAT (fast_tac (!claset addIs [expand_if RS iffD2]) 1));
    64 val recfunAC16_mono = result();
    64 val recfunAC16_mono = result();
    65 
    65