equal
deleted
inserted
replaced
538 |
538 |
539 val uncollapse_thms = |
539 val uncollapse_thms = |
540 map (fn NONE => Drule.dummy_thm | SOME thm => thm RS sym) collapse_thm_opts; |
540 map (fn NONE => Drule.dummy_thm | SOME thm => thm RS sym) collapse_thm_opts; |
541 in |
541 in |
542 [Goal.prove_sorry lthy [] [] goal (fn _ => |
542 [Goal.prove_sorry lthy [] [] goal (fn _ => |
543 mk_expand_tac n ms (inst_thm u disc_exhaust_thm) |
543 mk_expand_tac lthy n ms (inst_thm u disc_exhaust_thm) |
544 (inst_thm v disc_exhaust_thm) uncollapse_thms disc_exclude_thmsss |
544 (inst_thm v disc_exhaust_thm) uncollapse_thms disc_exclude_thmsss |
545 disc_exclude_thmsss')] |
545 disc_exclude_thmsss')] |
546 |> map Thm.close_derivation |
546 |> map Thm.close_derivation |
547 |> Proof_Context.export names_lthy lthy |
547 |> Proof_Context.export names_lthy lthy |
548 end; |
548 end; |
571 val goal = |
571 val goal = |
572 Logic.list_implies (uv_eq :: map4 mk_prem xctrs xss fs gs, |
572 Logic.list_implies (uv_eq :: map4 mk_prem xctrs xss fs gs, |
573 mk_Trueprop_eq (ufcase, vgcase)); |
573 mk_Trueprop_eq (ufcase, vgcase)); |
574 val weak_goal = Logic.mk_implies (uv_eq, mk_Trueprop_eq (ufcase, vfcase)); |
574 val weak_goal = Logic.mk_implies (uv_eq, mk_Trueprop_eq (ufcase, vfcase)); |
575 in |
575 in |
576 (Goal.prove_sorry lthy [] [] goal (fn _ => mk_case_cong_tac uexhaust_thm case_thms), |
576 (Goal.prove_sorry lthy [] [] goal (fn _ => mk_case_cong_tac lthy uexhaust_thm case_thms), |
577 Goal.prove_sorry lthy [] [] weak_goal (K (etac arg_cong 1))) |
577 Goal.prove_sorry lthy [] [] weak_goal (K (etac arg_cong 1))) |
578 |> pairself (Thm.close_derivation #> singleton (Proof_Context.export names_lthy lthy)) |
578 |> pairself (Thm.close_derivation #> singleton (Proof_Context.export names_lthy lthy)) |
579 end; |
579 end; |
580 |
580 |
581 val (split_thm, split_asm_thm) = |
581 val (split_thm, split_asm_thm) = |
594 mk_Trueprop_eq (lhs, HOLogic.mk_not (Library.foldr1 HOLogic.mk_disj |
594 mk_Trueprop_eq (lhs, HOLogic.mk_not (Library.foldr1 HOLogic.mk_disj |
595 (map3 mk_disjunct xctrs xss xfs))); |
595 (map3 mk_disjunct xctrs xss xfs))); |
596 |
596 |
597 val split_thm = |
597 val split_thm = |
598 Goal.prove_sorry lthy [] [] goal |
598 Goal.prove_sorry lthy [] [] goal |
599 (fn _ => mk_split_tac uexhaust_thm case_thms inject_thmss distinct_thmsss) |
599 (fn _ => mk_split_tac lthy uexhaust_thm case_thms inject_thmss distinct_thmsss) |
600 |> Thm.close_derivation |
600 |> Thm.close_derivation |
601 |> singleton (Proof_Context.export names_lthy lthy); |
601 |> singleton (Proof_Context.export names_lthy lthy); |
602 val split_asm_thm = |
602 val split_asm_thm = |
603 Goal.prove_sorry lthy [] [] asm_goal (fn {context = ctxt, ...} => |
603 Goal.prove_sorry lthy [] [] asm_goal (fn {context = ctxt, ...} => |
604 mk_split_asm_tac ctxt split_thm) |
604 mk_split_asm_tac ctxt split_thm) |