| author | wenzelm | 
| Wed, 22 Sep 1999 20:59:22 +0200 | |
| changeset 7574 | 5bcb7fc31caa | 
| parent 7572 | 6e6dafacbc28 | 
| child 7590 | 76c9e71d491a | 
| permissions | -rw-r--r-- | 
| 5830 | 1 | (* Title: Pure/Isar/isar_thy.ML | 
| 2 | ID: $Id$ | |
| 3 | Author: Markus Wenzel, TU Muenchen | |
| 4 | ||
| 6371 | 5 | Pure/Isar derived theory operations. | 
| 5830 | 6 | *) | 
| 7 | ||
| 8 | signature ISAR_THY = | |
| 9 | sig | |
| 6552 | 10 | val add_title: Comment.text -> Comment.text -> Comment.text -> theory -> theory | 
| 11 | val add_chapter: Comment.text -> theory -> theory | |
| 12 | val add_section: Comment.text -> theory -> theory | |
| 13 | val add_subsection: Comment.text -> theory -> theory | |
| 14 | val add_subsubsection: Comment.text -> theory -> theory | |
| 7172 | 15 | val add_text: Comment.text -> theory -> theory | 
| 16 | val add_sect: Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 17 | val add_subsect: Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 18 | val add_subsubsect: Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 19 | val add_txt: Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 20 | val add_classes: (bclass * xclass list) list * Comment.text -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 21 | val add_classes_i: (bclass * class list) list * Comment.text -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 22 | val add_classrel: (xclass * xclass) * Comment.text -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 23 | val add_classrel_i: (class * class) * Comment.text -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 24 | val add_defsort: xsort * Comment.text -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 25 | val add_defsort_i: sort * Comment.text -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 26 | val add_nonterminals: (bstring * Comment.text) list -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 27 | val add_tyabbrs: ((bstring * string list * string * mixfix) * Comment.text) list | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 28 | -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 29 | val add_tyabbrs_i: ((bstring * string list * typ * mixfix) * Comment.text) list | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 30 | -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 31 | val add_arities: ((xstring * xsort list * xsort) * Comment.text) list -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 32 | val add_arities_i: ((string * sort list * sort) * Comment.text) list -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 33 | val add_typedecl: (bstring * string list * mixfix) * Comment.text -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 34 | val add_consts: ((bstring * string * mixfix) * Comment.text) list -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 35 | val add_consts_i: ((bstring * typ * mixfix) * Comment.text) list -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 36 | val add_modesyntax: string * bool -> ((bstring * string * mixfix) * Comment.text) list | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 37 | -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 38 | val add_modesyntax_i: string * bool -> ((bstring * typ * mixfix) * Comment.text) list | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 39 | -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 40 | val add_trrules: ((xstring * string) Syntax.trrule * Comment.text) list -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 41 | val add_trrules_i: (Syntax.ast Syntax.trrule * Comment.text) list -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 42 | val add_axioms: (((bstring * string) * Args.src list) * Comment.text) list -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 43 | val add_axioms_i: (((bstring * term) * theory attribute list) * Comment.text) list | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 44 | -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 45 | val add_defs: (((bstring * string) * Args.src list) * Comment.text) list -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 46 | val add_defs_i: (((bstring * term) * theory attribute list) * Comment.text) list | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 47 | -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 48 | val add_constdefs: (((bstring * string * mixfix) * Comment.text) * (string * Comment.text)) list | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 49 | -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 50 | val add_constdefs_i: (((bstring * typ * mixfix) * Comment.text) * (term * Comment.text)) list | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 51 | -> theory -> theory | 
| 6371 | 52 | val apply_theorems: (xstring * Args.src list) list -> theory -> theory * thm list | 
| 53 | val apply_theorems_i: (thm * theory attribute list) list -> theory -> theory * thm list | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 54 | val have_theorems: ((bstring * Args.src list) * (xstring * Args.src list) list) * Comment.text | 
| 6371 | 55 | -> theory -> theory | 
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 56 | val have_theorems_i: ((bstring * theory attribute list) * (thm * theory attribute list) list) | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 57 | * Comment.text -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 58 | val have_lemmas: ((bstring * Args.src list) * (xstring * Args.src list) list) * Comment.text | 
| 5915 | 59 | -> theory -> theory | 
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 60 | val have_lemmas_i: ((bstring * theory attribute list) * (thm * theory attribute list) list) | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 61 | * Comment.text -> theory -> theory | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 62 | val have_facts: ((string * Args.src list) * (string * Args.src list) list) * Comment.text | 
| 5915 | 63 | -> ProofHistory.T -> ProofHistory.T | 
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 64 | val have_facts_i: ((string * Proof.context attribute list) * | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 65 | (thm * Proof.context attribute list) list) * Comment.text -> ProofHistory.T -> ProofHistory.T | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 66 | val from_facts: (string * Args.src list) list * Comment.text -> ProofHistory.T -> ProofHistory.T | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 67 | val from_facts_i: (thm * Proof.context attribute list) list * Comment.text | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 68 | -> ProofHistory.T -> ProofHistory.T | 
| 6879 | 69 | val with_facts: (string * Args.src list) list * Comment.text -> ProofHistory.T -> ProofHistory.T | 
| 70 | val with_facts_i: (thm * Proof.context attribute list) list * Comment.text | |
| 71 | -> ProofHistory.T -> ProofHistory.T | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 72 | val chain: Comment.text -> ProofHistory.T -> ProofHistory.T | 
| 6937 | 73 | val export_chain: Comment.text -> ProofHistory.T -> ProofHistory.T | 
| 7417 | 74 | val fix: ((string list * string option) * Comment.text) list -> ProofHistory.T -> ProofHistory.T | 
| 75 | val fix_i: ((string list * typ) * Comment.text) list -> ProofHistory.T -> ProofHistory.T | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 76 | val match_bind: ((string list * string) * Comment.text) list -> ProofHistory.T -> ProofHistory.T | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 77 | val match_bind_i: ((term list * term) * Comment.text) list -> ProofHistory.T -> ProofHistory.T | 
| 6937 | 78 | val theorem: (bstring * Args.src list * (string * (string list * string list))) | 
| 79 | * Comment.text -> bool -> theory -> ProofHistory.T | |
| 80 | val theorem_i: (bstring * theory attribute list * (term * (term list * term list))) | |
| 81 | * Comment.text -> bool -> theory -> ProofHistory.T | |
| 82 | val lemma: (bstring * Args.src list * (string * (string list * string list))) | |
| 83 | * Comment.text -> bool -> theory -> ProofHistory.T | |
| 84 | val lemma_i: (bstring * theory attribute list * (term * (term list * term list))) | |
| 85 | * Comment.text -> bool -> theory -> ProofHistory.T | |
| 7271 | 86 | val assume: ((string * Args.src list * (string * (string list * string list)) list) | 
| 87 | * Comment.text) list -> ProofHistory.T -> ProofHistory.T | |
| 88 | val assume_i: ((string * Proof.context attribute list * (term * (term list * term list)) list) | |
| 89 | * Comment.text) list -> ProofHistory.T -> ProofHistory.T | |
| 90 | val presume: ((string * Args.src list * (string * (string list * string list)) list) | |
| 91 | * Comment.text) list -> ProofHistory.T -> ProofHistory.T | |
| 92 | val presume_i: ((string * Proof.context attribute list * (term * (term list * term list)) list) | |
| 93 | * Comment.text) list -> ProofHistory.T -> ProofHistory.T | |
| 6952 | 94 | val local_def: (string * Args.src list * ((string * string option) * (string * string list))) | 
| 95 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 96 | val local_def_i: (string * Args.src list * ((string * typ) * (term * term list))) | |
| 97 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 6937 | 98 | val show: (string * Args.src list * (string * (string list * string list))) | 
| 99 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 100 | val show_i: (string * Proof.context attribute list * (term * (term list * term list))) | |
| 101 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 102 | val have: (string * Args.src list * (string * (string list * string list))) | |
| 103 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 104 | val have_i: (string * Proof.context attribute list * (term * (term list * term list))) | |
| 105 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 106 | val thus: (string * Args.src list * (string * (string list * string list))) | |
| 107 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 108 | val thus_i: (string * Proof.context attribute list * (term * (term list * term list))) | |
| 109 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 110 | val hence: (string * Args.src list * (string * (string list * string list))) | |
| 111 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 112 | val hence_i: (string * Proof.context attribute list * (term * (term list * term list))) | |
| 113 | * Comment.text -> ProofHistory.T -> ProofHistory.T | |
| 5830 | 114 | val begin_block: ProofHistory.T -> ProofHistory.T | 
| 115 | val next_block: ProofHistory.T -> ProofHistory.T | |
| 116 | val end_block: ProofHistory.T -> ProofHistory.T | |
| 117 | val tac: Method.text -> ProofHistory.T -> ProofHistory.T | |
| 5882 | 118 | val then_tac: Method.text -> ProofHistory.T -> ProofHistory.T | 
| 7002 | 119 | val proof: (Comment.interest * (Method.text * Comment.interest) option) * Comment.text | 
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 120 | -> ProofHistory.T -> ProofHistory.T | 
| 6404 | 121 | val kill_proof: ProofHistory.T -> theory | 
| 7002 | 122 | val qed: (Method.text * Comment.interest) option * Comment.text | 
| 6937 | 123 | -> Toplevel.transition -> Toplevel.transition | 
| 7002 | 124 | val terminal_proof: ((Method.text * Comment.interest) * (Method.text * Comment.interest) option) | 
| 125 | * Comment.text -> Toplevel.transition -> Toplevel.transition | |
| 126 | val immediate_proof: Comment.text -> Toplevel.transition -> Toplevel.transition | |
| 127 | val default_proof: Comment.text -> Toplevel.transition -> Toplevel.transition | |
| 128 | val skip_proof: Comment.text -> Toplevel.transition -> Toplevel.transition | |
| 7012 | 129 | val get_thmss: (string * Args.src list) list -> Proof.state -> thm list | 
| 6879 | 130 | val also: ((string * Args.src list) list * Comment.interest) option * Comment.text | 
| 131 | -> Toplevel.transition -> Toplevel.transition | |
| 132 | val also_i: (thm list * Comment.interest) option * Comment.text | |
| 133 | -> Toplevel.transition -> Toplevel.transition | |
| 134 | val finally: ((string * Args.src list) list * Comment.interest) option * Comment.text | |
| 135 | -> Toplevel.transition -> Toplevel.transition | |
| 136 | val finally_i: (thm list * Comment.interest) option * Comment.text | |
| 137 | -> Toplevel.transition -> Toplevel.transition | |
| 5830 | 138 | val use_mltext: string -> theory option -> theory option | 
| 139 | val use_mltext_theory: string -> theory -> theory | |
| 140 | val use_setup: string -> theory -> theory | |
| 141 | val parse_ast_translation: string -> theory -> theory | |
| 142 | val parse_translation: string -> theory -> theory | |
| 143 | val print_translation: string -> theory -> theory | |
| 144 | val typed_print_translation: string -> theory -> theory | |
| 145 | val print_ast_translation: string -> theory -> theory | |
| 146 | val token_translation: string -> theory -> theory | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 147 | val add_oracle: (bstring * string) * Comment.text -> theory -> theory | 
| 6331 | 148 | val begin_theory: string -> string list -> (string * bool) list -> theory | 
| 149 | val end_theory: theory -> theory | |
| 6246 | 150 | val theory: string * string list * (string * bool) list | 
| 151 | -> Toplevel.transition -> Toplevel.transition | |
| 152 | val context: string -> Toplevel.transition -> Toplevel.transition | |
| 5830 | 153 | end; | 
| 154 | ||
| 155 | structure IsarThy: ISAR_THY = | |
| 156 | struct | |
| 157 | ||
| 158 | ||
| 159 | (** derived theory and proof operations **) | |
| 160 | ||
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 161 | (* formal comments *) | 
| 5959 | 162 | |
| 7332 | 163 | fun add_text comment thy = thy:theory; | 
| 6354 | 164 | fun add_title title author date thy = thy; | 
| 5959 | 165 | val add_chapter = add_text; | 
| 166 | val add_section = add_text; | |
| 167 | val add_subsection = add_text; | |
| 168 | val add_subsubsection = add_text; | |
| 169 | ||
| 7172 | 170 | fun add_txt comment = ProofHistory.apply Proof.assert_forward; | 
| 7332 | 171 | val add_sect = add_txt; | 
| 172 | val add_subsect = add_txt; | |
| 173 | val add_subsubsect = add_txt; | |
| 7172 | 174 | |
| 5959 | 175 | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 176 | (* signature and syntax *) | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 177 | |
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 178 | val add_classes = Theory.add_classes o Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 179 | val add_classes_i = Theory.add_classes_i o Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 180 | val add_classrel = Theory.add_classrel o single o Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 181 | val add_classrel_i = Theory.add_classrel_i o single o Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 182 | val add_defsort = Theory.add_defsort o Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 183 | val add_defsort_i = Theory.add_defsort_i o Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 184 | val add_nonterminals = Theory.add_nonterminals o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 185 | val add_tyabbrs = Theory.add_tyabbrs o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 186 | val add_tyabbrs_i = Theory.add_tyabbrs_i o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 187 | val add_arities = Theory.add_arities o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 188 | val add_arities_i = Theory.add_arities_i o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 189 | val add_typedecl = PureThy.add_typedecls o single o Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 190 | val add_consts = Theory.add_consts o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 191 | val add_consts_i = Theory.add_consts_i o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 192 | fun add_modesyntax mode = Theory.add_modesyntax mode o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 193 | fun add_modesyntax_i mode = Theory.add_modesyntax_i mode o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 194 | val add_trrules = Theory.add_trrules o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 195 | val add_trrules_i = Theory.add_trrules_i o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 196 | |
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 197 | |
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 198 | |
| 5830 | 199 | (* axioms and defs *) | 
| 200 | ||
| 5915 | 201 | fun add_axms f args thy = | 
| 202 | f (map (fn (x, srcs) => (x, map (Attrib.global_attribute thy) srcs)) args) thy; | |
| 203 | ||
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 204 | val add_axioms = add_axms PureThy.add_axioms o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 205 | val add_axioms_i = PureThy.add_axioms_i o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 206 | val add_defs = add_axms PureThy.add_defs o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 207 | val add_defs_i = PureThy.add_defs_i o map Comment.ignore; | 
| 6371 | 208 | |
| 209 | ||
| 210 | (* constdefs *) | |
| 211 | ||
| 212 | fun gen_add_constdefs consts defs args thy = | |
| 213 | thy | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 214 | |> consts (map (Comment.ignore o fst) args) | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 215 | |> defs (map (fn (((c, _, mx), _), (s, _)) => | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 216 | (((Thm.def_name (Syntax.const_name c mx), s), []), Comment.none)) args); | 
| 6371 | 217 | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 218 | fun add_constdefs args = gen_add_constdefs Theory.add_consts add_defs args; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 219 | fun add_constdefs_i args = gen_add_constdefs Theory.add_consts_i add_defs_i args; | 
| 5915 | 220 | |
| 221 | ||
| 222 | (* theorems *) | |
| 223 | ||
| 224 | fun gen_have_thmss get attrib f ((name, more_srcs), th_srcs) x = | |
| 225 | f name (map (attrib x) more_srcs) | |
| 226 | (map (fn (s, srcs) => (get x s, map (attrib x) srcs)) th_srcs) x; | |
| 227 | ||
| 7572 | 228 | fun global_have_thmss kind f (x as ((name, _), _)) thy = | 
| 229 | let val (thy', thms) = gen_have_thmss PureThy.get_thms Attrib.global_attribute f x thy in | |
| 230 | if kind <> "" then Context.setmp (Some thy') (Present.results kind name) thms else (); | |
| 231 | (thy', thms) | |
| 232 | end; | |
| 5915 | 233 | |
| 6371 | 234 | fun local_have_thmss x = | 
| 235 | gen_have_thmss (ProofContext.get_thms o Proof.context_of) | |
| 236 | (Attrib.local_attribute o Proof.theory_of) x; | |
| 237 | ||
| 7012 | 238 | fun gen_have_thmss_i f ((name, more_atts), th_atts) = | 
| 6371 | 239 | f name more_atts (map (apfst single) th_atts); | 
| 240 | ||
| 241 | fun have_lemss name atts = PureThy.have_thmss name (atts @ [Drule.tag_lemma]); | |
| 5915 | 242 | |
| 243 | ||
| 7572 | 244 | fun apply_theorems th_srcs = global_have_thmss "" PureThy.have_thmss (("", []), th_srcs);
 | 
| 7476 | 245 | fun apply_theorems_i th_srcs = gen_have_thmss_i PureThy.have_thmss (("", []), th_srcs);
 | 
| 7572 | 246 | val have_theorems = #1 oo (global_have_thmss "theorems" PureThy.have_thmss o Comment.ignore); | 
| 7476 | 247 | val have_theorems_i = #1 oo (gen_have_thmss_i PureThy.have_thmss o Comment.ignore); | 
| 7572 | 248 | val have_lemmas = #1 oo (global_have_thmss "lemmas" have_lemss o Comment.ignore); | 
| 7476 | 249 | val have_lemmas_i = #1 oo (gen_have_thmss_i have_lemss o Comment.ignore); | 
| 6879 | 250 | val have_facts = ProofHistory.apply o local_have_thmss (Proof.have_thmss []) o Comment.ignore; | 
| 7012 | 251 | val have_facts_i = ProofHistory.apply o gen_have_thmss_i (Proof.have_thmss []) o Comment.ignore; | 
| 6371 | 252 | |
| 5915 | 253 | |
| 6371 | 254 | (* forward chaining *) | 
| 255 | ||
| 6879 | 256 | fun gen_from_facts f = ProofHistory.apply o (Proof.chain oo curry f ("", []));
 | 
| 257 | ||
| 258 | fun add_thmss name atts ths_atts state = | |
| 259 | Proof.have_thmss (Proof.the_facts state) name atts ths_atts state; | |
| 6371 | 260 | |
| 6879 | 261 | val from_facts = gen_from_facts (local_have_thmss (Proof.have_thmss [])) o Comment.ignore; | 
| 7012 | 262 | val from_facts_i = gen_from_facts (gen_have_thmss_i (Proof.have_thmss [])) o Comment.ignore; | 
| 6879 | 263 | val with_facts = gen_from_facts (local_have_thmss add_thmss) o Comment.ignore; | 
| 7012 | 264 | val with_facts_i = gen_from_facts (gen_have_thmss_i add_thmss) o Comment.ignore; | 
| 6879 | 265 | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 266 | fun chain comment_ignore = ProofHistory.apply Proof.chain; | 
| 6937 | 267 | fun export_chain comment_ignore = ProofHistory.applys Proof.export_chain; | 
| 5830 | 268 | |
| 269 | ||
| 270 | (* context *) | |
| 271 | ||
| 7417 | 272 | val fix = ProofHistory.apply o Proof.fix o map Comment.ignore; | 
| 273 | val fix_i = ProofHistory.apply o Proof.fix_i o map Comment.ignore; | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 274 | val match_bind = ProofHistory.apply o Proof.match_bind o map Comment.ignore; | 
| 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 275 | val match_bind_i = ProofHistory.apply o Proof.match_bind_i o map Comment.ignore; | 
| 5830 | 276 | |
| 277 | ||
| 278 | (* statements *) | |
| 279 | ||
| 7271 | 280 | local | 
| 281 | ||
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 282 | fun global_statement f (name, src, s) int thy = | 
| 6688 | 283 | ProofHistory.init (Toplevel.undo_limit int) | 
| 284 | (f name (map (Attrib.global_attribute thy) src) s thy); | |
| 5830 | 285 | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 286 | fun global_statement_i f (name, atts, t) int thy = | 
| 6688 | 287 | ProofHistory.init (Toplevel.undo_limit int) (f name atts t thy); | 
| 6501 | 288 | |
| 6904 
4125d6b6d8f9
removed proof history nesting commands (not useful);
 wenzelm parents: 
6890diff
changeset | 289 | fun local_statement f g (name, src, s) = ProofHistory.apply (fn state => | 
| 6501 | 290 | f name (map (Attrib.local_attribute (Proof.theory_of state)) src) s (g state)); | 
| 6371 | 291 | |
| 6904 
4125d6b6d8f9
removed proof history nesting commands (not useful);
 wenzelm parents: 
6890diff
changeset | 292 | fun local_statement_i f g (name, atts, t) = ProofHistory.apply (f name atts t o g); | 
| 5830 | 293 | |
| 7271 | 294 | fun multi_statement f args = ProofHistory.apply (fn state => | 
| 295 | f (map (fn (name, src, s) => | |
| 296 | (name, map (Attrib.local_attribute (Proof.theory_of state)) src, s)) args) state); | |
| 297 | ||
| 298 | fun multi_statement_i f args = ProofHistory.apply (f args); | |
| 299 | ||
| 300 | in | |
| 301 | ||
| 6952 | 302 | val theorem = global_statement Proof.theorem o Comment.ignore; | 
| 303 | val theorem_i = global_statement_i Proof.theorem_i o Comment.ignore; | |
| 304 | val lemma = global_statement Proof.lemma o Comment.ignore; | |
| 305 | val lemma_i = global_statement_i Proof.lemma_i o Comment.ignore; | |
| 7271 | 306 | val assume = multi_statement Proof.assume o map Comment.ignore; | 
| 307 | val assume_i = multi_statement_i Proof.assume_i o map Comment.ignore; | |
| 308 | val presume = multi_statement Proof.presume o map Comment.ignore; | |
| 309 | val presume_i = multi_statement_i Proof.presume_i o map Comment.ignore; | |
| 6952 | 310 | val local_def = local_statement LocalDefs.def I o Comment.ignore; | 
| 311 | val local_def_i = local_statement LocalDefs.def_i I o Comment.ignore; | |
| 7176 | 312 | val show = local_statement (Proof.show Seq.single) I o Comment.ignore; | 
| 313 | val show_i = local_statement_i (Proof.show_i Seq.single) I o Comment.ignore; | |
| 314 | val have = local_statement (Proof.have Seq.single) I o Comment.ignore; | |
| 315 | val have_i = local_statement_i (Proof.have_i Seq.single) I o Comment.ignore; | |
| 316 | val thus = local_statement (Proof.show Seq.single) Proof.chain o Comment.ignore; | |
| 317 | val thus_i = local_statement_i (Proof.show_i Seq.single) Proof.chain o Comment.ignore; | |
| 318 | val hence = local_statement (Proof.have Seq.single) Proof.chain o Comment.ignore; | |
| 319 | val hence_i = local_statement_i (Proof.have_i Seq.single) Proof.chain o Comment.ignore; | |
| 5830 | 320 | |
| 7271 | 321 | end; | 
| 322 | ||
| 5830 | 323 | |
| 324 | (* blocks *) | |
| 325 | ||
| 6904 
4125d6b6d8f9
removed proof history nesting commands (not useful);
 wenzelm parents: 
6890diff
changeset | 326 | val begin_block = ProofHistory.apply Proof.begin_block; | 
| 5830 | 327 | val next_block = ProofHistory.apply Proof.next_block; | 
| 6937 | 328 | val end_block = ProofHistory.applys Proof.end_block; | 
| 5830 | 329 | |
| 330 | ||
| 331 | (* backward steps *) | |
| 332 | ||
| 7506 | 333 | val tac = ProofHistory.applys o Method.refine_no_facts; | 
| 334 | val then_tac = ProofHistory.applys o Method.refine; | |
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 335 | |
| 7002 | 336 | val proof = ProofHistory.applys o Method.proof o | 
| 337 | apsome Comment.ignore_interest o Comment.ignore_interest' o Comment.ignore; | |
| 6404 | 338 | |
| 339 | ||
| 6732 | 340 | (* print result *) | 
| 341 | ||
| 7572 | 342 | local | 
| 343 | ||
| 6732 | 344 | fun pretty_result {kind, name, thm} =
 | 
| 7572 | 345 | Pretty.block [Pretty.str (kind ^ (if name = "" then "" else " " ^ name ^ ":")), | 
| 346 | Pretty.fbrk, Proof.pretty_thm thm]; | |
| 6986 | 347 | |
| 348 | fun pretty_rule thm = | |
| 7353 | 349 | Pretty.block [Pretty.str "trying to solve goal by rule:", Pretty.fbrk, Proof.pretty_thm thm]; | 
| 6732 | 350 | |
| 7572 | 351 | in | 
| 352 | ||
| 6732 | 353 | val print_result = Pretty.writeln o pretty_result; | 
| 354 | ||
| 6986 | 355 | fun cond_print_result_rule int = | 
| 356 | if int then (print_result, Pretty.writeln o pretty_rule) | |
| 357 | else (K (), K ()); | |
| 358 | ||
| 359 | fun proof'' f = Toplevel.proof' (f o cond_print_result_rule); | |
| 6732 | 360 | |
| 7572 | 361 | end; | 
| 362 | ||
| 6732 | 363 | |
| 6404 | 364 | (* local endings *) | 
| 365 | ||
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 366 | val local_qed = | 
| 6904 
4125d6b6d8f9
removed proof history nesting commands (not useful);
 wenzelm parents: 
6890diff
changeset | 367 | proof'' o (ProofHistory.applys oo Method.local_qed) o apsome Comment.ignore_interest; | 
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 368 | |
| 6937 | 369 | fun ignore_interests (x, y) = (Comment.ignore_interest x, apsome Comment.ignore_interest y); | 
| 370 | ||
| 6688 | 371 | val local_terminal_proof = | 
| 6937 | 372 | proof'' o (ProofHistory.applys oo Method.local_terminal_proof) o ignore_interests; | 
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 373 | |
| 6904 
4125d6b6d8f9
removed proof history nesting commands (not useful);
 wenzelm parents: 
6890diff
changeset | 374 | val local_immediate_proof = proof'' (ProofHistory.applys o Method.local_immediate_proof); | 
| 
4125d6b6d8f9
removed proof history nesting commands (not useful);
 wenzelm parents: 
6890diff
changeset | 375 | val local_default_proof = proof'' (ProofHistory.applys o Method.local_default_proof); | 
| 
4125d6b6d8f9
removed proof history nesting commands (not useful);
 wenzelm parents: 
6890diff
changeset | 376 | val local_skip_proof = proof'' (ProofHistory.applys o SkipProof.local_skip_proof); | 
| 6404 | 377 | |
| 378 | ||
| 379 | (* global endings *) | |
| 380 | ||
| 381 | val kill_proof = Proof.theory_of o ProofHistory.current; | |
| 382 | ||
| 383 | fun global_result finish = Toplevel.proof_to_theory (fn prf => | |
| 384 | let | |
| 385 | val state = ProofHistory.current prf; | |
| 386 | val _ = if Proof.at_bottom state then () else raise Toplevel.UNDEF; | |
| 7572 | 387 |     val (thy, res as {kind, name, thm}) = finish state;
 | 
| 388 | in print_result res; Context.setmp (Some thy) (Present.result kind name) thm; thy end); | |
| 6404 | 389 | |
| 6952 | 390 | val global_qed = global_result o Method.global_qed o apsome Comment.ignore_interest; | 
| 6937 | 391 | val global_terminal_proof = global_result o Method.global_terminal_proof o ignore_interests; | 
| 6404 | 392 | val global_immediate_proof = global_result Method.global_immediate_proof; | 
| 393 | val global_default_proof = global_result Method.global_default_proof; | |
| 6888 
d0c68ebdabc5
skip_proof feature 'sorry' (for quick_and_dirty mode only);
 wenzelm parents: 
6885diff
changeset | 394 | val global_skip_proof = global_result SkipProof.global_skip_proof; | 
| 6404 | 395 | |
| 396 | ||
| 397 | (* common endings *) | |
| 398 | ||
| 7002 | 399 | fun qed (meth, comment) = local_qed meth o global_qed meth; | 
| 400 | fun terminal_proof (meths, comment) = local_terminal_proof meths o global_terminal_proof meths; | |
| 401 | fun immediate_proof comment = local_immediate_proof o global_immediate_proof; | |
| 402 | fun default_proof comment = local_default_proof o global_default_proof; | |
| 403 | fun skip_proof comment = local_skip_proof o global_skip_proof; | |
| 5830 | 404 | |
| 405 | ||
| 6774 | 406 | (* calculational proof commands *) | 
| 407 | ||
| 6879 | 408 | local | 
| 409 | ||
| 7417 | 410 | fun cond_print_calc int thms = | 
| 411 | if int then Pretty.writeln (Pretty.big_list "calculation:" (map Proof.pretty_thm thms)) | |
| 6774 | 412 | else (); | 
| 413 | ||
| 414 | fun proof''' f = Toplevel.proof' (f o cond_print_calc); | |
| 415 | ||
| 6879 | 416 | fun gen_calc get f (args, _) prt state = | 
| 417 | f (apsome (fn (srcs, _) => get srcs state) args) prt state; | |
| 418 | ||
| 419 | in | |
| 420 | ||
| 7012 | 421 | fun get_thmss srcs = Proof.the_facts o local_have_thmss (Proof.have_thmss []) (("", []), srcs); 
 | 
| 422 | fun get_thmss_i thms _ = thms; | |
| 423 | ||
| 6879 | 424 | fun also x = proof''' (ProofHistory.applys o gen_calc get_thmss Calculation.also x); | 
| 425 | fun also_i x = proof''' (ProofHistory.applys o gen_calc get_thmss_i Calculation.also x); | |
| 426 | fun finally x = proof''' (ProofHistory.applys o gen_calc get_thmss Calculation.finally x); | |
| 427 | fun finally_i x = proof''' (ProofHistory.applys o gen_calc get_thmss_i Calculation.finally x); | |
| 428 | ||
| 429 | end; | |
| 6774 | 430 | |
| 431 | ||
| 5830 | 432 | (* use ML text *) | 
| 433 | ||
| 6331 | 434 | fun use_mltext txt opt_thy = #2 (Context.pass opt_thy (use_text false) txt); | 
| 435 | fun use_mltext_theory txt thy = #2 (Context.pass_theory thy (use_text false) txt); | |
| 5830 | 436 | |
| 437 | fun use_context txt = use_mltext_theory ("Context.>> (" ^ txt ^ ");");
 | |
| 438 | ||
| 439 | fun use_let name body txt = | |
| 440 |   use_context ("let val " ^ name ^ " = " ^ txt ^ " in\n" ^ body ^ " end");
 | |
| 441 | ||
| 442 | val use_setup = | |
| 5915 | 443 | use_let "setup: (theory -> theory) list" "Library.apply setup"; | 
| 5830 | 444 | |
| 445 | ||
| 446 | (* translation functions *) | |
| 447 | ||
| 448 | val parse_ast_translation = | |
| 449 | use_let "parse_ast_translation: (string * (Syntax.ast list -> Syntax.ast)) list" | |
| 450 | "Theory.add_trfuns (parse_ast_translation, [], [], [])"; | |
| 451 | ||
| 452 | val parse_translation = | |
| 453 | use_let "parse_translation: (string * (term list -> term)) list" | |
| 454 | "Theory.add_trfuns ([], parse_translation, [], [])"; | |
| 455 | ||
| 456 | val print_translation = | |
| 457 | use_let "print_translation: (string * (term list -> term)) list" | |
| 458 | "Theory.add_trfuns ([], [], print_translation, [])"; | |
| 459 | ||
| 460 | val print_ast_translation = | |
| 461 | use_let "print_ast_translation: (string * (Syntax.ast list -> Syntax.ast)) list" | |
| 462 | "Theory.add_trfuns ([], [], [], print_ast_translation)"; | |
| 463 | ||
| 464 | val typed_print_translation = | |
| 465 | use_let "typed_print_translation: (string * (bool -> typ -> term list -> term)) list" | |
| 466 | "Theory.add_trfunsT typed_print_translation"; | |
| 467 | ||
| 468 | val token_translation = | |
| 469 | use_let "token_translation: (string * string * (string -> string * int)) list" | |
| 470 | "Theory.add_tokentrfuns token_translation"; | |
| 471 | ||
| 472 | ||
| 473 | (* add_oracle *) | |
| 474 | ||
| 6728 
b51b25db7bc6
added formal comment arguments almost everywhere (still ignored);
 wenzelm parents: 
6688diff
changeset | 475 | fun add_oracle ((name, txt), comment_ignore) = | 
| 5830 | 476 | use_let | 
| 477 | "oracle: bstring * (Sign.sg * Object.T -> term)" | |
| 478 | "Theory.add_oracle oracle" | |
| 479 |     ("(" ^ quote name ^ ", " ^ txt ^ ")");
 | |
| 480 | ||
| 481 | ||
| 6688 | 482 | (* theory init and exit *) | 
| 5830 | 483 | |
| 7242 | 484 | fun gen_begin_theory bg name parents files = | 
| 6266 | 485 | let | 
| 6331 | 486 | val paths = map (apfst Path.unpack) files; | 
| 7242 | 487 | val thy = bg name parents paths; | 
| 6650 
808a3d9e2404
Present.begin_theory now needs an additional argument of type
 berghofe parents: 
6552diff
changeset | 488 | in Present.begin_theory name parents paths thy end; | 
| 5830 | 489 | |
| 7242 | 490 | val begin_theory = gen_begin_theory ThyInfo.begin_theory; | 
| 491 | val begin_update_theory = gen_begin_theory ThyInfo.begin_update_theory; | |
| 492 | ||
| 6331 | 493 | fun end_theory thy = | 
| 494 | (Present.end_theory (PureThy.get_name thy); ThyInfo.end_theory thy); | |
| 495 | ||
| 6688 | 496 | fun kill_theory thy = ThyInfo.remove_thy (PureThy.get_name thy); | 
| 497 | ||
| 7103 | 498 | |
| 499 | fun bg_theory (name, parents, files) int = | |
| 7242 | 500 | (if int then begin_update_theory else begin_theory) name parents files; | 
| 7103 | 501 | |
| 6331 | 502 | fun en_theory thy = (end_theory thy; ()); | 
| 503 | ||
| 6688 | 504 | fun theory spec = Toplevel.init_theory (bg_theory spec) en_theory kill_theory; | 
| 6246 | 505 | |
| 506 | ||
| 507 | (* context switch *) | |
| 508 | ||
| 7103 | 509 | fun context name = | 
| 7242 | 510 | Toplevel.init_theory (fn _ => (the (#2 (Context.pass None ThyInfo.quiet_update_thy name)))) | 
| 7103 | 511 | (K ()) (K ()); | 
| 6246 | 512 | |
| 5830 | 513 | |
| 514 | end; |