equal
deleted
inserted
replaced
306 val num_of_constrs = length case_thms |
306 val num_of_constrs = length case_thms |
307 val (_, ts) = strip_comb t |
307 val (_, ts) = strip_comb t |
308 in |
308 in |
309 trace_tac ctxt options ("Term " ^ (Syntax.string_of_term ctxt t) ^ |
309 trace_tac ctxt options ("Term " ^ (Syntax.string_of_term ctxt t) ^ |
310 " splitting with rules \n" ^ Display.string_of_thm ctxt split_asm) |
310 " splitting with rules \n" ^ Display.string_of_thm ctxt split_asm) |
311 THEN TRY (Splitter.split_asm_tac [split_asm] 1 |
311 THEN TRY (Splitter.split_asm_tac ctxt [split_asm] 1 |
312 THEN (trace_tac ctxt options "after splitting with split_asm rules") |
312 THEN (trace_tac ctxt options "after splitting with split_asm rules") |
313 (* THEN (Simplifier.asm_full_simp_tac (put_simpset HOL_basic_ss ctxt) 1) |
313 (* THEN (Simplifier.asm_full_simp_tac (put_simpset HOL_basic_ss ctxt) 1) |
314 THEN (DETERM (TRY (etac @{thm Pair_inject} 1)))*) |
314 THEN (DETERM (TRY (etac @{thm Pair_inject} 1)))*) |
315 THEN (REPEAT_DETERM_N (num_of_constrs - 1) |
315 THEN (REPEAT_DETERM_N (num_of_constrs - 1) |
316 (etac @{thm botE} 1 ORELSE etac @{thm botE} 2))) |
316 (etac @{thm botE} 1 ORELSE etac @{thm botE} 2))) |
318 THEN (EVERY (map split_term_tac ts)) |
318 THEN (EVERY (map split_term_tac ts)) |
319 end |
319 end |
320 else all_tac |
320 else all_tac |
321 in |
321 in |
322 split_term_tac (HOLogic.mk_tuple out_ts) |
322 split_term_tac (HOLogic.mk_tuple out_ts) |
323 THEN (DETERM (TRY ((Splitter.split_asm_tac [@{thm "split_if_asm"}] 1) |
323 THEN (DETERM (TRY ((Splitter.split_asm_tac ctxt [@{thm "split_if_asm"}] 1) |
324 THEN (etac @{thm botE} 2)))) |
324 THEN (etac @{thm botE} 2)))) |
325 end |
325 end |
326 |
326 |
327 (* VERY LARGE SIMILIRATIY to function prove_param |
327 (* VERY LARGE SIMILIRATIY to function prove_param |
328 -- join both functions |
328 -- join both functions |