src/HOL/Tools/Ctr_Sugar/ctr_sugar.ML
changeset 61301 484f7878ede4
parent 61272 f49644098959
child 61334 8d40ddaa427f
equal deleted inserted replaced
61300:9b4843250e1c 61301:484f7878ede4
    83   val fake_local_theory_for_sel_defaults: (binding * typ) list -> Proof.context -> Proof.context
    83   val fake_local_theory_for_sel_defaults: (binding * typ) list -> Proof.context -> Proof.context
    84   val free_constructors: ctr_sugar_kind ->
    84   val free_constructors: ctr_sugar_kind ->
    85     ({prems: thm list, context: Proof.context} -> tactic) list list ->
    85     ({prems: thm list, context: Proof.context} -> tactic) list list ->
    86     ((ctr_options * binding) * (term, binding) ctr_spec list) * term list -> local_theory ->
    86     ((ctr_options * binding) * (term, binding) ctr_spec list) * term list -> local_theory ->
    87     ctr_sugar * local_theory
    87     ctr_sugar * local_theory
       
    88   val free_constructors_cmd: ctr_sugar_kind ->
       
    89     ((((Proof.context -> Plugin_Name.filter) * bool) * binding)
       
    90      * ((binding * string) * binding list) list) * string list ->
       
    91     Proof.context -> Proof.state
    88   val default_ctr_options: ctr_options
    92   val default_ctr_options: ctr_options
    89   val default_ctr_options_cmd: ctr_options_cmd
    93   val default_ctr_options_cmd: ctr_options_cmd
    90   val parse_bound_term: (binding * string) parser
    94   val parse_bound_term: (binding * string) parser
    91   val parse_ctr_options: ctr_options_cmd parser
    95   val parse_ctr_options: ctr_options_cmd parser
    92   val parse_ctr_spec: 'c parser -> 'a parser -> ('c, 'a) ctr_spec parser
    96   val parse_ctr_spec: 'c parser -> 'a parser -> ('c, 'a) ctr_spec parser
   458           else
   462           else
   459             sel)) (1 upto m) o pad_list Binding.empty m) ctrs0 ms raw_sel_bindingss;
   463             sel)) (1 upto m) o pad_list Binding.empty m) ctrs0 ms raw_sel_bindingss;
   460 
   464 
   461     val case_Ts = map (fn Ts => Ts ---> B) ctr_Tss;
   465     val case_Ts = map (fn Ts => Ts ---> B) ctr_Tss;
   462 
   466 
   463     val (((((((((exh_y, xss), yss), fs), gs), u), v), w), (p, p'))) =
   467     val ((((((((exh_y, xss), yss), fs), gs), u), w), (p, p'))) =
   464       no_defs_lthy
   468       no_defs_lthy
   465       |> yield_singleton (mk_Frees "y") fcT (* for compatibility with "datatype_realizer.ML" *)
   469       |> yield_singleton (mk_Frees "y") fcT (* for compatibility with "datatype_realizer.ML" *)
   466       ||>> mk_Freess "x" ctr_Tss
   470       ||>> mk_Freess "x" ctr_Tss
   467       ||>> mk_Freess "y" ctr_Tss
   471       ||>> mk_Freess "y" ctr_Tss
   468       ||>> mk_Frees "f" case_Ts
   472       ||>> mk_Frees "f" case_Ts
   469       ||>> mk_Frees "g" case_Ts
   473       ||>> mk_Frees "g" case_Ts
   470       ||>> yield_singleton (mk_Frees fc_b_name) fcT
   474       ||>> yield_singleton (mk_Frees fc_b_name) fcT
   471       ||>> yield_singleton (mk_Frees (fc_b_name ^ "'")) fcT
       
   472       ||>> yield_singleton (mk_Frees "z") B
   475       ||>> yield_singleton (mk_Frees "z") B
   473       ||>> yield_singleton (apfst (op ~~) oo mk_Frees' "P") HOLogic.boolT
   476       ||>> yield_singleton (apfst (op ~~) oo mk_Frees' "P") HOLogic.boolT
   474       |> fst;
   477       |> fst;
   475 
   478 
   476     val q = Free (fst p', mk_pred1T B);
   479     val q = Free (fst p', mk_pred1T B);