src/HOL/Tools/Function/partial_function.ML
changeset 82641 d22294b20573
parent 81946 ee680c69de38
child 82643 f1c14af17591
equal deleted inserted replaced
82640:9e35c1662aec 82641:d22294b20573
   176       (Simplifier.simp_tac (put_simpset curry_uncurry_ss ctxt) 3 (* discharge U (C f) = f *)
   176       (Simplifier.simp_tac (put_simpset curry_uncurry_ss ctxt) 3 (* discharge U (C f) = f *)
   177        THEN Simplifier.simp_tac (put_simpset curry_K_ss ctxt) 4 (* simplify bot case *)
   177        THEN Simplifier.simp_tac (put_simpset curry_K_ss ctxt) 4 (* simplify bot case *)
   178        THEN Simplifier.full_simp_tac (put_simpset curry_uncurry_ss ctxt) 5) (* simplify induction step *)
   178        THEN Simplifier.full_simp_tac (put_simpset curry_uncurry_ss ctxt) 5) (* simplify induction step *)
   179     |> (fn thm => thm OF [mono_thm, f_def])
   179     |> (fn thm => thm OF [mono_thm, f_def])
   180     |> Conv.fconv_rule (Conv.concl_conv ~1    (* simplify conclusion *)
   180     |> Conv.fconv_rule (Conv.concl_conv ~1    (* simplify conclusion *)
   181          (Raw_Simplifier.rewrite ctxt false [mk_meta_eq @{thm Product_Type.curry_case_prod}]))
   181          (Raw_Simplifier.rewrite_wrt ctxt false [mk_meta_eq @{thm Product_Type.curry_case_prod}]))
   182     |> singleton (Variable.export ctxt' ctxt)
   182     |> singleton (Variable.export ctxt' ctxt)
   183   end
   183   end
   184 
   184 
   185 fun mk_curried_induct args ctxt inst_rule =
   185 fun mk_curried_induct args ctxt inst_rule =
   186   let
   186   let