50 val add_frees: Proof.context -> term -> (string * typ) list -> (string * typ) list |
50 val add_frees: Proof.context -> term -> (string * typ) list -> (string * typ) list |
51 val add_fixes_binding: binding list -> Proof.context -> string list * Proof.context |
51 val add_fixes_binding: binding list -> Proof.context -> string list * Proof.context |
52 val add_fixes: string list -> Proof.context -> string list * Proof.context |
52 val add_fixes: string list -> Proof.context -> string list * Proof.context |
53 val add_fixes_direct: string list -> Proof.context -> Proof.context |
53 val add_fixes_direct: string list -> Proof.context -> Proof.context |
54 val auto_fixes: term -> Proof.context -> Proof.context |
54 val auto_fixes: term -> Proof.context -> Proof.context |
|
55 val fix_dummy_patterns: term -> Proof.context -> term * Proof.context |
55 val variant_fixes: string list -> Proof.context -> string list * Proof.context |
56 val variant_fixes: string list -> Proof.context -> string list * Proof.context |
56 val dest_fixes: Proof.context -> (string * string) list |
57 val dest_fixes: Proof.context -> (string * string) list |
57 val invent_types: sort list -> Proof.context -> (string * sort) list * Proof.context |
|
58 val export_terms: Proof.context -> Proof.context -> term list -> term list |
58 val export_terms: Proof.context -> Proof.context -> term list -> term list |
59 val exportT_terms: Proof.context -> Proof.context -> term list -> term list |
59 val exportT_terms: Proof.context -> Proof.context -> term list -> term list |
60 val exportT: Proof.context -> Proof.context -> thm list -> thm list |
60 val exportT: Proof.context -> Proof.context -> thm list -> thm list |
61 val export_prf: Proof.context -> Proof.context -> Proofterm.proof -> Proofterm.proof |
61 val export_prf: Proof.context -> Proof.context -> Proofterm.proof -> Proofterm.proof |
62 val export: Proof.context -> Proof.context -> thm list -> thm list |
62 val export: Proof.context -> Proof.context -> thm list -> thm list |
63 val export_morphism: Proof.context -> Proof.context -> morphism |
63 val export_morphism: Proof.context -> Proof.context -> morphism |
|
64 val invent_types: sort list -> Proof.context -> (string * sort) list * Proof.context |
64 val importT_inst: term list -> Proof.context -> ((indexname * sort) * typ) list * Proof.context |
65 val importT_inst: term list -> Proof.context -> ((indexname * sort) * typ) list * Proof.context |
65 val import_inst: bool -> term list -> Proof.context -> |
66 val import_inst: bool -> term list -> Proof.context -> |
66 (((indexname * sort) * typ) list * ((indexname * typ) * term) list) * Proof.context |
67 (((indexname * sort) * typ) list * ((indexname * typ) * term) list) * Proof.context |
67 val importT_terms: term list -> Proof.context -> term list * Proof.context |
68 val importT_terms: term list -> Proof.context -> term list * Proof.context |
68 val import_terms: bool -> term list -> Proof.context -> term list * Proof.context |
69 val import_terms: bool -> term list -> Proof.context -> term list * Proof.context |
458 |
459 |
459 fun auto_fixes t ctxt = ctxt |
460 fun auto_fixes t ctxt = ctxt |
460 |> not (is_body ctxt) ? add_fixes_direct (rev (add_free_names ctxt t [])) |
461 |> not (is_body ctxt) ? add_fixes_direct (rev (add_free_names ctxt t [])) |
461 |> declare_term t; |
462 |> declare_term t; |
462 |
463 |
463 fun invent_types Ss ctxt = |
464 |
464 let |
465 (* dummy patterns *) |
465 val tfrees = Name.invent (names_of ctxt) Name.aT (length Ss) ~~ Ss; |
466 |
466 val ctxt' = fold (declare_constraints o Logic.mk_type o TFree) tfrees ctxt; |
467 fun fix_dummy_patterns (Const ("Pure.dummy_pattern", T)) ctxt = |
467 in (tfrees, ctxt') end; |
468 let val ([x], ctxt') = add_fixes [Name.uu_] ctxt |
|
469 in (Free (x, T), ctxt') end |
|
470 | fix_dummy_patterns (Abs (x, T, b)) ctxt = |
|
471 let val (b', ctxt') = fix_dummy_patterns b ctxt |
|
472 in (Abs (x, T, b'), ctxt') end |
|
473 | fix_dummy_patterns (t $ u) ctxt = |
|
474 let |
|
475 val (t', ctxt') = fix_dummy_patterns t ctxt; |
|
476 val (u', ctxt'') = fix_dummy_patterns u ctxt'; |
|
477 in (t' $ u', ctxt'') end |
|
478 | fix_dummy_patterns a ctxt = (a, ctxt); |
468 |
479 |
469 |
480 |
470 |
481 |
471 (** export -- generalize type/term variables (beware of closure sizes) **) |
482 (** export -- generalize type/term variables (beware of closure sizes) **) |
472 |
483 |
538 end; |
549 end; |
539 |
550 |
540 |
551 |
541 |
552 |
542 (** import -- fix schematic type/term variables **) |
553 (** import -- fix schematic type/term variables **) |
|
554 |
|
555 fun invent_types Ss ctxt = |
|
556 let |
|
557 val tfrees = Name.invent (names_of ctxt) Name.aT (length Ss) ~~ Ss; |
|
558 val ctxt' = fold (declare_constraints o Logic.mk_type o TFree) tfrees ctxt; |
|
559 in (tfrees, ctxt') end; |
543 |
560 |
544 fun importT_inst ts ctxt = |
561 fun importT_inst ts ctxt = |
545 let |
562 let |
546 val tvars = rev (fold Term.add_tvars ts []); |
563 val tvars = rev (fold Term.add_tvars ts []); |
547 val (tfrees, ctxt') = invent_types (map #2 tvars) ctxt; |
564 val (tfrees, ctxt') = invent_types (map #2 tvars) ctxt; |