src/HOL/Tools/inductive.ML
changeset 61063 d0c21a68d9c6
parent 60784 4f590c08fd5d
child 61268 abe08fb15a12
equal deleted inserted replaced
61062:52f3256a6d85 61063:d0c21a68d9c6
   858       else
   858       else
   859         map_index (fn (i, (name_mx, c)) =>
   859         map_index (fn (i, (name_mx, c)) =>
   860           let
   860           let
   861             val Ts = arg_types_of (length params) c;
   861             val Ts = arg_types_of (length params) c;
   862             val xs =
   862             val xs =
   863               map Free (Variable.variant_frees lthy intr_ts (mk_names "x" (length Ts) ~~ Ts));
   863               map Free (Variable.variant_frees lthy' intr_ts (mk_names "x" (length Ts) ~~ Ts));
   864           in
   864           in
   865             (name_mx, (apfst Binding.concealed Attrib.empty_binding, fold_rev lambda (params @ xs)
   865             (name_mx, (apfst Binding.concealed Attrib.empty_binding, fold_rev lambda (params @ xs)
   866               (list_comb (rec_const, params @ make_bool_args' bs i @
   866               (list_comb (rec_const, params @ make_bool_args' bs i @
   867                 make_args argTs (xs ~~ Ts)))))
   867                 make_args argTs (xs ~~ Ts)))))
   868           end) (cnames_syn ~~ cs);
   868           end) (cnames_syn ~~ cs);
   869     val (consts_defs, lthy'') = lthy'
   869     val (consts_defs, lthy'') = lthy'
   870       |> fold_map Local_Theory.define specs;
   870       |> fold_map Local_Theory.define specs;
   871     val preds = (case cs of [_] => [rec_const] | _ => map #1 consts_defs);
   871     val preds = (case cs of [_] => [rec_const] | _ => map #1 consts_defs);
   872 
   872 
   873     val (_, lthy''') = Variable.add_fixes (map (fst o dest_Free) params) lthy'';
   873     val (_, ctxt'') = Variable.add_fixes (map (fst o dest_Free) params) lthy'';
   874     val mono = prove_mono quiet_mode skip_mono predT fp_fun monos lthy''';
   874     val mono = prove_mono quiet_mode skip_mono predT fp_fun monos ctxt'';
   875     val (_, lthy'''') =
   875     val (_, lthy''') = lthy''
   876       Local_Theory.note (apfst Binding.concealed Attrib.empty_binding,
   876       |> Local_Theory.note (apfst Binding.concealed Attrib.empty_binding,
   877         Proof_Context.export lthy''' lthy'' [mono]) lthy'';
   877         Proof_Context.export ctxt'' lthy'' [mono]);
   878 
   878   in
   879   in (lthy'''', lthy''', rec_name, mono, fp_def', map (#2 o #2) consts_defs,
   879     (lthy''', Proof_Context.transfer (Proof_Context.theory_of lthy''') ctxt'',
   880     list_comb (rec_const, params), preds, argTs, bs, xs)
   880       rec_name, mono, fp_def', map (#2 o #2) consts_defs,
       
   881       list_comb (rec_const, params), preds, argTs, bs, xs)
   881   end;
   882   end;
   882 
   883 
   883 fun declare_rules rec_binding coind no_ind cnames
   884 fun declare_rules rec_binding coind no_ind cnames
   884     preds intrs intr_bindings intr_atts elims eqs raw_induct lthy =
   885     preds intrs intr_bindings intr_atts elims eqs raw_induct lthy =
   885   let
   886   let