src/ZF/Tools/datatype_package.ML
changeset 58838 59203adfc33f
parent 58028 e4250d370657
child 58936 7fbe4436952d
equal deleted inserted replaced
58837:e84d900cd287 58838:59203adfc33f
   287     Goal.prove_global thy1 [] []
   287     Goal.prove_global thy1 [] []
   288       (Ind_Syntax.traceIt "next case equation = " thy1 (mk_case_eqn arg))
   288       (Ind_Syntax.traceIt "next case equation = " thy1 (mk_case_eqn arg))
   289       (*Proves a single case equation.  Could use simp_tac, but it's slower!*)
   289       (*Proves a single case equation.  Could use simp_tac, but it's slower!*)
   290       (fn {context = ctxt, ...} => EVERY
   290       (fn {context = ctxt, ...} => EVERY
   291         [rewrite_goals_tac ctxt [con_def],
   291         [rewrite_goals_tac ctxt [con_def],
   292          rtac case_trans 1,
   292          resolve_tac [case_trans] 1,
   293          REPEAT
   293          REPEAT
   294            (resolve_tac [@{thm refl}, split_trans,
   294            (resolve_tac [@{thm refl}, split_trans,
   295              Su.case_inl RS @{thm trans}, Su.case_inr RS @{thm trans}] 1)]);
   295              Su.case_inl RS @{thm trans}, Su.case_inr RS @{thm trans}] 1)]);
   296 
   296 
   297   val free_iffs = map Drule.export_without_context (con_defs RL [@{thm def_swap_iff}]);
   297   val free_iffs = map Drule.export_without_context (con_defs RL [@{thm def_swap_iff}]);
   328         fun prove_recursor_eqn arg =
   328         fun prove_recursor_eqn arg =
   329           Goal.prove_global thy1 [] []
   329           Goal.prove_global thy1 [] []
   330             (Ind_Syntax.traceIt "next recursor equation = " thy1 (mk_recursor_eqn arg))
   330             (Ind_Syntax.traceIt "next recursor equation = " thy1 (mk_recursor_eqn arg))
   331             (*Proves a single recursor equation.*)
   331             (*Proves a single recursor equation.*)
   332             (fn {context = ctxt, ...} => EVERY
   332             (fn {context = ctxt, ...} => EVERY
   333               [rtac recursor_trans 1,
   333               [resolve_tac [recursor_trans] 1,
   334                simp_tac (put_simpset rank_ss ctxt addsimps case_eqns) 1,
   334                simp_tac (put_simpset rank_ss ctxt addsimps case_eqns) 1,
   335                IF_UNSOLVED (simp_tac (put_simpset rank_ss ctxt addsimps tl con_defs) 1)]);
   335                IF_UNSOLVED (simp_tac (put_simpset rank_ss ctxt addsimps tl con_defs) 1)]);
   336       in
   336       in
   337          map prove_recursor_eqn (flat con_ty_lists ~~ recursor_cases)
   337          map prove_recursor_eqn (flat con_ty_lists ~~ recursor_cases)
   338       end
   338       end