src/HOL/Tools/inductive.ML
changeset 37901 ea7d4423cb5b
parent 37734 489ac1ecb9f1
child 37957 00e848690339
equal deleted inserted replaced
37900:8b3498b9eb4b 37901:ea7d4423cb5b
   412 
   412 
   413    in map prove_elim cs end;
   413    in map prove_elim cs end;
   414 
   414 
   415 (* prove simplification equations *)
   415 (* prove simplification equations *)
   416 
   416 
   417 fun prove_eqs quiet_mode cs params intr_ts intrs elims ctxt ctxt'' =
   417 fun prove_eqs quiet_mode cs params intr_ts intrs (elims: (thm * bstring list * int) list) ctxt ctxt'' =
   418   let
   418   let
   419     val _ = clean_message quiet_mode "  Proving the simplification rules ...";
   419     val _ = clean_message quiet_mode "  Proving the simplification rules ...";
   420     
   420     
   421     fun dest_intr r =
   421     fun dest_intr r =
   422       (the (dest_predicate cs params (HOLogic.dest_Trueprop (Logic.strip_assums_concl r))),
   422       (the (dest_predicate cs params (HOLogic.dest_Trueprop (Logic.strip_assums_concl r))),
   423        Logic.strip_assums_hyp r, Logic.strip_params r);
   423        Logic.strip_assums_hyp r, Logic.strip_params r);
   424     val intr_ts' = map dest_intr intr_ts;
   424     val intr_ts' = map dest_intr intr_ts;
   425     fun prove_eq c elim =
   425     fun prove_eq c (elim: thm * 'a * 'b) =
   426       let
   426       let
   427         val Ts = arg_types_of (length params) c;
   427         val Ts = arg_types_of (length params) c;
   428         val (anames, ctxt') = Variable.variant_fixes (mk_names "a" (length Ts)) ctxt;
   428         val (anames, ctxt') = Variable.variant_fixes (mk_names "a" (length Ts)) ctxt;
   429         val frees = map Free (anames ~~ Ts);
   429         val frees = map Free (anames ~~ Ts);
   430         val c_intrs = filter (equal c o #1 o #1 o #1) (intr_ts' ~~ intrs);
   430         val c_intrs = filter (equal c o #1 o #1 o #1) (intr_ts' ~~ intrs);