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