equal
deleted
inserted
replaced
32 |
32 |
33 (*defining*) |
33 (*defining*) |
34 val pre_defs = map2 (fn ((name, atts), ((b, mx), _)) => fn rhs => |
34 val pre_defs = map2 (fn ((name, atts), ((b, mx), _)) => fn rhs => |
35 ((b, mx), ((Thm.def_binding_optional b name, atts), rhs))) raw_defs rhss; |
35 ((b, mx), ((Thm.def_binding_optional b name, atts), rhs))) raw_defs rhss; |
36 val (defs, defs_ctxt) = fold_map Local_Theory.define pre_defs expr_ctxt1; |
36 val (defs, defs_ctxt) = fold_map Local_Theory.define pre_defs expr_ctxt1; |
37 val def_eqns = map (Thm.symmetric o Morphism.thm (Local_Theory.standard_morphism defs_ctxt expr_ctxt1) o snd o snd) defs; |
|
38 val expr_ctxt2 = Proof_Context.transfer (Proof_Context.theory_of defs_ctxt) expr_ctxt1; |
37 val expr_ctxt2 = Proof_Context.transfer (Proof_Context.theory_of defs_ctxt) expr_ctxt1; |
|
38 val def_eqns = defs |
|
39 |> map (Thm.symmetric o |
|
40 Morphism.thm (Local_Theory.standard_morphism defs_ctxt expr_ctxt2) o snd o snd); |
39 |
41 |
40 (*setting up*) |
42 (*setting up*) |
41 val attrss = map (apsnd (map (prep_attr expr_ctxt2)) o fst) raw_eqns; |
43 val attrss = map (apsnd (map (prep_attr expr_ctxt2)) o fst) raw_eqns; |
42 val goal_ctxt = fold Variable.auto_fixes eqns expr_ctxt2; |
44 val goal_ctxt = fold Variable.auto_fixes eqns expr_ctxt2; |
43 val export' = Variable.export_morphism goal_ctxt expr_ctxt2; |
45 val export' = Variable.export_morphism goal_ctxt expr_ctxt2; |