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 *) |