src/HOL/BNF/Tools/bnf_wrap.ML
changeset 51717 9e7d1c139569
parent 51697 1ce319118d59
child 51742 b5ff7393642d
equal deleted inserted replaced
51709:19b47bfac6ef 51717:9e7d1c139569
   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)