src/Pure/Isar/local_defs.ML
changeset 74575 ccf599864beb
parent 74561 8e6c973003c8
child 78086 5edd5b12017d
equal deleted inserted replaced
74573:e2e2bc1f9570 74575:ccf599864beb
    91   Drule.implies_intr_list defs
    91   Drule.implies_intr_list defs
    92   #> Drule.generalize
    92   #> Drule.generalize
    93       (Names.empty, Names.build (fold (Names.add_set o #1 o head_of_def o Thm.term_of) defs))
    93       (Names.empty, Names.build (fold (Names.add_set o #1 o head_of_def o Thm.term_of) defs))
    94   #> funpow (length defs) (fn th => Drule.reflexive_thm RS th);
    94   #> funpow (length defs) (fn th => Drule.reflexive_thm RS th);
    95 
    95 
    96 val expand_term = Envir.expand_term_frees o map (abs_def o Thm.term_of);
    96 val expand_term = Envir.expand_term_defs dest_Free o map (abs_def o Thm.term_of);
    97 
    97 
    98 fun def_export _ defs = (expand defs, expand_term defs);
    98 fun def_export _ defs = (expand defs, expand_term defs);
    99 
    99 
   100 
   100 
   101 (* define *)
   101 (* define *)
   123     val ([x'], ctxt') = ctxt
   123     val ([x'], ctxt') = ctxt
   124       |> Variable.declare_term rhs
   124       |> Variable.declare_term rhs
   125       |> Proof_Context.add_fixes [(x, SOME T, mx)];
   125       |> Proof_Context.add_fixes [(x, SOME T, mx)];
   126     val lhs = Free (x', T);
   126     val lhs = Free (x', T);
   127     val _ = cert_def ctxt' (K []) (Logic.mk_equals (lhs, rhs));
   127     val _ = cert_def ctxt' (K []) (Logic.mk_equals (lhs, rhs));
   128     fun abbrev_export _ _ = (I, Envir.expand_term_frees [((x', T), rhs)]);
   128     fun abbrev_export _ _ = (I, Envir.expand_term_defs dest_Free [((x', T), rhs)]);
   129     val (_, ctxt'') = Assumption.add_assms abbrev_export [] ctxt';
   129     val (_, ctxt'') = Assumption.add_assms abbrev_export [] ctxt';
   130   in ((lhs, rhs), ctxt'') end;
   130   in ((lhs, rhs), ctxt'') end;
   131 
   131 
   132 
   132 
   133 (* specific export -- result based on educated guessing *)
   133 (* specific export -- result based on educated guessing *)