src/ZF/ex/Primrec0.ML
changeset 128 b0ec0c1bddb7
parent 71 729fe026c5f3
child 279 7738aed3f84d
equal deleted inserted replaced
127:eec6bb9c58ea 128:b0ec0c1bddb7
   335 \           l: list(nat)						\
   335 \           l: list(nat)						\
   336 \        |] ==> PREC(f,g)`l #+ list_add(l) < ack(succ(kf#+kg), list_add(l))";
   336 \        |] ==> PREC(f,g)`l #+ list_add(l) < ack(succ(kf#+kg), list_add(l))";
   337 by (etac List.elim 1);
   337 by (etac List.elim 1);
   338 by (asm_simp_tac (ack2_ss addsimps [[nat_le_refl, lt_ack2] MRS lt_trans]) 1);
   338 by (asm_simp_tac (ack2_ss addsimps [[nat_le_refl, lt_ack2] MRS lt_trans]) 1);
   339 by (asm_simp_tac ack2_ss 1);
   339 by (asm_simp_tac ack2_ss 1);
   340 be ssubst 1;  (*get rid of the needless assumption*)
   340 by (etac ssubst 1);  (*get rid of the needless assumption*)
   341 by (eres_inst_tac [("n","a")] nat_induct 1);
   341 by (eres_inst_tac [("n","a")] nat_induct 1);
   342 (*base case*)
   342 (*base case*)
   343 by (DO_GOAL [asm_simp_tac ack2_ss, rtac lt_trans, etac bspec,
   343 by (DO_GOAL [asm_simp_tac ack2_ss, rtac lt_trans, etac bspec,
   344 	     assume_tac, rtac (add_le_self RS ack_lt_mono1),
   344 	     assume_tac, rtac (add_le_self RS ack_lt_mono1),
   345 	     REPEAT o ares_tac (ack_typechecks)] 1);
   345 	     REPEAT o ares_tac (ack_typechecks)] 1);