src/Pure/Isar/locale.ML
changeset 13629 a46362d2b19b
parent 13460 ced7a699282b
child 14215 ebf291f3b449
equal deleted inserted replaced
13628:87482b5e3f2e 13629:a46362d2b19b
   403 
   403 
   404 fun activate_elem _ ((ctxt, axs), Fixes fixes) = ((ctxt |> ProofContext.add_fixes fixes, axs), [])
   404 fun activate_elem _ ((ctxt, axs), Fixes fixes) = ((ctxt |> ProofContext.add_fixes fixes, axs), [])
   405   | activate_elem _ ((ctxt, axs), Assumes asms) =
   405   | activate_elem _ ((ctxt, axs), Assumes asms) =
   406       let
   406       let
   407         val ts = flat (map (map #1 o #2) asms);
   407         val ts = flat (map (map #1 o #2) asms);
   408         val n = length ts;
   408         val (ps,qs) = splitAt (length ts, axs)
   409         val (ctxt', _) =
   409         val (ctxt', _) =
   410           ctxt |> ProofContext.fix_frees ts
   410           ctxt |> ProofContext.fix_frees ts
   411           |> ProofContext.assume_i (export_axioms (Library.take (n, axs))) asms;
   411           |> ProofContext.assume_i (export_axioms ps) asms;
   412       in ((ctxt', Library.drop (n, axs)), []) end
   412       in ((ctxt', qs), []) end
   413   | activate_elem _ ((ctxt, axs), Defines defs) =
   413   | activate_elem _ ((ctxt, axs), Defines defs) =
   414       let val (ctxt', _) =
   414       let val (ctxt', _) =
   415         ctxt |> ProofContext.assume_i ProofContext.export_def
   415         ctxt |> ProofContext.assume_i ProofContext.export_def
   416           (defs |> map (fn ((name, atts), (t, ps)) =>
   416           (defs |> map (fn ((name, atts), (t, ps)) =>
   417             let val (c, t') = ProofContext.cert_def ctxt t
   417             let val (c, t') = ProofContext.cert_def ctxt t
   625       prepp (ProofContext.declare_terms (map Free fixed_params) raw_ctxt, raw_concl @ raw_propp);
   625       prepp (ProofContext.declare_terms (map Free fixed_params) raw_ctxt, raw_concl @ raw_propp);
   626     val ctxt = ProofContext.declare_terms (flat (map (map fst) all_propp)) ctxt;
   626     val ctxt = ProofContext.declare_terms (flat (map (map fst) all_propp)) ctxt;
   627 
   627 
   628     val all_propp' = map2 (op ~~)
   628     val all_propp' = map2 (op ~~)
   629       (#1 (#2 (ProofContext.bind_propp_schematic_i (ctxt, all_propp))), map (map snd) all_propp);
   629       (#1 (#2 (ProofContext.bind_propp_schematic_i (ctxt, all_propp))), map (map snd) all_propp);
   630     val n = length raw_concl;
   630     val (concl, propp) = splitAt(length raw_concl, all_propp');
   631     val concl = Library.take (n, all_propp');
       
   632     val propp = Library.drop (n, all_propp');
       
   633     val propps = unflat raw_propps propp;
   631     val propps = unflat raw_propps propp;
   634     val proppss = map (uncurry unflat) (raw_proppss ~~ propps);
   632     val proppss = map (uncurry unflat) (raw_proppss ~~ propps);
   635 
   633 
   636     val xs = map #1 (params_of raw_elemss);
   634     val xs = map #1 (params_of raw_elemss);
   637     val typing = unify_frozen ctxt 0
   635     val typing = unify_frozen ctxt 0
   693     val (import_ids, raw_import_elemss) = flatten ([], Expr import);
   691     val (import_ids, raw_import_elemss) = flatten ([], Expr import);
   694     val raw_elemss = flat (#2 ((foldl_map flatten (import_ids, elements))));
   692     val raw_elemss = flat (#2 ((foldl_map flatten (import_ids, elements))));
   695     val ((parms, all_elemss, concl), (spec, (_, _, defs))) = prep_elemss do_close
   693     val ((parms, all_elemss, concl), (spec, (_, _, defs))) = prep_elemss do_close
   696       context fixed_params (raw_import_elemss @ raw_elemss) raw_concl;
   694       context fixed_params (raw_import_elemss @ raw_elemss) raw_concl;
   697 
   695 
   698     val n = length raw_import_elemss;
   696     val (ps,qs) = splitAt(length raw_import_elemss, all_elemss)
   699     val ((import_ctxt, axioms'), (import_elemss, _)) =
   697     val ((import_ctxt, axioms'), (import_elemss, _)) =
   700       activate_facts prep_facts ((context, axioms), Library.take (n, all_elemss));
   698       activate_facts prep_facts ((context, axioms), ps);
   701     val ((ctxt, _), (elemss, _)) =
   699     val ((ctxt, _), (elemss, _)) =
   702       activate_facts prep_facts ((import_ctxt, axioms'), Library.drop (n, all_elemss));
   700       activate_facts prep_facts ((import_ctxt, axioms'), qs);
   703   in
   701   in
   704     ((((import_ctxt, import_elemss), (ctxt, elemss)), (parms, spec, defs)), concl)
   702     ((((import_ctxt, import_elemss), (ctxt, elemss)), (parms, spec, defs)), concl)
   705   end;
   703   end;
   706 
   704 
   707 val gen_context = prep_context_statement intern_expr read_elemss get_facts;
   705 val gen_context = prep_context_statement intern_expr read_elemss get_facts;
   897         Tactic.compose_tac (false, ax, 0) 1));
   895         Tactic.compose_tac (false, ax, 0) 1));
   898   in (defs_thy, (statement, intro, axioms)) end;
   896   in (defs_thy, (statement, intro, axioms)) end;
   899 
   897 
   900 fun change_elem _ (axms, Assumes asms) =
   898 fun change_elem _ (axms, Assumes asms) =
   901       apsnd Notes ((axms, asms) |> foldl_map (fn (axs, (a, spec)) =>
   899       apsnd Notes ((axms, asms) |> foldl_map (fn (axs, (a, spec)) =>
   902         let val n = length spec
   900         let val (ps,qs) = splitAt(length spec, axs)
   903         in (Library.drop (n, axs), (a, [(Library.take (n, axs), [])])) end))
   901         in (qs, (a, [(ps, [])])) end))
   904   | change_elem f (axms, Notes facts) = (axms, Notes (map (apsnd (map (apfst (map f)))) facts))
   902   | change_elem f (axms, Notes facts) = (axms, Notes (map (apsnd (map (apfst (map f)))) facts))
   905   | change_elem _ e = e;
   903   | change_elem _ e = e;
   906 
   904 
   907 fun change_elemss axioms elemss = (axioms, elemss) |> foldl_map
   905 fun change_elemss axioms elemss = (axioms, elemss) |> foldl_map
   908   (fn (axms, (id as ("", _), es)) =>
   906   (fn (axms, (id as ("", _), es)) =>